一架梯子,一头程序猿,仰望星空!
LangChain教程(JS版本) > 内容正文

Chat对话模型


聊天模型

聊天模型是一种语言模型的变体。虽然在底层使用语言模型,但它们提供的接口略有不同。它们不是提供一个 “输入文本,输出文本” 的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, 和 ChatMessageChatMessage 接受一个任意的角色参数。大部分情况下,您只需要处理 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 }
  }
*/


关联主题