LLMs介绍
大型语言模型(LLMs)是LangChain的核心组件。LangChain不提供自己的LLMs,而是提供了一个标准接口,用于与许多不同的LLMs进行交互。
有关更详细的文档,请查看我们的:
- 操作指南:核心功能的实例,如流式传输,异步等。
- 集成:如何使用不同的LLM提供商(OpenAI,Anthropic等)
入门
有很多LLM提供商(OpenAI,Cohere,Hugging Face等)- LLM
类的设计目的是为所有这些提供一个标准接口。
在本教程中,我们将使用OpenAI LLM包装器,尽管突出显示的功能对于所有LLM类型都是通用的。
设置
首先,我们需要安装官方的OpenAI包:
npm
npm install -S openai
Yarn
yarn add openai
pnpm
pnpm add openai
访问API需要一个API密钥,您可以通过创建帐户并转到 此处 获取。一旦我们有了密钥,我们将通过运行以下命令将其设置为环境变量:
export OPENAI_API_KEY="..."
如果您不想设置环境变量,可以在初始化OpenAI LLM类时直接通过openAIApiKey
参数传递密钥:
import { OpenAI } from "langchain/llms/openai";
const llm = new OpenAI({
openAIApiKey: "YOUR_KEY_HERE",
});
否则,您可以使用空对象进行初始化:
import { OpenAI } from "langchain/llms/openai";
const llm = new OpenAI({});
call
: string in -> string out
使用LLM最简单的方法是使用.call
方法:传入一个字符串,获取一个字符串的完成结果。
const res = await llm.call("Tell me a joke");
console.log(res);
// "为什么鸡过马路?
// 因为它要去对面。"
generate
: 批量调用,更丰富的输出
generate
允许你使用一个字符串列表来调用模型,返回的响应比仅有文本更完整。这个完整的响应可以包含多个顶部回答和其他特定于 LLM 提供者的信息:
const llmResult = await llm.generate(["告诉我一个笑话", "告诉我一首诗"], ["告诉我一个笑话", "告诉我一首诗"]);
console.log(llmResult.generations.length)
// 30
console.log(llmResult.generations[0]);
/*
[
{
text: "\n\n问:鱼碰到墙壁时说了什么?\n答:**坝!**",
generationInfo: { finishReason: "stop", logprobs: null }
}
]
*/
console.log(llmResult.generations[1]);
/*
[
{
text: "\n\n玫瑰是红色的,\n紫罗兰是蓝色的,\n糖是甜的,\n而你也是。",
generationInfo: { finishReason: "stop", logprobs: null }
}
]
*/
你还可以访问返回的特定于提供者的信息。这些信息在不同的提供者之间不是规范化的。
console.log(llmResult.llmOutput);
/*
{
tokenUsage: { completionTokens: 46, promptTokens: 8, totalTokens: 54 }
}
*/
下面是一个包含额外参数的例子,将 max_tokens
设置为 -1
以启用令牌大小计算:
import { OpenAI } from "langchain/llms/openai";
export const run = async () => {
const model = new OpenAI({
// 自定义所使用的 OpenAI 模型,默认为 `text-davinci-003`
modelName: "text-ada-001",
// `max_tokens` 支持一个特殊的 -1 参数,它会计算指定模型 modelName 的最大令牌长度,并将其作为 `max_tokens` 参数包含在请求中发送到 OpenAI
maxTokens: -1,
// 使用 `modelKwargs` 直接传递参数给 OpenAI 调用
// 注意,它们使用的是蛇形命名法而不是驼峰命名法
modelKwargs: {
user: "me",
},
// 用于调试和记录额外信息
verbose: true,
});
const resA = await model.call(
"一个制造五颜六色袜子的公司做个好的公司名字是什么?"
);
console.log({ resA });
// { resA: '\n\n绚丽袜子' }
};
高级
本部分适用于希望更深入了解 LangChain 工作原理的用户。如果你刚开始使用,你可以跳过本节。
LLMs 和 Chat Models 都构建在 BaseLanguageModel
类之上。这个类为所有模型提供了一个公共接口,使我们可以在链式调用中轻松替换模型而不改变其他代码。
BaseLanguageModel
类具有两个抽象方法:generatePrompt
和 getNumTokens
,分别由 BaseChatModel
和 BaseLLM
实现。
BaseLLM
是 BaseLanguageModel
的子类,为 LLM 提供了一个公共接口,而 BaseChatModel
是 BaseLanguageModel
的子类,为 Chat Model 提供了一个公共接口。