关于 omni-inference
omni-inference 介绍面向 AI Agent 和其他集成的 OmniRoute OpenAI 兼容推理 API,涵盖聊天、Responses、图像、音频、嵌入、审核、重排和搜索,并提供模型发现与服务商组合。
主要功能
- 01OpenAI 兼容的聊天与 Responses API
- 02图像生成和编辑接口
- 03文本转语音与语音转录
- 04嵌入、审核和重排
- 05按能力类型发现模型
- 06压缩工具结果的 RTK
适用场景
- 01发送聊天或代码生成请求
- 02通过 API 生成或编辑图像
- 03转录音频或合成语音
- 04为文本输入生成嵌入
MCP 相关
README 提到 OmniRoute 内置 MCP 服务。本技能介绍推理 API 接口,但未说明该 MCP 服务暴露的工具。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cheaper-inference/ omniroute --skill omni-inference安装后在 Claude Code 中输入/omni-inference确认已加载。
附带文件references/endpoints.md
详细介绍
概述
与 OpenAI 兼容的核心推理端点:聊天补全、嵌入、图像、音频(TTS/STT)、内容审核、重排序以及 Responses API。这是 AI Agent 的主要集成接口。
身份验证
所有请求都需要有效的 Bearer 令牌或会话 Cookie。通过 POST /api/auth/login 获取令牌,或在本地开发时配置 REQUIRE_API_KEY=false。
端点
POST /api/v1/session-leasesGET /api/v1/searchPOST /api/v1/searchPOST /api/v1/chat/completionsGET /api/v1/wsPOST /api/v1/providers/{provider}/chat/completionsPOST /api/v1/api/chatPOST /api/v1/messagesPOST /api/v1/messages/count_tokensPOST /api/v1/responsesPOST /api/v1/embeddingsGET /api/v1/multimodal-embeddingsPOST /api/v1/multimodal-embeddingsPOST /api/v1/providers/{provider}/embeddingsPOST /api/v1/images/generationsPOST /api/v1/providers/{provider}/images/generationsPOST /api/v1/audio/speechPOST /api/v1/audio/transcriptionsPOST /api/v1/moderationsPOST /api/v1/rerankGET /api/v1GET /api/v1/providers/{provider}/modelsGET /api/v1/management/proxy-subscriptionsPOST /api/v1/management/proxy-subscriptionsGET /api/v1/management/proxy-subscriptions/{id}PATCH /api/v1/management/proxy-subscriptions/{id}DELETE /api/v1/management/proxy-subscriptions/{id}GET /api/v1/management/proxy-subscriptions/{id}/nodesPOST /api/v1/management/proxy-subscriptions/{id}/refreshPOST /api/v1/ocrPOST /api/v1/audio/translationsGET /api/v1/voicesPOST /api/v1/speech-to-textPOST /api/v1/text-to-speech/{voiceId}GET /api/v1/explain/routingGET /api/v1/providers/suggested-modelsGET /api/v1/provider-plugin-manifestGET /api/v1/{omnirouteCatchAll}POST /api/v1/{omnirouteCatchAll}PUT /api/v1/{omnirouteCatchAll}PATCH /api/v1/{omnirouteCatchAll}DELETE /api/v1/{omnirouteCatchAll}GET /api/v1/accounts/{id}/limitsPUT /api/v1/accounts/{id}/limitsGET /api/v1/agents/credentialsPOST /api/v1/agents/credentialsGET /api/v1/agents/healthGET /api/v1/agents/tasksPOST /api/v1/agents/tasksDELETE /api/v1/agents/tasksGET /api/v1/agents/tasks/{id}POST /api/v1/agents/tasks/{id}DELETE /api/v1/agents/tasks/{id}POST /api/v1/antigravityGET /api/v1/auto-combo/{channel}/candidatesGET /api/v1/batchesPOST /api/v1/batchesGET /api/v1/batches/{id}DELETE /api/v1/batches/{id}POST /api/v1/batches/{id}/cancelDELETE /api/v1/batches/delete-completedPOST /api/v1/classifyGET /api/v1/combosPOST /api/v1/completionsGET /api/v1/filesPOST /api/v1/filesGET /api/v1/files/{id}DELETE /api/v1/files/{id}GET /api/v1/files/{id}/contentPOST /api/v1/images/editsGET /api/v1/images/upscalePOST /api/v1/images/upscaleGET /api/v1/media/{id}POST /api/v1/issues/reportGET /api/v1/management/proxiesPOST /api/v1/management/proxiesPATCH /api/v1/management/proxiesDELETE /api/v1/management/proxiesGET /api/v1/management/proxies/assignmentsPUT /api/v1/management/proxies/assignmentsPUT /api/v1/management/proxies/bulk-assignGET /api/v1/management/proxies/healthGET /api/v1/me/statusGET /api/v1/muse-code/modelsGET /api/v1/music/generationsPOST /api/v1/music/generationsGET /api/v1/providers/{provider}/limitsPUT /api/v1/providers/{provider}/limitsGET /api/v1/quotas/checkGET /api/v1/registered-keysPOST /api/v1/registered-keysGET /api/v1/registered-keys/{id}DELETE /api/v1/registered-keys/{id}POST /api/v1/registered-keys/{id}/revokePOST /api/v1/relay/chat/completionsPOST /api/v1/relay/chat/completions/bifrostPOST /api/v1/responses/{path}GET /api/v1/search/analyticsPOST /api/v1/segmentGET /api/v1/video-bridge/drilldownDELETE /api/v1/video-bridge/drilldownGET /api/v1/videos/generationsPOST /api/v1/videos/generationsGET /api/v1/vscode/{token}POST /api/v1/vscode/{token}/api/chatPOST /api/v1/vscode/{token}/api/showGET /api/v1/vscode/{token}/api/tagsGET /api/v1/vscode/{token}/api/versionPOST /api/v1/vscode/{token}/chat/completionsGET /api/v1/vscode/{token}/combosGET /api/v1/vscode/{token}/modelsPOST /api/v1/vscode/{token}/responsesPOST /api/v1/vscode/{token}/v1/chat/completionsGET /api/v1/vscode/{token}/v1/modelsGET /api/v1/vscode/combos/{token}/{{slug}}POST /api/v1/vscode/combos/{token}/{{slug}}GET /api/v1/vscode/raw/{token}POST /api/v1/vscode/raw/{token}/api/chatPOST /api/v1/vscode/raw/{token}/api/showGET /api/v1/vscode/raw/{token}/api/tagsGET /api/v1/vscode/raw/{token}/api/versionPOST /api/v1/vscode/raw/{token}/chat/completionsGET /api/v1/vscode/raw/{token}/combosGET /api/v1/vscode/raw/{token}/modelsPOST /api/v1/vscode/raw/{token}/responsesPOST /api/v1/vscode/raw/{token}/v1/chat/completionsGET /api/v1/vscode/raw/{token}/v1/modelsPOST /api/v1/web/fetch
负载
如需详细的请求/响应架构,请查看完整的 OpenAPI 规范:GET /api/openapi/spec 或 docs/openapi.yaml。
聊天补全
需要 OMNIROUTE_URL 和 OMNIROUTE_KEY。有关设置,请参阅入口 SKILL。
端点
POST $OMNIROUTE_URL/v1/chat/completions— OpenAI 格式POST $OMNIROUTE_URL/v1/messages— Anthropic Messages 格式POST $OMNIROUTE_URL/v1/responses— OpenAI Responses API
发现
curl $OMNIROUTE_URL/v1/models | jq '.data[].id'
组合(例如 auto、cost-optimized、subscription)会自动在多个提供商之间回退。
OpenAI 格式示例
curl -X POST $OMNIROUTE_URL/v1/chat/completions \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-4-7",
"messages": [{"role": "user", "content": "Refactor this function"}],
"stream": true
}'
Anthropic 格式示例
curl -X POST $OMNIROUTE_URL/v1/messages \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-4-7",
"max_tokens": 4096,
"messages": [{"role": "user", "content": "Hi"}]
}'
工具调用
支持 OpenAI tools 数组和 Anthropic tools 块。工具结果会通过 RTK 自动压缩(47 个过滤器:git-diff、grep、test-jest、terraform-plan、docker-logs 等),可节省 20-40% 的 Token。可在单个请求中使用 X-Omniroute-Rtk: off 标头禁用。
推理 / 思考
Anthropic 扩展思考和 OpenAI Responses 推理块会原样转发,并通过推理缓存自动缓存。
错误
401→ API 密钥无效400 invalid_model→ 模型不在注册表中;请检查/v1/models503 circuit_open→ 提供商断路器已触发;请稍后重试或使用组合429 rate_limited→ 遵循Retry-After;考虑使用组合以自动回退
图像生成
需要 OMNIROUTE_URL 和 OMNIROUTE_KEY。有关设置,请参阅入口 SKILL。
端点
POST $OMNIROUTE_URL/v1/images/generations— 文本生成图像POST $OMNIROUTE_URL/v1/images/edits— 图像编辑(蒙版)POST $OMNIROUTE_URL/v1/images/variations— 生成变体
发现
curl $OMNIROUTE_URL/v1/models/image | jq '.data[]'
每个模型返回 { id, owned_by, sizes:[...], capabilities:[...] }。
生成示例
curl -X POST $OMNIROUTE_URL/v1/images/generations \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dall-e-3",
"prompt": "a red bicycle on a wet street, photoreal",
"n": 1,
"size": "1024x1024",
"response_format": "b64_json"
}'
响应:{ created, data: [{ url? or b64_json, revised_prompt }] }
错误
400 invalid_size→ 此模型不支持该尺寸;请检查/v1/models/image400 content_policy_violation→ 被提供商的安全策略拦截503→ 提供商不可用;请尝试/v1/models/image中的其他模型
文本转语音
需要 OMNIROUTE_URL 和 OMNIROUTE_KEY。有关设置,请参阅入口 SKILL。
端点
POST $OMNIROUTE_URL/v1/audio/speech— 返回二进制音频(mp3/opus/wav/flac)
发现
curl $OMNIROUTE_URL/v1/models/tts | jq '.data[]'
每个条目都包含 voices:[...],列出各提供商提供的语音名称。
示例
curl -X POST $OMNIROUTE_URL/v1/audio/speech \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "Hello from OmniRoute.",
"voice": "alloy",
"response_format": "mp3"
}' --output speech.mp3
语音
语音名称因提供商而异。请检查 /v1/models/tts — 每个条目都包含 voices:[...]。常见的 OpenAI 语音:alloy、echo、fable、onyx、nova、shimmer。
错误
400 invalid_voice→ 此模型不支持该语音400 input_too_long→ 输入超出模型的字符数限制503→ 提供商不可用;请尝试/v1/models/tts中的其他模型
语音转文本
需要 OMNIROUTE_URL 和 OMNIROUTE_KEY。有关设置,请参阅入口 SKILL。
端点
POST $OMNIROUTE_URL/v1/audio/transcriptions— multipart 上传,返回文本POST $OMNIROUTE_URL/v1/audio/translations— 转录并翻译成英语
发现
curl $OMNIROUTE_URL/v1/models/stt | jq '.data[]'
示例
curl -X POST $OMNIROUTE_URL/v1/audio/transcriptions \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-F "[email protected]" \
-F "model=whisper-1" \
-F "response_format=verbose_json"
响应:{ text, language, duration, segments?:[{ start, end, text }] }
支持的格式
音频:mp3、mp4、mpeg、mpga、m4a、wav、webm。
响应格式:json、text、srt、verbose_json、vtt。
错误
400 invalid_file_format→ 不支持的音频格式400 file_too_large→ 超出提供商限制(通常为 25MB)503→ 提供商不可用;请尝试/v1/models/stt中的其他模型
嵌入
需要 OMNIROUTE_URL 和 OMNIROUTE_KEY。有关设置,请参阅入口 SKILL。
端点
POST $OMNIROUTE_URL/v1/embeddings
发现
curl $OMNIROUTE_URL/v1/models/embedding | jq '.data[]'
每个条目:{ id, owned_by, dimensions, max_input_tokens }。
示例
curl -X POST $OMNIROUTE_URL/v1/embeddings \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "text-embedding-3-large",
"input": ["first text", "second text"],
"encoding_format": "float"
}'
响应:{ data:[{ embedding:[...], index }], usage:{ prompt_tokens, total_tokens } }
批量输入
input 接受字符串或字符串数组(最多可达到提供商的批量限制,通常为 2048 项)。
错误
400 input_too_long→ 输入超过此模型的max_input_tokens400 invalid_encoding_format→ 使用float或base64503→ 提供商不可用;请尝试/v1/models/embedding中的其他模型
网页搜索
需要 OMNIROUTE_URL 和 OMNIROUTE_KEY。有关设置,请参阅入口 SKILL。
端点
POST $OMNIROUTE_URL/v1/web/search— 统一搜索格式
发现
curl $OMNIROUTE_URL/v1/models/web | jq '.data[] | select(.kind == "webSearch")'
示例
curl -X POST $OMNIROUTE_URL/v1/web/search \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tavily/search",
"query": "OmniRoute github latest release",
"max_results": 5,
"include_answer": true
}'
响应:{ answer?, results:[{ url, title, content, score }] }
参数
| 字段 | 类型 | 描述 |
|---|---|---|
model | string | 来自 /v1/models/web 的提供商模型 |
query | string | 搜索查询 |
max_results | number | 最大结果数(默认值:5) |
include_answer | boolean | 是否包含 AI 综合生成的答案 |
search_depth | string | basic 或 advanced(Tavily) |
错误
400 query_too_long→ 缩短搜索查询503→ 提供商不可用;请尝试/v1/models/web中的其他模型
网页抓取
需要 OMNIROUTE_URL 和 OMNIROUTE_KEY。有关设置,请参阅入口 SKILL。
端点
POST $OMNIROUTE_URL/v1/web/fetch
发现
curl $OMNIROUTE_URL/v1/models/web | jq '.data[] | select(.kind == "webFetch")'
示例
curl -X POST $OMNIROUTE_URL/v1/web/fetch \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jina/reader",
"url": "https://anthropic.com",
"format": "markdown"
}'
响应:{ url, title, markdown, links?:[...], images?:[...] }
参数
| 字段 | 类型 | 描述 |
|---|---|---|
model | string | 来自 /v1/models/web 的提供商(例如 jina/reader、firecrawl/scrape) |
url | string | 要抓取的 URL |
format | string | markdown(默认值)、html、text |
错误
400 invalid_url→ URL 必须是 http/https403 blocked→ 提供商被目标网站屏蔽;请尝试其他模型503→ 提供商不可用;请尝试/v1/models/web中的其他模型