base_url:https://www.xixiaoci.cn/xmb/app/api
三步:注册账号 → 在控制台生成令牌 → 把 base_url 换成上面的地址。
如果你原来就在用 OpenAI SDK,只需要改两行。
# Python + openai SDK from openai import OpenAI client = OpenAI( api_key="xmbk_你的令牌", base_url="https://www.xixiaoci.cn/xmb/app/api/v1", ) resp = client.chat.completions.create( model="deepseek-flash", messages=[{"role": "user", "content": "你好"}], ) print(resp.choices[0].message.content)
/xmb 是站点,/app 是应用。
只写 /xmb/api/... 会返回明确的 410 提示页,不会静默失败 ——
因为静默失败会让你以为是自己的代码有问题。
| 协议 | 完整地址 |
|---|---|
| OpenAI chat | /xmb/app/api/v1/chat/completions |
| OpenAI models | /xmb/app/api/v1/models |
| Anthropic messages | /xmb/app/api/anthropic/v1/messages |
| 健康检查 | /xmb/app/healthz |
令牌形如 xmbk_ + 32 位字符,在控制台「令牌」页生成。两种 Header 都接受:
# OpenAI 风格 Authorization: Bearer xmbk_xxxxxxxxxxxxxxxx # Anthropic 风格 x-api-key: xmbk_xxxxxxxxxxxxxxxx
路径与请求体与 OpenAI /v1/chat/completions 一致,model 填平台的模型 ID。
| 字段 | 是否必填 | 说明 |
|---|---|---|
model | 必填 | 平台模型 ID,见能力商城 |
messages | 必填 | 标准消息数组,支持 system / user / assistant |
stream | 可选 | true 时返回 SSE 流 |
max_tokens | 可选 | 最大输出长度,透传上游 |
temperature | 可选 | 透传上游,取值范围随上游模型而定 |
其余参数原样透传给上游。上游不支持的参数会被忽略而不是报错 —— 换模型时不会因为参数差异导致代码崩掉。但这也意味着你不能靠参数报错来判断上游是否支持某特性,请查上游文档。
路径是 /anthropic/v1/messages,字段名遵循 Anthropic 规范
(max_tokens 必填,内容在 content 数组里)。
这个协议的主要用途是让 Claude Code 之类的工具直接接进来。
# 让 Claude Code 走虾米盒子 export ANTHROPIC_BASE_URL="https://www.xixiaoci.cn/xmb/app/api/anthropic" export ANTHROPIC_AUTH_TOKEN="xmbk_你的令牌" claude
# 或用 curl 直接测 curl -X POST "https://www.xixiaoci.cn/xmb/app/api/anthropic/v1/messages" \ -H "x-api-key: xmbk_你的令牌" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "kimi-k2.6", "max_tokens": 256, "messages": [{"role": "user", "content": "你好"}] }'
注意:这里接的是模型,不是真的 Anthropic 服务。
model 仍然填平台的模型 ID(如 kimi-k2.6),
而不是 claude-*。协议只是外壳,背后是哪家上游由商品池决定。
stream: true 时返回 text/event-stream,
每行 data: {...},以 data: [DONE] 结束。
两种协议的流式格式各自保持原有风格,不做混用。
计费在流结束后按实际产出的 token结算,不是按请求发出时预估。 所以中途断开(客户端取消)时,已产出的部分照扣,未产出的不扣。
| HTTP | 含义 | 你该做什么 |
|---|---|---|
401 | 令牌无效或已吊销 | 检查 Header,重新生成令牌 |
402 | 余额不足 | 充值;或改用 BYOK |
404 | 模型不存在或已下架 | 查能力商城的模型 ID |
410 | 路径少了 /app | 按上面的地址对照表修正 |
429 | 上游限流,池内无备份 | 退避重试;或换同档模型 |
502/504 | 上游不可用 / 超时 | 平台已尝试切换,仍失败则重试 |
所有错误响应都带 request_id。这个 ID 可以在控制台查到完整的调用链路:
命中了哪个商品、调了哪家上游、上游返回了什么、是否已扣费。
提工单时报这个 ID,不用贴一堆日志。
***。
所以你能看到真实原因(如 max RPM、rate_limit_reached_error),
但看不到任何人的凭证。
BYOK(Bring Your Own Key)是指你把上游厂商的 Key 交给平台托管, 平台用你的 Key 去调上游,token 费用由你自己的上游账号承担, 平台只按调用次数收一笔通路费。
控制台 → 商户中心 → 渠道 → 新增渠道,填上游类型与 Key。平台侧会:
***。这一段是平台最该讲清楚的部分,因为它决定了你的钱去哪了。
你充值 100 元
↓ 站内余额(不是代金券,不过期)
调用产生费用
↓ 按微厘计算,向上取整到分扣减
↓
├─→ 上游成本(平台付给模型厂商,约 70%)
└─→ 毛利(约 30%)
├─→ 商户分成(默认 82%)
├─→ L1 分销佣金(毛利 6%)
├─→ L2 分销佣金(毛利 2%)
└─→ 平台留存(毛利 92% − 商户分成)
早期版本把这个平台描述成"抽佣 8%–15% 的撮合中介",那是错的。 实际模型是:平台以底价从上游进货,再以零售价卖给你, 赚的是价差,不是佣金。这带来两个你必须知道的后果:
商户侧收入不足 1 分时,不会抹零,也不落虚假分录,而是进「找零池」累计, 凑满整分才记一笔真实账。找零池本身不是账 —— 它只是"还没凑够一分"的过渡量,不构成任何一方的债权。 一切以复式账本的分录为准。
下面这些是当前实际能做到的,不是愿望清单。
| 项目 | 承诺 | 说明 |
|---|---|---|
| 选品缓存 | 45 秒 | 这是上游故障后最长的切换等待窗口 |
| 失败重试 | 池内自动切换 | 仅当同款有第二家供应商时生效 |
| 调用留痕 | 全量保留 | 每次调用可凭 request_id 回放 |
| 余额一致性 | 每日对账断言 | 对账不平会告警,不会静默通过 |
| 令牌吊销 | 即时生效 | 不依赖缓存过期 |
不会。model 是稳定标识,展示名改了不影响调用。
但已下架的模型会返回 404 —— 下架前控制台会提前提示。
如果同款有多家供应商,平台会切换上游,但响应里的 model
保持为你请求的那个 ID。真实命中的供应商可以在控制台的调用详情里看到。
当前不开放这个配置。平台的比价逻辑是自动的, 要固定供应商需要走企业合作单独约定。
请求参数会原样透传给上游。上游支持就支持,上游不支持就报错或忽略。 平台不做能力适配层,所以同样的参数在不同模型上行为可能不同。
上游原始报文里可能带它自己的账号标识甚至密钥,平台会先脱敏再返回。
你能看到错误类型和原因,但凭证类内容会被替换成 ***。
返回 402,不发起上游调用(不会先花上游的钱再拒绝你)。
但见上面「已知边界」—— 极端并发下有小幅透支的可能。
平台不做任何模型训练。但上游厂商可能按它们的条款使用数据, 这一点平台无法替上游承诺。有严格数据要求请走企业合作并指定供应商。
没有专门的 SDK,也不需要 —— 直接用官方 OpenAI SDK 或 Anthropic SDK 即可。 多一层封装反而增加版本兼容负担。