【第四章:大模型(LLM)】06.langchain原理-(8)LangChain 中的回调方法
第四章:大模型(LLM)
第六部分:LangChain 原理
第八节:LangChain 中的回调方法
1. 回调方法简介
在 LangChain 中,回调(Callback) 是一种事件驱动机制,用于在链(Chain)、代理(Agent)、工具(Tool)运行的不同阶段插入自定义逻辑。
它类似于 “监听器(Listener)”,可以监控 LLM 的执行过程,例如:
-
请求开始 / 请求结束
-
Token 生成过程
-
工具调用开始 / 结束
-
错误发生时
通过回调,我们可以实现:
-
日志记录(Logging)
-
实时监控(Monitoring)
-
流式输出(Streaming)
-
调试与可视化(Debugging)
2. 回调系统的核心概念
LangChain 的回调由 CallbackManager 管理,它负责:
-
注册一个或多个回调处理器(Handler)
-
在执行过程中自动调用这些回调方法
主要组件:
-
BaseCallbackHandler:抽象类,定义了各种回调事件
-
CallbackManager:统一调度所有回调
-
自定义回调类:继承 BaseCallbackHandler,实现你需要的逻辑
3. 回调事件类型
常用的回调方法包括:
-
LLM 回调
-
on_llm_start
:LLM 开始生成前触发 -
on_llm_new_token
:LLM 生成新 token 时触发(适合流式输出) -
on_llm_end
:LLM 完成时触发 -
on_llm_error
:LLM 出错时触发
-
Chain 回调
-
on_chain_start
:Chain 开始运行时 -
on_chain_end
:Chain 执行完毕时 -
on_chain_error
:Chain 运行出错时
-
Tool 回调
-
on_tool_start
:Agent 调用工具时触发 -
on_tool_end
:工具返回结果时触发 -
on_tool_error
:工具调用出错时触发
-
Agent 回调
-
on_agent_action
:Agent 决定调用工具时触发 -
on_agent_finish
:Agent 完成决策时触发
4. 自定义回调实现
下面是一个简单的 自定义回调,用来打印 LLM 的流式输出:
from langchain.callbacks.base import BaseCallbackHandler
from langchain.chat_models import ChatOpenAI
class MyStreamingCallback(BaseCallbackHandler):
def on_llm_start(self, serialized, prompts, **kwargs):
print("LLM 开始运行...")
def on_llm_new_token(self, token: str, **kwargs):
print(token, end="", flush=True)
def on_llm_end(self, response, **kwargs):
print("\nLLM 运行结束。")
# 使用回调
llm = ChatOpenAI(streaming=True, callbacks=[MyStreamingCallback()])
llm.predict("用一句话解释什么是LangChain?")
运行效果:
-
在控制台实时打印模型生成的 token(像 ChatGPT 打字效果)。
5. 多回调管理
可以通过 CallbackManager 组合多个回调,例如:
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.callbacks.tracing import LangChainTracer
# 定义回调管理器
callback_manager = CallbackManager([
StreamingStdOutCallbackHandler(), # 实时流式输出
LangChainTracer() # 调试与监控
])
llm = ChatOpenAI(streaming=True, callback_manager=callback_manager)
这样可以同时:
-
在控制台输出流式结果
-
在 LangChain Tracing Dashboard 中查看执行过程
6. 回调的应用场景
-
调试:实时跟踪链条执行,发现瓶颈
-
监控:记录 LLM 的输入输出,便于日志分析
-
可视化:结合 LangSmith 或 Tracing Dashboard 展示执行流程
-
流式对话:构建类似 ChatGPT 的逐字生成体验
-
异常处理:在出错时发送告警
7. 小结
-
LangChain 的 回调机制 提供了对执行过程的强大控制力
-
通过回调,可以实现日志、监控、流式输出、可视化等功能
-
回调由
CallbackManager
统一管理,支持多个回调并行工作 -
常用场景包括 实时展示、调试监控、异常处理
更多推荐
所有评论(0)