统一中转 · 同时兼容 OpenAI 与 Anthropic 两种协议
聊天 · 文生图 · 语音合成(TTS) · 语音识别(ASR) · 文字识别(OCR) 一站接入
把官方地址换成下面的 Base URL + 你的 API Key 即可sk-xxxxxxxxxxxx 都是占位符,请替换成你自己的 API Key。模型列表用你的 Key 调用 GET /v1/models 获取(仅需有效 Key,不受额度限制)。编辑 ~/.config/aichat/config.yaml,新增一个 openai-compatible 客户端:
# ~/.config/aichat/config.yaml
clients:
- type: openai-compatible
name: manbuwl
api_base: https://models.manbuwl.com/v1
api_key: sk-xxxxxxxxxxxx然后直接对话(模型名用网关里的模型 ID):
aichat -m manbuwl:altp-qwen3.6-plus "用一句话介绍你自己"curl https://models.manbuwl.com/v1/chat/completions \ -H "Authorization: Bearer sk-xxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{"model":"altp-qwen3.6-plus","messages":[{"role":"user","content":"你好"}]}'
Python SDK:OpenAI(base_url="https://models.manbuwl.com/v1", api_key="sk-xxxxxxxxxxxx")
设置环境变量指向本网关,然后正常使用 claude:
export ANTHROPIC_BASE_URL=https://models.manbuwl.com export ANTHROPIC_AUTH_TOKEN=sk-xxxxxxxxxxxx export ANTHROPIC_MODEL=claude-sonnet-4-6 claude
curl https://models.manbuwl.com/v1/messages \ -H "x-api-key: sk-xxxxxxxxxxxx" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{"model":"claude-sonnet-4-6","max_tokens":1024,"messages":[{"role":"user","content":"你好"}]}'
端点:POST /v1/audio/speech · 请求体:JSON · 返回:二进制音频流(audio/wav),不是 JSON。用法与 OpenAI audio.speech 完全一致。
| 字段 | 必填 | 说明 |
|---|---|---|
model | 是 | 固定 qwen3-tts-flash(传 OpenAI 的 tts-1/tts-1-hd 也会自动降级到它) |
input | 是 | 要合成的文本。⚠️ 文本放这里,不是 text 也不是 prompt |
voice | 否 | 音色,默认 Cherry(见下表) |
response_format | 否 | 仅影响返回的 Content-Type 标注,实际始终输出 wav |
curl https://models.manbuwl.com/v1/audio/speech \ -H "Authorization: Bearer sk-xxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{"model":"qwen3-tts-flash","input":"漫步无垠,你好世界","voice":"Cherry"}' \ --output speech.wav
from openai import OpenAI client = OpenAI(base_url="https://models.manbuwl.com/v1", api_key="sk-xxxxxxxxxxxx") resp = client.audio.speech.create(model="qwen3-tts-flash", voice="Cherry", input="你好世界") resp.stream_to_file("speech.wav")
也兼容 OpenAI 标准音色名(自动映射):alloy→Cherry、echo→Ethan、fable→Serena、onyx→Dylan、nova→Chelsie、shimmer→Jada。
返回:HTTP 200 + Content-Type: audio/wav,body 即 wav 字节流(curl 用 --output 存文件,SDK 用 stream_to_file)。出错时才返回 JSON:{"error":{"message":"[router] ..."}}。
端点:POST /v1/images/generations · 请求体:JSON · 返回:JSON(图片为 URL,非 base64)。用法与 OpenAI images.generations 一致。
| 字段 | 必填 | 说明 |
|---|---|---|
model | 是 | 如 altp-wan2.7-image、altp-qwen-image-2.0 |
prompt | 是 | 图片描述文本 |
size | 否 | 如 1024x1024(也接受 1024*1024),默认 1024x1024 |
n | 否 | 生成张数,默认 1 |
curl https://models.manbuwl.com/v1/images/generations \ -H "Authorization: Bearer sk-xxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{"model":"altp-wan2.7-image","prompt":"一只在月球上散步的猫","size":"1024x1024","n":1}'
{
"created": 1780475270,
"data": [ { "url": "https://dashscope-xxx.oss-../xxxx.png" } ]
}⚠️ 图片是临时 URL(阿里云 OSS,有效期有限),拿到后请尽快下载保存到自己的存储。
端点:POST /v1/audio/transcriptions · 请求体:multipart/form-data(不是 JSON,是表单上传文件) · 返回:JSON。用法与 OpenAI audio.transcriptions 一致。
| 字段 | 必填 | 说明 |
|---|---|---|
file | 是 | 音频文件(wav / mp3 等),以文件形式上传 |
model | 是 | 见下方模型表 |
response_format | 否 | json(默认) 或 text |
curl https://models.manbuwl.com/v1/audio/transcriptions \ -H "Authorization: Bearer sk-xxxxxxxxxxxx" \ -F "file=@audio.wav" \ -F "model=paraformer-realtime-v2"
| 模型 | 说明 |
|---|---|
fun-asr | 通用录音文件转写 |
paraformer-8k-v2 | 8kHz 电话录音转写 |
paraformer-realtime-v2 | 实时语音识别 |
返回:默认 {"text":"识别出的文字"};传 response_format=text 则直接返回纯文本。
端点:POST /v1/ocr · 返回:JSON。识别图片中的文字(PaddleOCR),有 Key 即可调用,方便程序/AI 直接使用。三种传图方式三选一。
| 字段 | 位置 | 必填 | 说明 |
|---|---|---|---|
image_base64 | JSON | 三选一 | 图片 base64(可带 data:image/png;base64, 前缀) |
url | JSON | 图片的 http(s) 地址 | |
file | 表单 | 以 multipart/form-data 上传图片文件 | |
model | JSON/表单 | 否 | 识别档位 tiny/small/medium,默认 small |
① base64(JSON):
curl https://models.manbuwl.com/v1/ocr \ -H "Authorization: Bearer sk-xxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d "{\"image_base64\":\"$(base64 -w0 image.png)\",\"model\":\"small\"}"
② 直接上传文件(表单):
curl https://models.manbuwl.com/v1/ocr \ -H "Authorization: Bearer sk-xxxxxxxxxxxx" \ -F "file=@image.png" \ -F "model=small"
③ 图片 URL(JSON):
curl https://models.manbuwl.com/v1/ocr \ -H "Authorization: Bearer sk-xxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{"url":"https://example.com/a.png","model":"small"}'
{
"model": "small",
"elapsed_ms": 127,
"raw_text": "第一行文字\n第二行文字",
"lines": [
{ "text": "第一行文字", "confidence": 0.9876, "box": [[0,0],[100,0],[100,20],[0,20]] }
]
}raw_text 是整张图拼好的纯文本(含换行);lines 是逐行结果(文字 + 置信度 + 四角坐标框)。查可用档位:GET /v1/ocr/models。
curl https://models.manbuwl.com/v1/models \
-H "Authorization: Bearer sk-xxxxxxxxxxxx"返回你的 Key 有权访问的模型列表(仅需有效 Key,不消耗额度)。