LangGraph工具调用别裸奔:一条从分类到审计的治理流水线
你在一个类似AI安全运维系统里问了下面一句给我封禁这个IP: xx.xx.xx.xx如果这还只是一个demo系统Agent可能很快按照一段漂亮流程执行识别用户意图 ↓ 选择block_ip工具 ↓ 执行封禁 ↓ 回复用户已处理看起来智能但若是一个真实的接入了生产的AI安全运维系统这个搞法有点吓人了。封禁IP这类敏感的写操作不是查天气也不是总结一段文本而是一个有副作用的动作它可能会改变外部系统状态可能影响真实用户、真实服务、真实业务。。所以在Agent调用block_ip之前最好还要想好下面这些地方都咋处理1、它凭什么能调用block_ip2、谁批的3、失败了怎么办4、事后怎么查证据链5、等问题不在block_ip而在少了中间关卡【识别用户意图》选择block_ip工具》执行封禁》回复用户已处理】这条流程最大的问题是模型刚说“我觉得应该封这个IP” 系统马上就真的去封了。这中间少了一步确认这个请求真的是封禁请求吗 block_ip这个工具适合当前请求吗 这个动作不需要人批准吗模型最多只能提出建议觉得这里应该调用block_ip参数大概是这些。但系统必须再检查一遍这次到底允不允许执行所以我们需要把一次工具调用拆开。不是模型决定 - 工具执行而是类似下面的流水线处理思路分类 - 规划 - 策略 - 审批 - 执行 - 错误处理 - 重试/降级 - 审计 - 回复我暂且把这个线路叫做【工具调用的治理流水线】乍一看节点线路是挺长也挺绕的但每一段都有明确作用。对应的Graph结构大概是这样读图时可以先不用纠结每条分支只记住一个大方向请求从分类、规划、策略、审批一路往下走能执行才进入execute_tool不能执行或已经被拒绝就直接进入审计。请求先经过分类节点问题问的是帮我封禁这个IP第一步先分类。在这个示例的安全运维工具执行系统里我们把动作粗略分成三类readonly只读查询这一类 high_risk_write高风险写操作这一类 unknown无法判断转人工的这一类而封禁IP显然不是只读查询它应该被分到high_risk_write这一步简单但关键因为后面的策略、审批、执行都是基于这个分类继续走的。然后进入规划节点分类之后才是规划规划节点负责把用户请求变成准备调用哪个工具 准备传什么参数对于“封禁这个IP”的这个问题规划结果可能是planned_tool: block_ip tool_args: ip: 192.0.2.10 reason: 用户请求封禁可疑来源到这里还依然只是形成了一个“准备执行的计划”planned_tool不是已经执行的工具。 tool_args也不是已经发送出去的参数。第一道真正的门策略检查分类节点可以知道你的问题类型是readonly还是high_risk_write还是unknown规划节点可以知道你的问题打算要用的是哪个工具使用啥参数有了分类也有了规划之后策略检查其实就问一个问题这个问题类型是否允许使用这个工具比如问题类型是readonly那它只应该使用只读工具类似下面这几个lookup_asset query_exposure check_ip_reputation再比如问题类型如果是high_risk_write它就应该仅使用支持的是写操作工具block_ip add_account_to_watchlist策略检查这个节点要做的就是1、readonly请求只能使用readonly工具。2、high_risk_write请求只能使用写操作工具。3、unknown请求不自动执行直接转人工。代码逻辑大概是def enforce_tool_policy(state): action_type state.get(action_type) planned_tool state.get(planned_tool) allowed_tools ALLOWED_TOOLS_BY_ACTION_TYPE.get(action_type, {}) if planned_tool in allowed_tools: return {tool_status: pending} return { tool_status: failed, tool_error: {type: tool_not_allowed}, }第二道门人工审批现在请求已经走到这里看一下当前的state分类high_risk_write 规划block_ip 策略允许进入下一关因为block_ip是高风险写操作所以还不能直接执行这个工具调用需要人工审批。readonly的工具调用一般情况下不需要人工审批这里的人工审批用LangGraph里的interrupt()让图停下来approval_result interrupt( { question: 这个高风险工具动作是否允许执行, planned_tool: state.get(planned_tool, ), tool_args: state.get(tool_args, {}), expected_resume_shape: { decision: approved 或 denied, operator: 审批人, reason: 审批原因, }, } )意思是图先停在这 把要执行的工具和参数展示给外部审批人 等外部用Command(resume...)把审批结果传回来倘若传回来的是{”decision”: ”approved”, ”operator”: ”alice”, ”reason”: ”已确认恶意来源”}图就继续往下走进入真正的工具执行节点了这一步把“模型建议调用工具”和“人批准执行工具”分开其实就是进入Human-in-the-loop了。批准之后工具才真正执行只有当审批结果是approved才会走到execute_tool才是真的调用block_ipblock_ip( ip192.0.2.10, reason用户请求封禁可疑来源 )至此完整主线是用户请求封禁IP ↓ 分类为high_risk_write ↓ 规划成block_ip ↓ 策略检查通过 ↓ interrupt暂停等待审批 ↓ 人工approved ↓ 执行block_ip ↓ 写入审计日志 ↓ 回复用户回看一下你会发现这已经和文章一开始那种【模型规划后直接执行】的“智能的流程”完全不是一回事了。如果人工拒绝呢再看同一个请求的另一条岔路还是帮我封禁这个IP。的这个问题分类、规划、策略检查都一样图依然会停在审批节点但这次审批人传回{”decision”: ”denied”, ”operator”: ”alice”, ”reason”: ”证据不足”}这时流程会直接进入审计不会进入execute_tool第1节给出的graph结构也是这个逻辑而audit_log里记录了下面这些说明危险动作确实被挡住了。approval: denied tool_status: denied如果规划错了呢换一个请求比如问的是请查询xxxx错误示例因为有“查询”这个关键字所以第一个节点的分类结果是readonly正常情况下readonly只能使用只读工具比如query_exposure、lookup_asset。但为了测试策略检查节点有没有用我们故意让规划节点犯错让它使用planned_tool: block_ip翻译过来就是用户明明是普通的查询只读类型 规划却给了一个封禁工具可写工具这时候策略节点会发现action_type: readonly planned_tool: block_ip allowed_tools: lookup_asset, query_exposure, check_ip_reputationblock_ip不在readonly允许工具集合里所以结果是tool_status: failed tool_error.type: tool_not_allowed然后流程直接进入审计不会进入工具执行。这个也证明了一件事就算规划错了策略节点也能在执行前拦住越权工具。如果工具自己失败了呢再看一个只读请求请查询unstable.example.com的暴露服务。分类结果是readonly规划结果是query_exposure策略检查也能通过只读动作不需要人工审批所以会直接进入工具执行。上面这些都没问题但这个工具执行时超时了errorexposure scanner timeout如果异常直接抛出去整张图就崩了。崩了后面没有重试没有人工工单没有审计更没有llm给你回复了所以execute_tool节点要捕获异常把它写回Statetry: result tool(**tool_args) return { tool_status: success, tool_result: result, tool_error: {}, } except Exception as exc: return { tool_status: failed, tool_error: { type: tool_runtime_error, message: str(exc), }, }Exception里的return要确保的是工具执行可以失败但图不能走不下去工具失败只是进入了一个可处理状态。接下来在retry_or_fallback节点里会判断如果没有触发最大重试次数就重试如果达到最大重试次数后仍然失败就创建人工处理工单tool_status: ticket_created manual_ticket: SEC-MANUAL-001这比直接报错要稳得多系统没有假装成功也没有无限重试更没有让整张图崩掉。最后一定要有audit_log前面看了几类测试路径审批通过执行工具 审批拒绝不执行工具 策略拦截执行前拒绝 工具失败重试后转人工这些路径最后都是要进入audit_log因为审计日志要回答的是用户请求是什么 系统怎么分类 规划了哪个工具 参数是什么 策略有没有放行 审批人是谁 审批结果是什么 工具有没有执行 结果是什么 失败后有没有重试 最后有没有转人工audit_log代表的是这次工具调用的证据链其重要性不需要过多解释。现在再看整条工具治理流水线分类 - 规划 - 策略 - 审批 - 执行 - 错误处理 - 重试/降级 - 审计 - 回复它其实是在回答一次工具调用里的几个现实问题1、分类这是什么类型的动作 2、规划准备调用哪个工具 3、策略这个类型允许用这个工具吗 4、审批危险动作有没有人批准 5、执行工具什么时候才真正被调用 6、错误处理失败后图会不会崩 7、重试/降级失败后怎么收场 8、审计事后怎么查 9、回复怎么把最终状态解释给用户上面这条流水线算是提供一种工具调用治理的思想说实话是比普通tool loop长的多但至少说明agent在工具调用治理方面我们能做也需要做的事儿还是挺多的。实验细节GitHub 仓库 https://github.com/yauld/ai-forge 完整实验文章 labs/langgraph/foundations/23 | LangGraph 工具调用治理让工具执行可控、可恢复、可审计.md 实验代码 labs/langgraph/foundations/experiments/23_tool_governance_console/学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%免费】

相关新闻

扣子+飞书+企微自动化闭环搭建:1个智能体打通3大办公平台的9个关键接口(含OAuth2.1授权绕过方案)

扣子+飞书+企微自动化闭环搭建:1个智能体打通3大办公平台的9个关键接口(含OAuth2.1授权绕过方案)

更多请点击: https://codechina.net 第一章:扣子智能体的核心架构与跨平台集成原理 扣子智能体(Coze Bot)采用模块化分层架构设计,其核心由编排引擎、插件调度器、上下文记忆层和多协议适配网关四大组件构成。编排引擎…

2026/10/17 8:00:31 阅读更多 →
影刀RPA 自动化竞品监控系统:价格与产品变动实时追踪

影刀RPA 自动化竞品监控系统:价格与产品变动实时追踪

影刀RPA 自动化竞品监控系统:价格与产品变动实时追踪 作者:林焱 写在前面 竞品监控是运营和产品团队的日常工作,但靠人工每天盯竞品官网、电商页面极其低效。本文搭建一套完整的竞品监控系统:定时采集竞品数据 → 与历史数据对比…

2026/10/17 8:08:01 阅读更多 →
Harness Engineering的落地实践

Harness Engineering的落地实践

摘要:Harness Engineering 最近很火,但我翻了数十篇文章大部分都在讲它的概念,极少人去讲解它的落地实践。今天这篇文章我将大致讲解什么是 Harness Engineering,并讲解一个采用 Harness Engineering 架构设计、基于 LangChain De…

2026/10/17 8:08:20 阅读更多 →

最新新闻

高速ADC系统功率缩放:功耗优化的实战方法与性能平衡

高速ADC系统功率缩放:功耗优化的实战方法与性能平衡

刚拿到这套评估套件的时候,我对 ADC 的功耗管理其实没有太多概念,脑子里默认就是“芯片标多少功耗就是多少,跟配置关系不大”。结果第一次按默认配置上电,手一摸芯片表面,烫得我赶紧断电。这时候我才意识到&#xff0c…

2026/10/17 23:13:07 阅读更多 →
国内外大模型代码编程项目汇总:OpenAI Codex、GitHub Copilot、Tabnine、DeepMind AlphaCode 与 TaoToken 统一接入实践

国内外大模型代码编程项目汇总:OpenAI Codex、GitHub Copilot、Tabnine、DeepMind AlphaCode 与 TaoToken 统一接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 23:13:07 阅读更多 →
OpenCV实战:硬币检测识别从边缘检测到模板匹配全流程解析

OpenCV实战:硬币检测识别从边缘检测到模板匹配全流程解析

简介:一份面向Python与OpenCV初学者的硬币检测与识别源码项目,针对从实拍照片中识别硬币数量并判断总价值的典型任务,完整梳理图像处理流程。包内共13个文件,其中1个Python脚本实现核心算法,12张JPG图片提供模板、多组…

2026/10/17 23:13:07 阅读更多 →
Unity3D汽车游戏源码调校指南:WheelCollider与Rigidbody物理参数详解

Unity3D汽车游戏源码调校指南:WheelCollider与Rigidbody物理参数详解

简介:这是一份基于Unity3D引擎开发的汽车驾驶类游戏项目源码,面向Unity初学者与有一定经验的游戏开发者,可用于学习赛车游戏的完整实现流程。项目围绕汽车轮转动这一核心效果展开,涉及刚体组件、物理引擎、C#脚本控制、碰撞检测与…

2026/10/17 23:12:06 阅读更多 →
告别LLM-as-a-Judge:用语义表征让小模型做精准评估

告别LLM-as-a-Judge:用语义表征让小模型做精准评估

我先说一个判断:LLM-as-a-Judge 这个方向,到了该“往回拉一拉”的时候了。过去一年我主要精力都放在怎么让大模型当裁判这件事上。一开始确实惊艳,给一段回答,让大模型打个分、挑个错,效果比传统的 BLEU、ROUGE 不知道…

2026/10/17 23:12:06 阅读更多 →
意大利餐厅H5响应式网站源码解析:手写HTML+CSS+JS项目拆解

意大利餐厅H5响应式网站源码解析:手写HTML+CSS+JS项目拆解

简介:这是一份面向Web前端初学者与进阶开发者的意大利风味餐厅响应式网页源码,基于HTML5、CSS3与JavaScript构建,能够自适应桌面、平板与手机屏幕,适用于餐饮企业官网、品牌展示、菜品宣传等场景,可直接作为练习或项目…

2026/10/17 23:12:06 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →