mcpField
O
omni-inference

omni-inference

github.com/cheaper-inference开发82.3k1.1k 次安装今天更新
代码仓库

关于 omni-inference

omni-inference 介绍面向 AI Agent 和其他集成的 OmniRoute OpenAI 兼容推理 API,涵盖聊天、Responses、图像、音频、嵌入、审核、重排和搜索,并提供模型发现与服务商组合。

主要功能

  1. 01OpenAI 兼容的聊天与 Responses API
  2. 02图像生成和编辑接口
  3. 03文本转语音与语音转录
  4. 04嵌入、审核和重排
  5. 05按能力类型发现模型
  6. 06压缩工具结果的 RTK

适用场景

  1. 01发送聊天或代码生成请求
  2. 02通过 API 生成或编辑图像
  3. 03转录音频或合成语音
  4. 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。

端点

负载

如需详细的请求/响应架构,请查看完整的 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/models
  • 503 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/image
  • 400 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_tokens
  • 400 invalid_encoding_format → 使用 float 或 base64
  • 503 → 提供商不可用;请尝试 /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 }] }

参数
字段类型描述
modelstring来自 /v1/models/web 的提供商模型
querystring搜索查询
max_resultsnumber最大结果数(默认值:5)
include_answerboolean是否包含 AI 综合生成的答案
search_depthstringbasic 或 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?:[...] }

参数
字段类型描述
modelstring来自 /v1/models/web 的提供商(例如 jina/reader、firecrawl/scrape)
urlstring要抓取的 URL
formatstringmarkdown(默认值)、html、text
错误
  • 400 invalid_url → URL 必须是 http/https
  • 403 blocked → 提供商被目标网站屏蔽;请尝试其他模型
  • 503 → 提供商不可用;请尝试 /v1/models/web 中的其他模型

评论

支持 Markdown