2026-08-23 02:12:08 +08:00
2026-08-23 02:12:08 +08:00
2026-08-23 02:12:08 +08:00
2026-08-23 02:12:08 +08:00
2026-08-23 02:12:08 +08:00
2026-08-23 02:12:08 +08:00
2026-08-23 02:12:08 +08:00
2026-08-23 02:12:08 +08:00
2026-08-23 02:12:08 +08:00

AI API 中转站 — 资料索引

本目录收集各 AI provider 的 API 规格与"怪癖"(quirks),用于实现一个多格式兼容的中转站(gateway)。

资料采集时间:2026-08-12。 各家文档变动频繁(尤其是模型名与 thinking 相关参数),落地实现前请对照文件头部的来源 URL 复核。

文件清单

文件 内容
api-design.md 本项目的 API 契约设计(双模板入口、IR、能力降级、thinking 桥接)— 其余文件是它的调研依据
transform-spec.md 转写方案 v0.3(四家求同存异、上游 Profile、请求/响应改写管线 R1–R9 / S1–S9、推理内容可信度分级)— api-design 的落地层
openai.md OpenAI Chat Completions + Responses API 规格与怪癖
anthropic.md Anthropic Messages API 规格与怪癖
deepseek.md DeepSeek API 规格与怪癖
kimi.md Kimi(月之暗面 MoonshotAPI 规格与怪癖,含 Kimi For Coding 独立产品线对比(§17
china-providers.md 国产厂商(通义/GLM/Kimi/豆包/文心/混元/MiniMax/星火)的怪癖
cross-provider-mapping.md 三家之间的字段/语义映射表,含流式事件映射
compatibility-layers.md 各家官方提供的"他家格式兼容层",可作为中转站行为的参考实现
errors-and-limits.md 错误码、限流、超时、请求体积上限对照

中转站要处理的核心难题(速览)

  1. 消息模型不同构OpenAI 是扁平 messages[] + role: systemAnthropic 是 messages[] + 独立顶层 system,且 content 是 block 数组。转换必然有损。
  2. 推理内容(thinking/reasoning)不可互换Anthropic 的 thinking 文本只是摘要,真正的推理内容加密在 signature 里,服务端靠解密它重建思考——所以"翻译成字符串再翻译回来"是死路,只能把密文当 opaque blob 原样搬运。OpenAI 用 encrypted_contentDeepSeek 用明文 reasoning_content。三者回传规则均不同,详见 cross-provider-mapping.md §7。
  3. 工具调用 ID 与结构Anthropic tool_use.id / tool_result.tool_use_id(在 user 消息里);OpenAI Chat 用 tool_calls[].id / role: tool 消息;OpenAI Responses 用 call_id
  4. 流式协议不同OpenAI 是增量 delta 的 chat.completion.chunk + [DONE]Anthropic 是有状态的 block 事件机(content_block_start/delta/stop),且 message_delta.usage累计值
  5. 未支持参数的处理策略:三家普遍静默忽略而非报错。中转站应明确选择"静默忽略"还是"显式报错",并保持一致。

国产厂商的坑是另一个维度——不在语义层而在协议层:HTTP 200 里藏业务错误(MiniMax base_resp)、流式默认返回全量累积文本(阿里 incremental_output)、六种互不相同的鉴权方式、finish_reason: "sensitive" 打破 OpenAI 枚举。详见 china-providers.md,其中 §0 和 §9 是跨厂商的共性结论。

还有第三个维度:同一家 API 内部按模型/按入口分裂。 Kimi 是典型——temperature 在新模型上写死 1.0 且传其他值直接 400(OpenAI 客户端的默认值开箱打不通),但同样的参数走它自家的 Anthropic 入口却被静默忽略;流式 usage 的位置由 stream_options.include_usage 决定(不传就藏在 choices[0].usage)。即"合法请求体取决于 model 和入口"。详见 kimi.md,§16 是可直接落地的接入 checklist。

第四个维度是文档可信度。 Kimi 已用真实 key 实测,10 条文档明确写下的规则被推翻(含"K3 思考恒开不可关"这样的核心设定、以及官方 Claude Code 配置页照抄会 404 的模型名),见 kimi.md §14。教训是:涉及"报错/不支持/必须"的文档表述,落地前一律实测——两个方向的错都有(文档说不能实际能、文档说能实际不能)。

第五个维度:一个"厂商"可能是多个上游。 Kimi 的 platformapi.moonshot.cn)和 Kimi For Codingapi.kimi.com/coding)共用推理层却是两套接入实现——模型名、鉴权、限流、端点、错误语义、tool_call id 格式全不同,key 互不通用,且 coding 侧不校验模型名(传 gpt-4 返回 200 并原样回显)。中转站必须按两个上游配置。见 kimi.md §17。

未覆盖 / 待补

  • Google GeminigenerateContent)— 用户未列入,尚未收集。
  • 零一万物 Yi、百川、阶跃星辰 StepFun、商汤日日新。
  • OpenAI Realtime API、Batch API、Embeddings 等非 chat 端点。
  • DeepSeek multi_round_chattoken_usagerate_limit 页面(内容与其他页重合度高,未单独抓取)。
S
Description
No description provided
Readme
194 KiB
Languages
Java 100%