AI 智能体怎么调用工具?用 Responses API 完成函数请求与结果回填

用 Python 接收 Responses API 的 function_call,校验参数并以 call_id 回填函数结果。

智能体调用工具不是模型直接执行 Python 函数。模型先返回函数名与参数;你的程序验证参数、执行允许的函数,再用对应 call_id 回填结果,模型才能据此回答。下面用一个只读、虚构的地区制度查询演示完整一轮。

准备工具与测试输入

安装当前版 openai Python 包,设置 OPENAI_API_KEY,把下面代码保存为 tool_demo.py。示例字典只是测试数据,不连接真实业务系统。OpenAI 函数调用官方指南给出了 Responses API 的函数定义、function_call 和 function_call_output 协议。

AI 智能体怎么调用工具?用 Responses API 完成函数请求与结果回填

import json
from openai import OpenAI

client = OpenAI()
policies = {"华东": "经理住宿上限每晚 600 元", "华南": "经理住宿上限每晚 550 元"}
tools = [{
    "type": "function", "name": "lookup_policy",
    "description": "只读查询演示制度中的地区住宿标准",
    "parameters": {
        "type": "object",
        "properties": {"region": {"type": "string", "enum": ["华东", "华南"]}},
        "required": ["region"], "additionalProperties": False,
    },
    "strict": True,
}]

messages = [{"role": "user", "content": "华东经理住宿上限是多少?请先查询制度。"}]
first = client.responses.create(
    model="gpt-6-astra", input=messages, tools=tools,
    tool_choice={"type": "function", "name": "lookup_policy"},
)
messages += first.output
calls = [item for item in first.output if item.type == "function_call"]
if len(calls) != 1 or calls[0].name != "lookup_policy":
    raise RuntimeError("未获得预期的单次工具请求")
call = calls[0]
args = json.loads(call.arguments)
if set(args) != {"region"} or args["region"] not in policies:
    raise ValueError("工具参数不在允许范围内")
result = policies[args["region"]]
messages.append({"type": "function_call_output", "call_id": call.call_id,
                 "output": result})
final = client.responses.create(
    model="gpt-6-astra", input=messages, tools=tools, tool_choice="none"
)
print("工具返回:", result)
print("模型回答:", final.output_text)

检查请求、回填和最终回答

运行 python tool_demo.py。预期本地函数返回“华东经理住宿上限每晚 600 元”,最终回答应与之相符。调试时先打印 first.output,确认其中的 function_call 是 lookup_policy;再确认回填项的 call_id 与请求一致。若只看到模型直接作答,检查第一轮的 tool_choice;若参数不在白名单,程序应停止,而不是让模型自行决定读取其他地区。代码把第一轮全部输出带到下一轮,符合官方对推理项和函数结果续传的要求。

正式接业务 API 时,还要由服务端按登录身份做权限校验、限制可查询资源并记录调用结果;JSON Schema 不能代替授权。模型可能产生多个工具请求,本例故意要求恰好一次,多轮工具调用需要有上限和错误处理。本文按官方接口编写,未使用读者 API Key 实测;模型是否可用及实际费用取决于账号和当时设置。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/29981.html

赞 (0)
AI小管家的头像AI小管家
Dify 知识库分段长度怎么调?用固定问题检查切片过短与过长
上一篇 1天前
智能体运行怎么监控?用 LangSmith 追踪一次 LangGraph 调用
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部