App 只发 Chat,后端如何在 Inroi Chat 与 Requesty Responses 之间安全回退

Foreverse 通过两家中转生产实测 OpenAI 官方 GPT-5.6 Luna / Terra:App 统一使用 OpenAI Chat,Inroi 一级走 Chat,首帧前失败立即切 Requesty Responses;续写、扩写、Agent 两步工具链与缓存均已闭环。附 32K 输出包络、真实缓存命中、一次即切的回退规则、基础短档与 App +50% 用户价。

一把 API 钥匙放在两条并行管线之间,一条标着 Chat,另一条标着 Responses,末端汇入同一本打开的小说

接中转最容易踩的坑,不是 JSON 少一个逗号,而是把三个不同层次混成一件事:App 对 Foreverse 说什么协议、Foreverse 对中转说什么协议,以及最后按哪张价表扣费。Luna 和 Terra 的生产链已经把这三层拆开:客户端始终发 OpenAI Chat;一级 Inroi 接 Chat;只有一级在首帧前失败时,后端才把同一请求转换成 Requesty Responses。

一套 App Chat 接口,为什么后端要维护两种上游协议?

Android 和 iOS 不需要知道当前是哪家中转。App 仍向 Foreverse 的 Chat Completions SSE 接口发消息;后端根据实际承载渠道做协议转换。这样续写、扩写、ST 和 Agent 共用一条客户端消息轨道,供应商差异不会散进 UI。

OpenAI 官方模型 IDApp → ForeverseInroi 一级Requesty 二级
gpt-5.6-lunaOpenAI Chat SSEgpt-5.6-luna · Chatopenai-responses/gpt-5.6-luna · Responses
gpt-5.6-terraOpenAI Chat SSEgpt-5.6-terra · Chatopenai-responses/gpt-5.6-terra · Responses

Inroi 的 API 基址是 https://www.inroi.shop/v1。Requesty 的 API 基址是https://router.requesty.ai/v1https://app.requesty.ai/ 只是管理后台,拿它当 API Host 会得到网页或 404。Requesty 这条链的关键不是把 openai/ 模型名硬送进 Chat,而是/responsesopenai-responses/ 目录前缀。

回退规则:一级一次、二级一次,不是失败三次再切

文本生成是付费长请求。同一个故障渠道连续重试三遍,会把等待和可能的上游费用一起放大。Foreverse 的边界是“用户是否已经看见任何上游帧”:没看见时可以安全换路;一旦看见,就不再重放。

现场是否切 Requesty原因与计费
Inroi 正常返回并开始流式由一级完成;备用渠道不触碰
连接失败、连接/首帧超时是,立即一次尚未向 App 发上游帧,可安全换路
401/402/403、408/409/425、429、5xx是,立即一次只限首个上游帧之前
HTTP 200 内嵌可回退的顶层 SSE error是,立即一次错误尚未作为正文或工具帧外发
Inroi 已经发出任意一帧后断流防半段正文、工具调用与上游费用重复
客户端主动取消尊重取消,不在后台另起付费请求
Requesty 也失败不再重试向 App 返回安全错误;两级共用一次 hold,只结算一次

两级全失败且零产出时,预扣全退;一级失败但二级成功时,只按最终 usage 结算一次。失败尝试会进入统一渠道健康统计,备用成功不会把一级故障抹掉,但人为强制回退的验收样本也不能拿来冒充线上 SLA。

生产到底测了哪些功能?

最终验收不是一句“你好”。两条渠道都跑了普通续写、单次扩写、Agent 发工具、回传工具结果,以及重复前缀缓存。早期出现过超时、断流和 Requesty 工具 400;修复后的最终矩阵闭环如下。

场景Inroi ChatRequesty Responses最终结论
Luna / Terra 普通文本与流式续写完成完成正文与 usage 可结算
单次扩写完成完成App 无需感知上游协议
Agent 第一步发起工具调用完成完成含高思考场景
回传工具结果后最终答复完成完成两步工具链闭环
重复前缀缓存命中命中只核证缓存读取

Requesty 早期 Agent 400 的根因是 Chat 形态的命名函数选择被原样塞进 Responses。直连 A/B 证明 Responses 需要扁平的函数名字段;转换后,Luna 与 Terra 的工具首轮和结果回传都完成。这个事故说明“模型支持工具”与“每一种兼容参数组合都支持”不是同一句话。

旧筛选里还出现过 output_tokens=8192reasoning_tokens=8192、正文为零的 xhigh 请求。那两笔直接请求 Requesty 的评测由 runner 显式设成 8K,并没有经过 Foreverse;不过旧服务端和 Agent / Reader 默认同样使用 8K,产品链也存在相同风险。reasoning、工具参数和可见正文共用输出额度,8K 不是模型能力上限,而是当时为了让预扣与最大输出一致设置的资金护栏。

缓存命中了多少?为什么仍不能写 cache write 为 0?

Requesty 直连重复探针先证明了自动前缀缓存;生产链随后分别验证了 Inroi 显式路由键和 Requesty Responses 回退。下表只写 token 事实,不把命中率包装成长期保证。

渠道 / 官方模型第一次首个命中cache_write_tokens
Requesty 直连 · Luna3142 input / 0 cached第 2 次 3139 cachednull
Requesty 直连 · Terra3142 input / 0 cached第 2 次 3139 cachednull
Inroi 生产 · Luna3924 input / 0 cached第 2 次 2816 cachednull
Inroi 生产 · Terra3924 input / 0 cached第 3 次 2816 cachednull
Requesty 生产 · Luna1840 input / 0 cached第 2 次 1837 cachednull
Requesty 生产 · Terra1904 input / 0 cached第 2 次 1901 cachednull

另一组显式 5247-token 探针在两款模型上都命中 5244 cached tokens。Inroi 不带缓存字段时重复大前缀没有回传命中;加入稳定的prompt_cache_key 与显式模式后才出现命中。稳定键只由用户与公开模型生成哈希,不包含 prompt、邮箱或原始用户 ID。

两家当前都没有暴露 cache_write_tokens。所以正确记录是 null,不是 0。后端已经兼容标准字段和 Requesty 的兼容别名,也支持 1.25 倍写入价;在权威 token 明细出现以前,不从 cache miss 或中转成本字段倒推。

基础短档与 App +50% 用户价必须分开看

统一价真源是 2026-07-31 的 OpenAI Standard 短上下文价目档与 prompt caching 规则,而不是任一中转返回的usage.cost。OpenAI 在 7 月 30 日的 Changelog 中还明确记录了 Luna 降价 80%、Terra 降价 20%; 下表采用降价后的官方短上下文口径。

模型基础普通输入 $/M基础缓存读取 $/M基础缓存写入 $/M基础输出 $/MApp +50%:输入 / 读取 / 写入 / 输出 credits/M
Luna$0.20$0.02$0.25$1.203000 / 300 / 3750 / 18000
Terra$2.00$0.20$2.50$12.0030000 / 3000 / 37500 / 180000

1 credit = $0.0001。基础美元价先换成 credits,再统一乘 1.5,整笔向上取整。普通输入、缓存写入和缓存读取互斥拆分,不能把已经包含在prompt_tokens 里的缓存 token 再收一次;缓存写入单价正好是普通输入的 1.25 倍。两款官方模型的 Foreverse 中转 prompt 暂时硬顶 200k tokens,避免进入更贵的长上下文档却仍按短档结算。

示例用量Luna App 用户价Terra App 用户价
9 input + 5 output tokens1 credit2 credits
10000 input + 2000 output66 credits660 credits
50000 input + 5000 output240 credits2400 credits
2k 普通 + 2k 写入 + 6k 读取 + 2k 输出52 credits513 credits

Inroi 与 Requesty 的内部采购成本可能不同,有些中转还会返回自己的倍率或旧价。Foreverse 不把这个差额传给用户:两条路都按上表统一结算。反过来,上游若没有给完整 usage,也不能凭一个内部成本数字伪造 token 拆分。

这次实测能证明什么,不能证明什么?

它能证明两款 OpenAI 官方模型 ID 在两级中转生产协议上完成过续写、扩写、Agent 和缓存,回退与统一计费也走通过真实闭环。它不能把中转调用写成 Foreverse 直连 OpenAI,不能把强制故障验收换算成中转 SLA,也不能用接口成功替代小说质量评测。

价格和目录都会变化,本文的数字绑定 2026-07-31。想继续理解重复前缀为什么省钱,可看Prompt 缓存账单实测;想分清官方渠道和自带 key,见手机 BYOK 配置说明;更长周期的价目变化收在Token 价格趋势

协议背景可对照Requesty Responses 文档OpenAI ChangelogStandard 定价Prompt caching 规则

常见问题

gpt-5.6-luna 和 gpt-5.6-terra 是 OpenAI 官方模型名吗?

是。OpenAI 官方 Changelog 已发布 GPT-5.6 系列,并把 Luna 定位为高吞吐经济档、Terra 定位为能力与成本的平衡档;官方价目表也直接列出 gpt-5.6-luna 与 gpt-5.6-terra。本文测试流量经过 Inroi / Requesty 中转,不等于这批请求是 Foreverse 直连 OpenAI。

Requesty 的 API Host 到底填哪个?

API Host 是 https://router.requesty.ai/v1;https://app.requesty.ai/ 是管理后台,不是 API Host。Luna/Terra 的备用链使用 /v1/responses,并把官方模型 ID 映射为 openai-responses/gpt-5.6-luna 或 openai-responses/gpt-5.6-terra。

回退是不是同一家失败三次才切换?

不是。Inroi 只尝试一次;连接失败、首帧超时、限流、鉴权错误或 5xx 等故障发生在任何上游帧送给 App 之前时,立即切 Requesty 一次。只要已经转发过一帧就禁止切换,避免半段正文、工具调用或费用被重复。

Luna 和 Terra 的 Agent 工具调用现在能用吗?

最终生产矩阵里,两款模型在 Inroi 与 Requesty 都完成了工具首轮和工具结果回传后的最终答复。Requesty 必须走 Responses 路径,并把 Chat 的命名工具选择转换为 Responses 的扁平字段;旧的 Chat 强制工具组合曾返回 400,不能据此把整个模型判成不支持 Agent。

两家中转都能命中 prompt cache 吗?

能看到缓存读取命中。Requesty 的重复前缀在第二次请求即命中;Inroi 为这两个官方模型使用稳定 cache key 与显式缓存模式后也能命中。两家当前都没有回传 cache_write_tokens,所以证据只能证明缓存读取,不能证明写入 token 可观测。

cache_write_tokens 是 null,为什么价表还有 1.25 倍写入价?

代码已经支持 GPT-5.6 起的缓存写入档,但只有上游返回权威 cache_write_tokens 时才按普通输入的 1.25 倍计价。字段为 null 时保持未知,不会把 cache miss、中转 usage.cost 或普通输入量倒推成写入 token。

切到 Requesty 后,用户价格会变吗?

不会。Foreverse 按同一份 token usage 和统一价结算,忽略中转自报 usage.cost;Inroi 与 Requesty 承载同一官方模型时,App 显示和扣除同价。Luna 与 Terra 本身相差十倍,是统一模型价差,不是回退附加费。

为什么 Luna 曾把 8192 个输出 token 全耗在 reasoning?

reasoning 与可见正文共用同一输出额度。旧评测 runner 和旧 Foreverse 链路都曾使用 8K 包络,xhigh 可能在正文前就把它耗尽。生产后端已于 2026-07-31 把 Luna、Terra、DeepSeek V4 等大窗口模型的默认与硬顶放宽到 32768;32K 是上限,不是固定消耗。尚未更新的商店 App 若显式发送 8192,后端仍会尊重这个较小请求值。