OpenAI工具调用
这篇笔记围绕 OpenAI Chat Completions 的工具调用机制,说明模型如何在收到 messages 与 tools 定义后,通过 tool_calls 返回要调用的函数名和参数,再由本地代码执行函数并把结果回填给模型生成最终回答。示例从“北京天气”查询入手,给出 get_weather 的工具 schema 写法,包括 function name、description、parameters、required 等字段,并展示 tool_choice="auto" 下模型自行判断是否调用工具的流程。实现部分使用 AsyncOpenAI 封装流式服务,先非流式请求检测 tool_calls,解析 JSON 参数、执行本地函数,再按 assistant 的 tool_calls 记录和 tool 角色消息补齐上下文,最后二次 stream 请求输出自然语言结果,强调 tool_call_id 必须与原调用保持对应。后半部分把单个函数判断抽象为 BaseTool 注册器,通过类变量 registry 管理工具,利用 inspect.signature 自动生成参数 schema,并提供 register、call、acall 等方法支持同步和异步调度。笔记还解释了 @classmethod 的作用,说明类方法适合用于工具注册、访问类变量和无需实例化的统一管理,并与 staticmethod、普通实例方法做了对比。整体适合正在把 OpenAI 工具调用接入 Python 后端、需要理解消息拼接顺序、工具 schema 生成和函数调度封装的开发者阅读。

