LangGraph Tools 实战:工具调用怎么定义、怎么执行、怎么不撑爆上下文
LangGraph 企业级 Agent 教程 · 第 2 集。Tool 定义、ToolNode 执行、bind_tools 与 return_direct 分工外加一次 639 万字符的真实翻车现场。很多人第一次做 Agent最容易高估模型的一件事是以为会说就等于会做。比如用户只说了一句帮我查一下明天下午平原轩还有没有空位。这句话听起来很简单但真正把它做成可上线的系统内部要做的事其实不止一句回复去外部系统查实时数据把查到的信息压缩成模型能看懂的摘要保留原始结构化结果给后面的流程继续用在需要的时候停下来别让模型把一大坨 JSON 直接塞进上下文里。人做这件事会很自然先去查再总结再决定要不要继续。可 Agent / Graph 不会天然这样做。它只会生成文本不会自动知道哪些事实来自外部系统也不会自动帮你把危险动作和普通回答分开。这就是 Tool 真正存在的原因它不是聊天内容的一部分而是模型和外部世界之间的边界。先把一个需求拆开看我们用书房预约助手这个例子来讲。用户可能会连续问“帮我查一下明天下午平原轩还有没有空位”“把 15:00 之后能约的时段列出来”“那就帮我约 16:00-18:00”“看看我最近的预约记录”如果只用普通聊天模型最多能帮你组织语言但它不知道数据库里到底有什么不知道预约系统有没有冲突也不知道这次操作会不会真的成功。所以这类系统里至少要分清三件事Tool一个可以被调用的外部能力ToolNode在图里真正执行工具调用的节点Agent决定什么时候调工具、看完结果后怎么继续说话。这个区分很重要。很多人写着写着就把三者混在一起最后模型输出、工具执行、状态更新全挤成一个大函数后面一改就崩。一个好 Tool先要让模型看得懂Tool 不是写个函数名就完了。模型真正需要的是什么时候调用它、该传什么参数、返回结果大概长什么样。一个最小的例子长这样from pydantic import BaseModel, Fieldfrom langchain_core.tools import toolclassAvailabilityInput(BaseModel): room_name: str Field(description书房名称例如 平原轩) booking_date: str Field(description预约日期格式 YYYY-MM-DD) start_after: str | None Field(defaultNone, description只返回这个时间之后的可用时段格式 HH:MM)tool(args_schemaAvailabilityInput)defquery_availability(room_name: str, booking_date: str, start_after: str | None None) - str: 查询书房可预约时段。 returnf{room_name} 在 {booking_date} 可预约时段14:00-15:00, 16:00-18:00, 19:00-20:00这里最值钱的不是代码本身而是三个信息都明确了description让模型知道这是什么args_schema让参数不会乱飞返回值保持短小让后续推理还能继续。如果工具说明写得含糊模型就会瞎猜参数如果参数 schema 太松模型就会传错字段如果返回结果太大下一轮上下文就会被撑爆。上面这个例子返回值是手写的短字符串看起来岁月静好。接下来把它接上真实数据源事情马上变样。一次能跑通的调用离撑爆只差一步课程里做了一个很直接的实验让查询工具老老实实返回真实的完整候选数据不做任何处理。工具本身跑得好好的返回也完全正确。但看一眼数字未裁剪 ToolMessage 字符数: 6,391,451未裁剪候选条数: 12,960639 万字符。一个能跑通的工具调用单次返回就接近很多模型整个上下文窗口的量级。关键在于这坨数据的去向工具的返回值会变成ToolMessage进入messages而messages是下一次模型调用要原样携带的内容。也就是说工具返回有多大下一轮就有多少上下文压力——费用飙升还是轻的直接超限报错才是常态。这是很多 Agent 项目最容易踩的坑工具本身能返回和返回内容适合进入模型上下文是两回事。单独测试工具时一切正常接进 Agent 循环后第二轮就爆而且爆的位置不在工具是在下一次模型调用排查起来特别绕。摘要进消息完整数据走旁路处理方案不是少查点数据而是把一份数据拆成两个去向给模型的只保留少量摘要和统计完整结构化结果通过运行时旁路保存后续节点需要时再取。最小实现只有两个函数def clip_items_for_llm(items: list[dict], max_items: int 5) - tuple[list[dict], dict]: 把完整候选拆成两份给 LLM 的少量摘要 统计信息。 clipped items[:max_items] return clipped, {total_items: len(items), llm_items: len(clipped)}def runtime_state_from_config(config: RunnableConfig | None) - dict: 从 RunnableConfig 里取 runtime_state作为不进消息流的旁路存储。 configurable (config or {}).get(configurable, {}) return configurable.setdefault(runtime_state, {})工具里的用法查到 12,960 条候选后只把前 5 条和一行统计写进返回值完整列表写进runtime_state。改造后再跑同一个查询ToolMessage从 639 万字符缩到原来的万分之几而后续的提交预约工具依然能从 runtime 里拿到完整候选继续干活。课程里还做了一个更较真的验证把 runtime 里第一条和最后一条候选的candidate_id拿去搜整个消息流——都搜不到。完整数据真的只在旁路里一个字都没漏进模型上下文。一句话总结这个分工Tool 负责接事实runtime / State 负责保现场消息流只保留推理需要的那一小段。ToolNode、bind_tools、return_direct分别管什么很多人第一次看工具相关 API 时会把几个概念混在一起。其实它们各自解决的问题不一样。1bind_tools它的作用是告诉模型有哪些工具。它不会替你执行工具只是让模型能在合适的时候生成tool_calls。你可以把它理解成模型知道了菜单但还没真的下单。2ToolNode它的作用是真的执行工具。在 LangGraph 里模型先产出tool_calls然后ToolNode把这些调用落地执行再把结果写回流程。你可以把它理解成菜单已经选好了厨房开始做菜。3return_direct它决定工具结果是不是直接结束流程。return_directFalse工具结果先回模型再由模型组织最终答复return_directTrue工具结果本身就足够了流程可以直接结束。这个选项不是性能参数而是一个路由信号。如果工具返回的就是最终答案比如某些简单计算、纯查表结果它就可以直接返回如果工具结果还需要解释、整合、补一句人话那就让模型继续说。哪些数据该缓存哪些不该工具很多时候会查同一类稳定数据比如规则说明、固定配置、公开知识。这类数据适合缓存因为它们变化慢重复查会浪费时间。但用户当前会话里的状态、临时候选、审批结果不适合塞进缓存里冒充通用记忆。简单判断就够了稳定、重复、无个体差异可以考虑缓存跟当前会话、当前用户、当前动作强相关别缓存成全局结果。缓存是为了少重复查不是为了把状态偷懒地藏起来。运行时注入有些东西不该让模型自己填还有一类数据模型不应该自己生成比如用户 ID会话 ID权限信息当前运行时的状态持久化存储里的内容。这些东西应该由程序注入而不是让模型猜。这就是运行时注入的意义模型做判断程序提供边界内的事实。如果把这些字段也交给模型填系统就会变成看起来聪明实际上不可信。换一个场景这套边界还成立吗把书房预约换成胰腺癌辅助问诊同样的判断反而更扎眼模型可以组织语言、可以追问症状但它不能凭空编造检验结果、影像报告或诊疗指南。这些事实必须通过 Tool 去外部系统读读回来之后给模型的是可读摘要原始报告留在 State / runtime 里给下游节点继续判断。医疗场景还多一条书房预约里容易忽略的要求查不到、缺参数、系统异常时工具要返回可恢复的错误让图能继续追问或者转人工而不是直接把整条链路挂掉。你会发现这套边界设计根本不挑业务查库存、查工单、查合同换个名词全都适用。越是模型不能出错的领域Tool 边界越值钱。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关新闻

settings.local.json,Claude Code 里最适合个人差异化配置的一层

settings.local.json,Claude Code 里最适合个人差异化配置的一层

最近在梳理 Claude Code 的配置体系时,最容易被低估的文件之一就是 .claude/settings.local.json。它不像 CLAUDE.md 那样负责给模型提供项目背景,也不像 .claude/settings.json 那样适合提交到仓库、统一团队行为。它更像一个贴在本机开发环境旁边的小控制台,专门处理个人偏…

2026/7/23 3:35:39 阅读更多 →
海洋观测技术:从传统探测到空天地海一体化

海洋观测技术:从传统探测到空天地海一体化

1. 海洋观测技术发展现状与突破我国海洋观测技术近年来取得了一系列重大突破,从传统的水下探测发展到空天地海一体化观测体系。这种技术飞跃主要体现在三个方面:首先是观测范围的扩展。传统海洋观测主要依靠船舶和浮标等水面设备,观测深度和范…

2026/7/23 6:19:35 阅读更多 →
社交平台 AI 功能的用户接受度:推荐算法透明性,决定信任成败的关键

社交平台 AI 功能的用户接受度:推荐算法透明性,决定信任成败的关键

社交平台 AI 功能的用户接受度:推荐算法透明性,决定信任成败的关键 一、"这个推荐是怎么来的?""因为这个功能就是为了让你花更多时间在平台上" 这是社交平台用户对 AI 推荐最常见的两种态度。一部分用户接受推荐并乐在其…

2026/7/21 23:37:09 阅读更多 →

最新新闻

基于状态机模型处理美团外卖霸王餐订单生命周期的业务流转逻辑

基于状态机模型处理美团外卖霸王餐订单生命周期的业务流转逻辑

基于状态机模型处理美团外卖霸王餐订单生命周期的业务流转逻辑 在外卖CPS(Cost Per Sale)返利业务中,订单状态的管理是系统核心。一个订单从创建、支付、完成到最终结算,会经历多个复杂的状态流转。传统的if-else或switch-case方式…

2026/7/24 9:19:04 阅读更多 →
基于JWT和OAuth2混合认证机制保障外卖API调用的安全性

基于JWT和OAuth2混合认证机制保障外卖API调用的安全性

基于JWT和OAuth2混合认证机制保障外卖API调用的安全性 在现代外卖CPS(Cost Per Sale)返利系统,特别是涉及“霸王餐”等高价值业务场景时,API的安全性是系统架构的重中之重。单纯依赖OAuth2进行授权码获取,或仅使用JWT进…

2026/7/24 9:19:04 阅读更多 →
OpenAI Codex实战指南:从API调用到代码生成与集成

OpenAI Codex实战指南:从API调用到代码生成与集成

1. 先搞清楚 Codex 到底能帮你解决什么实际问题如果你经常需要写重复代码、处理数据转换、或者想快速生成某个功能模块的脚手架,OpenAI Codex 这类工具最直接的价值是帮你省掉查文档、拼语法的时间。它不是要替代程序员,而是在明确需求后,帮你…

2026/7/24 9:19:04 阅读更多 →
Unity物理交互进阶:OnTriggerStay与OnCollisionStay性能优化实战

Unity物理交互进阶:OnTriggerStay与OnCollisionStay性能优化实战

1. 项目概述:从“触发”到“持续交互”的机制跃迁 在Unity开发中,新手教程总会教你使用 OnTriggerEnter 和 OnCollisionEnter 来处理“进入”事件,比如玩家捡起金币或者碰到敌人掉血。这就像只学会了敲门说“你好”,但门开了之…

2026/7/24 9:19:04 阅读更多 →
YOLO26迁移学习技术与工业应用实战

YOLO26迁移学习技术与工业应用实战

## 1. YOLO26迁移学习技术全景解析作为计算机视觉领域最前沿的目标检测架构,YOLO26通过迁移学习技术大幅降低了模型训练门槛。当我在工业质检项目中首次尝试用COCO预训练权重微调焊缝缺陷检测模型时,仅用200张标注图片就达到了85%的mAP,这让我…

2026/7/24 9:19:03 阅读更多 →
迁移学习与数据增强实战:提升深度学习模型性能

迁移学习与数据增强实战:提升深度学习模型性能

1. 迁移学习与数据增强的核心概念解析 吴恩达教授的深度学习课程笔记中提到的迁移学习和数据增强,是当前深度学习领域最实用的两项技术。我在实际工业级模型开发中发现,合理运用这两项技术能显著提升小数据集场景下的模型表现。 迁移学习的本质是知识复…

2026/7/24 9:18:03 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻