Fluxio

开发文档

Fluxio 支持三种流式协议。找到你的代码用的那一种,看清它会收到哪些事件,再把客户端指向 API 域名。

API 域名https://api.fluxioapi.com

密钥的传法:OpenAI 格式用 Authorization: Bearer,Anthropic 格式用 x-api-key,Gemini 用 x-goog-api-key。三种协议共用同一个域名。

OpenAI 格式:基于 SSE 的对话补全

向 /v1/chat/completions 发 POST,带上 "stream": true。返回是 text/event-stream,由一行行 data: 组成,每行一个 JSON 分块。

curl https://api.fluxioapi.com/v1/chat/completions --no-buffer \
  -H "Authorization: Bearer fio_your_key_here" -H "Content-Type: application/json" \
  -d '{"model":"gpt-6.1-sol","stream":true,"messages":[{"role":"user","content":"Hello from the river bank"}]}'

每个分块在 choices[0].delta.content 里带着下一段文字;[DONE] 之前的最后一个分块给出 token 数:

data: {"choices":[{"index":0,"delta":{"content":"Rivers"}}]}
data: {"choices":[{"index":0,"delta":{"content":" bend"}}]}
data: {"choices":[],"usage":{"prompt_tokens":14,"completion_tokens":2,"prompt_tokens_details":{"cached_tokens":0}}}
data: [DONE]

即使你的请求没写 include_usage,或者把它设成 false,Fluxio 也总会请求这个用量分块。

Responses API(/v1/responses)以带类型的事件流式返回,例如 response.output_text.delta,用量在 response.completed 里。

Anthropic 格式:Messages 事件

向 /v1/messages 发 POST,带上 "stream": true 和 anthropic-version 头(缺省时 Fluxio 补 2023-06-01)。事件按下面的顺序到达:

event: message_start
data: {"type":"message_start","message":{"usage":{"input_tokens":25,"cache_read_input_tokens":0,"output_tokens":1}}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Current"}}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":31}}
event: message_stop

输入与缓存的数量来自 message_start;最终的输出数量来自 message_delta。

Claude 系列模型只服务官方 Claude Code 与 Claude Desktop 客户端,且需 2.1.285 或更新版本——这是上游的限制。GPT、Gemini 等其他系列可用任意 OpenAI 格式的客户端或 SDK。

Gemini 格式:原生 streamGenerateContent

Gemini 模型走自己的路由。加上 alt=sse 就会收到服务器推送事件;不加时返回的是分段送达的 JSON 数组。

curl "https://api.fluxioapi.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse" --no-buffer \
  -H "x-goog-api-key: fio_your_key_here" -H "Content-Type: application/json" \
  -d '{"contents":[{"role":"user","parts":[{"text":"Name one river that crosses three countries"}]}]}'

每个分块都带累计的 usageMetadata,以最后一块为准计费,思考 token 按输出计。

Gemini 模型只走原生协议。流式请调用 :streamGenerateContent?alt=sse;/v1/chat/completions 会拒绝 Gemini 模型 id。

计什么、怎么计

  • 每次请求按上游报告的 token 计费:输入、输出、缓存写入、缓存读取,各按各的单价。
  • 上游没有报告用量时,按 2,000 输入加 2,000 输出 token 计费,并标注为估算。
  • 提前关掉流,已经生成的 token 照样计费。
  • 数 token 的接口(count_tokens 与 countTokens)不收费。
  • HTTP 402 表示这把密钥背后的余额或月卡已经用完——充值后即可恢复。

客户端配置

Claude Code · Claude Desktop

基址直接填 API 域名(不加 /v1),令牌填你的密钥,然后运行 claude。

export ANTHROPIC_BASE_URL=https://api.fluxioapi.com
export ANTHROPIC_AUTH_TOKEN=fio_your_key_here
claude

Codex · OpenAI SDK

OpenAI 格式的客户端:基址填 API 域名加 /v1,API Key 填你的密钥;对话请求发往 /v1/chat/completions。

export OPENAI_BASE_URL=https://api.fluxioapi.com/v1
export OPENAI_API_KEY=fio_your_key_here
codex
import os, openai

river = openai.OpenAI(base_url="https://api.fluxioapi.com/v1", api_key=os.environ["FLUXIO_KEY"])
reply = river.chat.completions.create(model="gpt-6.1-sol", stream=True,
    messages=[{"role": "user", "content": "Describe a waterfall in three lines"}])
for piece in reply:
    print(piece.choices[0].delta.content or "", end="", flush=True)

先从这几个 GPT 模型开始(填 id): gpt-6.1-sol · gpt-6-astra · gpt-5.6-sol

Gemini CLI

Gemini CLI 填裸的 API 域名(不要加 /v1beta)和你的密钥:

export GOOGLE_GEMINI_BASE_URL=https://api.fluxioapi.com
export GEMINI_API_KEY=fio_your_key_here
gemini

可用的 Gemini 模型(填 id): gemini-3.1-pro · gemini-4-argon · gemini-3.8-flash · gemini-2.5-flash