第四章:大模型(LLM)

第六部分:LangChain 原理

第八节:LangChain 中的回调方法


1. 回调方法简介

在 LangChain 中,回调(Callback) 是一种事件驱动机制,用于在链(Chain)、代理(Agent)、工具(Tool)运行的不同阶段插入自定义逻辑。
它类似于 “监听器(Listener)”,可以监控 LLM 的执行过程,例如:

  • 请求开始 / 请求结束

  • Token 生成过程

  • 工具调用开始 / 结束

  • 错误发生时

通过回调,我们可以实现:

  • 日志记录(Logging)

  • 实时监控(Monitoring)

  • 流式输出(Streaming)

  • 调试与可视化(Debugging)


2. 回调系统的核心概念

LangChain 的回调由 CallbackManager 管理,它负责:

  • 注册一个或多个回调处理器(Handler)

  • 在执行过程中自动调用这些回调方法

主要组件:

  • BaseCallbackHandler:抽象类,定义了各种回调事件

  • CallbackManager:统一调度所有回调

  • 自定义回调类:继承 BaseCallbackHandler,实现你需要的逻辑


3. 回调事件类型

常用的回调方法包括:

  1. LLM 回调

  • on_llm_start:LLM 开始生成前触发

  • on_llm_new_token:LLM 生成新 token 时触发(适合流式输出)

  • on_llm_end:LLM 完成时触发

  • on_llm_error:LLM 出错时触发

  1. Chain 回调

  • on_chain_start:Chain 开始运行时

  • on_chain_end:Chain 执行完毕时

  • on_chain_error:Chain 运行出错时

  1. Tool 回调

  • on_tool_start:Agent 调用工具时触发

  • on_tool_end:工具返回结果时触发

  • on_tool_error:工具调用出错时触发

  1. 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. 回调的应用场景
  1. 调试:实时跟踪链条执行,发现瓶颈

  2. 监控:记录 LLM 的输入输出,便于日志分析

  3. 可视化:结合 LangSmith 或 Tracing Dashboard 展示执行流程

  4. 流式对话:构建类似 ChatGPT 的逐字生成体验

  5. 异常处理:在出错时发送告警


7. 小结
  • LangChain 的 回调机制 提供了对执行过程的强大控制力

  • 通过回调,可以实现日志、监控、流式输出、可视化等功能

  • 回调由 CallbackManager 统一管理,支持多个回调并行工作

  • 常用场景包括 实时展示、调试监控、异常处理

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐