Agent学习记录三:完成 Agent Loop

一、最基础的 Agent Loop。

修改代码

python 复制代码
from openai import OpenAI
import json

client = OpenAI()
def calculator(a, b):
    return a * b

tools = [
    {
        "type": "function",
        "name": "calculator",
        "description": "计算两个数字的乘积",
        "parameters": {
            "type": "object",
            "properties": {
                "a": {
                    "type": "number",
                    "description": "第一个数字"
                },
                "b": {
                    "type": "number",
                    "description": "第二个数字"
                }
            },
            "required": ["a", "b"],
            "additionalProperties": False
        }
    }
]

response = client.responses.create(
    model="gpt-5.6-sol",
    input="请调用 calculator 工具,计算 123 × 456",
    tools=tools,
    tool_choice="required"
)

# 找到 LLM 发出的工具调用
for item in response.output:

    if item.type == "function_call":

        print("========== Tool Call ==========")
        print("工具名称:", item.name)
        print("参数:", item.arguments)
        print("Call ID:", item.call_id)

        # JSON字符串 → Python字典
        arguments = json.loads(item.arguments)

        # 真正执行Python函数
        result = calculator(
            arguments["a"],
            arguments["b"]
        )

        print("========== Tool Result ==========")
        print(result)

         # 第二次请求:把工具结果交给 LLM
        response2 = client.responses.create(
            model="gpt-5.6-sol",
            input=[
                *response.output,
                {
                    "type": "function_call_output",
                    "call_id": item.call_id,
                    "output": str(result)
                }
            ],
            tools=tools
        )

        print("========== Final Answer ==========")
        print(response2.output_text)

告诉 LLM 这是工具执行完之后返回给你的结果。:

"type": "function_call_output"

这个结果对应你刚才发出的那一次 calculator 调用

"call_id": item.call_id

【*response.output】把第一次 LLM 的输出上下文带过去。让LLM知道刚才我让你调用了 calculator,现在这是那个调用的结果。

运行输出:

已经亲手完成了一个最小 Agent Loop!!

二、完整过程

┌──────────────┐

│ LLM │

└──────┬───────┘

│

Function Call

│

↓

┌──────────────┐

│ Python │

└──────┬───────┘

│

calculator(123,456)

│

↓

56088

│

Tool Output

│

↓

┌──────────────┐

│ LLM │

└──────┬───────┘

│

↓

"123 × 456 = 56,088"

【注意】把这个过程彻底搞懂,而不是继续加代码。尤其是 tools、function_call、function_call_output、call_id、两次 responses.create() 这几个东西弄明白!

相关推荐
2601_967987372 分钟前
python判断变量名不要调用任何函数实现
python·函数·语法·判断·变量名
卷无止境1 小时前
SALib敏感性分析的python库学习笔记
后端·python
duansamve2 小时前
Python3+Flask+PostgreSQL18+Vue3项目生产环境用docker如何部署?
python·docker·flask
特立独行的猫A2 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python
特立独行的猫A3 小时前
cj-tauri vs Rust/Tauri 同款播放器实测:编译 21 秒 vs 11 分钟,磁盘 12 MB vs 1.2 GB
java·后端·python
泯泷3 小时前
同样是多 Agent,为什么有的稳,有的却天天翻车?
人工智能·llm·agent
阿里云云原生3 小时前
关于 DeepSeek 的 SuperAgent,以及我们的实践
云原生·agent
duansamve3 小时前
详解Flask中Session和Cookie
python·flask
威哥爱编程4 小时前
模拟面试智能体开发实战 04:面试聊到哪算哪?用状态机把整场面试编排起来
python·agent·harmonyos
威哥爱编程4 小时前
模拟面试智能体开发实战 03:AI 面试官太客气?人设 Prompt 让它像个真考官
python·agent·harmonyos