工具本质只是结构化输出
工具本身并不复杂。究其核心,工具就是大模型输出的结构化数据,用来触发固定逻辑代码执行。
文档标识:140-tools-are-just-structured-outputs

示例说明
假设现有两个工具:创建工单 CreateIssue、检索工单 SearchIssues。
让大模型“选用多款工具其一”,本质就是让模型输出一段可解析为工具对象的 JSON 文本。
数据模型定义
代码块
Python
# 工单基础结构
class Issue:
title: str # 工单标题
description: str # 工单描述
team_id: str # 所属团队ID
assignee_id: str # 负责人ID
# 创建工单工具结构体
class CreateIssue:
intent: "create_issue"
issue: Issue
# 检索工单工具结构体
class SearchIssues:
intent: "search_issues"
query: str # 检索关键词
what_youre_looking_for: str # 检索目标说明
通用执行范式
整套流程逻辑十分简洁:
大模型输出标准化结构化 JSON
后端固定逻辑代码匹配并执行对应操作(例如调用第三方开放接口)
捕获执行结果,回填至上下文窗口供下一轮推理
这套设计实现了模型决策逻辑与应用执行逻辑的解耦:
由大模型判断「该做什么」,由业务代码掌控「具体怎么做」。
即便大模型输出了某工具调用指令,你也不必每次都机械地执行对应固定函数,可自由定制执行逻辑。
代码匹配示例(承接前文分支判断逻辑)
代码块
Python
if nextStep.intent == 'create_payment_link':
# 调用Stripe接口生成付款链接
stripe.paymentlinks.create(nextStep.parameters)
return
elif nextStep.intent == 'wait_for_a_while':
# 自定义延时、等待类逻辑
补充注释
业界有大量文章对比「原生提示词」「工具调用」「JSON 输出模式」三者的优劣与性能取舍,相关参考资料后续会附上,本文不展开细说。
相关拓展阅读素材:
Prompting vs JSON Mode vs Function Calling vs Constrained Generation vs SAP
When should I use function calling, structured outputs, or JSON mode?
OpenAI JSON vs Function Calling
核心拓展观点
所谓“下一步操作”不一定只是单纯执行函数并返回结果。
一旦你建立认知:工具调用只是模型输出一段描述执行动作的 JSON,就能获得极高的开发灵活度。
结合第 8 条「自主掌控业务控制流」理念,可搭建高度自定义的智能体执行链路。