langchain工具结果透传
在 LangChain / LangGraph 里工具调用结果存起来供下一个工具使用这件事本质上是把结果写回图状态State——Runtime 本身只是一个运行期上下文载体并不是持久存储桶。下面把正确的做法讲清楚。先理清三个概念LangChain v1 基于 LangGraph运行期上下文分三层别搞混 层次性质生命周期用途context配置不可变单次运行user_id、API Key、DB 连接等state状态可变单次运行或单轮对话工具结果、中间变量都存在这里​store长期记忆可变跨对话用户画像、历史偏好工具调用结果要供下一个工具使用正确做法是写回 state——要么作为ToolMessage进messages列表要么写进你自定义的 state 字段 。做法一让结果自然进入 messages最常用LangGraph 的ToolNode执行完工具后会把返回值包装成ToolMessage追加到state[messages]里 。下一轮 LLM 推理时自然能看到这个结果并决定调用下一个工具。关键是 state 里的messages字段必须用累积 reduceradd_messages否则会覆盖掉之前的消息下一轮 LLM 会因为tool 消息找不到配对的 tool_calls而报错 from typing import Annotated, List from langchain_core.messages import BaseMessage from langgraph.graph import StateGraph from langgraph.graph.message import add_messages class State(TypedDict): messages: Annotated[List[BaseMessage], add_messages]工具本身只需要正常返回结果即可ToolNode会自动处理ToolRuntime注入、ToolMessage构造等工作 from langchain_core.tools import tool tool def search_user(user_id: str) - str: 根据用户 ID 查用户信息 return fnameAlice, age30, cityBeijing tool def get_weather(city: str) - str: 根据城市查天气 return f{city} 今天晴25°CLLM 看到search_user返回的ToolMessage后会从中提取cityBeijing再决定调用get_weather(Beijing)——这就是上一个工具的结果供下一个工具使用的自然流转。做法二把结果写进自定义 state 字段结构化传递如果工具结果需要以结构化字段的形式显式存下来而不仅仅是躺在 messages 里让 LLM 自己提取工具需要返回一个Command对象来更新 state from langchain.tools import tool, ToolRuntime from langchain.messages import ToolMessage from langgraph.types import Command from typing import TypedDict class MyState(TypedDict): messages: list user_profile: dict # 自定义字段 current_step: str # 流程控制字段 tool def fetch_user_profile( user_id: str, runtime: ToolRuntime[None, MyState] ) - Command: 获取用户画像并写入 state profile {name: Alice, city: Beijing, vip: True} return Command(update{ # 必须回写 ToolMessage保证消息配对 messages: [ToolMessage( contentstr(profile), tool_call_idruntime.tool_call_id )], # 写入自定义字段下一个工具可从 runtime.state 读取 user_profile: profile, current_step: next_stage })下一个工具通过runtime.state读取上一个工具写入的字段 tool def recommend_plan(runtime: ToolRuntime[None, MyState]) - str: 基于上一个工具写入的用户画像做推荐 profile runtime.state.get(user_profile, {}) if not profile: return 未找到用户画像 city profile.get(city) return f为 {city} 的用户推荐本地服务 调用runtime.state.get()时务必提供默认值——首次调用时该字段可能还没初始化直接[]取值会抛 KeyError 导致 Agent 循环崩溃 。做法三跨工具共享运行期依赖用 context如果下一个工具需要的是user_id、API Key、数据库连接​ 这类运行期依赖不是上一个工具的计算结果应该走context而不是 statefrom dataclasses import dataclass from langchain.tools import ToolRuntime, tool dataclass class AppContext: user_id: str db_conn: object api_key: str tool def query_orders(runtime: ToolRuntime[AppContext]) - str: 工具通过 runtime.context 拿到运行期依赖 uid runtime.context.user_id conn runtime.context.db_conn # ... 查询逻辑 return f用户 {uid} 有 3 笔订单调用时传入 context agent.invoke( {messages: 查询我的订单}, contextAppContext(user_idu_123, db_connconn, api_keyxxx) )完整可运行的最小示例from typing import Annotated, TypedDict, List from langchain_core.messages import BaseMessage from langchain_core.tools import tool from langchain.tools import ToolNode, ToolRuntime from langchain.messages import ToolMessage from langgraph.types import Command from langgraph.graph import StateGraph, START, END from langgraph.graph.message import add_messages # 1. 定义带自定义字段的 state class AgentState(TypedDict): messages: Annotated[List[BaseMessage], add_messages] last_result: dict # 存上一个工具的结构化结果 step: str # 2. 工具 A写入 state tool def tool_a(query: str, runtime: ToolRuntime[None, AgentState]) - Command: result {query: query, answer: f答案:{query}的结果} return Command(update{ messages: [ToolMessage( contentstr(result), tool_call_idruntime.tool_call_id )], last_result: result, step: after_a }) # 3. 工具 B读取上一个工具写入的 last_result tool def tool_b(runtime: ToolRuntime[None, AgentState]) - str: prev runtime.state.get(last_result, {}) if not prev: return 没有前置结果 return f基于 {prev.get(answer)} 做进一步处理 # 4. 构建图用 ToolNode 自动处理 ToolRuntime 注入 tools [tool_a, tool_b] tool_node ToolNode(tools) def call_model(state: AgentState): # 这里绑定 tools 给 LLM response model.bind_tools(tools).invoke(state[messages]) return {messages: [response]} graph (StateGraph(AgentState) .add_node(agent, call_model) .add_node(tools, tool_node) .add_edge(START, agent) .add_conditional_edges(agent, lambda s: tools if s[messages][-1].tool_calls else END, [tools, END]) .add_edge(tools, agent) .compile() )⚠️关键提醒如果你想自己写工具执行节点不用预置ToolNode直接tool.ainvoke()时ToolRuntime不会被自动注入runtime参数会变成必填导致校验失败。这种情况下要么改用ToolNode要么手动构造ToolRuntime注入 ——生产环境强烈建议直接用ToolNode。几种场景的选择建议工具结果是给 LLM 看的最常见→ 直接返回靠messagesToolMessage自然流转state 用add_messagesreducer工具结果需要结构化存下来供后续节点/工具读取​ → 返回Command(update{...})写自定义 state 字段跨会话保留用户偏好、历史记忆→ 用runtime.store长期记忆不是 state运行期依赖user_id、连接、密钥→ 走contextinvoke 时传入多轮对话持久化​ → 编译图时加checkpointerMemorySaver()用thread_id隔离 一句话记住Runtime 是管道State 才是仓库。工具结果要供下一个工具用本质是写回 StateRuntime 只是在这一次调用里帮你把 state、context、store 端到工具面前 。如果你的场景是多 Agent 交接handoff还需要把上一个 Agent 的AIMessageToolMessage配对传给下一个 Agent这部分逻辑稍微特殊需要的话告诉我你的具体架构我给一份针对多 Agent 的写法。

相关新闻

三步搞定百度文库付费限制:免费保存纯净文档的终极指南

三步搞定百度文库付费限制:免费保存纯净文档的终极指南

三步搞定百度文库付费限制:免费保存纯净文档的终极指南 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 还在为百度文库的付费下载券和烦人广告而烦恼吗?今天我要分享一个简…

2026/7/30 22:15:00 阅读更多 →
Java/Python/Node.js项目路径获取与管理实践

Java/Python/Node.js项目路径获取与管理实践

1. 为什么需要获取项目路径在开发过程中,获取项目路径是一个看似简单却至关重要的基础操作。我第一次意识到这个问题的重要性是在接手一个遗留项目时,发现代码中到处都是硬编码的绝对路径。当项目从开发环境迁移到测试环境时,所有路径都失效了…

2026/7/30 22:14:00 阅读更多 →
什么胶辊耐高温?工业耐高温胶辊选型指南

什么胶辊耐高温?工业耐高温胶辊选型指南

在工业生产中,印刷、热复合、覆膜、烘干等工序长期处于高温工况,普通胶辊极易出现软化、变形、脱胶、开裂等问题,直接影响生产效率与产品质量。很多企业采购选型时都会疑惑什么胶辊耐高温,适合工业高温场景使用。市面上耐高温胶辊…

2026/7/30 22:14:00 阅读更多 →

最新新闻

SpringBoot构建应急物资管理系统的架构设计与实践

SpringBoot构建应急物资管理系统的架构设计与实践

1. 项目背景与核心价值疫情常态化防控背景下,应急物资管理系统的数字化升级已成为公共卫生体系建设的关键环节。去年参与某三甲医院防护物资调度平台开发时,我们曾遇到48小时内需要完成10万件防护服跨省调配的紧急情况,传统Excel台账和人工电…

2026/7/30 22:24:04 阅读更多 →
毕业论文神器!盘点2026年学生热捧的的AI论文工具

毕业论文神器!盘点2026年学生热捧的的AI论文工具

一天写完毕业论文在2026年已不再是天方夜谭。最新实测显示,2026年AI论文工具正在颠覆传统写作方式,覆盖选题构思、文献综述、内容生成、降重润色等全流程场景,真正实现高效搞定论文,让你告别熬夜赶稿的焦虑。 一、全流程王者&…

2026/7/30 22:24:04 阅读更多 →
炉石传说HsMod插件:50+实用功能全面优化你的游戏体验

炉石传说HsMod插件:50+实用功能全面优化你的游戏体验

炉石传说HsMod插件:50实用功能全面优化你的游戏体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 你是否厌倦了炉石传说中繁琐的重复操作?是否想要跳过那些冗长的…

2026/7/30 22:24:04 阅读更多 →
2026更新版!AI论文网站测评:最新推荐与使用体验分享

2026更新版!AI论文网站测评:最新推荐与使用体验分享

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/7/30 22:24:04 阅读更多 →
完全掌握OpenArk:Windows系统安全与逆向分析终极指南

完全掌握OpenArk:Windows系统安全与逆向分析终极指南

完全掌握OpenArk:Windows系统安全与逆向分析终极指南 【免费下载链接】OpenArk The Next Generation of Anti-Rookit(ARK) tool for Windows. 项目地址: https://gitcode.com/GitHub_Trending/op/OpenArk OpenArk是一款功能强大的开源反Rootkit工具&#xff…

2026/7/30 22:24:04 阅读更多 →
企业级 Agent 需求 7*24 持续稳定交付方案:收藏这份小白程序员进阶指南

企业级 Agent 需求 7*24 持续稳定交付方案:收藏这份小白程序员进阶指南

本文探讨了企业级 Agent 在软件开发中的应用,分析了 Coding Agent 在实际交付中面临的挑战,并提出了构建一套可持续的交付机制,实现需求持续完成分析、拆解、实现、验证和部署,同时确保风险可控。文章强调了减少系统中的等待、转述…

2026/7/30 22:23:04 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻