GPT 与 Claude Function Calling 实战:用 59API 接入统一工具链
为什么要让模型调用工具
大语言模型擅长理解意图和组织语言,却不能可靠地获得实时天气、查询订单或写入业务系统。Function Calling(函数调用)让模型先返回结构化工具请求,再由你的服务端执行真实函数,并把结果交回模型生成最终答案。这样可以把自然语言交互接入可控的业务能力,同时避免把数据库密钥、内部接口和执行权限直接暴露给模型。
准备统一的 GPT 与 Claude 接入
59API 提供兼容 OpenAI SDK 的中转接口,基础地址是 https://api.59api.com。它可按量付费接入 GPT,以及 Claude Opus、Sonnet、Haiku、Fable 等官方质量模型,适合需要根据成本、速度和复杂度切换模型的 Agent 服务。安装 Python SDK 后,将密钥放进环境变量:pip install openai,然后创建客户端:client = OpenAI(api_key=os.environ["API_KEY"], base_url="https://api.59api.com/v1")。现有 OpenAI SDK 项目通常只需替换 base_url 和模型名;Claude Code、Codex 等兼容客户端也可复用这一统一入口。
定义一个可验证的天气工具
工具描述决定模型如何构造参数,因此名称应是动词短语,参数要尽量窄。下面的定义要求 city,并限制 unit 的可选值:tools = [{"type":"function","function":{"name":"get_weather","description":"查询指定城市当前天气","parameters":{"type":"object","properties":{"city":{"type":"string"},"unit":{"type":"string","enum":["celsius","fahrenheit"]}},"required":["city"],"additionalProperties":false}}}]。description 应说明工具能做什么,而不是承诺模型无法验证的结果;例如不要写“永远准确”。
执行 GPT 返回的工具请求
先发起请求:response = client.chat.completions.create(model="gpt-4o-mini", messages=[{"role":"user","content":"上海现在天气怎样?"}], tools=tools)。如果 response.choices[0].message.tool_calls 不为空,不要直接相信 arguments。使用 json.loads 解析后,检查 city 是否为非空字符串、是否符合业务地区范围,再调用你自己的 get_weather(city, unit) 函数。真实项目中,该函数应请求受服务端保护的天气供应商,而不是由模型编造数据。
拿到结果后,把原 assistant message 加回上下文,并逐个追加 tool 消息:{"role":"tool","tool_call_id": call.id, "content": json.dumps({"temperature":18,"condition":"多云"}, ensure_ascii=False)}。随后用同一模型再次调用 chat.completions.create,模型会将结构化结果转换成面向用户的回答。一个回复可能包含多个 tool_calls,必须全部执行或明确返回失败信息,不能只处理第一个。
Claude 接入时如何保持同一业务层
Claude 原生 Messages API 使用 tools、tool_use 和 tool_result 事件,字段名称与 OpenAI 格式不同,但流程完全一致:模型提出调用、应用校验并执行、应用提交结果、模型组织回复。若团队已使用 OpenAI SDK,经 59API 接入可将工具定义和调度循环集中在一套代码中,再通过 model 参数选择 Claude Sonnet 处理复杂推理、Haiku 处理高频轻任务,或按业务需要使用 GPT。这样能减少多供应商适配代码,并通过低价按量计费控制试验和生产成本。
上线前必须补齐的控制
- 为每个工具设置超时、重试上限和幂等键,尤其是支付、发券、删除等写操作。
- 工具参数采用 JSON Schema 和服务端二次校验;模型输出永远不是授权凭据。
- 把只读查询与写操作拆分,写操作要求用户确认,并记录 tool_call_id、参数摘要和执行结果。
- 限制每轮最大工具调用次数与上下文长度,避免循环调用造成费用和延迟失控。
先用这个天气示例跑通日志、异常和多轮调用,再替换为库存、工单或知识库工具,会比直接构建全自动 Agent 更可靠。需要以较低成本测试 GPT 和 Claude 工具调用时,可以注册 59API,并结合其推荐返利机制降低长期开发支出。