1、简介
LangChain是一个用于开发由语言模型提供支持的应用程序的框架。它支持以下应用程序:
- 上下文感知:将语言模型连接到其他上下文源(提示说明、少量示例、响应内容)
- 推理:依靠语言模型进行推理(关于如何根据提供的上下文回答,采取什么行动等)
2、LangChain 的主要价值
- 组件:用于处理语言模型的抽象,以及每个抽象的实现集合。无论您是否使用LangChain框架的其余部分,组件是模块化的并且易于使用。
- 现成链:用于完成特定更高级别任务的组件的结构化组装。现成的链使入门变得容易。对于更复杂的应用程序和细微差别的用例,组件可以轻松定制现有链或构建新链。
目前LangChain 支持的变成语言版本有两种:
- 针对LangChainJS/TS包的版本
- 针对LangChain Python的版本
3、模块
LangChain为以下模块提供标准的、可扩展的接口和外部集成,从简单到复杂依次列出
-
Model I/O : 语言模型的接口
-
Retrieval: application-specific数据接口
-
Chains: 构造调用序列
-
Agents: 让链选择使用给定高级指令的工具
-
Memory: 在链的运行之间保持应用程序状态
-
Callbacks: 记录和流式传输任何链的中间步骤
4、安装
4.1 python 版本安装
安装LangChain,请运行:
pip install langchain
这将安装LangChain的最低要求。 LangChain的很多价值来自于与各种模型提供者、数据存储等的集成。 默认情况下,不安装执行此操作所需的依赖项。 然而,还有两种安装LangChain的方法会带来这些依赖项。
要安装常见LLM提供程序所需的模块,请运行:
pip install langchain[llms]
要安装所有集成所需的所有模块,请运行:
pip install langchain[all]
请注意,如果您使用zsh
,则在将它们作为参数传递给命令时需要将方括号引起来,例如:
pip install 'langchain[all]'
如果你想从源代码安装,你可以通过克隆repo来实现,并确保目录正在PATH/TO/REPO/langchain/libs/langchain运行:
pip install -e .
4.2 TypeScript 版本安装
LangChain是用TypeScript编写的,可用于:
- Node. js(ESM和Common JS)-18.x、19.x、20.x
- Cloudflare Workers
- Vercel / Next.js (Browser, Serverless and Edge functions)
- Supabase Edge Functions
- Browser
- Deno
- Bun
请使用以下命令进行安装:
npm 安装
npm install -S langchain
yarn 安装
yarn add langchain
pnpm 安装
pnpm add langchain
加载库
LangChain提供了针对Node. js环境的ESM构建。您可以使用以下语法导入它:
import { OpenAI } from "langchain/llms/openai";
如果您在ESM项目中使用TypeScript,我们建议更新您的tsconfig.json
以包含以下内容:
{
"compilerOptions": {
...
"target": "ES2020", // or higher
"module": "nodenext",
}
}
LangChain提供了针对Node. js环境的Common JS构建。您可以使用以下语法导入它:
const { OpenAI } = require("langchain/llms/openai");
如果您在0.0.52之前从LangChain版本进行更新,则需要更新导入以使用新的路径结构。
之前的写法是:
import { OpenAI } from "langchain/llms";
现在需要更新为:
import { OpenAI } from "langchain/llms/openai";
这适用于以下6个模块的所有导入,这些模块已被拆分为每个接入的子模块。组合模块已弃用,在Node. js之外不起作用,将在未来版本中删除。
- 如果您使用的是
langchain/llms
,请参阅LLMs以获取更新的导入路径。 - 如果您使用的是
langchain/chat_models
,请参阅 Chat Models 以获取更新的导入路径。 - 如果您使用的是
langchain/embeddings
,请参阅Embeddings 以获取更新的导入路径。 - 如果您使用的是
langchain/vectorstores
,请参阅Vector Stores 以获取更新的导入路径。 - 如果您使用的是
langchain/document_loaders
,请参阅Document Loaders 以获取更新的导入路径。 - 如果您使用的是
langchain/retrievers
,请参阅Retrievers以获取更新的导入路径。
其他模块不受此更改的影响,您可以继续从同一路径导入它们。
此外,还需要一些突破性的更改来支持新环境:
import { Calculator } from "langchain/tools";
现在移到
-
import { Calculator } from "langchain/tools/calculator";
import { loadLLM } from "langchain/llms";
现在移到
-
import { loadLLM } from "langchain/llms/load";
import { loadAgent } from "langchain/agents";
现在移到
-
import { loadAgent } from "langchain/agents/load";
import { loadPrompt } from "langchain/prompts";
现在移到
-
import { loadPrompt } from "langchain/prompts/load";
import { loadChain } from "langchain/chains";
现在移到
-
import { loadChain } from "langchain/chains/load";
5、环境设置
使用LangChain通常需要与一个或多个模型提供者、数据存储、API等集成。
访问他们的API需要一个API密钥,您可以通过创建一个帐户并在此标题获得该密钥。一旦我们有了密钥,我们希望通过运行以下命令将其设置为环境变量:
export OPENAI_API_KEY="..."
如果您不想设置环境变量,您可以在初始化OpenAI LLM类时通过openAIApiKey
参数直接传递密钥:
import { OpenAI } from "langchain/llms/openai";
const llm = new OpenAI({
openAIApiKey: "YOUR_KEY_HERE",
});
6、构建一个应用程序
现在我们可以开始构建我们的语言模型应用程序了,LangChain提供了许多可用于构建语言模型应用程序的模块,模块可以在简单的应用程序中作为独立的,也可以组合用于更复杂的用例。
LangChain帮助创建的最常见和最重要的链包含三件事:
- LLM:语言模型是这里的核心推理引擎。为了使用LangChain,您需要了解不同类型的语言模型以及如何使用它们。
- 提示模板:这为语言模型提供了指令,这控制了语言模型输出的内容,因此了解如何构造提示和不同的提示策略至关重要。
- 输出解析器:它们将来自LLM的原始响应转换为更可行的格式,使其在输出目标端操作简单。
7、LLMs
有两种类型的语言模型,在LangChain中称为:
- LLMs:这是一个语言模型,它接受一个字符串作为输入并返回一个字符串
- ChatModels:这是一个语言模型,它将消息列表作为输入并返回消息
LLM的输入/输出简单易懂——一个字符串。但是ChatModels呢?输入是一个ChatMessage
列表,输出是一个ChatMessage
。ChatMessage
有两个必需的组件:
content
:这是消息的内容。role
:这是ChatMessage
来自的实体的角色。
LangChain提供了几个对象来轻松区分不同的角色:
HumanMessage
:来自人类/用户的ChatMessage
。AIMessage
:来自AI/助手的ChatMessage
。SystemMessage
:来自系统的ChatMessage
。FunctionMessage
:来自函数调用的ChatMessage
。
如果这些角色听起来都不对,还有一个ChatMessage
类,您可以在其中手动指定角色。
LangChain为两者提供了一个标准接口,但是理解这种差异对于为给定的语言模型构建提示很有用。LangChain提供的标准接口有两种方法:
predict
:接受一个字符串,返回一个字符串predictMessages
:接收消息列表,返回消息。
让我们看看如何使用这些不同类型的模型和这些不同类型的输入。首先,让我们导入LLM和ChatModel并调用predict
。
import { OpenAI } from "langchain/llms/openai";
import { ChatOpenAI } from "langchain/chat_models/openai";
const llm = new OpenAI({
temperature: 0.9,
});
const chatModel = new ChatOpenAI();
const text = "What would be a good company name for a company that makes colorful socks?";
const llmResult = await llm.predict(text);
/*
"Feetful of Fun"
*/
const chatModelResult = await chatModel.predict(text);
/*
"Socks O'Color"
*/
基本上OpenAI
和ChatOpenAI
对象只是配置对象,您可以使用温度等参数初始化它们,并传递它们。
接下来,让我们使用predictMessages
方法来运行消息列表。
import { HumanMessage } from "langchain/schema";
const text = "What would be a good company name for a company that makes colorful socks?";
const messages = [new HumanMessage({ content: text })];
const llmResult = await llm.predictMessages(messages);
/*
AIMessage {
content: "Feetful of Fun"
}
*/
const chatModelResult = await chatModel.predictMessages(messages);
/*
AIMessage {
content: "Socks O'Color"
}
*/
对于这两种方法,您还可以传入参数作为关键字参数。例如,您可以传入temperature: 0
来调整对象配置的temperature
。在运行时传入的任何值都将始终覆盖对象配置的值。
temperature限制0-2,简而言之这个参数的效果就是越大,生成的结果越随机。
8、提示模板
大多数LLM应用程序不会将用户输入直接传递到LLM中。通常,它们会将用户输入添加到更大的文本中,称为提示模板,它为手头的特定任务提供了额外的上下文。
在前面的示例中,我们传递给模型的文本包含生成企业名称的指令。对于我们的应用程序,如果用户只需要提供公司/产品的描述,而不必给出模型指令,那就太好了。
PromptTemplate正是帮助了这一点!它们捆绑了从用户输入到完全格式化的提示的所有逻辑。这可以从非常简单的开始——例如,生成上述字符串的提示只需:
import { PromptTemplate } from "langchain/prompts";
const prompt = PromptTemplate.fromTemplate("What is a good name for a company that makes {product}?");
const formattedPrompt = await prompt.format({
product: "colorful socks",
});
/*
"What is a good name for a company that makes colorful socks?"
*/
与原始字符串格式相比,使用这些有几个优点。您可以“部分”输出变量——例如,您一次只能格式化一些变量。您可以将它们组合在一起,轻松地将不同的模板组合成一个提示。
提示模板也可以用来生成消息列表。在这种情况下,提示不仅包含有关内容的信息,还包含每个消息(它的角色,它在列表中的位置等)。在这里,最常见的是ChatPromptTemplate是ChatMessageTemplates列表。每个ChatMessageTemplate都包含如何格式化ChatMessage的说明——它的角色,然后还有它的内容。让我们看看下面这个:
import { ChatPromptTemplate } from "langchain/prompts";
const template = "You are a helpful assistant that translates {input_language} into {output_language}.";
const humanTemplate = "{text}";
const chatPrompt = ChatPromptTemplate.fromMessages([
["system", template],
["human", humanTemplate],
]);
const formattedChatPrompt = await chatPrompt.formatMessages({
input_language: "English",
output_language: "French",
text: "I love programming.",
});
/*
[
SystemMessage {
content: 'You are a helpful assistant that translates English into French.'
},
HumanMessage { content: 'I love programming.' }
]
*/
9、输出解析器
输出解析器将LLM的原始输出转换为目标端可以使用的格式。输出解析器的主要类型很少,包括:
- 从LLM转换文本->结构化信息(例如JSON)
- 将ChatMessage转换为字符串
- 除了消息(如OpenAI函数调用)之外,将调用返回的额外信息转换为字符串。
在以下示例中,我们将编写自己的输出解析器-将逗号分隔的列表转换为列表的解析器。
import { BaseOutputParser } from "langchain/schema/output_parser";
/**
* Parse the output of an LLM call to a comma-separated list.
*/
class CommaSeparatedListOutputParser extends BaseOutputParser<string[]> {
async parse(text: string): Promise<string[]> {
return text.split(",").map((item) => item.trim());
}
}
const parser = new CommaSeparatedListOutputParser();
const result = await parser.parse("hi, bye");
/*
['hi', 'bye']
*/
10、LLMs + 提示模板 + 输出解析器
我们现在可以将所有这些组合成一条链。这条链将获取输入变量,将这些变量传递给提示模板以创建提示,将提示传递给语言模型,然后将输出传递给(可选的)输出解析器。这是捆绑模块化逻辑的便捷方法。让我们看看它的实际效果!
import { ChatOpenAI } from "langchain/chat_models/openai";
import { ChatPromptTemplate } from "langchain/prompts";
import { BaseOutputParser } from "langchain/schema/output_parser";
/**
* Parse the output of an LLM call to a comma-separated list.
*/
class CommaSeparatedListOutputParser extends BaseOutputParser<string[]> {
async parse(text: string): Promise<string[]> {
return text.split(",").map((item) => item.trim());
}
}
const template = `You are a helpful assistant who generates comma separated lists.
A user will pass in a category, and you should generate 5 objects in that category in a comma separated list.
ONLY return a comma separated list, and nothing more.`;
const humanTemplate = "{text}";
/**
* Chat prompt for generating comma-separated lists. It combines the system
* template and the human template.
*/
const chatPrompt = ChatPromptTemplate.fromMessages(
[
["system", template],
["human", humanTemplate],
]
);
const model = new ChatOpenAI({});
const parser = new CommaSeparatedListOutputParser();
const chain = chatPrompt.pipe(model).pipe(parser);
const result = await chain.invoke({
text: "colors",
});
/*
["red", "blue", "green", "yellow", "orange"]
*/
请注意,我们正在使用.pipe()
方法将这些组件连接在一起。这个.pipe()
方法是LangChain表达式语言的一部分。
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
阶段1:AI大模型时代的基础理解
- 目标:了解AI大模型的基本概念、发展历程和核心原理。
- 内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践 - L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
- 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
- 内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例 - L2.2 Prompt框架
- L2.2.1 什么是Prompt
- L2.2.2 Prompt框架应用现状
- L2.2.3 基于GPTAS的Prompt框架
- L2.2.4 Prompt框架与Thought
- L2.2.5 Prompt框架与提示词 - L2.3 流水线工程
- L2.3.1 流水线工程的概念
- L2.3.2 流水线工程的优点
- L2.3.3 流水线工程的应用 - L2.4 总结与展望
- L2.1 API接口
阶段3:AI大模型应用架构实践
- 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
- 内容:
- L3.1 Agent模型框架
- L3.1.1 Agent模型框架的设计理念
- L3.1.2 Agent模型框架的核心组件
- L3.1.3 Agent模型框架的实现细节 - L3.2 MetaGPT
- L3.2.1 MetaGPT的基本概念
- L3.2.2 MetaGPT的工作原理
- L3.2.3 MetaGPT的应用场景 - L3.3 ChatGLM
- L3.3.1 ChatGLM的特点
- L3.3.2 ChatGLM的开发环境
- L3.3.3 ChatGLM的使用示例 - L3.4 LLAMA
- L3.4.1 LLAMA的特点
- L3.4.2 LLAMA的开发环境
- L3.4.3 LLAMA的使用示例 - L3.5 其他大模型介绍
- L3.1 Agent模型框架
阶段4:AI大模型私有化部署
- 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
- 内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
学习计划:
- 阶段1:1-2个月,建立AI大模型的基础知识体系。
- 阶段2:2-3个月,专注于API应用开发能力的提升。
- 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
- 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
全套 《LLM大模型入门+进阶学习资源包》↓↓↓ 获取~