Skip to content

回调机制

invoke/stream() 方法,方法签名如下:

invoke/stream(
input: Input,
options?: RunnableConfig
): AsyncGenerator<StreamEvent<Output>>

1. 输入参数 (input)

类型:Input

invoke() 方法保持一致:

换句话说,input 的类型由具体的 Runnable 实例 决定。

2. 配置参数

类型:RunnableConfig(可选) 常见字段包括:

对具体模型(如 ChatOpenAI)而言,它的 CallOptions 还会扩展出模型厂商特定的调用参数(例如 stoptools 等)。

callbacks 配置项对应的值是一个「回调对象数组」,允许你监听和响应模型执行过程中的关键事件。

{
callbacks: [
{
handleLLMStart(llm, prompts) {
console.log('模型开始运行', prompts)
},
handleLLMEnd(output) {
console.log('模型运行完成', output)
},
handleLLMError(error) {
console.error('模型出错', error)
},
},
]
}

这些对象中的函数就是回调钩子方法,每个钩子对应一个事件点:

钩子函数名触发时机说明
handleLLMStart(llm, prompts)模型开始调用前llm 为当前模型实例,prompts 是输入
handleLLMEnd(output)模型生成成功返回结果时output 是一个 LLMResult 对象
handleLLMError(error)模型调用出错时error 为异常对象
handleLLMNewToken生成新token的时候流式响应模式下,每个 token 输出时

课堂演示

演示 callbacks 的使用

除了上面介绍的这些钩子方法以外,常用的钩子方法还有这些:

钩子名称触发时机典型用途
handleLLMStart模型开始执行前打印提示、启动计时器
handleLLMEnd模型生成结束后打印结果、计算时长
handleLLMError模型执行中出错捕获错误、上报日志
handleToolStart工具调用前查看参数、记录调用链
handleToolEnd工具调用成功返回后打印输出
handleChainStart链条开始运行前输出入口信息
handleChainEnd链条运行完成打印最终输出、分析执行树

插件化处理

可以将其做成一个插件,这样更清晰、可复用性更强。

课堂练习

创建一个 fileLog 插件,将模型输出信息写入日志