AI Agent 系统设计:工具调用要有边界,不要全靠模型自觉

发布时间:2026/7/2 2:19:22

AI Agent 系统设计:工具调用要有边界,不要全靠模型自觉 AI Agent 系统设计工具调用要有边界不要全靠模型自觉一、深度引言与场景痛点很多 Agent 原型看起来很聪明给模型一串工具让它自己决定调用搜索、数据库、邮件、日历和代码执行。演示时很顺生产时却容易翻车参数填错、重复调用、越权访问、错误结果继续推理。Agent 系统真正难的不是会调用工具而是知道什么时候能调用、怎么验证、失败后如何停下来。工具调用要有边界。模型负责理解意图和生成计划系统负责权限、参数校验、幂等、审计和回滚。把所有责任交给模型就像把方向盘和刹车都交给一个会聊天的人听起来刺激工程上不稳。二、底层机制与原理深度剖析flowchart TD A[用户目标] -- B[意图识别] B -- C[生成计划] C -- D[权限检查] D -- E[工具执行] E -- F[结果验证] F -- G[汇总响应]计划阶段可以开放执行阶段必须收紧。比如“帮我整理本周会议”可以让模型生成步骤但读取日历、访问文档、发送总结都要经过权限和确认。Agent 越能做事越要把动作边界写清楚。三、生产级代码实现from pydantic import BaseModel, Field class SearchInput(BaseModel): query: str Field(min_length2, max_length200) top_k: int Field(default5, ge1, le20) def run_search(payload: dict): args SearchInput.model_validate(payload) return search_index(args.query, args.top_k)Pydantic 不能解决所有问题但能挡住一批明显错误。生产工具还要校验用户权限、资源范围、调用频率和结果大小。工具接口不是给模型随便试的它是生产系统 API。四、边界分析与架构权衡Agent 每一步都要记录用户目标、计划、工具名、参数摘要、权限结果、执行耗时、错误类型和最终响应。不要记录敏感正文但要能复盘行为链路。否则一次错误工具调用后团队很难知道模型为什么这样做。取舍方面确认步骤越多体验越慢确认越少风险越高。可以按风险分级只读查询低风险允许自动执行写操作、中断操作、外部发送高风险必须确认。Agent 产品要把风险分层而不是一刀切自动化。还要设置最大步数和预算。Agent 不能无限循环“思考-调用-再思考”。达到步数、成本或时间上限后应返回当前进度和失败原因。可靠的 Agent知道什么时候该停。生产 Agent 还要区分“建议”和“执行”。生成邮件草稿是建议真正发送邮件是执行生成 SQL 是建议真正查询生产库是执行。建议可以更自动执行必须有权限和确认。很多事故不是模型不会推理而是系统把建议当成动作。工具结果也可能不可信。搜索结果会过期数据库可能返回空集第三方 API 可能限流。Agent 汇总时应标注工具失败和低置信度不要把残缺结果包装成完整答案。工具链越长越需要诚实汇报中间状态。还要把用户确认做成可理解的界面而不是弹一句“是否继续”。确认页应展示将要调用的工具、会访问的数据范围、可能产生的外部影响和撤销方式。用户知道自己确认了什么Agent 的自动化才不会变成新的焦虑来源。生产落地补充从能跑到可维护从生产落地角度看这类方案不能只停留在主流程。更关键的是把输入校验、失败分支、资源上限和回滚路径提前写清楚。主流程通常容易在演示环境里跑通真正暴露问题的是异常输入、依赖抖动、并发放大和权限边界。一篇技术方案如果没有解释这些约束读者很难判断它能否放进真实系统。评估时建议先定义三类指标正确性指标、稳定性指标和成本指标。正确性指标回答结果是否可信稳定性指标回答失败时是否可控成本指标回答持续运行是否划算。三类指标要同时进入验收清单不能只用平均耗时或单次成功率证明方案有效。异常路径补充把失败当成接口契约下面的补充片段强调一个原则调用方必须得到稳定、可解释的错误而不是在超时、空输入或依赖失败时收到模糊结果。代码不追求覆盖所有业务细节而是展示输入校验、超时控制和错误封装这三个生产系统最容易遗漏的环节。from __future__ import annotations import asyncio from dataclasses import dataclass dataclass class GuardedResult: ok: bool value: str error: str async def run_with_guard(input_text: str, timeout: float 3.0) - GuardedResult: if not input_text.strip(): return GuardedResult(okFalse, errorinput cannot be empty) try: async with asyncio.timeout(timeout): # 真实项目中这里放模型调用、数据库查询或外部服务请求。 await asyncio.sleep(0.01) return GuardedResult(okTrue, valuefaccepted: {input_text}) except TimeoutError: return GuardedResult(okFalse, erroroperation timeout) except Exception as exc: return GuardedResult(okFalse, errorfoperation failed: {exc})五、总结AI Agent 系统设计的核心是把模型计划和工具执行分层。权限、校验、审计、预算和确认机制比让模型更会说话更重要。Agent 能做事系统就要更会兜底。

相关新闻