当前位置: 首页 > news >正文

[LangChain] 23. 回调机制

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

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

1. 输入参数 (input)

类型:Input

invoke() 方法保持一致:

  • 如果是 LLM:可以传字符串、BaseMessageBaseMessage[]
  • 如果是 Chain / Runnable:则是该 Chain 约定的输入对象(例如 { input: "..." }
  • 如果是 Embeddings:通常是字符串或字符串数组

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

2. 配置参数

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

  • configurable:运行时传入的上下文配置(例如用户 ID、对话 ID,用于内存/持久化关联)。
  • tags:给运行标记,用于调试、Tracing。
  • metadata:附加元信息,方便日志或监控。
  • callbacks:传入回调函数(如 handleLLMNewToken 等),可用于实时处理 token。类似于生命周期钩子方法。
  • maxConcurrency:并发控制。
  • timeout:超时设置。

对具体模型(如 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 的使用

import { ChatOpenAI } from "@langchain/openai";
import dotenv from "dotenv";
dotenv.config();
import { fileLoggingHandler } from "./fileLog.js";
import { consoleLoggingHandler } from "./consoleLog.js";const llm = new ChatOpenAI({model: "gpt-4o-mini",temperature: 0,apiKey: process.env.API_KEY,streaming: true,
});const stream = await llm.stream("你好", {callbacks: [fileLoggingHandler,consoleLoggingHandler,],
});for await (const chunk of stream) {process.stdout.write(chunk.content);
}
export const consoleLoggingHandler = {handleLLMStart() {console.log("模型即将开始运行...");},handleLLMEnd() {console.log("模型输出已完成。");},handleLLMError(err) {console.error("模型执行出错:", err.message);},
};
export const consoleLoggingHandler = {handleLLMStart() {console.log("模型即将开始运行...");},handleLLMEnd() {console.log("模型输出已完成。");},handleLLMError(err) {console.error("模型执行出错:", err.message);},
};

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

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

插件化处理

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

http://www.gsyq.cn/news/62018.html

相关文章:

  • 一文入门 LangChain 开发
  • Scrum冲刺阶段 Day Three
  • 深入解析:MTK5G旗舰系列——天玑9500/9400/9300/9200/9000在AI和处理器性能、DDR频率及UFS的深度对比分析
  • the badness of USA
  • 完整教程:内核里常用宏BUG_ON/WARN_ON/WARN_ONCE
  • Agent编写全攻略(超详细)从零基础到精通,一篇搞定,不看后悔,赶紧收藏!
  • 动态规划可能性展开
  • Day3-20251126
  • SCTimer/PWM定时器(续二)
  • QT TCP服务器构建及网络通信实现 - 详解
  • 自指自洽即因果,可知可行,很烦很好
  • 2025年11月二代木塑地板厂家,防水木塑地板厂家,环保木塑地板厂家推荐:无醛环保认证品牌盘点
  • 11月26日日记
  • 3D scanning with structured light(使用结构光进行三维扫描)
  • 求导幂法则 - ukyo-
  • web框架——flask-异常处理/全局钩子/jinja2引擎
  • 2025年秋招-华为-11月19号开发岗
  • 求导幂法则, - ukyo-
  • VMware虚拟机Ubuntu系统问题集
  • 从文件结构、索引、信息更新、版本控制等全面对比Apache hudi和Apache paimon
  • 考前复习1
  • 开发指南
  • 项目启动
  • 2025-11-26
  • 2025年11月砝码,无磁不锈钢砝码,定制砝码厂家推荐:行业权威盘点与品质红榜发布
  • 2025年11月不锈钢砝码,无磁不锈钢砝码,挂钩砝码厂家推荐,高精度与可靠性兼具的优质品牌
  • 上下文无关文法序列
  • ARCGIS Pro 绘图技巧——水文站的尖尖垂直于河流的水流方向
  • 优美的字符串
  • 【普中Hi3861开发攻略--基于鸿蒙OS】-- 第 31 章 WIFI 实验-华为 IoTDA 设备接入 - 教程