真实验证接入 · OpenAI Python 与 Agents SDK

使用自定义 Base URL 调用 OpenAI Responses API

把官方 Python 客户端指向 Primordial AI,获取当前模型 ID,完成最小 Responses 请求,并把未经验证的高级功能排除在生产假设之外。

验证于 2026-08-24POST /v1/responsesPython SDK 已解析非流式基线

直接答案

创建官方 OpenAI Python 客户端时设置 base_url="https://www.primoraihub.com/v1",然后调用 client.responses.create(...)。API Key 保存在服务端环境变量中,模型 ID 必须来自使用自己 Key 发出的 GET /v1/models 实时响应。

SDK Base URLhttps://www.primoraihub.com/v1
请求资源POST https://www.primoraihub.com/v1/responses
最小输入model + input + 可选 max_output_tokens
模型来源GET https://www.primoraihub.com/v1/models
鉴权方式服务端 Primordial AI API Key 发送 Bearer Token

OpenAI 官方 Python 库记录了 client.responses.create。下方端点行为和验证结果属于 Primordial AI,不代表 OpenAI 对本服务的背书。

Python:先发现模型,再创建 Response

pip install --upgrade openai

export PRIMORDIAL_API_KEY="YOUR_PRIMORDIAL_API_KEY"
export PRIMORDIAL_MODEL_ID="MODEL_ID_FROM_V1_MODELS"
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["PRIMORDIAL_API_KEY"],
    base_url="https://www.primoraihub.com/v1",
)

model_id = os.environ["PRIMORDIAL_MODEL_ID"]
available_ids = {item.id for item in client.models.list().data}
if model_id not in available_ids:
    raise RuntimeError(f"当前模型不可用:{model_id}")

response = client.responses.create(
    model=model_id,
    input="请只回复一句简短内容。",
    max_output_tokens=64,
)

print(response.output_text)

不要替换成从其他提供商复制的模型名。账户权限和模型路由可能不同,实时模型列表才是当前可用性检查。

把 HTTP 路由与 SDK 解析分开检查

SDK 报解析或传输错误时,先用 cURL 重现最小请求,从而区分鉴权、接口行为和客户端解析问题。

curl https://www.primoraihub.com/v1/models \
  -H "Authorization: Bearer $PRIMORDIAL_API_KEY"

curl https://www.primoraihub.com/v1/responses \
  -H "Authorization: Bearer $PRIMORDIAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID_FROM_V1_MODELS",
    "input": "请只回复 ok。",
    "max_output_tokens": 16
  }'

OpenAI Agents SDK:设置一个自定义客户端

Agents SDK 官方配置指南允许传入自定义 AsyncOpenAI 客户端。该 SDK 默认使用 Responses 路径,但其模型提供商指南也明确提醒兼容提供商的 API 和功能可能不同。

import os
from openai import AsyncOpenAI
from agents import (
    Agent,
    Runner,
    set_default_openai_client,
    set_tracing_disabled,
)

client = AsyncOpenAI(
    api_key=os.environ["PRIMORDIAL_API_KEY"],
    base_url="https://www.primoraihub.com/v1",
)

set_default_openai_client(client, use_for_tracing=False)
set_tracing_disabled(True)

agent = Agent(
    name="Assistant",
    model=os.environ["PRIMORDIAL_MODEL_ID"],
)

result = await Runner.run(agent, "请只回复一句简短内容。")
print(result.final_output)

本页没有独立验证 Agents SDK 运行。示例遵循官方自定义客户端配置,但 tracing、工具、handoff、session 与提供商语义都需要分别测试。

实际验证了什么

2026 年 8 月 24 日,生产测试使用官方 OpenAI Python 包、自定义 /v1 Base URL、一个当前配置模型、字符串 input 和 max_output_tokens=16。客户端返回已解析的 Response,包含非空 ID、response object 类型和非空 output_text

该测试覆盖

  • 使用有效 Primordial AI Key 的 Bearer 鉴权。
  • 一次最小、非流式 POST /v1/responses 请求。
  • 官方 Python 客户端解析为 Response 类型。

该测试没有覆盖

  • 流式响应或 Responses WebSocket 传输。
  • 内置工具、自定义函数调用、结构化输出、图片或文件输入。
  • previous_response_id、conversation 状态、background 模式或响应生命周期方法。
  • 每个账户当前可见的全部模型。

最小请求成功不是全功能兼容承诺。可选功能必须逐项增加,并为应用实际发布的请求结构保留回归测试。

错误排查顺序

  1. 401:先用 GET /v1/models 验证 Key,并检查是否暴露、过期、停用或带有多余空格。
  2. 404:确认 Base URL 包含 /v1,应用调用的是 Responses 而不是某个提供商专用路径。
  3. 模型错误:刷新实时模型列表,并确认选定模型支持 Responses 路由。
  4. 解析错误:运行原始 cURL 请求,在不记录密钥的情况下保存 HTTP 状态和请求 ID,并比较最小响应结构。
  5. 高级功能错误:移除工具、流式、状态和可选参数;基线成功后再逐项恢复。

状态码分支和安全日志方法见API 错误排查指南

常见问题

OpenAI 客户端应该使用什么 Base URL?

使用 https://www.primoraihub.com/v1,客户端会继续拼接 /responses 资源路径。

Responses 与 Chat Completions 有什么区别?

Responses 使用 input 风格请求并返回 Response 对象;Chat Completions 使用 messages 数组并返回 choices。除非需要 Responses 特有能力,否则保留应用当前依赖的接口形态。

OpenAI Agents SDK 能否使用这个端点?

它接受自定义 AsyncOpenAI 客户端。应把该客户端用于模型请求,并关闭或单独配置 tracing,避免把第三方提供商 Key 发送到 OpenAI tracing。

该端点是否用 Python SDK 测试过?

是,但只验证了 2026 年 8 月 24 日的一次最小非流式请求;该测试不覆盖全部模型或 Responses 可选功能。

应该如何选择模型 ID?

使用自己的 Key 调用 GET /v1/models,并选择当前为该账户返回的 ID。