0%

工具调用(Function Calling / Tool Use)

工具调用(Function Calling / Tool Use)

一句话定位:工具调用让 LLM 从”只能生成文本”变成”能读写外部世界”——通过 JSON Schema 描述工具,模型生成结构化参数,框架校验并路由执行,结果回填上下文供模型继续推理。

1. 基本机制

  1. 工具注册:用 JSON Schema 描述每个工具的名称、功能说明、参数结构(类型、是否必填),提供给模型作为上下文的一部分。
  2. 模型生成调用:模型根据当前任务判断需要调用哪个工具,输出结构化的调用请求(工具名 + 参数,通常是 JSON),而不是自由文本。
  3. 框架校验与执行:应用层框架解析模型输出,校验参数是否符合 Schema,路由到真实的函数/API 执行。
  4. 结果回填:把工具执行结果作为新的上下文(Observation)追加回对话历史,模型基于结果继续下一轮推理(呼应 7.1 的 ReAct 循环)。

2. 核心难点

  • 参数幻觉:模型可能生成不符合 Schema 的参数(类型错误、编造不存在的字段值、缺失必填项),需要框架层做严格校验并给出明确的错误反馈让模型重试,而不是直接执行错误参数。
  • 失败重试与降级:工具调用可能因为网络、权限、业务逻辑失败,需要设计重试策略和失败后的降级路径(如告知用户”该操作暂不可用”而不是卡死或硬编答案)。
  • 工具选择模糊:当可选工具很多、功能相近时,模型可能选错工具;解决思路包括工具描述写得更精确、限制单次可见的工具数量(分层筛选后再暴露)。

3. 面试落点

  • 能讲清”为什么需要 JSON Schema”:把模型的自由文本输出约束成结构化、可校验、可编程处理的格式,是连接”语言模型”和”确定性系统”的关键桥梁。
  • 可迁移话术:这和微服务里”用 OpenAPI/Protobuf 定义接口契约”是同一个思路——都是用 Schema 把”意图”转换成”可执行、可校验的结构化调用”。

参考:OpenAI 官方文档《Function calling》;论文《Toolformer: Language Models Can Teach Themselves to Use Tools》