/v1/chat/completions对话、工具调用、JSON 模式与流式,用 OpenAI SDK 直接打这条。
先复制一条现成的请求跑通,再按手头的任务选路径。
export INFERWAY_API_KEY="inferway_live_..." curl "https://api.inferway.ai/v1/chat/completions" \ -H "Authorization: Bearer $INFERWAY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "inferway/qwen3.8-27b", "stream": true, "messages": [{"role": "user", "content": "Say hello in one short sentence."}] }'
curl "https://api.inferway.ai/v1/chat/completions" \
-H "Authorization: Bearer $INFERWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "inferway/qwen3.8-27b",
"stream": true,
"messages": [{"role": "user", "content": "Say hello in one short sentence."}]
}'非流式请求经 CDN 转发,首字节大约 100 秒就会超时,所以长输出必须设 stream=true。短补全用非流式没问题。
https://api.inferway.ai/v1$INFERWAY_API_KEYinferway/qwen3.8-27bdata: {
"id": "chatcmpl_...",
"object": "chat.completion.chunk",
"model": "inferway/qwen3.8-27b",
"choices": [
{
"index": 0,
"delta": { "role": "assistant", "content": "Hello" },
"finish_reason": null
}
]
}
data: [DONE]第一次失败大多是配置问题,改应用代码之前先核对这几项。
| 现象 | 可能原因 | 快速修复 |
|---|---|---|
| 401 | 密钥缺失、已吊销、复制有误,或没在当前 shell 里 export。 | 到控制台 → API 密钥里重新复制一份,重试前先执行 echo $INFERWAY_API_KEY 确认。 |
| 404 | 客户端指向了错误的 base URL,或把 /v1 拼了两次。 | base URL 用 https://api.inferway.ai/v1,请求路径 /chat/completions 只写一次。 |
| 429 | 触发了账户额度、匿名试玩限额或单次请求大小限制。 | 查看错误中的 dimension。单次大小超限请缩短输入或调低 max_tokens;其他限额按响应中的 Retry-After 等待。 |
| 504 / 超时 | 非流式的长输出撞上了 CDN 约 100 秒的首字节超时。 | 请求里加 stream=true。 |
# For OpenAI-compatible clients that read OpenAI env vars export OPENAI_API_KEY="$INFERWAY_API_KEY" export OPENAI_BASE_URL="https://api.inferway.ai/v1" export INFERWAY_MODEL="inferway/qwen3.8-27b"
当前服务的模型默认不输出推理(thinking)token,需在请求中显式开启。
推理 token 按输出价计入输出 token,并出现在 usage.completion_tokens_details.reasoning_tokens 里。
可在单次请求中用 chat_template_kwargs.enable_thinking=true(OpenAI SDK 经 extra_body 传入)或 reasoning: {"enabled": true} 开启。
官方 OpenAI Python SDK 可以对接任何 OpenAI 兼容的 base URL。换掉 base URL,密钥照旧。这种非流式写法适合短补全;长输出必须走流式。
import os from openai import OpenAI client = OpenAI( base_url="https://api.inferway.ai/v1", api_key=os.environ["INFERWAY_API_KEY"], ) resp = client.chat.completions.create( model="inferway/qwen3.8-27b", messages=[{"role": "user", "content": "Say hello in one short sentence."}], max_tokens=64, ) print(resp.choices[0].message.content)
选择工具,查看接入方式与功能限制。配置会跟随页面顶部选择的模型。
第一条 cURL 请求不需要任何依赖,准备把集成写进应用时再装 SDK。
# Python pip install openai # TypeScript / Node.js npm install openai
在 Pi 中使用 Inferway 聊天和处理代码任务。接入前,请确认账户已开通模型访问。
上下文 262,144 最大输出 131,072
将以下服务商合并到 ~/.pi/agent/models.json;若文件已存在,保留原有服务商。Pi 的 openai-completions 适配器使用 Chat Completions,并不是旧的 /completions 接口。
先在启动客户端的终端中设置 INFERWAY_API_KEY。不要把密钥直接写进配置。
{
"providers": {
"inferway": {
"baseUrl": "https://api.inferway.ai/v1",
"api": "openai-completions",
"apiKey": "$INFERWAY_API_KEY",
"models": [
{
"id": "inferway/qwen3.8-27b",
"name": "Inferway",
"reasoning": false,
"input": [
"text"
],
"contextWindow": 262144,
"maxTokens": 32768,
"compat": {
"supportsDeveloperRole": false,
"supportsReasoningEffort": false,
"maxTokensField": "max_tokens"
}
}
]
}
}
}pi --provider inferway --model 'inferway/qwen3.8-27b'先按官方说明安装客户端。本文的 Pi 指 pi-mono coding agent;Hermes 指 Nous Research 的 Hermes Agent。
Inferway 账户激活后,从控制台 → API keys 获取 Key。建议为该客户端使用独立 Key,并确认允许的模型和消费上限。live、test 前缀共用推理与计费流程;test 是环境标签,不代表免费或模拟推理。
Inferway 地址需要 Inferway Key;OpenRouter Key 用于 OpenRouter,不能直接用于此地址。
将 Key 保存在客户端凭证存储或本机环境中,不要粘贴到提示词、截图或提交到仓库的配置文件。终端示例适用于 macOS / Linux 的 bash、zsh。
下面的交互输入会隐藏 Key,并避免将其写入命令历史。请从同一个终端启动客户端;另外打开的应用可能无法继承该变量。
printf 'Inferway API key: ' IFS= read -r -s INFERWAY_API_KEY printf '\n' export INFERWAY_API_KEY
使用完整模型 ID inferway/qwen3.8-27b。Base URL 只包含一次 /v1,不要在 Base URL 设置中添加 /chat/completions。确认下方响应中包含该模型 ID。
curl --fail-with-body --silent --show-error --max-time 30 \ 'https://api.inferway.ai/v1/models' \ -H "Authorization: Bearer $INFERWAY_API_KEY"
注册免费账户:单次输入预算 131,072 tokens(128K),输出最多 32,768 tokens(32K);60 次/分钟,并发 2。不设每分钟 token 限制。
每日输入 5,000,000、输出 500,000、合计 5,500,000 tokens,UTC 00:00 重置。同一账户的 API Key 共享每个模型的额度。
输入预算包含系统提示词、历史对话和工具内容,按保守估算校验,实际可提交长度随内容而异。超过 4,096 tokens 的输出请使用流式请求。
Pi 使用流式响应,免费账户的 maxTokens 请保持在 32,768 以内。非交互任务请将标准输入重定向到 /dev/null。若提示单次请求过大,请压缩对话;等待不会改变单次限制。
pi --provider inferway --model 'inferway/qwen3.8-27b' -p 'Review this project and run its tests' </dev/null
认证失败:检查 Key 是否存在、有效且获准使用该模型,并从设置变量的终端重新打开客户端。排错时不要输出完整 Key。
地址或模型错误:检查是否重复添加 /v1,使用公布的完整模型 ID,并确认客户端选择 Chat Completions。请求发往 /responses 或 /completions 时,换 Key 无法解决。
额度或超时:检查钱包余额和 Key 限额,按 Retry-After 等待,并缩短输入或降低输出上限。长输出保持流式传输,排错期间避免 Agent 连续重试。
联系支持时提供客户端版本、模型 ID、请求时间和可用的 request ID;请遮盖凭证和源码。
撤销接入:在控制台吊销此工具的 Key,并移除客户端中的 Inferway 服务商配置。
独立指南MCP 端点已上线。把支持 MCP 的客户端指向下面的服务器地址,用同一把 API Key 鉴权即可;工具走标准协议,零保留规则同样适用。
{
"mcpServers": {
"inferway": {
"url": "https://api.inferway.ai/v1/mcp/sse",
"headers": {
"Authorization": "Bearer $INFERWAY_API_KEY"
}
}
}
}把流量接到 Inferway 之前,先看透明度中心,再看状态页与原始压测报告。
OpenAI 兼容的那条路径保持小而可预期;账户、账单、用量与 agent 操作走另外一组第一方端点。
/v1/chat/completions对话、工具调用、JSON 模式与流式,用 OpenAI SDK 直接打这条。
/v1/keys · /v1/billing · /v1/usage · /v1/requests服务端的密钥、钱包、用量与请求元数据流程走这条。
| 端点 | 方法 | 用途 |
|---|---|---|
| /v1/chat/completions | POST | OpenAI 兼容的对话补全 |
| /v1/models | GET | 列出已发布模型,含能力与价格元数据 |
| /v1/mcp/sse · /v1/mcp/messages | GET · POST | MCP 服务端点(已上线) |
| /v1/keys | GET / POST / DELETE | 管理直连 API 密钥 |
| /v1/billing | GET | 钱包摘要与近期用量 |
| /v1/billing/transactions | GET | 钱包账本流水 |
| /v1/billing/checkout | POST | 创建 Stripe Checkout 充值会话 |
| /v1/usage | GET | 按时间窗口聚合的用量 |
| /v1/requests | GET | 请求元数据历史(不含内容) |
| /health | GET | 网关与后端健康状态 |
| /v1/stats | GET | 状态页公开数据 |
公开支持的端点是 POST /v1/chat/completions 和 GET /v1/models。旧版 POST /v1/completions 不提供(404),请改用 chat completions。POST /v1/messages(Anthropic 格式)在本部署未开启,在另行通知前一律返回 404。
选择模型,查看上下文、输出限制与工具支持。API 示例和工具配置会使用同一个模型。
| 字段 | 当前值 | 怎么用 |
|---|---|---|
| 推荐模型 | inferway/qwen3.8-27b | 对话补全里默认的 model 值。 |
| 上下文窗口 | 262,144 | 模型的上下文窗口;账户输入预算可能更低。 |
| 最大输出 | 131,072 | 模型的输出上限;未设 max_tokens 时默认 32,768,账户输出限额可能更低。 |
| 精度 | NVFP4 | 标称精度就是实际服务精度,负载下不降级。 |
费用与可用区域见 定价。
Authorization: Bearer $INFERWAY_API_KEY
Inferway 返回 OpenAI 兼容的错误对象:{"error": { "type": "...", "message": "...", "code": "..." }}
付费请求在派发前预留 prompt 估价 × 输入价 + max_tokens × 输出价。可用余额耗尽时,符合条件的请求可使用注册免费额度;免费请求不扣钱包。402 表示请求在派发前被拒绝,不产生费用。余额以 4 位小数展示;单价以实时价目表为准。
/v1/chat/completions 与 /v1/agent/chat 可能返回的全部错误码,直接取自网关自己的目录,不是抄写。每一行都带 HTTP 状态、是否可以安全重试,以及 API 实际发出的原文。结账、账单与密钥管理相关的端点会返回它们各自的错误码,不在本表中。
| code | HTTP | 可否重试 | 含义 |
|---|---|---|---|
| authentication_error | 401 | 不可 | Authentication failed. |
| conflict | 409 | 不可 | A conflict occurred with the current state of the resource. |
| free_quota_exhausted | 429 | 可以,先退避 | Free quota exhausted. Please retry later. |
| free_tier_unavailable | 503 | 可以,先退避 | The free tier is temporarily unavailable; please retry shortly. |
| internal_error | 500 | 不可 | 网关内部错误 |
| internal_tool_failure | 500 | 不可 | An internal tool error occurred. |
| invalid_request | 400 | 不可 | 请求格式错误或参数非法 |
| malformed_upstream | 502 | 不可 | Received an invalid response from the upstream service. |
| payment_required | 402 | 不可 | Payment required. Add credit at https://inferway.ai/console/billing |
| rate_limited | 429 | 可以,先退避 | 超出免费使用或并发限额 |
| service_unavailable | 503 | 不可 | Service outage in progress. Live status: https://inferway.ai/status |
| upstream_rejected | 422 | 不可 | The upstream service rejected the request. |
| upstream_unavailable | 503 | 可以,先退避 | The service is temporarily unavailable. |
额度拒绝返回 HTTP 429。查看错误码、window 和 dimension;有 Retry-After 时按其等待。单次请求大小超限需要缩短输入或调低 max_tokens,等待不会改变此限制。
| 对象 | 限额 | 窗口 |
|---|---|---|
| 匿名试玩 | 60 | 每分钟(每 IP) |
| 匿名试玩 | 300 | 每小时 |
| 匿名试玩 | 1,000 | 每天(UTC) |
| 账户有余额后 | 按账户自身限额 | 免费上限不再适用,可在控制台查看 |
注册免费账户:单次输入预算 131,072 tokens(128K),输出最多 32,768 tokens(32K);60 次/分钟,并发 2。不设每分钟 token 限制。
每日输入 5,000,000、输出 500,000、合计 5,500,000 tokens,UTC 00:00 重置。同一账户的 API Key 共享每个模型的额度。
输入预算包含系统提示词、历史对话和工具内容,按保守估算校验,实际可提交长度随内容而异。超过 4,096 tokens 的输出请使用流式请求。
下面这张表写的是网关今天实际怎么处理每个参数 -- 不是我们希望它怎么处理。
| 参数 | 状态 | 说明 |
|---|---|---|
| model | 支持 | 转发前会重写成后端的模型 ID。 |
| messages | 支持 | 必填且非空,校验后转发给推理引擎。 |
| stream | 支持 | 流式路径已实现;自动注入 stream_options.include_usage。 |
| temperature | 支持 | 透传给推理引擎,并记入计费元数据。 |
| top_p | 支持 | 列于 supported_sampling_parameters,整体透传。 |
| max_tokens | 支持 | 透传给推理引擎。 |
| stop | 支持 | 列于 supported_sampling_parameters,转发给推理引擎。 |
| n | 未验证 | 网关不做处理,原样转发;实际行为取决于后端。 |
| logprobs | 未验证 | 网关不做处理,随原始请求体转发,未对线上响应做过验证。 |
| tools | 支持 | supported_features 中声明 ["tools","json_mode"],转发给推理引擎。 |
| response_format | 支持 | 网关声明 json_mode;字段随原始请求体转发。 |
| 图像输入 | 未验证 | 模型元数据声明 input_modalities: ["text"];网关只为 CSAM 哈希检查解析 image_url,推理侧行为未验证。 |
思考默认关闭。需要时请在请求里传 "reasoning": {"enabled": true},并把该请求的 max_tokens 预算留到约 16k 以上——预算太小会被思考过程占满,正文一个字都看不到。
#!/usr/bin/env python3 """Minimal Inferway chat sample. Requires: pip install openai""" import os from openai import OpenAI client = OpenAI( base_url="https://api.inferway.ai/v1", api_key=os.environ["INFERWAY_API_KEY"], ) messages = [{"role": "system", "content": "You are a helpful assistant."}] while True: user = input("You: ") if not user: break messages.append({"role": "user", "content": user}) stream = client.chat.completions.create( model="inferway/qwen3.8-27b", messages=messages, stream=True, ) reply = "" print("Assistant: ", end="", flush=True) for chunk in stream: if not chunk.choices: continue piece = chunk.choices[0].delta.content if piece: reply += piece print(piece, end="", flush=True) print("\n") messages.append({"role": "assistant", "content": reply})