LangChain与LangGraph内置回调函数
LangChain与LangGraph回调函数指南
回调函数概述
LangChain和LangGraph共享同一套回调系统,通过BaseCallbackHandler类提供了丰富的生命周期钩子,可用于监控、调试和跟踪AI应用的执行过程。
回调函数流程图
LangChain回调函数
以下是所有可用的回调函数及其触发时机:
1. 链(Chain)回调
| 回调函数 | 触发时机 | 参数 |
|---|---|---|
on_chain_start | 链开始执行时 | serialized, inputs |
on_chain_end | 链执行完成时 | outputs |
on_chain_error | 链执行出错时 | error |
2. LLM回调
| 回调函数 | 触发时机 | 参数 |
|---|---|---|
on_llm_start | LLM调用开始时 | serialized, prompts |
on_llm_new_token | 流式生成中接收到新token时 | token, chunk |
on_llm_end | LLM调用结束时 | response |
on_llm_error | LLM调用出错时 | 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中:
- 图(Graph)被实现为LangChain的Chain,因此图的执行触发
on_chain_start和on_chain_end - 图中的每个节点也可能触发相应的回调(如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, Optionalclass 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提供了几个内置的回调处理器:
- StdOutCallbackHandler:将信息打印到标准输出
- StreamingStdOutCallbackHandler:流式打印文本到标准输出
from langchain_core.callbacks import StdOutCallbackHandler
from langchain_openai import ChatOpenAIhandler = StdOutCallbackHandler()
model = ChatOpenAI()
response = model.invoke("生成一个故事", {"callbacks": [handler]})
注意事项
- 回调方法名必须准确匹配,不能自定义
- 未实现的回调方法不会影响执行
- 可以通过设置属性如
ignore_llm = True来忽略特定类型的回调 - 异步环境应使用
AsyncCallbackHandler
相关文章:
LangChain与LangGraph内置回调函数
LangChain与LangGraph回调函数指南 回调函数概述 LangChain和LangGraph共享同一套回调系统,通过BaseCallbackHandler类提供了丰富的生命周期钩子,可用于监控、调试和跟踪AI应用的执行过程。 回调函数流程图 #mermaid-svg-EsqgET3Cjlj0l0Z1 {font-fami…...
字符串哈希算法详解:原理、实现与应用
字符串哈希是一种高效处理字符串匹配和比较的技术,它通过将字符串映射为一个唯一的数值(哈希值),从而在O(1)时间内完成子串的比较。本文将结合代码实现,详细讲解前缀哈希法的工作原理,并通过流程图逐步解析…...
vue2(webpack)集成electron和 electron 打包
前言 之前发过一篇vue集成electron的文章,但是用vue3vite实现的,在vue2webpack工程可能不适用,所以这篇文章就主要介绍vue2webpack集成electron方法 创建项目 vue create vue-electron-demo目录架构 vue-electron-demo/ ├── src/ …...
C++内存管理优化实战:提升应用性能与效率
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle…...
redis数据迁移之通过redis-dump镜像
这里写目录标题 一、redis-dump 镜像打包1.1 安装windows docker1.2 idea项目创建1.3 idea镜像打包 二、redis数据迁移2.1 数据导出2.2 数据导入 一、redis-dump 镜像打包 没有找到可用的redis-dump镜像,需要自己打包一下,这里我是在idea直接打包的 1.…...
C语言单链表的增删改补
目录 (一)单链表的结构定义及初始化 (二)单链表的尾插,头插 (三)单链表的尾删,头删 (四)单链表的查找,删除,销毁 单链表是数据结构课程里的第二个数据结构。单链表在逻辑结构是连续的,在物理…...
redis导入成功,缺不显示数据
SpringBootTest class SecurityApplicationTests {AutowiredStringRedisTemplate template; //添加这句代码,自动装载,即可解决文章三处代码报错Testvoid contextLoads() {String compact Jwts.builder().signWith(Jwts.SIG.HS512.key().build()).subj…...
从表格到序列:Swift 如何优雅地解 LeetCode 251 展开二维向量
文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在这篇文章中,我们将深入探讨 LeetCode 第 251 题——“展开二维向量”的问题。通过 Swift 语言,我们不仅会提供可运行的示例代码,还会结合实际场景进行…...
汇丰xxx
1. Spring Boot 的了解,解决什么问题? 我的理解: Spring Boot 是一个基于 Spring 框架的快速开发脚手架,它简化了 Spring 应用的初始搭建和开发过程。解决的问题: 简化配置: 传统的 Spring 应用需要大量的…...
Spring MVC与Spring Boot文件上传配置项对比
Spring MVC与Spring Boot文件上传配置项对比 一、Spring MVC配置项(基于不同MultipartResolver实现) 1. 使用 CommonsMultipartResolver(Apache Commons FileUpload) Bean public MultipartResolver multipartResolver() {Common…...
小型园区网实验
划分VLAN SW3 [sw3]vlan batch 2 3 20 30 [sw3]interface GigabitEthernet 0/0/1 [sw3-GigabitEthernet0/0/1]port link-type access [sw3-GigabitEthernet0/0/1]port default vlan 2 [sw3-GigabitEthernet0/0/1]int g0/0/2 [sw3-GigabitEthernet0/0/2]port link-type acces…...
c# 数据结构 链表篇 有关单链表的一切
本人能力有限,本文仅作学习交流与参考,如有不足还请斧正 目录 0.单链表好处 0.5.单链表分类 1.无虚拟头节点情况 图示: 代码: 头插/尾插 删除 搜索 遍历全部 测试代码: 全部代码 2.有尾指针情况 尾插 全部代码 3.有虚拟头节点情况 全部代码 4.循环单链表 几个…...
VS Code连接服务器编写Python文件
1、下载 Visual Studio Code 2、打开扩展(ctrl shift x ) 3、搜索 Remote - SSH,安装 4、F1 或者 点金左下角 5、选择:Remote-SSH: Connect to Host……,回车 6、第一次用的时候,VS Code 会提示添加 SSH 主机。输…...
图解AUTOSAR_SWS_FlexRayNetworkManagement
FlexRay网络管理详解 AUTOSAR标准FlexRay网络管理模块技术说明 目录 1. FlexRay网络管理概述 1.1 模块功能与目的1.2 适用范围与限制2. FlexRay网络管理架构 2.1 模块层次结构2.2 组件交互关系3. FlexRay网络管理状态机 3.1 状态转换机制3.2 主要状态说明4. FlexRay网络管理通信…...
Gitea的安装和配置以及应用
Gitea的安装和配置以及应用 一、安装 1、创建数据库和数据库账户(pg) su – postgres -c "psql" CREATE ROLE gitea WITH LOGIN PASSWORD gitea; CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE …...
Blender 转 STL 文件全攻略:从基础到进阶
在 3D 建模与打印领域,Blender 凭借其强大的功能和开源特性,深受创作者喜爱。而 STL 文件格式,作为 3D 打印行业的通用标准,能被绝大多数 3D 打印软件和设备所识别。因此,将 Blender 模型转换为 STL 文件,是…...
UI自动化基础(1)
1、pip install selenium4.3.0,最好指定版本安装,因为不同的版本可能会有一些兼容 性的问题。 2、pip uninstall urllib3 ,pip install urllib31.26.15 【执行版本安装】,goole是114.版本 3、装好浏览器,正确安装。最好…...
$_GET变量
$_GET 是一个超级全局变量,在 PHP 中用于收集通过 URL 查询字符串传递的参数。它是一个关联数组,包含了所有通过 HTTP GET 方法发送到当前脚本的变量。 预定义的 $_GET 变量用于收集来自 method"get" 的表单中的值。 从带有 GET 方法的表单发…...
TBE(TVM的扩展)
算子 张量 一个张量只有一种数据类型 在内存中只能线性存储,最终形成一个长的一维数组 晟腾AI的数据格式 AIPP是对我们常见的数据格式转化成AI core支持的数据格式 广播机制 TVM TBE的第一种开发方式:DSL TBE的第二种开发方式:TVM TBE的第…...
【Function Calling与Tool Calling】深度解析大模型智能中枢的架构革命
目录 一、范式转移:从对话引擎到智能中枢 二、核心技术解析 2.1 Function Calling技术栈 2.2 Tool Calling实现模式 三、企业级应用架构设计 3.1 智能工单系统案例 3.2 性能优化策略 四、安全与治理框架 4.1 权限控制矩阵 4.2 审计追踪设计 五、开发者实…...
知识表示方法之六:过程表示法(Procedural Representation)
在人工智能的发展史中,关于知识的表示方法曾存在两种不同的观点。一种观点认为知识主要是陈述性的,其表示方法应着重将其静态特性,即事物的属性以及事物间的关系表示出来,称以这种观点表示知识的方法为陈述式或说明式表示法&#…...
Java 中序列化和反序列化
Java 中的序列化(Serialization)和反序列化(Deserialization)是将对象和二进制数据(或其他格式)之间转换的过程,常见于对象传输、缓存、持久化等场景。 下面是 Java 中常见的几种 序列化/反序列…...
sql-labs靶场 less-2
文章目录 sqli-labs靶场less 2 联合注入 sqli-labs靶场 每道题都从以下模板讲解,并且每个步骤都有图片,清晰明了,便于复盘。 sql注入的基本步骤 注入点注入类型 字符型:判断闭合方式 (‘、"、’、“”…...
Spring配置部分
Spring配置部分 单纯的使用Spring可以通过配置文件xml,配置注解,全注解方式执行 无论使用哪种方式,都需要在Main方法中加载配置(配置文件或者注解)获取到Spring容器,在通过容器的GetBean方法获取Bean对象…...
git clone(复制)下载
1、复制 下载地址 2、打开网页,点击 克隆/下载按扭 3、按提示复制命令行到终端 4、VS里打开终端,并粘贴以下命令 5、 下载完毕 6、复制文件夹到你选定的位置 7、用VSCODE打开文件夹,开始你接下来的工作...
Android设置adjustResize时无法生效 解决办法
删除Activity类下执行全屏的一行参数。 将图中这段Activity类中执行命令给删除就解决了。 注意关闭后状态栏和导航栏的透明度就无法自动处理了,需要到values和values-night下的themes.xml手动设置状态栏背景颜色。 <item name"android:statusBarColor"…...
按键长按代码
这些代码都存放在定时器中断中。中断为100ms中断一次。 数据判断,看的懂就看吧...
Idea将Java工程打包成war包并发布
1、问题概述? 项目开发之后,我们需要将Java工程打包成war后缀,并进行发布。之前在网上看到很多的文章,但是都不齐全,今天将提供一个完整的实现打包war工程,并发布的文章,希望对大家有所帮助,主要解决如下问题: 1、war工程需要满足的相关配置 2、如何解决项目中的JDK…...
SGLang实战问题全解析:从分布式部署到性能调优的深度指南
引言:当高性能推理遇上复杂生产环境 在大型语言模型(LLM)的生产部署中,SGLang以其革命性的RadixAttention和结构化编程能力,正成为越来越多企业的首选推理引擎。然而,当我们将32B/70B级别的大模型部署到实际生产环境时࿰…...
优选算法第八讲:链表
优选算法第八讲:链表 1.链表常用操作和技巧总结2.两数相加3.两两交换链表中的节点4.重排链表5.合并k个升序链表6.k个一组翻转链表 1.链表常用操作和技巧总结 2.两数相加 3.两两交换链表中的节点 4.重排链表 5.合并k个升序链表 6.k个一组翻转链表...
