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

Chain介绍


链(Chain)介绍

在简单的应用程序中,使用LLM是没问题的,但是更复杂的应用程序需要将LLM链接在一起,要么与其他组件链接,要么与其他组件链接。

LangChain为这种“链接”应用程序提供了Chain接口。我们非常通用地定义了一个Chain,它是一个调用组件的序列,可以包含其他链。基本接口很简单:

import { CallbackManagerForChainRun } from "langchain/callbacks";
import { BaseChain as _ } from "langchain/chains";
import { BaseMemory } from "langchain/memory";
import { ChainValues } from "langchain/schema";

abstract class BaseChain {
  memory?: BaseMemory;

  /**
   * 执行这个链的核心逻辑并返回输出
   */
  abstract _call(
    values: ChainValues,
    runManager?: CallbackManagerForChainRun
  ): Promise;

  /**
   * 返回唯一标识这个链类的字符串类型键。
   */
  abstract _chainType(): string;

  /**
   * 在调用时返回此链希望接收的输入键列表。
   */
  abstract get inputKeys(): string[];

  /**
   * 在调用时返回此链将产生的输出键列表。
   */
  abstract get outputKeys(): string[];
}

将组件组合在一起形成链的想法简单而强大。它极大地简化了复杂应用程序的实现,使调试、维护和改进应用程序变得更加容易。

为什么我们需要链?

链允许我们将多个组件组合在一起,创建一个统一的应用程序。例如,我们可以创建一个链,接收用户输入,使用PromptTemplate对其进行格式化,然后将格式化的响应传递给LLM。通过将多个链组合在一起,或将链与其他组件组合,我们可以构建更复杂的链。

入门指南

使用 LLMChain

LLMChain 是最基本的区块链构建模块。它接收一个提示模板,将其格式化为用户输入,并返回来自 LLM 的响应。

要使用 LLMChain,首先创建一个提示模板。

import { OpenAI } from "langchain/llms/openai";
import { PromptTemplate } from "langchain/prompts";
import { LLMChain } from "langchain/chains";

// 我们可以根据 PromptTemplate 和 LLM 构建 LLMChain。
const model = new OpenAI({ temperature: 0 });
const prompt = PromptTemplate.fromTemplate(
  "一个制造{product}的公司的好名字是什么?"
);

我们现在可以创建一个非常简单的链条,它将接受用户输入,将提示与之格式化,然后将其发送到 LLM。

const chain = new LLMChain({ llm: model, prompt });

// 由于这个 LLMChain 是一个单输入、单输出的链条,我们也可以使用 `run` 方法。
// 这个便利方法接收一个字符串,并返回链条响应中输出键字段的值。
// 对于 LLMChains,默认为 "text"。
const res = await chain.run("五颜六色的袜子");
console.log({ res });

// { res: "\n\nSocktastic!" }

如果有多个变量,你可以使用一个字典一次性输入它们。这将返回完整的链条响应。

const prompt = PromptTemplate.fromTemplate(
  "{company}制造{product}的好名字是什么?"
);

const chain = new LLMChain({ llm: model, prompt });

const res = await chain.call({
  company: "一家创业公司",
  product: "五颜六色的袜子"
});

console.log({ res });
// { res: { text: '\n\Socktopia Colourful Creations.' } }

你还可以在 LLMChain 中使用聊天模型:

import { ChatPromptTemplate } from "langchain/prompts";
import { LLMChain } from "langchain/chains";
import { ChatOpenAI } from "langchain/chat_models/openai";

// 我们也可以根据 ChatPromptTemplate 和聊天模型构建 LLMChain。
const chat = new ChatOpenAI({ temperature: 0 });
const chatPrompt = ChatPromptTemplate.fromPromptMessages([
  [
    "系统",
    "你是一个有用的助手,将 {input_language} 翻译成 {output_language}。",
  ],
  ["用户", "{text}"],
]);
const chainB = new LLMChain({
  prompt: chatPrompt,
  llm: chat,
});

const resB = await chainB.call({
  input_language: "英语",
  output_language: "法语",
  text: "我喜欢编程。",
});
console.log({ resB });
// { resB: { text: "J'adore la programmation." } }


关联主题