AI Agent 求职专题(四):Tool Calling、MCP 与安全执行

从工具契约和函数调用流程出发,掌握 Agent 如何执行外部动作,以及如何用权限、幂等、审批和审计控制风险。

工具契约

一个好的工具描述要让模型知道什么时候用、需要哪些参数、返回什么结构和哪些情况不应该调用。描述越宽泛,模型越容易选错工具或生成含糊参数。

tool_schema.jsonjson
{
  "name": "get_order_status",
  "description": "读取当前用户有权访问的订单状态",
  "parameters": {
    "type": "object",
    "properties": { "order_id": { "type": "string" } },
    "required": ["order_id"],
    "additionalProperties": false
  }
}
字段作用设计建议
name工具稳定标识短、明确、使用动词加对象
description帮助模型选择工具说明适用场景、限制和副作用
parameters约束输入结构required 明确,禁止未知参数
返回值帮助模型理解结果固定字段,包含 success/error/code
权限限制谁能调用服务端根据用户身份二次判断

Tool Calling 流程

标准流程是:应用声明工具,模型返回工具名和参数,服务端验证并执行,服务端把结果回传,模型继续决定是否需要下一步。模型返回工具调用不等于工具调用成功。

用户目标
  -> 模型:选择工具 + 生成参数
  -> 服务端:Schema 校验 + 身份校验 + 权限校验
  -> 工具:执行查询或动作
  -> 服务端:结构化结果 + trace
  -> 模型:继续调用 / 解释失败 / 生成最终答案

可以并行执行互不依赖的只读工具,但涉及写操作、事务关系或共享状态时应保持顺序。并行不代表无限开并发,必须有并发上限和取消策略。

服务端实现

服务端要把“模型输出”当作不可信输入。一个最小实现至少包含白名单、参数校验、超时、错误归一化和 Trace。

async def execute_call(call, user):
    if call.name not in ALLOWED_TOOLS:
        return error("tool_not_allowed")
    args = validate_schema(call.arguments)
    authorize(user, call.name, args)
    try:
        result = await with_timeout(run_tool(call.name, args), 3)
        return {"ok": True, "data": result}
    except TimeoutError:
        return {"ok": False, "code": "timeout", "retryable": True}
    except Exception:
        return {"ok": False, "code": "tool_failed", "retryable": False}

写工具还需要幂等键,例如 user_id + operation + client_request_id。重试时必须保证同一个业务动作不会重复扣款、下单、发消息或删除数据。

MCP 核心概念

MCP 是一种让 Agent 应用以统一方式发现和使用外部能力的协议。面试时应能说清 Host、Client 和 Server 的关系:Host 承载 Agent,Client 负责连接,Server 暴露工具、资源或 Prompt。

概念职责面试表述
Host用户使用的 Agent 应用负责会话、模型和整体安全策略
Client连接某个 MCP Server管理能力发现、调用和传输
Server提供工具、资源、Prompt封装外部系统并暴露受控能力
Transport传递协议消息本地常见 STDIO,远程常见 HTTP 类传输
授权确定用户是否能访问能力认证和授权不能交给模型决定

MCP 和普通 Function Calling 的区别在于抽象层次:Function Calling 通常是一次模型调用中的工具契约;MCP 更关注跨应用、跨工具服务器的能力发现、连接、资源和权限管理。实际系统可以把 MCP Server 当作工具适配层,但不能因此跳过内部鉴权。

权限、安全与审批

风险例子控制方式
越权读取用户读取其他租户订单服务端从会话身份推导租户,不信任参数
危险写操作删除数据、发通知、付款人工审批、二次确认、最小权限
Prompt Injection网页内容诱导 Agent 执行命令不可信内容隔离,工具层再次校验
敏感泄露把身份证、密钥放进上下文脱敏、最小化、访问审计、过期删除
供应链风险不可信 MCP Server 暴露危险工具来源审核、工具白名单、沙箱和版本锁定

审批不应只看模型生成的自然语言,而应展示结构化摘要:谁发起、将调用哪个工具、参数是什么、影响哪些资源、是否可撤销、失败后如何恢复。

失败恢复与幂等

工具失败要先分类:参数错误通常不应重试;网络超时可能重试;业务冲突需要重新读取状态;权限错误应停止并提示用户。所有重试都应有次数、退避和总时限。

失败类型处理策略是否重试
Schema 错误修正参数或回到模型重新规划通常不直接重试
网络超时指数退避,保持同一幂等键有限重试
限流等待、降级或排队按 Retry-After 处理
权限失败停止并说明需要授权不重试
业务冲突重新读取状态后决策有条件重试
未知异常记录 Trace,交给人工或降级谨慎重试

工具设计清单

  • ✓工具有清晰名称、描述、参数 Schema 和返回结构。
  • ✓工具白名单、用户权限和租户隔离由服务端强制执行。
  • ✓所有副作用操作都有幂等键、审计记录和撤销/补偿方案。
  • ✓模型、工具和整条任务分别设置超时与重试策略。
  • ✓高风险动作要求结构化人工审批,而不是只看一句自然语言。
  • ✓MCP Server、第三方 API 和文档内容都被视为不可信输入。

下一篇阅读 评测与生产化,学习如何证明 Agent 的质量,并把它稳定地交付上线。