当前位置: 首页 > 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.xdnf.cn/news/1243243.html

相关文章:

  • 【Spring】SpringBoot 自动配置,@ComponentScan、@Import、ImportSelector接口
  • LeetCode 132:分割回文串 II
  • Linux开发利器:探秘开源,构建高效——基础开发工具指南(下)【make/Makefile】
  • 水面垃圾清扫船cad【6张】三维图+设计说明书
  • Jmeter进行性能并发测试
  • 【Java】使用FreeMarker来实现Word自定义导出
  • C++高频知识点(十四)
  • 京东商品详情API技术文档框架及Python实现方案
  • sqli-labs:Less-27a关卡详细解析
  • 《Python 实用项目与工具制作指南》· 2.3 导入
  • Bean的生命周期和循环依赖问题的解决
  • curl发送文件bodyParser无法获取请求体的问题分析
  • 嵌入式硬件中三极管推挽电路控制与实现
  • PPT自动化 python-pptx - 11 : 备注页 (Notes Slides)
  • (论文速读)Text-IF:基于语义文本引导的退化感知交互式图像融合方法
  • sqli-labs-master/Less-31~Less-40
  • openeuler离线安装软件
  • Hexo - 免费搭建个人博客07 - 添加右上角的“目录”
  • 先知模型或者说从容的模型
  • Linux—yum仓库及NFS网络共享服务
  • Java基础-斗地主游戏
  • opencv引入libavif
  • 从 0 到 1 开发图书管理系统:飞算 JavaAI 让技术落地更简单
  • Prometheus-3--Prometheus是怎么抓取Java应用,Redis中间件,服务器环境的指标的?
  • 【慕伏白】Android Studio 配置国内镜像源
  • 内联函数:提升效率的空间换时间艺术
  • FreeRTOS源码分析四:时钟中断处理响应流程
  • 深入浅出 RabbitMQ:工作队列实战(轮训策略VS公平策略)
  • 鸿蒙南向开发 编写一个简单子系统
  • 机器学习 入门——决策树分类