Skip to content

Function Calling 实战

schema 设计、多工具、错误处理、与 MCP 的关系。

Updated View as Markdown
For humans

Function Calling 实战

FC(Function Calling / Tool Calling)是 Agent 的发动机。面试主线:schema 设计、多工具协作、错误处理、工程化。

基本流程

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "查询城市天气",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "城市名"},
            },
            "required": ["city"],
        },
    },
}]

resp = client.chat.completions.create(model="gpt-4o",
    messages=messages, tools=tools)
# 模型可能返回 tool_calls, 执行后把结果作为 tool 消息回填, 再调一次

核心循环:模型请求工具 → 执行 → 结果回填 → 再调模型,直到模型直接回答(见 LangChain 核心抽象篇)。

Schema 设计要点

要点 说明
描述精准 何时用、参数含义(决定调用准确率)
参数严格 类型、必填、枚举、格式约束
粒度合适 工具太小调用多轮,太大参数复杂
数量控制 几十个时模型选择困难(分组或子代理)
命名清晰 动词 + 对象(search_orders)

多工具协作

  • 一次响应可返回多个 tool_calls(并行调用)
  • 工具结果按 tool_call_id 一一对应回填(见 LangChain 工具篇的 ToolMessage)
  • 依赖场景:工具 B 需要工具 A 的结果,模型会分轮调用
  • 工程注意:执行超时、失败重试、结果截断(大结果要截断或落盘,见 DeepAgents 上下文管理)

错误处理

错误 处理
参数错 把校验错误作为工具结果回填,模型会修正重调
执行失败 返回友好错误信息,模型可换方案
模型乱调工具 描述约束 + 权限校验 + 调用审计
循环卡死 最大轮数限制 + 超时(见 loop-engineering)

关键认知:工具错误信息会回到模型眼里,错误信息要写清楚(模型能据此自救)。

与 MCP 的关系

  • MCP 服务器暴露的工具,经适配器转成 FC schema(mcp-adapters,见 MCP 篇)
  • 两者是生态层(MCP)与能力层(FC)的关系:MCP 是工具源,FC 是调用机制

面试追问

  1. FC 流程? 模型返回 tool_calls → 执行 → 结果回填 → 再调模型,直到直接回答
  2. schema 怎么写好? 描述精准(何时用、参数含义)、参数严格、粒度合适。描述决定准确率
  3. 多工具怎么并行? 一次响应多个 tool_calls,按 tool_call_id 回填。依赖场景分轮
  4. 工具报错怎么办? 错误信息回填给模型,它会修正或换方案。错误信息要写清楚
  5. 和 MCP 的关系? MCP 是工具源(协议),FC 是调用机制(API 能力)。适配器转换
Navigation

Type to search…

↑↓ navigate↵ selectEsc close