聊天模型
聊天模型是一种语言模型的变体。虽然在底层使用语言模型,但它们提供的接口略有不同。它们不是提供一个 “输入文本,输出文本” 的API,而是提供一个接口,其中 “聊天消息” 是输入和输出。
聊天模型的API还比较新,我们仍在摸索正确的抽象。
文档提供了以下部分:
- 操作指南:核心功能的演示,如流式传输、创建聊天提示等。
- 集成:如何使用不同的聊天模型提供商(OpenAI、Anthropic等)。
设置
首先,我们需要安装官方的OpenAI包:
//npm
npm install -S openai
//Yarn
yarn add openai
//pnpm
pnpm add openai
访问API需要一个API密钥,您可以通过创建账户并前往此处获取。获取密钥后,我们需要将其作为环境变量进行设置,示例如下:
export OPENAI_API_KEY="..."
如果您不想设置环境变量,可以在初始化ChatOpenAI类时直接通过 openAIApiKey
参数传递密钥:
import { ChatOpenAI } from "langchain/chat_models/openai";
const chat = new ChatOpenAI({
openAIApiKey: "YOUR_KEY_HERE"
});
否则,您可以使用一个空对象进行初始化:
import { ChatOpenAI } from "langchain/chat_models/openai";
const chat = new ChatOpenAI({});
消息
聊天模型的接口是基于消息而不是原始文本。在LangChain中,聊天模型支持的消息类型有 AIMessage
, HumanMessage
, SystemMessage
, FunctionMessage
, 和 ChatMessage
— ChatMessage
接受一个任意的角色参数。大部分情况下,您只需要处理 HumanMessage
, AIMessage
, 和 SystemMessage
。
call
输入消息 -> 输出消息
通过将一个或多个消息传递给聊天模型,可以获得聊天完成结果。响应将是一条消息。
import { ChatOpenAI } from "langchain/chat_models/openai";
import { HumanMessage } from "langchain/schema";
const chat = new ChatOpenAI();
// 通过将消息列表传递给 `call` 来开始对话。
// 在这个简单的例子中,我们只传递一条消息。
const response = await chat.call([
new HumanMessage(
"What is a good name for a company that makes colorful socks?"
),
]);
console.log(response);
// AIMessage { text: '\n\nRainbow Sox Co.' }
OpenAI 的聊天模型还支持多个消息作为输入。更多信息请参阅此处。下面是一个将系统消息和用户消息发送给聊天模型的示例:
const response2 = await chat.call([
new SystemMessage(
"You are a helpful assistant that translates English to French."
),
new HumanMessage("Translate: I love programming."),
]);
console.log(response2);
// AIMessage { text: "J'aime programmer." }
批量调用,丰富的输出
你可以更进一步,使用generate
为多组消息生成完成的结果。这将返回一个带有额外的message
参数的LLMResult
。
const response3 = await chat.generate([
[
new SystemMessage(
"You are a helpful assistant that translates English to French."
),
new HumanMessage(
"Translate this sentence from English to French. I love programming."
),
],
[
new SystemMessage(
"You are a helpful assistant that translates English to French."
),
new HumanMessage(
"Translate this sentence from English to French. I love artificial intelligence."
),
],
]);
console.log(response3);
/*
{
generations: [
[
{
text: "J'aime programmer.",
message: AIMessage { text: "J'aime programmer." },
}
],
[
{
text: "J'aime l'intelligence artificielle.",
message: AIMessage { text: "J'aime l'intelligence artificielle." }
}
]
]
}
*/
你可以从这个LLMResult
中获取诸如令牌使用情况之类的信息:
console.log(response3.llmOutput);
/*
{
tokenUsage: { completionTokens: 20, promptTokens: 69, totalTokens: 89 }
}
*/