指南
协议与 SDK
使用 OpenAI-compatible、Responses 和 Anthropic Messages 协议,包括流式、工具调用和迁移。
Model API 支持三种线上协议。继续使用你现有的 SDK,只修改 Base URL、API key 和模型 ID。
Endpoint 一览
| 协议 | Endpoint | 典型客户端 |
|---|---|---|
| OpenAI Chat Completions | POST https://openapi.felo.ai/api/v1/chat/completions | OpenAI SDK、大多数 OpenAI-compatible 工具 |
| OpenAI Responses | POST https://openapi.felo.ai/api/v1/responses | 需要 Responses API 功能的 OpenAI SDK |
| Anthropic Messages | POST https://openapi.felo.ai/api/v1/messages | Anthropic SDK、Claude Code、Claude 原生工具 |
Base URL
| 客户端 | Base URL | 原因 |
|---|---|---|
| OpenAI SDK | https://openapi.felo.ai/api/v1 | SDK 会追加 /chat/completions 或 /responses |
| Anthropic SDK | https://openapi.felo.ai/api | SDK 会追加 /v1/messages;不要自己再加 /v1 |
两个客户端都把 Felo API key 作为 SDK 的 API key。
import OpenAI from "openai";
import Anthropic from "@anthropic-ai/sdk";
const openai = new OpenAI({
apiKey: process.env.FELO_API_KEY,
baseURL: "https://openapi.felo.ai/api/v1",
});
const anthropic = new Anthropic({
apiKey: process.env.FELO_API_KEY,
baseURL: "https://openapi.felo.ai/api",
});选择协议
- 当你的工具或 SDK 期望熟悉的
messages数组和choices[0].message.content时,使用 Chat Completions。 - 当你需要 OpenAI 的 Responses 对象、
input、instructions或output_text时,使用 Responses。 - 当你使用 Anthropic SDK 或 Claude 原生工具时,使用 Messages。
先检查模型,不要假设所有协议都可用。目录会暴露 supported_protocols、supported_parameters 和 recommended_protocol。recommended_protocol 是面向客户端的建议,不是限制;模型仍可能接受其他协议。
流式
设置 stream: true 以接收 Server-Sent Events。
- Chat Completions 发送 OpenAI 风格的 chat chunk。
- Responses 发送 Responses SSE 事件,并以一个已完成的 response 对象结束。
- Messages 发送 Anthropic message stream 事件。
增量读取事件流,并在关闭连接前处理终止事件。连接中断不等同于已完成响应。
工具调用和结构化输出
按协议原生格式传入 tools。支持情况因模型而异,依赖工具调用、JSON 模式或结构化输出前,请检查目录中的 supported_parameters。模型可能接受该字段,但仍忽略不支持的选项。
渠道路由
三个 endpoint 都接受 X-Felo-Channel,用于固定供应商。header 规则和示例见渠道与供应商路由。
从官方 API 迁移
- 将 Base URL 改为对应的 Felo 地址。
- 将 API key 替换为
FELO_API_KEY。 - 将模型名称替换为公开的 Felo 模型 ID。
- 保持其余请求结构不变。
| 症状 | 可能原因 |
|---|---|
| 所有请求都 404 | Base URL 已包含 /v1,或 Anthropic Base URL 手动加了 /v1 |
| 401 | 缺少 Felo key,或客户端仍在发送旧 key |
400 model 错误 | 模型 ID 未公开,或该模型不支持所选 endpoint |
| Messages 请求被拒绝 | Messages 协议要求 max_tokens |
| 工具调用被忽略 | 模型未声明该能力 |