模型服务 API 文档
OpenAI 兼容的聊天补全接口。使用你的 API Key 调用,按 Key 计量消耗。本服务由杭州沐垚科技有限公司(瓴羊 AI 实训平台)封装提供,上游为 Agent One 模型服务。
1. 接入地址
| Base URL | https://www.muyaotech.com/api/gateway |
| 端点 | POST /chat/completions |
| 协议 | OpenAI Chat Completions(兼容) |
| 认证 | Authorization: Bearer <你的 API Key> |
| 输出方式 | 默认流式(SSE),如需一次性返回请显式传 stream: false |
在管理后台「模型网关 → 密钥管理」生成 Key,并一键复制调用示例。
2. 重要:默认流式输出
本接口 stream 参数默认为 true:不传 stream 时,服务端返回text/event-stream(SSE)增量流,而不是一次性 JSON。
- 需要流式(推荐):什么都不用传,或显式
"stream": true。 - 需要一次性完整 JSON:必须显式传
"stream": false。 - 使用 OpenAI 官方 SDK 时请显式声明:流式写
stream=True,非流式写stream=False。SDK 默认会省略该字段,此时服务端按流式返回,若 SDK 以非流式方式解析会报错。
3. 请求示例
cURL(流式,默认)
-N 关闭 curl 自身缓冲,才能看到逐字输出。
curl -N https://www.muyaotech.com/api/gateway/chat/completions \
-H "Authorization: Bearer sk-xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你好,介绍一下你自己"}
]
}'cURL(非流式,需显式 stream:false)
curl https://www.muyaotech.com/api/gateway/chat/completions \
-H "Authorization: Bearer sk-xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash",
"messages": [{"role": "user", "content": "你好"}],
"stream": false
}'Python(OpenAI SDK 兼容,流式)
from openai import OpenAI
client = OpenAI(base_url="https://www.muyaotech.com/api/gateway", api_key="sk-xxxx")
stream = client.chat.completions.create(
model="DeepSeek-V4-Flash",
messages=[{"role": "user", "content": "你好"}],
stream=True, # 与服务端默认一致
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
# 如需一次性返回,改为 stream=False
# resp = client.chat.completions.create(..., stream=False)
# print(resp.choices[0].message.content)Node.js(原生 fetch 读 SSE)
const res = await fetch("https://www.muyaotech.com/api/gateway/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer sk-xxxx",
},
body: JSON.stringify({
model: "DeepSeek-V4-Flash",
messages: [{ role: "user", content: "你好" }],
// 不传 stream 即为流式
}),
});
const reader = res.body.getReader();
const decoder = new TextDecoder();
let buf = "";
while (true) {
const { done, value } = await reader.read();
if (done) break;
buf += decoder.decode(value, { stream: true });
const lines = buf.split("\n");
buf = lines.pop() ?? "";
for (const line of lines) {
const s = line.trim();
if (!s.startsWith("data:")) continue;
const data = s.slice(5).trim();
if (data === "[DONE]") continue; // 流结束标志
const obj = JSON.parse(data);
if (obj.usage) continue; // 末帧为用量统计
const delta = obj.choices?.[0]?.delta?.content;
if (delta) process.stdout.write(delta);
}
}4. 请求参数
model | 模型 code(见下方清单),默认 DeepSeek-V4-Flash |
messages | 对话消息数组,role 为 system/user/assistant(必填) |
stream | 是否 SSE 流式输出,默认 true;传 false 则一次性返回完整 JSON |
temperature | 采样温度 0–2,默认 1.0 |
max_tokens | 最大生成 token 数 |
top_p | 核采样参数,默认 1.0 |
tools | OpenAI 原生函数定义数组(见第 6 节)。传了即可启用函数调用,模型按需返回 tool_calls |
tool_choice | 可选,"auto"(默认)或指定某个函数 {"type":"function","function":{"name":"..."}} |
5. 可调用模型清单
以下模型经本服务实测可用,可直接在 model 字段指定。未列出的模型(图像/语音/视频/Embedding/Rerank 等专用端点,或无权限模型)本接口不对外开放。
| 模型 code | 类别 | 说明 |
|---|---|---|
DeepSeek-R1 | 推理思考 | 深度推理,长思考链 |
Deepseek-V3 | 推理思考 | 通用强模型 |
DeepSeek-V4-Pro | 推理思考 | 最强推理(Pro) |
Deepseek-R1-Distill-Qwen-7B | 推理思考 | 轻量蒸馏推理 |
Deepseek-R1-Distill-Qwen-14B | 推理思考 | 蒸馏推理 |
Deepseek-R1-Distill-Qwen-32B | 推理思考 | 蒸馏推理 |
Deepseek-R1-Distill-Llama-8B | 推理思考 | 蒸馏推理 |
DeepSeek-V4-Flash | 快速对话 | 高速响应(平台默认) |
DeepSeek-V4-Flash-0731 | 快速对话 | 高速响应快照版 |
Qwen3.5-Flash | 快速对话 | 高速响应 |
Qwen3-235B | 快速对话 | 高速大模型 |
Qwen3.5-Omni-Flash | 快速对话 | 全模态高速 |
Qwen-Long | 长文本 | 超长上下文 |
Qwen3-Max | 高质量对话 | 强能力 |
Qwen3.5-Plus | 高质量对话 | Plus |
Qwen3.6-Plus | 高质量对话 | Plus |
Qwen3.7-Plus | 高质量对话 | Plus |
Qwen3.7-Max | 高质量对话 | Max |
Qwen3.8-Max | 高质量对话 | Max(最新) |
Qwen3.6-Max-Preview | 高质量对话 | Max 预览 |
Qwen3-235B-A22B | 高质量对话 | MoE |
Qwen3-235B-A22B-Instruct-2507 | 高质量对话 | MoE Instruct |
Qwen-VL-Max | 视觉理解 | 图文理解 |
Qwen-VL-Plus | 视觉理解 | 图文理解 |
Qwen3-Coder-Plus | 代码生成 | 代码专用 |
Qwen3-Coder-480B-A35B-Instruct | 代码生成 | 代码专用 MoE |
Kimi-K2.5 | 其他 | Kimi 大模型 |
6. 函数调用(Function Calling / tool_calls)
本服务支持 OpenAI 原生 tool_calls:在请求中传入 tools(可选 tool_choice), 模型可在需要时返回要调用的函数名与参数;客户端执行后,将结果以 role: "tool" 消息回传,即可完成多轮函数调用。所有白名单模型(含 DeepSeek / Qwen 系列)均经实测支持。
tools结构同 OpenAI:[{"type":"function","function":{"name","description","parameters"}}]。- 非流式时,结果在
choices[0].message.tool_calls,finish_reason为"tool_calls"。 - 流式时
delta.tool_calls增量返回,需按index累加function.name与function.arguments;一个工具的参数常被拆成多帧,id仅首帧出现。 - R1 等推理模型会先输出
delta.reasoning_content思考过程,tool_calls在思考结束后出现。 - 多轮:把助手消息(含
tool_calls)与{"role":"tool","tool_call_id": call.id, "content": "执行结果"}一并回传再调用一次即可。
Python(非流式,单轮函数调用)
from openai import OpenAI
client = OpenAI(base_url="https://www.muyaotech.com/api/gateway", api_key="sk-xxxx")
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的当前天气",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string", "description": "城市名"}},
"required": ["city"],
},
},
}]
# 非流式需显式 stream=False
resp = client.chat.completions.create(
model="DeepSeek-V4-Flash",
messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
tools=tools,
stream=False,
)
msg = resp.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0]
print("调用函数:", call.function.name, call.function.arguments)
# => 调用函数: get_weather {"city": "北京"}
# 客户端在此执行 get_weather("北京"),把结果回传后再次调用即可拿到自然语言回答:
# messages = [{"role":"user","content":"北京今天天气怎么样?"}, msg,
# {"role":"tool","tool_call_id":call.id,"content":"晴 26℃"}]
# answer = client.chat.completions.create(model="DeepSeek-V4-Flash", messages=messages, tools=tools, stream=False)Node.js(流式增量拼装 tool_calls)
// 流式默认开启;按 index 累积 tool_calls 片段
const toolAcc = {}; // index -> { name, arguments }
const reader = res.body.getReader();
const decoder = new TextDecoder();
let buf = "";
while (true) {
const { done, value } = await reader.read();
if (done) break;
buf += decoder.decode(value, { stream: true });
const lines = buf.split("\n");
buf = lines.pop() ?? "";
for (const line of lines) {
const s = line.trim();
if (!s.startsWith("data:")) continue;
const data = s.slice(5).trim();
if (data === "[DONE]") continue;
const obj = JSON.parse(data);
if (obj.usage) continue;
for (const part of obj.choices?.[0]?.delta?.tool_calls ?? []) {
const i = part.index ?? 0;
toolAcc[i] = toolAcc[i] || { name: "", arguments: "" };
if (part.function?.name) toolAcc[i].name += part.function.name;
if (part.function?.arguments) toolAcc[i].arguments += part.function.arguments;
}
}
}
// 全部读完后,toolAcc 中即为完整函数名 + JSON 参数字符串
console.log(toolAcc);7. 响应格式
流式(默认)
响应头 Content-Type: text/event-stream。每帧一行 data:,增量文本在choices[0].delta.content:
data:{"choices":[{"delta":{"content":"你"},"index":0,"finish_reason":null}],"object":"chat.completion.chunk","model":"deepseek-v4-flash","id":"chatcmpl-xxx"}
data:{"choices":[{"delta":{"content":"好"},"index":0,"finish_reason":null}],"object":"chat.completion.chunk","model":"deepseek-v4-flash","id":"chatcmpl-xxx"}
data:{"choices":[{"delta":{"content":""},"index":0,"finish_reason":"stop"}],"object":"chat.completion.chunk","model":"deepseek-v4-flash","id":"chatcmpl-xxx"}
data:{"choices":[],"usage":{"prompt_tokens":7,"completion_tokens":42,"total_tokens":49},"object":"chat.completion.chunk","model":"deepseek-v4-flash","id":"chatcmpl-xxx"}
data: [DONE]- 用量统计在倒数第二帧:该帧
choices为空数组,携带usage。 - 流结束标志为
data: [DONE],收到后即可停止读取。 - 部分模型(如 R1 系列)会额外返回
delta.reasoning_content思考过程,可按需忽略。
非流式(stream: false)
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"model": "deepseek-v4-flash",
"choices": [
{ "index": 0, "message": { "role": "assistant", "content": "你好…" }, "finish_reason": "stop" }
],
"usage": { "prompt_tokens": 7, "completion_tokens": 42, "total_tokens": 49 }
}8. 错误码
错误统一返回 JSON(流式请求若在建流前失败,同样返回 JSON 而非 SSE):
{ "error": { "message": "Invalid API key", "code": "invalid_api_key" } }| 401 | API Key 缺失或无效 |
| 403 | Key 已停用 |
| 400 | 请求格式错误,或模型不在白名单(model_not_allowed) |
| 502 | 上游服务异常 |
9. 说明
- 多轮对话:在
messages中保留历史消息即可,服务端不存储上下文。 - 计量:每次调用按 Key 归属记录调用次数与 token(流式在末帧结算),可在管理后台查看每日/模型/Key 维度消耗。
- 默认模型为
DeepSeek-V4-Flash(高速响应);不指定model时使用它。 - 流式响应已关闭中间层缓冲,可实现逐字输出;客户端请勿开启响应缓冲(如 curl 需加
-N)。