系统学习 AI 学习路径:从 GPU 运行时到推理、微调与 RAG 评估

tool-calling

工具调用设计:schema、幂等、超时、错误处理和人工审批

补充说明

工具调用(function calling)让模型输出结构化参数,由应用执行真实操作。模型只负责“选工具、填参数”,不负责鉴权、事务和副作用控制;这些必须在应用层完成。工具设计的好坏,直接影响 Agent 的可靠性、成本和安全性。

一个可用的工具要有:清晰的名称和描述、严格的参数 schema、明确的返回值、错误语义、超时/重试策略、幂等键和高风险操作审批。工具越少越聚焦,模型越不容易选错;工具太多会撑爆上下文并增加误调用。

常用示例

{
  "type": "function",
  "function": {
    "name": "get_order_status",
    "description": "按订单号查询物流状态;只读,不会修改订单。",
    "parameters": {
      "type": "object",
      "properties": {
        "order_id": {"type": "string", "pattern": "^[A-Z0-9-]{6,32}$"}
      },
      "required": ["order_id"],
      "additionalProperties": false
    }
  }
}
# 处理模型返回的 tool_calls
resp = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=messages,
    tools=tools,
    tool_choice="auto",
)
for call in resp.choices[0].message.tool_calls or []:
    name = call.function.name
    args = json.loads(call.function.arguments)
    validate_schema(name, args)          # 参数校验
    result = execute_tool(name, args)    # 超时、重试、幂等
    messages.append({
        "role": "tool", "tool_call_id": call.id,
        "content": json.dumps(result, ensure_ascii=False),
    })
# 高风险工具:人工审批 + 幂等键
if tool_name in {"send_email", "delete_record", "run_shell"}:
    approval = request_approval(user, tool_name, args)
    if not approval.approved:
        return {"error": "approval_denied"}
result = execute_idempotent(tool_name, args, idempotency_key=call.id)

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 模型在工具调用中负责什么?不负责什么?
  2. 为什么高风险工具需要幂等键?
  3. 工具返回的内容为什么要按不可信数据处理?
答案
  1. 模型负责选择工具和生成参数;鉴权、参数校验、事务、副作用和审批由应用层负责。
  2. 重试/网络超时可能导致同一操作执行多次;幂等键让重复请求返回同一结果,避免重复扣款/发邮件。
  3. 工具返回可能来自网页、文档或外部 API,可能包含提示注入;不能直接当指令执行。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令