AI创想

标题: LangGraph中的事件流 [打印本页]

作者: AI小编    时间: 9 小时前
标题: LangGraph中的事件流
作者:CSDN博客
LangGraph事件流相关笔记

一、LangGraph流功能基础

二、LangGraph中的事件流

序号EventEvent TriggerAssociated Method
1Chat model start聊天模型启动时on_chat_model_start
2LLM startLLM启动时on_llm_start
3LLM new tokenLLM或聊天模型生成新token时on_llm_new_token
4LLM endsLLM或聊天模型结束时on_llm_end
5LLM errorsLLM或聊天模型出错时on_llm_error
6Chain start链开始运行时on_chain_start
7Chain end链结束时on_chain_end
8Chain error链出错时on_chain_error
9Tool start工具开始运行时on_tool_start
10Tool end工具结束时on_tool_end
11Tool error工具出错时on_tool_error
12Agent actionagent执行动作时on_agent_action
13Agent finishagent结束时on_agent_finish
14Retriever start检索器启动时on_retriever_start
15Retriever end检索器结束时on_retriever_end
16Retriever error检索器出错时on_retriever_error
17Text任意文本运行时on_text
18Retry重试事件发生时on_retry
三、事件流的应用示例

查看事件流

以ReAct代理框架为例,通过astream_events方法传入问题和指定API版本(如version = “v2”)查看事件流。运行代码可看到从链启动到结束,包括agent决策、模型调用、流式输出等一系列事件。相关代码及输出解释如下:
  1. asyncfor event in graph.astream_events({"messages":["你好,请你介绍一下你自己"]},version="v2"):
  2.     kind = event["event"]print(f"{kind}:{event['name']}")
复制代码
提取具体事件信息

定义events列表存储事件,通过索引访问具体事件。每个事件包含event(事件类型)、name(事件名称,指向处理方法)和data(事件相关数据)。例如在on_chat_model_stream事件中,可从data中获取流式输出的token。代码示例:
  1. events =[]asyncfor event in graph.astream_events({"messages":["你好,请你介绍一下你自己"]},version="v2"):
  2.     events.append(event)# 查看第0个事件
  3. events[0]# 查看第10个事件
  4. events[10]
复制代码
(, 下载次数: 0)

(, 下载次数: 0)


过滤和处理事件信息

依据事件名称等字段过滤事件,如仅打印on_chat_model_stream事件信息,可灵活获取和展示所需数据。LangGraph的stream_mode = "messages"模式基于事件流进行格式化提取,也支持自定义数据流。代码如下:
自定义
  1. # 仅打印聊天模型输出的事件asyncfor event in graph.astream_events({"messages":["你好,请你介绍一下你自己"]},version="v2"):
  2.     kind = event["event"]if kind =="on_chat_model_stream":print(event, end="|", flush=True)# 自定义数据流,打印聊天模型输出的内容asyncfor event in graph.astream_events({"messages":["你好,请你介绍一下你自己"]},version="v2"):
  3.     kind = event["event"]if kind =="on_chat_model_stream":print(event["data"]["chunk"].content, end="]", flush=True)
复制代码
"messages"模式代码
  1. first =Trueasyncfor msg, metadata in graph.astream({"messages":["你好,请你介绍一下你自己"]}, stream_mode="all"):if msg.content andnotisinstance(msg, HumanMessage):print(msg.content, end="|", flush=True)ifisinstance(msg, AIMessageChunk):if first:
  2.             gathered = msg
  3.             first =Falseelse:
  4.             gathered = gathered + msg
  5.     if msg.tool_call_chunks:print(gathered.tool_calls)
复制代码
输出内容

你好||我是|一个|智能|助手|,|在|协|助|回答|问题|、|提供|信息|和|执行|各种|任务|。|我|能够|处理|自然|语言|查询|,|并|使用|多个|工具|和|API|来|获取|实时|数据|、|查询|天气|信息|、|执行|数据库|操作|等|。|我的|目标|是|为|您|提供|准确|和|及时|的|帮助|。|如果|您|有|任何|问题|或|需要|帮助|,|请|随时|告诉|我|!
四、总结与展望


原文地址:https://blog.csdn.net/qq_43588095/article/details/147635246




欢迎光临 AI创想 (https://www.llms-ai.com/) Powered by Discuz! X3.4