概览
AI Sonar 的 Agent-First API 会在错误响应中加入结构化提示,AI Agent 可以立即解析并采取行动 —— 无需网络搜索、无需查阅文档、无需猜测。 OpenAI 兼容的 Chat Completions 和 Responses gateway 错误可以在error 对象中包含 did_you_mean、suggestions、hint、retryable 和 retry_after 等可选字段。Anthropic Messages 与 Gemini 保持各自原生错误形状,不承诺这些扩展字段。
错误提示字段
对 OpenAI 兼容 gateway 错误而言,所有提示字段都是error 对象内的可选扩展:
错误代码示例
model_not_found (400)
当模型名称不匹配任何活动模型时:did_you_mean 的解析使用:
- 静态别名映射(来自生产错误数据)
- 规范化字符串匹配(去除连字符,大小写不敏感)
- 编辑距离匹配(阈值 ≤ 3)
did_you_mean、suggestions 和 hint,然后使用受支持的公共模型重试。
insufficient_balance (402)
当账户余额不足以覆盖预计费用时:suggestions 包含比预计费用更低、Agent 可以切换到的模型。
临时服务错误 (5xx)
模型暂时不可用时,仅当响应中的retryable 为 true 才重试:
retryable 为 false 时,请根据 hint 调整请求或改用 alternatives 中的模型。
rate_limit_exceeded (429)
retry_after 的值根据实际速率限制窗口重置时间计算。
OpenAI 兼容端点使用上文所示的标准错误结构;Anthropic 兼容和 Gemini 兼容端点使用各自的原生响应格式。
context_length_exceeded (400)
当输入超过模型的上下文窗口(附带可操作提示)时:原生端点发现
不要根据模型名、提供方名称或 Chat 响应头推断原生协议是否可用。选择原生端点前,先读取GET /v1/models/{model},只使用模型详情明确广告且存在同协议路由的请求格式。
应读取的字段是 aisonar.accepted_request_formats。
广告的请求格式只决定端点是否可用;具体字段和工具是否受支持仍由服务端决定。
/v1/models 增强
/v1/models 现在携带非聊天场景的推荐元数据,Agent 在调用图像、视频、音乐、3D、TTS、STT、embedding、rerank 或翻译端点之前可以使用这些元数据。
当
recommended_for 存在时,agent_preferences 来源于缓存的 24 小时成功率快照:
- 窗口:24 小时
- 快照缓存:stale-while-revalidate
status = "ready"表示该模型有足够的最近样本参与排序status = "insufficient_samples"表示该模型仍可见,但不会排在有评分模型之前
分类过滤
推荐发现
对于非聊天工作流,Agent 应首先获取当前的推荐候选名单:recommended_for 值为:
imagevideomusic3dttssttembeddingreranktranslation
category 和 recommended_for,则二者必须完全匹配。
推荐的 Agent 流程:
GET /v1/models?recommended_for=<scene>- 选择第一个
agent_preferences.<scene>.status == "ready"的模型 - 使用
model=<selected>明确调用端点 - 仅在短暂错误情况下,使用下一个
ready模型重试
llms.txt
机器可读的 API 概览可通过以下方式获取:- 带工作示例的首次调用模板
- 常见模型名称(基于使用数据动态生成)
- 所有 12 个 API 端点
- 模型发现的过滤参数
- 错误处理指南
llms.txt 的 AI Agent 通常可以在第一次尝试时成功。
在 Agent 代码中的使用
Python (OpenAI SDK)
JavaScript (OpenAI SDK)
设计原则
快速失败,提供明确信息
错误会立即返回,并提供 Agent 自我修正所需的所有数据。
不自动路由
API 不会在未通知的情况下替换其他模型。由 Agent 来决定。
数据驱动的建议
所有推荐均来自生产数据,而非硬编码列表。
向后兼容
所有提示字段都是可选的。现有客户端不会受到影响。