链(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." } }