OpenAI 兼容
Responses
用 OpenAI Responses 格式调用 NoviaHub 上的模型,以及 Responses Compact 和 /v1/alpha/search 两个相关接口。
与 OpenAI 的 Create a model response 接口兼容。Codex 等工具使用的就是这个接口。
POST https://noviahub.com/v1/responses| 请求头 | 必填 | 说明 |
|---|---|---|
Authorization |
是 | Bearer <你的 API 密钥> |
Content-Type |
是 | application/json |
下表列出 NoviaHub 能识别并转发的参数。参数最终是否生效,取决于模型本身是否支持。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | 是 | 模型 ID,例如 gpt-6-sol。 |
input |
string / array | 否 | 输入内容:一段文字,或按 OpenAI 规范组织的消息/内容数组。 |
instructions |
string | 否 | 系统级指令。 |
max_output_tokens |
integer | 否 | 最多生成多少 token。 |
temperature |
number | 否 | 采样温度。 |
top_p |
number | 否 | 核采样。 |
stream |
boolean | 否 | true 时以流式(SSE)返回。 |
stream_options |
object | 否 | 流式选项。 |
tools |
array | 否 | 可用工具。 |
tool_choice |
string / object | 否 | 工具选择方式。 |
parallel_tool_calls |
boolean | 否 | 是否允许一次调用多个工具。 |
max_tool_calls |
integer | 否 | 最多调用多少次工具。 |
reasoning |
object | 否 | 思考设置,如 {"effort": "medium", "summary": "auto"}。 |
text |
object | 否 | 文本输出设置(格式等)。 |
previous_response_id |
string | 否 | 接着上一次回复继续对话。 |
include |
array | 否 | 需要额外返回的内容。 |
store |
boolean | 否 | 是否让上游保存本次回复。 |
truncation |
string | 否 | 上下文过长时的截断策略。 |
prompt_cache_key |
string | 否 | 提示缓存的键。 |
top_logprobs |
integer | 否 | 返回候选 token 的概率数量。 |
metadata、user |
— | 否 | 附加信息和用户标识,原样转发。 |
除上表外,NoviaHub 还能识别 conversation、context_management、prompt、prompt_cache_options、prompt_cache_retention、frequency_penalty、presence_penalty、moderation、client_metadata,以及 enable_thinking、thinking_budget、chat_template_kwargs、top_k、min_p、repetition_penalty、stop 等扩展字段。
curl https://noviahub.com/v1/responses \ -H "Authorization: Bearer $NOVIAHUB_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-6-sol", "input": "用一句话解释什么是 API。" }'import os
from openai import OpenAI
client = OpenAI( base_url="https://noviahub.com/v1", api_key=os.environ["NOVIAHUB_API_KEY"],)
response = client.responses.create( model="gpt-6-sol", input="用一句话解释什么是 API。",)
print(response.output_text)import OpenAI from 'openai'
const client = new OpenAI({ baseURL: 'https://noviahub.com/v1', apiKey: process.env.NOVIAHUB_API_KEY,})
const response = await client.responses.create({ model: 'gpt-6-sol', input: '用一句话解释什么是 API。',})
console.log(response.output_text)| 字段 | 说明 |
|---|---|
id |
本次回复的 ID。 |
object |
固定为 response。 |
created_at |
创建时间(Unix 秒)。 |
status |
状态,正常完成为 completed。 |
model |
模型 ID。 |
output |
输出项数组。文字回答在 type 为 message 的项里,content[].type 为 output_text,文字在 text 字段。 |
usage.input_tokens / output_tokens / total_tokens |
输入、输出、合计 token 数。 |
usage.input_tokens_details.cached_tokens |
命中缓存的输入 token 数。 |
usage.output_tokens_details.reasoning_tokens |
思考部分的 token 数。 |
{ "id": "resp_mock123", "object": "response", "created_at": 1790609867, "status": "completed", "model": "gpt-6-sol", "output": [ { "type": "message", "id": "msg_mock123", "status": "completed", "role": "assistant", "content": [{ "type": "output_text", "text": "Hello from the mock upstream.", "annotations": [] }] } ], "usage": { "input_tokens": 12, "output_tokens": 7, "total_tokens": 19, "input_tokens_details": { "cached_tokens": 0 }, "output_tokens_details": { "reasoning_tokens": 0 } }}加 "stream": true 后,响应以 SSE 事件返回。每个事件有 event: 和 data: 两行,常见事件有:
response.created:开始生成。response.output_text.delta:新生成的一段文字,在delta字段。response.completed:生成结束,response字段里是完整结果,包括usage。
event: response.createddata: {"type":"response.created","sequence_number":0,"response":{"id":"resp_mock123","object":"response","created_at":1790609867,"status":"in_progress","model":"gpt-6-sol","output":[],"usage":null}}
event: response.output_text.deltadata: {"type":"response.output_text.delta","sequence_number":1,"item_id":"msg_mock123","output_index":0,"content_index":0,"delta":"Hello"}
event: response.output_text.deltadata: {"type":"response.output_text.delta","sequence_number":2,"item_id":"msg_mock123","output_index":0,"content_index":0,"delta":" from the mock upstream."}
event: response.completeddata: {"type":"response.completed","sequence_number":3,"response":{"id":"resp_mock123","object":"response","created_at":1790609867,"status":"completed","model":"gpt-6-sol","output":[{"type":"message","id":"msg_mock123","status":"completed","role":"assistant","content":[{"type":"output_text","text":"Hello from the mock upstream.","annotations":[]}]}],"usage":{"input_tokens":12,"output_tokens":7,"total_tokens":19,"input_tokens_details":{"cached_tokens":0},"output_tokens_details":{"reasoning_tokens":0}}}}Responses Compact
Section titled “Responses Compact”POST https://noviahub.com/v1/responses/compact对应 OpenAI 的对话压缩(compaction)接口,用来把很长的对话历史压缩成更短的内容,以便继续对话。只对端点标签里有 openai-response-compact 的模型可用。
- 必填
model。会转发给上游的字段只有:model、input、instructions、previous_response_id、parallel_tool_calls、prompt_cache_key、prompt_cache_options、prompt_cache_retention。 tools、reasoning、text虽然能识别,但不会转发;service_tier默认会被移除。- 不支持流式,总是一次性返回。
- 响应体由上游原样返回,结构为
id、object、created_at、output、usage(以及出错时的error)。 - 按 token 计费,与普通对话相同。
/v1/alpha/search
Section titled “/v1/alpha/search”POST https://noviahub.com/v1/alpha/search这是 Codex 命令行工具使用的独立网页搜索接口,普通开发一般用不到。只对端点标签里有 openai-alpha-search 的模型可用。
- 只有
model必填。请求体会原样转发给上游,响应也原样返回。 - 不支持流式。
- 计费方式特殊:上游不返回 token 用量,NoviaHub 按「一次网页搜索工具调用」收费,token 部分为 0。单价由平台设置。
- 对不支持的模型调用会报错,例如
channel does not support /v1/alpha/search。
| HTTP 状态码 | 原因 |
|---|---|
| 400 | 缺少 model,或请求体不是合法 JSON。 |
| 401 | 密钥无效、已禁用、已过期或额度已用完。 |
| 403 | 密钥不允许使用这个模型、IP 不在白名单,或账户余额不足。 |
| 503 | 模型 ID 写错,或该模型当前没有可用线路。 |
完整说明见错误码与排查。