LangChain与LangGraph内置回调函数

LangChain与LangGraph回调函数指南

回调函数概述

LangChain和LangGraph共享同一套回调系统,通过BaseCallbackHandler类提供了丰富的生命周期钩子,可用于监控、调试和跟踪AI应用的执行过程。

回调函数流程图

使用LLM
流式输出
成功
失败
使用聊天模型
流式输出
成功
失败
使用检索器
成功
失败
使用工具
成功
失败
使用代理
生成文本
重试
自定义事件
开始执行
on_chain_start
on_llm_start
on_llm_new_token
on_llm_end
on_llm_error
on_chat_model_start
on_retriever_start
on_retriever_end
on_retriever_error
on_tool_start
on_tool_end
on_tool_error
on_agent_action
on_agent_finish
on_text
on_retry
on_custom_event
on_chain_end
on_chain_error
结束执行

LangChain回调函数

以下是所有可用的回调函数及其触发时机:

1. 链(Chain)回调

回调函数触发时机参数
on_chain_start链开始执行时serialized, inputs
on_chain_end链执行完成时outputs
on_chain_error链执行出错时error

2. LLM回调

回调函数触发时机参数
on_llm_startLLM调用开始时serialized, prompts
on_llm_new_token流式生成中接收到新token时token, chunk
on_llm_endLLM调用结束时response
on_llm_errorLLM调用出错时error

3. 聊天模型回调

回调函数触发时机参数
on_chat_model_start聊天模型开始生成时serialized, messages

4. 工具(Tool)回调

回调函数触发时机参数
on_tool_start工具调用开始时serialized, input_str
on_tool_end工具调用完成时output
on_tool_error工具调用出错时error

5. 检索器(Retriever)回调

回调函数触发时机参数
on_retriever_start检索器开始检索时serialized, query
on_retriever_end检索器完成检索时documents
on_retriever_error检索器检索出错时error

6. 代理(Agent)回调

回调函数触发时机参数
on_agent_action代理决定执行操作时action
on_agent_finish代理完成所有操作时finish

7. 通用回调

回调函数触发时机参数
on_text文本处理开始时text
on_retry重试操作时retry_state
on_custom_event自定义事件发生时name, data

LangGraph中的回调使用

LangGraph与LangChain共享同一套回调系统,没有额外的专用回调函数。在LangGraph中:

  1. 图(Graph)被实现为LangChain的Chain,因此图的执行触发on_chain_starton_chain_end
  2. 图中的每个节点也可能触发相应的回调(如LLM节点触发LLM回调)

LangGraph的调试选项

除了使用回调,LangGraph还提供了专门的调试功能:

from langgraph.graph import StateGraph

# 创建状态图
graph = StateGraph()
# ... 添加节点和边 ...

# 编译时启用调试模式
compiled_graph = graph.compile(debug=True)

实现自定义回调处理器

基本回调处理器

from langchain_core.callbacks import BaseCallbackHandler
from uuid import UUID
from typing import Any, Dict, List, Optional

class CustomHandler(BaseCallbackHandler):
    def on_chain_start(
        self, serialized: Dict[str, Any], inputs: Dict[str, Any], **kwargs: Any
    ) -> None:
        """链开始执行时调用"""
        print(f"开始执行链:{serialized.get('name', '未命名')}")
        print(f"输入:{inputs}")
        
    def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> None:
        """链执行完成时调用"""
        print(f"链执行完成,输出:{outputs}")
        
    def on_llm_start(
        self, serialized: Dict[str, Any], prompts: List[str], **kwargs: Any
    ) -> None:
        """LLM开始执行时调用"""
        print(f"开始执行LLM:{serialized.get('name', '未命名')}")
        print(f"提示词:{prompts[0][:50]}...")

使用回调处理器

from langchain_core.callbacks import BaseCallbackHandler
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph

# 创建回调处理器
handler = CustomHandler()

# 在LangChain中使用
model = ChatOpenAI()
response = model.invoke("你好", {"callbacks": [handler]})

# 在LangGraph中使用
graph = StateGraph()
# ... 添加节点和边 ...
compiled_graph = graph.compile()
result = compiled_graph.invoke({"input": "你好"}, {"callbacks": [handler]})

内置回调处理器

LangChain提供了几个内置的回调处理器:

  1. StdOutCallbackHandler:将信息打印到标准输出
  2. StreamingStdOutCallbackHandler:流式打印文本到标准输出
from langchain_core.callbacks import StdOutCallbackHandler
from langchain_openai import ChatOpenAI

handler = StdOutCallbackHandler()
model = ChatOpenAI()
response = model.invoke("生成一个故事", {"callbacks": [handler]})

注意事项

  1. 回调方法名必须准确匹配,不能自定义
  2. 未实现的回调方法不会影响执行
  3. 可以通过设置属性如ignore_llm = True来忽略特定类型的回调
  4. 异步环境应使用AsyncCallbackHandler
### LangChainLangGraph 兼容的 Python 版本 LangChain 是一个用于开发基于大语言模型的应用程序的框架,而 LangGraph 并不是一个官方已知的库名称。如果指的是 Graph 数据结构或者类似的扩展模块,则可能需要进一步澄清具体需求。 对于 LangChain 的兼容性,其最低支持的 Python 版本通常为 **Python 3.7** 或更高版本[^1]。这是因为 LangChain 使用了一些现代 Python 功能以及依赖于其他第三方库(如 `tiktoken`),这些库本身也需要较新的 Python 版本才能正常运行。 以下是关于 LangChain 安装和使用的注意事项: #### 最低 Python 版本要求 LangChain 推荐使用 **Python 3.8 及以上版本** 来获得最佳体验[^1]。较低版本可能会遇到不兼容问题或缺少某些特性支持。 #### 示例安装命令 ```bash pip install langchain>=0.0.295 ``` 为了验证当前环境是否满足 LangChain 的要求,可以执行以下代码片段来检查 Python 版本: ```python import sys if not (sys.version_info.major >= 3 and sys.version_info.minor >= 8): raise Exception(f"LangChain requires at least Python 3.8, but you are using {sys.version}.") else: print("Your Python version is compatible with LangChain.") ``` 至于提到的 “LangGraph”,如果没有更多上下文说明可能是拼写错误或者是自定义项目的一部分。如果是希望集成图数据库或其他图形处理工具到 LangChain 中,建议查看社区文档是否有相关插件支持[^2]。 --- ### 总结 - LangChain 支持 **Python 3.7+**, 更推荐使用 **Python 3.8+**。 - 如果涉及特定组件(如图数据结构操作),需确认该部分的具体实现方式并匹配相应依赖条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘培玉--大王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值