模型服务 API 文档

OpenAI 兼容的聊天补全接口。使用你的 API Key 调用,按 Key 计量消耗。本服务由杭州沐垚科技有限公司(瓴羊 AI 实训平台)封装提供,上游为 Agent One 模型服务。

1. 接入地址

Base URLhttps://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
toolsOpenAI 原生函数定义数组(见第 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_callsfinish_reason"tool_calls"
  • 流式时 delta.tool_calls 增量返回,需按 index 累加 function.namefunction.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" } }
401API Key 缺失或无效
403Key 已停用
400请求格式错误,或模型不在白名单(model_not_allowed
502上游服务异常

9. 说明

  • 多轮对话:在 messages 中保留历史消息即可,服务端不存储上下文。
  • 计量:每次调用按 Key 归属记录调用次数与 token(流式在末帧结算),可在管理后台查看每日/模型/Key 维度消耗。
  • 默认模型为 DeepSeek-V4-Flash(高速响应);不指定 model 时使用它。
  • 流式响应已关闭中间层缓冲,可实现逐字输出;客户端请勿开启响应缓冲(如 curl 需加 -N)。