通过 LangChain 加载大模型

什么是 LangChain

LangChain 是一个用于开发由大型语言模型 (LLMs) 驱动的应用程序的框架。

为什么是 LangChain

因为 LLM 的 API 只是提供了一个非常基础的调用方式,当我们需要构建一个复杂的 Chat Bot 时,就需要考虑如何保存聊天的上下文、网络搜索、加载 PDF 等工程问题, 而LangChain 提供了一种解决方案,让开发者可以专注于业务逻辑的开发。

足够的流行度和认可度,目前已经在 Github 获得 83k star,并且其上升速度非常恐怖:

[

而 LangChain.js 并不是 Python 版本的套壳,而是一个完整的团队从 0 开始构建的生态,足以看出官方对 JavaScript 生态的重视:

[

基于此,在下将以 LangChain.js 为例,去使用大模型领域最流行的框架去构建应用,感受大模型的魅力。

支持的环境

  • Node.js (ESM and CommonJS) - 18.x, 19.x, 20.x
  • Cloudflare Workers Cloudflare
  • Vercel / Next.js (Browser, Serverless and Edge functions)
  • Supabase Edge Functions Supabase
  • Browser
  • Deno

安装

要安装这个包,你可以使用 npm 或 yarn:

yarn add langchain

安装环境

node >= 18.x

通过 LangChain 加载大模型

本地大模型

可以通过 ollama list 查看所有的模型,然后通过 ollama pull 安装模型。

# 模型列表参考:https://ollama.com/library
ollama pull [model] 

目前下载了一个 ollama3 的模型

1.png

当我们在本地启动了一个模型后,我们就可以通过 LangChain 来调用这个模型了。

import { Ollama } from '@langchain/community/llms/ollama';const ollama = new Ollama({baseUrl: "http://localhost:11434", model: "llama3", 
});ollama.invoke("用中文讲一个笑话").then((res) => {console.log('res', res);
});

输出结果 👇

2.png

云端大模型

OpenAI

在调用 OpenAI 之前需要先申请一个 API Key,然后将 API Key 设置为环境变量 OPENAI_API_KEY

然后通过 langchain 的 OpenAI 类来调用 OpenAI 的模型。

调用之前需要先 安装 @langchain/openai 包:

// 安装 openai 包
yarn add @langchain/openai
import { OpenAI } from "@langchain/openai";const model = new OpenAI({model: "gpt-3.5-turbo-instruct", // Defaults to "gpt-3.5-turbo-instruct" if no model provided.temperature: 0.9,apiKey: "YOUR-API-KEY", // In Node.js defaults to process.env.OPENAI_API_KEY
});
const res = await model.invoke("What would be a good company name a company that makes colorful socks?"
);
console.log({ res });
百度大模型

因为 OpenAI 在国内比较难访问,所以我们可以使用第三方大模型来避规访问慢的问题,这里以百度的大模型为例。

请将获取的API密钥设置为名为 BAIDU_API_KEY 的环境变量,并将您的密钥设置为名为BAIDU_SECRET_KEY 的环境变量。

// 您需要安装该 @langchain/community 包:
yarn add @langchain/community
import { ChatBaiduWenxin } from "@langchain/community/chat_models/baiduwenxin";
import { HumanMessage } from "@langchain/core/messages";
import 'dotenv/config';const ernieTurbo = new ChatBaiduWenxin({modelName: process.env.BAIDU_MODEL_NAME,
});const messages = [new HumanMessage("讲一个笑话")];const res = await ernieTurbo.invoke(messages);console.log(res);

3.png

LCEL 有什么优势

LCEL 从底层设计的目标就是支持 从原型到生产 完整流程不需要修改任何代码,也就是我们在写的任何原型代码不需要太多的改变就能支持生产级别的各种特性(比如并行、steaming 等),具体来说会有这些优势:

  • 并行: 只要是整个 chain 中有可以并行的步骤就会自动的并行,来减少使用时的延迟。
  • 自动的重试和 fallback: 大部分 chain 的组成部分都有自动的重试(比如因为网络原因的失败)和回退机制,来解决很多请求的出错问题。
  • 对 chain 中间结果的访问,在旧的写法中很难访问中间的结果,而 LCEL 中可以方便的通过访问中间结果来进行调试和记录。
  • LCEL 会自动支持 LangSimith 进行可视化和记录。

一条 Chain 组成的每个模块都是继承自 Runnable 这个接口,而一条 Chain 也是继承自这个接口,所以一条 Chain 也可以很自然的成为另一个 Chain 的一个模块。

任意的 Runnable 对象,都有几个常用的标准调用接口:

  • invoke 基础调用
  • batch 批量调用
  • stream 流式返回结果
  • streamLog 流式返回结果,并返回中间的运行结果

那么,我们该如何学习大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、大模型全套的学习路线

学习大型人工智能模型,如GPT-3、BERT或任何其他先进的神经网络模型,需要系统的方法和持续的努力。既然要系统的学习大模型,那么学习路线是必不可少的,下面的这份路线能帮助你快速梳理知识,形成自己的体系。

L1级别:AI大模型时代的华丽登场

L2级别:AI大模型API应用开发工程

L3级别:大模型应用架构进阶实践

L4级别:大模型微调与私有化部署

一般掌握到第四个级别,市场上大多数岗位都是可以胜任,但要还不是天花板,天花板级别要求更加严格,对于算法和实战是非常苛刻的。建议普通人掌握到L4级别即可。

以上的AI大模型学习路线,不知道为什么发出来就有点糊,高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1451054.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Android MediaMetadataRetriever获取视频宽高,Java

Android MediaMetadataRetriever获取视频宽高,Java public static int[] getVideoSize(Context ctx, Uri uri) {MediaMetadataRetriever retriever new MediaMetadataRetriever();int[] size {-1, -1}; //宽,高try {retriever.setDataSource(ctx, uri)…

53.Python-web框架-Django开始第一个应用的多语言

针对上一篇的功能&#xff0c;本次仅对页面做了多语言&#xff0c;大家可以看看效果。 51.Python-web框架-Django开始第一个应用的增删改查-CSDN博客 目录 部门列表 新增部门 编辑部门 部门列表 源码 <!DOCTYPE html> {% load static %} {% load i18n %} <html …

echarts学习:使用dataset管理数据

前言 在我们公司的组件库中有许多echarts图表相关的组件&#xff0c;这些组件在使用时&#xff0c;只需将图表数据以特定的格式传入组件中&#xff0c;十分方便。因此当我得知echarts 可以使用dataset集中管理数据时&#xff0c;我就决定自己一定要搞懂它&#xff0c;于是在最…

STM32硬件接口I2C应用(基于HMC5883L)

目录 概述 1 STM32Cube控制配置I2C 1.1 I2C参数配置 1.2 使用STM32Cube产生工程 2 HAL库函数介绍 2.1 初始化函数 2.2 写数据函数 2.3 读数据函数 3 认识HMC5883L 3.1 HMC5883L功能介绍 3.2 HMC5883L的寄存器 4 HMC5883L驱动程序实现 4.1 驱动函数实现 4.2 完整驱…

bean实例化

黑马程序员SSM 文章目录 一、bean是如何创建的二、实例化bean的三种方式3.1 构造方法&#xff08;常用&#xff09;3.2 静态工厂3.3 实例化工厂&#xff08;了解&#xff09;3.4 FactoryBean 一、bean是如何创建的 Spring 创建bean的时候使用的是无参构造 二、实例化bean的三…

【数组】【快慢双指针】删除有序数组中的重复项+移除元素+删除有序数组中的重复项II

今天趁热打铁&#xff0c;接着刷了几道标签是【数组】的题&#xff0c;基本都是双指针就能解决。 1、删除有序数组中的重复项 该题对应力扣网址 class Solution { public:int removeDuplicates(vector<int>& nums) {int i,j;int count 0;int n nums.size();nums.…

网络加密机的核心技术是什么

随着信息技术的飞速发展&#xff0c;网络已经成为现代社会不可或缺的基础设施。然而&#xff0c;网络空间的开放性和互联性也带来了诸多安全隐患&#xff0c;其中数据泄露和非法访问是最常见的问题。为了保障数据传输的安全性和完整性&#xff0c;网络加密机应运而生&#xff0…

为什么选择 ABBYY FineReader PDF ?

帮助用户们对PDF文件进行快速的编辑处理&#xff0c;同时也可以快速识别PDF文件里的文字内容&#xff0c;并且可以让用户们进行文本编辑&#xff0c;所以可以有效提升办公效率。 ABBYY-ABBYY Finereader 15 Win-安装包&#xff1a;https://souurl.cn/OY2L3m 高级转换功能 ABBY…

WARNING: pip is configured with locations that require TLS/SSL

在pycharm中运行pip下载软件包遇到该问题&#xff1a;WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available 原因&#xff1a;没有安装openssl&#xff1b; 到https://slproweb.com/products/Win32OpenSSL.ht…

Blender帧动画

时间线窗口Timeline用于定义帧动画 -视图&#xff1a;方法&#xff0c;平移&#xff0c;框显全部 -帧范围&#xff1a;可以调整动画共多少帧 -当前帧&#xff1a;可以拖动或手工指定 默认每秒24帧 定义一个帧动画类似unity的Timeline&#xff0c;只需定义关键帧&#xff0c…

MultiTrust:首个综合统一的多模态信任度基准(下)

2 实验 2.1 实验设计 实验设计基于对MLLMs可信度的全面理解&#xff0c;包括真实性、安全性、鲁棒性、公平性和隐私性五个主要方面。这些方面共同构成了一个综合框架&#xff0c;用于评估模型在防止不良结果和确保对用户社会影响的可靠性。 真实性&#xff08;Truthfulness&…

minIo ubuntu单节点部署

资源准备 minio二进制包 下载地址:https://dl.min.io/server/minio/release/linux-amd64/minio ubuntu-单节点部署 选择一台ubuntu18.04机器10.253.9.41、intel 或者 amd 64位处理器 上传minio到~目录 sudo cp minio /usr/local/bin/ sudo chmod x /usr/local/bin/minio 设…

变压器空载合闸励磁涌流的Simulink仿真

利用图 1所示的仿真模型分析三相变压器空载合闸过程时, 设置三相断路器模块 的切换时间为0s,仿真时间为 0.5s, 仿真算法为 ode23t 。三相断路器模块 QF2、故障模 块 Fault1 和 Fault2 在仿真中均不动作&#xff08;设置其切换时间大于仿真时间即可&#xff09;。 为了观察合闸时…

Java接口实现与类继承

学习初期发现接口实现与类继承很像&#xff0c;随着学习深入发现它们之间的联系与区别&#xff0c;整理如下&#xff1a; 经实验发现&#xff0c;实现接口的类中含有接口中的所有属性和方法&#xff0c;继承父类的子类中也含有父类中所有的属性和方法&#xff0c;可以说接口实…

车牌识别(附源代码)

完整项目已上传至github:End-to-end-for-chinese-plate-recognition/License-plate-recognition at master duanshengliu/End-to-end-for-chinese-plate-recognition GitHub 整体思路&#xff1a; 1.利用u-net图像分割得到二值化图像 2.再使用cv2进行边缘检测获得车牌区域坐…

11.1 Go 标准库的组成

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

内网穿透方法有哪些?路由器端口映射外网和软件方案步骤

公网IP和私有IP不能互相通讯。我们通常在局域网内部署服务器和应用&#xff0c;当需要将本地服务提供到互联网外网连接访问时&#xff0c;由于本地服务器本身并无公网IP&#xff0c;就无法实现。这时候就需要内网穿透技术&#xff0c;即内网映射&#xff0c;内网IP端口映射到外…

iOS 18 照片应用程序增加了新分类用于查找二维码、收据、插图等

苹果照片应用 苹果在iOS 18的照片应用中引入了全新的设计&#xff0c;将图库和推荐部分合并为一个更集成的多合一视图。重新设计的实用工具部分经过全面改造&#xff0c;使得查找不同类型的图片更加容易。 实用工具 在iOS 17中&#xff0c;照片应用的实用工具部分只包括导入…

【代码随想录】【算法训练营】【第36天】[452]用最少数量的箭引爆气球 [435]无重叠区间 [763]划分字母区间

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 36&#xff0c;周三&#xff0c;最难坚持的一天~ 题目详情 [452] 用最少数量的箭引爆气球 题目描述 452 用最少数量的箭引爆气球 解题思路 前提&#xff1a;区间可能重叠 思路&#xff1a;…

自动控制:滑模控制(Sliding Mode Control, SMC)

自动控制&#xff1a;滑模控制(Sliding Mode Control, SMC) 滑模控制&#xff08;Sliding Mode Control, SMC&#xff09;是一种在处理非线性系统时非常有效的控制技术。它通过驱动系统状态达到并保持在特定的滑模面附近&#xff0c;来实现控制目标。本文将介绍滑模控制的基本…