简要回答
在 prompt 中声明工具 JSON Schema,模型生成 tool_calls 结构化输出,宿主执行函数后将 observation 塞回 messages,模型据此继续回答。
标准回答
一、先讲调用闭环
Function Calling / Tool Use 的核心是:模型不直接执行代码,而是根据工具 schema 输出一个结构化调用请求,例如工具名、参数 JSON 和调用 id。应用层拿到这个请求后,负责校验参数、执行函数或 API,再把 tool result 作为新消息回传给模型,模型最后基于结果继续回答。
二、拆开实现细节
一次完整链路通常是:定义工具 schema → 用户提问 → 模型判断是否需要工具 → 返回 tool_calls → 宿主程序执行工具 → 回填工具结果 → 模型生成最终答案。Schema 里最重要的是 工具描述、参数类型、必填字段、枚举范围和失败说明。如果工具描述含糊,比如 “search” 没有说明搜什么、何时用,模型就容易乱调或漏调。
三、补上安全和可靠性
生产环境里,工具调用的风险在应用层。参数必须校验,高危操作要人工确认,工具执行要有超时、重试和审计日志;工具返回内容也不能完全信任,尤其是网页、邮件、RAG 文档这类外部文本,可能包含 prompt injection。并行 tool calls 能提升效率,但也要处理依赖顺序和部分失败。
常见误区
⚠️ 常见踩坑
误区一:以为模型真的执行了函数。模型只是提出调用请求,真正执行的是应用层。
误区二:只靠 prompt 限制危险工具。删除数据、转账、发邮件这类动作必须有权限控制和人工确认,不能只写“不要乱调用”。
追问
追问 1:OpenAI tools 和 MCP 如何配合?
题库专题:什么是 A2A 协议?它与 MCP 协议是什么关系与区别?OpenAI tools / Function Calling 是模型 API 层的结构化调用能力;MCP 是工具提供方的协议与运行时。常见模式是:Host 先从 MCP Server 读取工具 schema,把它转换成模型请求里的 tools;模型返回 tool_calls 后,Host 再调用对应 MCP Server 执行工具,把结果作为 tool message 回填给模型。候选人可以补一句边界:模型 API 负责“表达调用意图”,MCP 负责“工具发现、连接和执行”,两者是配合关系,不是互相替代。
题库延伸:与本追问相关的专题题 → 什么是 A2A 协议?它与 MCP 协议是什么关系与区别?
追问 2:如何防止模型调用危险工具?
可以按四层防护回答:工具白名单,模型只能看到当前场景允许的工具;参数校验,schema、枚举、范围、用户权限都在应用层检查;高危确认,删库、转账、发邮件、改权限必须人工确认;审计与沙箱,所有调用记录用户、参数、结果和失败原因,执行环境最小权限。这样即使模型被诱导,也不能直接造成真实副作用。
🔗 相似问题
同一考点的不同问法,换着练更稳
延伸学习
按主题分类的相关资源,便于系统复习
