
用你的微调本地模型替换 OpenAI Agents SDK 中的 OpenAI
OpenAI Agents SDK 刻意保持模型无关。把 OpenAI 客户端换成在 Ollama 上运行的 Ertas 训练模型,你保留开发体验同时干掉按 token 成本。一份直接替换教程。
更新于 2026-05-10——反映 OpenAI Agents SDK v0.17.0(2026 年 5 月 7 日),它把默认
RealtimeAgent模型升级为gpt-realtime-2。在生产中固定到特定 SDK 版本,而非追踪移动的默认值——下方的替换模式无论如何都不变。
OpenAI Agents SDK 是 2026 年发布的最干净的智能体框架之一。它是 Swarm 的生产级继任者,具备一流的工具调用、智能体之间的交接、结构化输出以及为整个生态设定标准的追踪系统。尽管盒子上的名字如此,它并不只服务于 OpenAI。SDK 接受任何兼容 OpenAI 的 HTTP 端点作为支撑模型,这意味着开发体验在你换出模型时与你同行。
这个细节是本指南的全部要点。你可以基于该 SDK 构建智能体,先针对 OpenAI 托管模型做原型,然后让同一份代码指向在 Ollama 上本地运行的微调 7B 模型。智能体代码不变。追踪不变。账单变了——大致一个数量级或更多,取决于流量。
这为何重要
智能体应用消耗 token 的方式与聊天机器人不同。一次典型聊天轮次是一两次模型调用。一次典型智能体任务是 5 到 30 次模型调用,因为智能体思考、挑工具、读工具输出、决定下一步,如此等等。token 账单随循环 扩展,而非随用户可见轮次扩展。
由此产生的经济形态不寻常。运行在基线云 API 上、月活 1K 的智能体产品通常每月推理只付约 120 美元。创始人看到这个数字会假设单位经济模型没问题。实际上并非如此。在 40K MAU 时,同一产品每月支付 3,000 美元以上,考虑到重试、更长上下文与复杂流程,通常更接近 6,000 美元。成本线随用户大致线性上升,而每用户营收增长远不及它。
微调本地模型修正了曲线。成本是固定的:后端路径上一台 GPU 实例,设备端路径上一次性模型下载。再增加 10 万用户,账单仍然一样。
设置:一个客户支持分诊智能体
我们将构建一个分诊智能体,它对入站支持请求分类、查询客户、必要时创建工单,并对高严重度请求升级到人工。它有三个工具与清晰范围,这使其成为微调的良好候选。
新建一个 Python 项目并安装 OpenAI Agents SDK。
pip install openai-agents
下面是该智能体。它有意保持简短——大约 25 行有意义的代码——因为 SDK 设计良好。
from agents import Agent, Runner, function_tool
from pydantic import BaseModel
class TriageDecision(BaseModel):
category: str
severity: int
ticket_id: str | None = None
escalated: bool = False
@function_tool
def lookup_customer(email: str) -> dict:
"""Look up customer details by email address."""
return crm.get_customer(email)
@function_tool
def create_ticket(customer_id: str, summary: str, severity: int) -> str:
"""Create a support ticket. Returns the ticket ID."""
return tickets.create(customer_id, summary, severity)
@function_tool
def escalate(customer_id: str, reason: str) -> bool:
"""Escalate to a human agent for high-severity issues."""
return on_call.page(customer_id, reason)
triage_agent = Agent(
name="Support Triage",
instructions="Triage inbound support requests. Look up the customer, "
"create a ticket, and escalate severity 4 or 5 issues.",
tools=[lookup_customer, create_ticket, escalate],
output_type=TriageDecision,
)
result = Runner.run_sync(
triage_agent,
"alice@example.com says her production database is unreachable and customers are seeing errors."
)
print(result.final_output)
默认情况下,这会面向 OpenAI 托管模型运行,使用你在 OPENAI_API_KEY 与 SDK 默认设置中配置的模型名。你会看到智能体调用 lookup_customer,然后 create_ticket,然后因为严重度高而 escalate,并发出一个经过验证的 TriageDecision。流程花费几秒钟,产出可路由进你的支持系统的结构化对象。
到目前为止,这是普通的 OpenAI Agents SDK 用法。现在我们换模型。
替换:把 SDK 指向你的本地模型
OpenAI Agents SDK 通过 OpenAIChatCompletionsModel 与 OpenAIResponsesModel 暴露 AsyncOpenAI 客户端。两者都接受 base_url。这就是整个接缝。把客户端指向任何兼容 OpenAI 的端点,SDK 就会以与托管 API 相同的方式使用它进行补全、工具调用与结构化输出。
在本地开发中,Ollama 是阻力最小的路径。它开箱即在 http://localhost:11434/v1 暴露兼容 OpenAI 的端点。
下面是替换。这是把智能体从 OpenAI 托管模型迁移到微调本地模型所需的唯一变化。
from openai import AsyncOpenAI
from agents import set_default_openai_client, set_default_openai_api
client = AsyncOpenAI(base_url="http://localhost:11434/v1", api_key="not-needed")
set_default_openai_client(client)
set_default_openai_api("chat_completions")
triage_agent = Agent(
name="Support Triage",
model="ertas-triage-7b",
instructions="...",
tools=[lookup_customer, create_ticket, escalate],
output_type=TriageDecision,
)
五行。Runner.run_sync 调用、工具定义、结构化输出 schema——都没变。智能体现在完全对你笔记本上的模型或你自己的 GPU 实例运行。
为何在这里微调至关重要
如果你只关心成本,完成替换后可以停下来。但你不应该,因为通用开源权重 7B 模型对此类智能体来说还不够好。数字通常以一种特定方式令人失望:模型大多数时候挑对工具,大多数时候填对参数名,大多数时候用对参数值,而"大多数时候"在 5 次调用循环里相乘下来就是 60% 的端到端成功率。
来自公开 BFCL v4 子分数与 Studio 在留出评估集上报告的典型微调后结果,分诊式智能体的代表性区间如下:
- 通用 Llama 3.1 8B:在广泛工具集上,工具名称与参数名称准确率在 80–85 区间,参数值准确率略低。这些错误率在 5 次调用循环上复合后,端到端任务完成率落在 70 多。
- 通用 Qwen3-7B / Qwen3-8B:在广泛工具集上,三个子指标都在 80–85 区间。端到端完成率在高 70。
- 在 400–600 个代表性样本上微调的 Ertas 7B–8B:对于已训练的工具表面,各子指标通常清过 95%。schema 稳定后端到端完成率在 95 左右。
你自己的数字会落在这些区间内的某处,取决于工具数量、schema 复杂度与数据集质量。微调的差距是好玩原型与生产系统之间的差距。95% 的完成率与前沿托管模型在此类有界智能体任务上的表现处于同一区间。79% 的完成率不是。
让你抵达那里的训练数据形态很直接。你需要约 500 个样本,涵盖智能体在生产中实际使用的工具组合:单工具调用(简单情形)、多工具序列(现实情形)、验证边界用例(模型需要识别信息不完整并反问)以及拒绝(模型需要识别超出范围的请求)。Studio 的 Data Craft 模块从结构化提示模板批量生成大部分内容——你手写 30 到 50 个种子样本,其余来自一次有引导的生成,在样本进入数据集前根据你的工具 schema 验证每一个。
500 个样本上对 7B 底座的 QLoRA 微调在标准 GPU 等级上不到一小时完成。Studio 的评估套件根据留出验证集报告上述三个准确率指标,并标记模型仍然薄弱的具体工具/参数组合,以便你针对缺口扩充数据集并运行增量训练。