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

Demo-LangGraph构建Agent

简单Demo

这里们传入的是 model,而不是 model_with_tools。这是因为 create_react_agent 会在后台为我们调用 .bind_tools

MemorySaver:工作流状态管理工具,基于内存,保存完整工作流状态。

{ "ts": "2023-01-01T12:00:00Z"

, "step": 5

, // 当前执行步骤 "data": { "messages": [...], // 对话消息

"tool_results": {...}, // 工具执行结果

"decision_path": [...] // 分支决策路径 } }
ChatMessageHistory (LangChain):只是个简单存储的消息列表

[
HumanMessage(content="Hello"),
AIMessage(content="Hi there!"),
HumanMessage(content="How's weather?")
]

# Import relevant functionality
from langchain_anthropic import ChatAnthropic
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.messages import HumanMessage
from langgraph.checkpoint.memory import MemorySaver
from langgraph.prebuilt import create_react_agent# Create the agent
memory = MemorySaver()
model = ChatAnthropic(model_name="claude-3-sonnet-20240229")
search = TavilySearchResults(max_results=2)
tools = [search]
agent_executor = create_react_agent(model, tools, checkpointer=memory)# Use the agent
config = {"configurable": {"thread_id": "abc123"}}
for chunk in agent_executor.stream({"messages": [HumanMessage(content="hi im bob! and i live in sf")]}, config
):print(chunk)print("----")for chunk in agent_executor.stream({"messages": [HumanMessage(content="whats the weather where I live?")]}, config
):print(chunk)print("----")

流式Token

event["event"] 的值是​​由框架自动判别和填充​​的

# 可能捕获的所有事件类型(部分常见)
"on_llm_start"      # 语言模型调用开始
"on_llm_end"        # 语言模型调用结束
"on_chain_start"    # 链开始执行
"on_chain_end"      # 链结束执行
"on_tool_start"     # 工具调用开始
"on_tool_end"       # 工具调用结束
"on_chat_model_stream"  # 聊天模型流式输出
"on_retriever_start"   # 检索器开始工作
"on_retriever_end"     # 检索器结束工作

自动判别机制​​:

  • 当Agent开始执行一个链(chain)时,会触发on_chain_start事件
  • 当模型开始生成响应时,会触发on_chat_model_stream事件
  • 当工具开始执行时,会触发on_tool_start事件
  • 当对应操作完成时,会触发相应的结束事件(如on_chain_endon_tool_end
  • 这些事件类型字符串由LangChain内部机制决定
async for event in agent_executor.astream_events({"messages": [HumanMessage(content="whats the weather in sf?")]}, version="v1"
):kind = event["event"]if kind == "on_chain_start":if (event["name"] == "Agent"):  # Was assigned when creating the agent with `.with_config({"run_name": "Agent"})`print(f"Starting agent: {event['name']} with input: {event['data'].get('input')}")elif kind == "on_chain_end":if (event["name"] == "Agent"):  # Was assigned when creating the agent with `.with_config({"run_name": "Agent"})`print()print("--")print(f"Done agent: {event['name']} with output: {event['data'].get('output')['output']}")if kind == "on_chat_model_stream":content = event["data"]["chunk"].contentif content:# Empty content in the context of OpenAI means# that the model is asking for a tool to be invoked.# So we only print non-empty contentprint(content, end="|")elif kind == "on_tool_start":print("--")print(f"Starting tool: {event['name']} with inputs: {event['data'].get('input')}")elif kind == "on_tool_end":print(f"Done tool: {event['name']}")print(f"Tool output was: {event['data'].get('output')}")print("--")

http://www.dtcms.com/a/315310.html

相关文章:

  • Assistant API——构建基于大语言模型的智能体应用
  • 通义万相国际版wan2.2开源第6天:主题运动
  • 二值图针对内部轮廓腐蚀膨胀
  • 李宏毅深度学习教程 第10-11章 自监督学习self-supervised learning+自编码器
  • FFmpeg02:常用命令实战
  • 【LeetCode 热题 100】215. 数组中的第K个最大元素——(解法一)快速选择
  • CentOS卸载、安装MySQL8(yum操作)
  • 肾上腺疾病AI诊疗一体化系统应用方向探析
  • 智能图书馆管理系统开发实战系列(七):CMake构建系统与持续集成
  • 【Node.js从 0 到 1:入门实战与项目驱动】1.2 Node.js 的核心优势(非阻塞 I/O、事件驱动、单线程模型)
  • 比起登天,孙宇晨更需要安稳着陆
  • 飞算 JavaAI:为软件安全上锁的智能守护者
  • Antlr学习笔记 02、使用antlr4实现简易版计算器
  • 【Z字形变换】
  • 离线Docker项目移植全攻略
  • 明远智睿T113-i核心板:工业设备制造领域成本控制的破局者
  • NX982NX984美光固态闪存NX992NY102
  • UVa1480/LA5034 Jewel
  • webm 读取解析
  • Linux 系统重置用户密码指南
  • go安装gin
  • JMeter 性能测试工具使用教程
  • 【网络运维】Linux:逻辑卷管理
  • Spring @Component注解全解析
  • 计算机网络:子网掩码在路由转发中的关键作用
  • css的选择器
  • 虚拟机中查看和修改文件权限
  • MoonBit Pearls Vol.04:用MoonBit 探索协同式编程
  • Spring Security 认证与授权实现机制
  • 随机森林知识点整理:从原理到实战