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

Runnable 组件生命周期监听器与使用场景

Runnable 生命周期监听器

1.1 监听机制演进

LangChain 框架中,Runnable 组件提供两种监控方案:

  • ​传统模式​​:通过 config + callbacks 参数传递回调配置
  • ​增强模式​​:使用 with_listeners() 方法实现生命周期订阅
# 新旧方案对比调用
chain = my_chain.with_listeners(...)  # 现代方案
chain = my_chain(config=..., callbacks=...)  # 传统方案

1.2 事件订阅接口

with_listeners 参数规范

def lifecycle_handler(run_obj: Run,          # 运行时上下文对象config: RunnableConfig # 执行配置快照
) -> None:""" 标准化事件处理函数 """
  • 🔗 官方文档参考
  • 💡大模型中转API推荐
  • ✨中转使用教程

1.3 运行时元数据解析

元数据字段类型描述
run_idUUID全局唯一执行标识符
run_typestr组件类型 (chain/llm/tool)
start_timedatetime事件触发时间戳(UTC标准)
inputsDict[str, Any]结构化输入参数(自动序列化)
errorOptional[Exception]异常堆栈信息(仅错误事件触发)

1.4 示例代码

import timefrom langchain_core.runnables import RunnableLambda, RunnableConfig
from langchain_core.tracers.schemas import Rundef on_start(run_obj: Run, config: RunnableConfig) -> None:print("on_start")print("run_obj:", run_obj.inputs)print("config:", config)print("========================")def on_end(run_obj: Run, config: RunnableConfig) -> None:print("on_end")print("run_obj:", run_obj)print("config:", config)print("========================")def on_error(run_obj: Run, config: RunnableConfig) -> None:print("on_error")print("run_obj:", run_obj)print("config:", config)print("========================")runnable = RunnableLambda(lambda x: time.sleep(x))
chain = runnable.with_listeners(on_start=on_start, on_end=on_end, on_error=on_error)chain.invoke(2)

输出内容:

on_start
run_obj: {'input': 2}
config: {'configurable': {'name': 'xxx'}}
========================
on_end
run_obj: id=UUID('3479d7ab-3bc7-4c4c-9db9-aaaff0c1fd04') name='RunnableLambda' start_time=datetime.datetime(2024, 7, 6, 9, 24, 52, 820817, tzinfo=datetime.timezone.utc) run_type='chain' end_time=datetime.datetime(2024, 7, 6, 9, 24, 54, 821575, tzinfo=datetime.timezone.utc) extra={'metadata': {'name': 'xxx'}} error=None serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain_core', 'runnables', 'base', 'RunnableLambda'], 'repr': 'RunnableLambda(lambda x: time.sleep(x))'} events=[{'name': 'start', 'time': datetime.datetime(2024, 7, 6, 9, 24, 52, 820817, tzinfo=datetime.timezone.utc)}, {'name': 'end', 'time': datetime.datetime(2024, 7, 6, 9, 24, 54, 821575, tzinfo=datetime.timezone.utc)}] inputs={'input': 2} outputs={'output': None} reference_example_id=None parent_run_id=None tags=[] child_runs=[] trace_id=UUID('3479d7ab-3bc7-4c4c-9db9-aaaff0c1fd04') dotted_order='20240706T092452820817Z3479d7ab-3bc7-4c4c-9db9-aaaff0c1fd04'
config: {'configurable': {'name': 'xxx'}}
========================

1.5. 资料推荐

  • 🔗 官方文档参考
  • 💡大模型中转API推荐
  • ✨中转使用教程

🔥 ​​核心优势​​
with_listeners 相比传统回调方案具备:
统一的事件参数签名
自动化的上下文注入
非侵入式的监控接入

相关文章:

  • 【人工智能】人形机器人与低空经济协同发展分析
  • window-docker的容器使用宿主机音频设备
  • 【51单片机2个定时器2个外部中断设置】2022-5-11
  • maven坐标导入jar包时剔除不需要的内容
  • 基于开源AI大模型AI智能名片S2B2C商城小程序源码的私域流量稳定性构建研究
  • Android运行时ART加载OAT文件的过程
  • Hadoop 1.x设计理念解析
  • 配置和使用持久卷
  • Prompt多版本测试指南:如何科学评估不同提示词的效果
  • OpenCv实战笔记(1)在win11搭建opencv4.11.1 + qt5.15.2 + vs2019_x64开发环境
  • ROC-AUC:模型评估的“超级英雄
  • 文献分享:CH-CL配对和VL结构域的完整性影响IgG1分泌过程
  • Coco AI 入驻 GitCode:打破数据孤岛,解锁智能协作新可能
  • (undone) MIT6.S081 2023 学习笔记 (Day10: LAB9 fs file system)
  • 深入了解 OpenIddict:实现 OAuth 2.0 和 OpenID Connect 协议的 .NET 库
  • 如何使用VSCode编写C、C++和Python程序
  • Go语言八股文之Map详解
  • 【项目篇之统一内存操作】仿照RabbitMQ模拟实现消息队列
  • R语言traj包进行潜轨迹分析
  • 电气设备器件选型参数---断路器
  • 晋城一男子实名举报村支书打伤其67岁父亲,镇政府:案件正在侦办中
  • 马克思主义理论研究教学名师系列访谈|金瑶梅:教师需要了解学生的现实发展,把握其思想发展动态
  • 解放日报头版:上海张江模力社区托举“年轻的事业”
  • 上海环球马术冠军赛开赛,一场体育与假日消费联动的狂欢
  • 港股5月迎开门红,恒生科指涨3%,欧股开盘全线上扬
  • 燕子矶:物流网络中的闪亮节点|劳动者的书信②