mcpField
O
omni-inference

omni-inference

github.com/diegosouzapw开发82.6k992 次安装今天更新
代码仓库

关于 omni-inference

omni-inference 是 OmniRoute 的核心推理技能,面向使用其 API 的 AI Agent 和应用。它提供兼容 OpenAI 的聊天、嵌入、图像、音频等接口,并可通过服务商组合自动回退。

主要功能

  1. 01兼容 OpenAI 的聊天和 Responses API
  2. 02生成图像并编辑现有图像
  3. 03文本转语音和语音转录
  4. 04创建嵌入并执行审核或重排
  5. 05发现模型并使用服务商组合

适用场景

  1. 01将 AI Agent 接入聊天和补全 API
  2. 02生成图像或将语音转为文本
  3. 03为应用数据创建嵌入
  4. 04服务商不可用时使用组合进行回退

MCP 相关

OmniRoute 还内置 MCP 服务,但此技能介绍的是推理接口,而非 MCP 工具或资源。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/diegosouzapw/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