如何创建自定义回调处理程序
先决条件
本指南假设您熟悉以下概念
LangChain 有一些内置的回调处理程序,但您通常需要创建具有自定义逻辑的自己的处理程序。
要创建自定义回调处理程序,我们需要确定我们要让回调处理程序处理的事件,以及当触发事件时我们希望回调处理程序执行的操作。然后,我们所需要做的就是将回调处理程序附加到对象,例如通过构造函数或运行时。
构造自定义回调处理程序的一种简单方法是将其初始化为一个对象,该对象的键是与我们想要处理的事件匹配的名称的函数。这是一个只处理聊天模型开始和模型运行的流式令牌的示例
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { ChatAnthropic } from "@langchain/anthropic";
const prompt = ChatPromptTemplate.fromTemplate(`What is 1 + {number}?`);
const model = new ChatAnthropic({
model: "claude-3-sonnet-20240229",
});
const chain = prompt.pipe(model);
const customHandler = {
handleChatModelStart: async (llm, inputMessages, runId) => {
console.log("Chat model start:", llm, inputMessages, runId);
},
handleLLMNewToken: async (token) => {
console.log("Chat model new token", token);
},
};
const stream = await chain.stream(
{ number: "2" },
{ callbacks: [customHandler] }
);
for await (const _ of stream) {
// Just consume the stream so the callbacks run
}
Chat model start: {
lc: 1,
type: "constructor",
id: [ "langchain", "chat_models", "anthropic", "ChatAnthropic" ],
kwargs: {
callbacks: undefined,
model: "claude-3-sonnet-20240229",
verbose: undefined,
anthropic_api_key: { lc: 1, type: "secret", id: [ "ANTHROPIC_API_KEY" ] },
api_key: { lc: 1, type: "secret", id: [ "ANTHROPIC_API_KEY" ] }
}
} [
[
HumanMessage {
lc_serializable: true,
lc_kwargs: {
content: "What is 1 + 2?",
additional_kwargs: {},
response_metadata: {}
},
lc_namespace: [ "langchain_core", "messages" ],
content: "What is 1 + 2?",
name: undefined,
additional_kwargs: {},
response_metadata: {}
}
]
] b6e3b7ad-c602-4cef-9652-d51781a657b7
Chat model new token The
Chat model new token sum
Chat model new token of
Chat model new token
Chat model new token 1
Chat model new token
Chat model new token an
Chat model new token d
Chat model new token 2
Chat model new token
Chat model new token is
Chat model new token
Chat model new token 3
Chat model new token .
您可以查看此参考页面以获取您可以处理的事件列表。请注意,handleChain*
事件对大多数 LCEL Runnable 都运行。
下一步
您现在已经了解了如何创建自己的自定义回调处理程序。
接下来,查看本节中的其他操作指南,例如如何将回调置于后台。