Inferway
登录注册
跳转至正文
按需导航

选择您当下需要完成的任务

标准流程

从零开始完成一次已验证的 API 调用

  1. 1. 注册账号。 无需信用卡或邀请码,随时直接注册:inferway.ai
  2. 2. 获取 API Key。 首次登录控制台时系统将自动生成 Default 密钥(仅明文展示一次)。后续可随时在 API 密钥页轮换或新增。
  3. 3. 发起调用。 设置环境变量 $INFERWAY_API_KEY,并在终端运行下方的流式调用命令。
  4. 4. 验证调用。控制台 → 请求记录中查看请求状态、响应延迟、Token 用量以及模型标识。

首次调用

一条命令跑通流式调用bash
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;短文本补全使用非流式请求完全不受影响。IDE/智能体客户端可以在内部自行选择非流式,而无需暴露任何设置项:Inferway 会将此类请求的候选输出总量上限设为 4,096 token,并通过 X-Inferway-Max-Tokens-Applied 与 X-Inferway-Max-Tokens-Reason 响应头报告实际应用的单候选上限;客户端支持流式时,更长的输出仍建议使用流式。

无缝接入

沿用您所熟悉的 Chat Completions 接口规范

  • Base URLhttps://api.inferway.ai/v1
  • API 密钥$INFERWAY_API_KEY
  • 模型标识inferway/qwen3.8-27b

响应数据结构

流式 Chunk 结构示例json
data: {
  "id": "chatcmpl_...",
  "object": "chat.completion.chunk",
  "model": "inferway/qwen3.8-27b",
  "choices": [
    {
      "index": 0,
      "delta": { "role": "assistant", "content": "Hello" },
      "finish_reason": null
    }
  ]
}

data: [DONE]

首次调用未成功的排查指引

绝大多数初次调用异常通常源自环境或参数配置,在修改业务代码前请先核对以下常见问题。

异常现象可能原因排查与修复建议
401API Key 缺失、已被吊销、输入有误,或未在当前终端会话中正确 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。
平滑迁移

已在使用 OpenAI 官方客户端?

OpenAI 兼容环境变量配置bash
# 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'
复制配置指令给 AI 助手引导您的助手安装 SDK、设置 base_url 与模型 ID、自环境变量读取密钥,并编写流式冒烟测试。指令中仅包含占位符,绝不包含真实密钥。

思考过程(Reasoning Tokens)

当前服务的模型默认不输出推理(thinking)token,需在请求中显式开启。

思考过程 Token 按照输出 Token 标准价格计费,可在 usage.completion_tokens_details.reasoning_tokens 中查看详细用量。

可在单次请求中通过 chat_template_kwargs.enable_thinking=true(OpenAI SDK 通过 extra_body 传递)或 reasoning: {"enabled": true} 显式开启。

对话补全示例 — Python

官方 OpenAI Python SDK 原生支持任何兼容接口。仅需替换 base_url 与 API Key 即可。非流式请求适用于短文本生成;长文本任务建议使用流式传输。

Pythonpython
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)
SDK 与编程工具

接入您正在使用的工具

选择工具,查看接入方式与功能限制。配置会跟随页面顶部选择的模型。

安装 SDK(可选)

初次运行 cURL 命令无需安装任何依赖;当您准备将调用正式集成到项目中时,再安装对应语言的官方 SDK。

Installbash
# Python
pip install openai

# TypeScript / Node.js
npm install openai

按工具查看接入指南

OpenCode

可接入

将 Inferway 添加为 OpenCode 的自定义服务商。接入前,请确认账户已开通模型访问。

模型能力
支持工具调用
Inferway 接口
已开放/v1/chat/completions
在此工具中使用
聊天与代码任务
模型Qwen3.8 27B查看此模型

上下文 262,144 最大输出 131,072

已在 2026-09-19 于 macOS 26.6.2 arm64(版本 1.18.25)验证:基础对话与文件读取工具往返(模型 inferway/qwen3.8-27b)。

将以下内容保存为临时文件夹根目录的 opencode.json。服务商部分以公开模型 ID 作为模型键,组合模型选择器为 provider/model。{env:INFERWAY_API_KEY} 引用之前设置的变量,Key 本身不写入文件。1024 输出上限是实测验证预设;更大的上限未在此验证。

先在启动客户端的终端中设置 INFERWAY_API_KEY。不要把密钥直接写进配置。

opencode.jsonjson
{
  "$schema": "https://opencode.ai/config.json",
  "model": "inferway/inferway/qwen3.8-27b",
  "provider": {
    "inferway": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Inferway",
      "options": {
        "baseURL": "https://api.inferway.ai/v1",
        "apiKey": "{env:INFERWAY_API_KEY}"
      },
      "models": {
        "inferway/qwen3.8-27b": {
          "name": "Inferway",
          "limit": {
            "context": 262144,
            "output": 1024
          }
        }
      }
    }
  }
}
OpenCodebash
opencode run --pure --format json --title 'Inferway basic check' --model 'inferway/inferway/qwen3.8-27b' --agent build --dir . 'Reply with exactly: connected'

确认接入成功

  1. 1确认基础检查的回复文本恰为 connected 且无 API 错误。
  2. 2运行下方读取检查。提示词中不包含 nonce;确认最终文本恰为夹具中的 nonce。这仅验证读取回路——不声称支持编辑、Shell 或其他工具。
  3. 3打开控制台 → Requests,确认推理请求与 token 用量。实际计费以控制台为准,而非任何客户端估算。

确认接入成功

Read checkbash
opencode run --pure --format json --title 'Inferway read fixture' --model 'inferway/inferway/qwen3.8-27b' --agent build --dir . 'Read the file read-tool-fixture.txt and reply with exactly the nonce it contains, nothing else.'
设置 Key、完整步骤与排错

开始之前

先按官方说明安装客户端。本文的 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

下面的交互输入会隐藏 Key,并避免将其写入命令历史。请从同一个终端启动客户端;另外打开的应用可能无法继承该变量。

INFERWAY_API_KEYbash
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。

List modelsbash
curl --fail-with-body --silent --show-error --max-time 30 \
  'https://api.inferway.ai/v1/models' \
  -H "Authorization: Bearer $INFERWAY_API_KEY"

创建临时文件夹

OpenCode 可以从项目根目录加载项目配置(项目配置与自定义路径见 OpenCode 配置文档)。请在一个临时文件夹中操作,避免测试影响你的日常设置或全局服务商列表。

已接受的实测在 macOS 26.6.2 arm64 上使用 OpenCode CLI 针对下方目录模型进行;操作前请核对自己安装的版本。git init 只为让 OpenCode 有一个干净的项目根目录;检查本身不需要提交。

Scratch folderbash
# Scratch folder with a small read fixture
mkdir inferway-opencode-verify && cd inferway-opencode-verify && git init -q
printf 'nonce-7f3a9c\n' > read-tool-fixture.txt

可选:在日常配置中使用 Inferway

检查通过后,把 provider 块(及其下的模型项)复制到你现有的 OpenCode 配置中,保留你自己的设置。日常使用不需要临时文件夹或测试夹具。

费用与用量

实际用量由 Inferway 记录:打开控制台 → Requests 查看每次请求的状态与 token 用量,在控制台 → 用量查看汇总。客户端本地显示的数字只是其自身估算,不是计费金额;请以控制台为准。

请求失败时

认证失败:检查 Key 是否存在、有效且获准使用该模型,并从设置变量的终端重新打开客户端。排错时不要输出完整 Key。

地址或模型错误:检查是否重复添加 /v1,使用公布的完整模型 ID,并确认客户端选择 Chat Completions。请求发往 /responses 或 /completions 时,换 Key 无法解决。

额度或超时:检查钱包余额和 Key 限额,按 Retry-After 等待,并缩短输入或降低输出上限。长输出保持流式传输,排错期间避免 Agent 连续重试。

联系支持时提供客户端版本、模型 ID、请求时间和可用的 request ID;请遮盖凭证和源码。

撤销接入:在控制台吊销此工具的 Key,并移除客户端中的 Inferway 服务商配置。

独立指南

MCP(Model Context Protocol)

已上线

MCP 端点现已开放。将支持 MCP 规范的客户端配置至下方服务地址,并使用同一把 API Key 进行鉴权即可;工具调用遵循官方标准协议,零数据留存承诺同样适用。

无可用余额的账户会自动走免费档,而不是收到 402 错误——与 REST API 相同的免费档(60 次/分钟)。注册用户的待遇绝不会低于匿名访客。

MCP 服务接入端点json
{
  "mcpServers": {
    "inferway": {
      "url": "https://api.inferway.ai/v1/mcp/sse",
      "headers": {
        "Authorization": "Bearer $INFERWAY_API_KEY"
      }
    }
  }
}

生产环境上线检查清单

  • API Key 严格限定于服务端 切勿将生产密钥(inferway_live_…)暴露于前端浏览器、客户端应用或公开代码仓库中。
  • 长文本生成推荐流式传输 对任何生成耗时可能接近 CDN 响应窗口的长任务,务必开启 stream=true。
  • 合理设置 max_tokens 上限 根据具体业务场景配置输出上限,以确保费用支出与响应延迟均处于预期范围内。
  • 仅采集与监控元数据 仅记录 HTTP 状态、延迟耗时、Token 用量与模型标识;为严格落实零数据留存,请勿在业务日志中记录用户的提示词与补全正文。
透明度保障

在将业务流量接入 Inferway 前,欢迎查阅透明度中心、服务状态页以及原始基准性能报告。

API 端点参考

OpenAI 兼容路径保持精简与高确定性;账户、财务账单、用量统计及 Agent 相关操作则通过一组独立的第一方端点提供。

OpenAI 兼容接口/v1/chat/completions

支持对话交互、工具调用、结构化 JSON 输出与流式响应,可直接搭配各类官方 SDK 使用。

异步交互接口/v1/interactions

用于视频生成:提交一次即持久化的后台任务,随后轮询直至成片可取回。

控制台管理接口/v1/keys · /v1/billing · /v1/usage · /v1/requests

用于服务端的 API 密钥管理、余额与账单查询、用量统计及请求元数据审计。

端点路径请求方法功能说明
/v1/chat/completionsPOSTOpenAI 兼容的对话补全接口
/v1/interactionsPOST异步视频生成任务(同一路由下的四种操作)
/v1/modelsGET获取已发布模型列表及能力、价格元数据
/v1/mcp/sse · /v1/mcp/messagesGET · POSTMCP 服务协议接入端点(已上线)
/v1/keysGET / POST / DELETE管理直连 API 密钥
/v1/billingGET钱包余额与近期用量统计
/v1/billing/transactionsGET钱包充值与消费交易明细
/v1/billing/checkoutPOST创建在线充值收银台会话
/v1/usageGET按时间聚合的 Token 用量统计
/v1/requestsGET请求元数据历史明细(不含交互正文)
/healthGET网关与核心后端健康检查
/v1/statsGET服务状态页公开监控数据

异步交互:一个路由,四种操作

视频生成不会在请求内直接返回成片。所有调用都发往 POST /v1/interactions,并在请求体的 op 字段中指明操作;任务本身持久化,连接中断不会丢失已扣费的工作。

op 取值功能说明
prepare_upload申请一份短时效、带体积上限的输入媒体上传凭证。
create提交生成意图并获得 interaction ID。按下单时长一次性计费。
get读取持久化状态与当前阶段;成片交付落定后,返回结果及其下载地址。
cancel尽力而为地取消排队中或执行中的任务。
  • mode 必须为 background。同步与流式模式一律以 422 拒绝,本路由没有实时返回的变体。
  • create 操作必须携带 Idempotency-Key。同一 Key 配同一请求会返回原始回执且不重复扣费;同一 Key 配不同请求则以 409 失败拒绝。
  • model、mode、duration_seconds 与 prompt 都是请求体的顶层字段。duration_seconds 为必填,且只接受已公布的整秒档位——计费正是按它结算。
  • 使用 get 操作轮询直至状态进入终态。我们自己的控制台每 2 秒轮询一次;本接口不提供 Webhook,也没有长轮询。

公开支持的端点是 POST /v1/chat/completions、POST /v1/interactions 和 GET /v1/models。旧版 POST /v1/completions 不提供:它返回 501(未实现),并在错误信息里指明应改用的 chat completions 路由。POST /v1/messages(Anthropic 格式)已在本部署提供,但尚未对 API key 开放:在另行通知前,即使配置正确也会被权限错误拒绝。

模型

2

选择模型,查看其已发布的能力事实。API 示例和工具配置会使用同一个模型。

认证与鉴权

认证请求头格式http
Authorization: Bearer $INFERWAY_API_KEY
  • API 密钥 密钥统一以 inferway_live_… 开头,签发给服务端负载使用。
  • 浏览器应用安全规范 切勿把直连密钥暴露在客户端,请求应走您自有的后端代理。

错误代码

Inferway 返回 OpenAI 兼容的错误对象:{"error": { "type": "...", "message": "...", "code": "..." }}

付费请求在派发前预留 prompt 估价 × 输入价 + max_tokens × 输出价。可用余额耗尽时,符合条件的请求可使用注册免费额度;免费请求不扣钱包。402 表示请求在派发前被拒绝,不产生费用。已认证请求在派发前被 400 拒绝时,会以零 Token、零费用记录在控制台请求历史中,便于事后排查故障。余额以 4 位小数展示;单价以实时价目表为准。

命中缓存的输入 Token 记在 usage.prompt_tokens_details.cached_tokens 中,按缓存价计费。qwen3.8-27b 的缓存按 1,600 Token 整块匹配,且不复用提示词的最后一个整块,因此输入约 3,200 Token 以上的请求才可能部分命中;更短的请求始终按标准输入价计费。

错误码目录(实时)

/v1/chat/completions 与 /v1/agent/chat 可能返回的全部错误码,直接取自网关自己的目录,不是抄写。每一行都带 HTTP 状态、是否可以安全重试,以及 API 实际发出的原文。结账、账单与密钥管理相关的端点会返回它们各自的错误码,不在本表中。

codeHTTP 状态码可否重试错误含义
admission_paused503可以,先退避Paid admission is paused while we finish a service change. Retry shortly; nothing is wrong with this request.
authentication_error401不可Authentication failed.
conflict409不可A conflict occurred with the current state of the resource.
free_quota_exhausted429可以,先退避Free quota exhausted. Please retry later.
free_tier_unavailable503可以,先退避The free tier is temporarily unavailable; please retry shortly.
internal_error500不可网关内部错误
internal_tool_failure500不可An internal tool error occurred.
invalid_request400不可请求格式错误或参数非法
malformed_upstream502不可Received an invalid response from the upstream service.
model_unavailable503可以,先退避This model is temporarily out of service. Other models are unaffected; please retry later.
payment_required402不可Payment required. Add credit at https://inferway.ai/console/billing
rate_limited429可以,先退避超出免费使用或并发限额
service_unavailable503不可Service outage in progress. Live status: https://inferway.ai/status
upstream_rejected422不可The upstream service rejected the request.
upstream_unavailable503可以,先退避The service is temporarily unavailable.
错误码、状态与重试策略取自 GET /v1/public/errors

速率限制与配额

额度拒绝返回 HTTP 429。查看错误码、window 与 dimension;有 Retry-After 时按其等待。单次请求大小超限需缩短输入或调低 max_tokens,等待不会改变此限制。

适用对象限额时间窗口
匿名试玩60每分钟(每 IP)
匿名试玩300每小时
匿名试玩1,000每滚动 24 小时
账户充值后按账户正式配额自动解除访客体验限制,可在控制台查看专属配额

注册免费账户

注册免费账户:突发 8 次/秒、每分钟 60 次、每小时 300 次、每天 1,000 次,并发 2。不限制单次输入或输出 token,也不设每分钟或每日 token 额度。

每小时与每天的次数按滚动窗口计算,不在固定时刻整体重置。同一账户的 API Key 共享这些次数额度。

单次请求仍受模型自身的上下文长度和最大输出限制。超过 4,096 tokens 的输出请使用流式请求。

  • X-RateLimit-Limit. 当前 RPM 窗口的总配额。
  • X-RateLimit-Remaining. 当前窗口内剩余的可用请求次数。
  • X-RateLimit-Reset. 当前窗口重置的 Unix 时间戳。
  • Retry-After. 收到 429 后应等待的秒数。

运行约束

  • 并发上限 注册免费账户允许 2 个并发请求;付费账户按账户与密钥策略执行。
  • 数据留存 内容零留存;仅保留元数据用于计费与可靠性。

聊天 API 的 OpenAI 协议兼容性

以下清单如实列出了网关对各项参数的实际支持情况,反映线上运行时的真实处理逻辑。

参数支持状态具体行为
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},并为该请求预留约 16k 以上的 max_tokens 预算 —— 若输出预算过小,可能被思考过程消耗殆尽导致最终正文为空。

图片输入——最小示例

两段最小请求体,分别对应两种公开协议,都把图片以内联 base64 / data URL 形式发送到 catalog 中声明了 image_input 的模型。网关在 Playground 上执行的 per-image、per-kind 累计字节与 16 MiB 请求体上限在这里同样生效。

下方每个片段的实际行为仍受上方兼容性矩阵中“推理未验证”声明的同一约束。

OpenAI Chat Completions

image_url.content 指向包含 base64 字节的 data URL,MIME 与 catalog 允许的类型一致即可。

OpenAI Chat Completionsjson
POST https://api.inferway.ai/v1/chat/completions
Authorization: Bearer $INFERWAY_API_KEY
Content-Type: application/json

{
  "model": "inferway/qwen3.8-27b",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "What is in this image?"},
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="
          }
        }
      ]
    }
  ]
}

Anthropic Messages

Anthropic 使用 base64 source 对象而不是 data URL;网关会把 Anthropic 形态的请求路由到同样的 image_input 通道。Messages 端点尚未对 API key 开放,详见上方端点说明。

Anthropic Messagesjson
POST https://api.inferway.ai/v1/messages
Authorization: Bearer $INFERWAY_API_KEY
Content-Type: application/json

{
  "model": "inferway/qwen3.8-27b",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "What is in this image?"},
        {
          "type": "image",
          "source": {
            "type": "base64",
            "media_type": "image/png",
            "data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="
          }
        }
      ]
    }
  ]
}

最小应用代码示例

最小应用代码示例python
#!/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})

下一步建议