Skip to content

接口说明

对话补全(Chat)

OpenAI 协议

shell
POST https://api.scnet.cn/api/llm/v1/chat/completions

1.功能介绍

根据输入的上下文,来让模型补全对话内容。

2.请求参数

Header 参数
名称类型必填示例值
Content-Typestringapplication/json
AuthorizationstringBearer <API Key>
Body 参数
名称类型必填默认值描述
modelstring\使用的模型的 ID。您可以使用DeepSeek-R1-Distill-Qwen-7B和DeepSeek-R1-Distill-Qwen-32B。
messagesarray\表示聊天上下文信息。
您必须在消息数组中提供一个或多个消息。每个消息必须与system、user或assistant中的一个角色相关联。
角色:表示消息作者的角色。根据角色,模型了解它应该如何行为以及谁在发起调用。
System:这个角色通常负责设定模型的行为和规则。它可以提供上下文信息,定义任务的范围,或者设定对话的主题。
User:用户角色代表与模型进行交互的实际用户。用户提出问题、请求信息或寻求帮助,模型根据用户的输入进行响应。
Assistant:助手角色是模型本身,负责理解用户的输入并生成相应的输出。
其中,system 角色可选,如存在则必须位于列表的最开始。user 和 assistant 需交替出现,以 user 提问开始,user 提问结束,Content 不能为空。Role 的顺序示例:[system(可选) user assistant user assistant user ...]。
max_tokensinteger4096限制一次请求中模型生成 completion 的最大 token 数,输入 token 和输出 token 的总长度受模型的上下文长度的限制。请参考模型进行设置。
例如:DeepSeek-7B模型的上下文长度为32K(输入 token 和输出 token 的总长度),则其max_tokens介于 1 到 32768间的整数。
temperaturenumber1采样温度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2) 将使输出更加集中和确定。
对于DeepSeek-R1系列模型,官方给出使用建议如下:
temperature 设置在 0.5-0.7 之间,推荐 0.6,防止输出重复或不连贯。
enable_thinkingbooleantrue是否开启思考模式,适用于 Qwen3系列模型、DeepSeek-V4系列模型。
reasoning_effortstringhigh推理强度。可以调整推理强度,可选值为high和max。只适用于 DeepSeek-V4系列模型。只支持OpenAI协议
top_pnumber1top的值,介于 0 和 1 之间。作为调节采样温度的替代方案,模型会考虑前 top_p 概率的 token 的结果。所以 0.1 就意味着只有包括在最高 10% 概率中的 token 会被考虑。 我们通常建议修改这个值或者更改 temperature,但不建议同时对两者进行修改。
不支持以下模型(为了兼容已有软件,设置该参数后不会报错,但也不会生效):
DeepSeek-R1-Distill系列
stopobjectnull生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成。
streambooleanfalse流式响应的选项,当字段stream为true时,该字段生效。
注意: QwQ-32B 模型可支持流式及非流式输出方式,但使用非流式时,建议设置max_tokens值不超过4096,避免请求超时。
stream_optionsobjecttext当启用流式输出时,可通过将本参数设置为{"include_usage": true},在输出的最后一行显示所使用的Token数。
如果设置为false,则最后一行不显示使用的Token数。
本参数仅在设置stream为true时生效。
response_formatobjecttext指定模型必须输出的格式。设置为 { "type": "json_object" } 以启用 JSON 模式,该模式保证模型生成的消息是有效的 JSON。
注意: 使用 JSON 模式时,你还必须通过系统或用户消息指示模型生成 JSON。否则,模型可能会生成不断的空白字符,直到生成达到令牌限制,从而导致请求长时间运行并显得“卡住”。此外,如果 finish_reason="length",这表示生成超过了 max_tokens 或对话超过了最大上下文长度,消息内容可能会被部分截断。
frequency_penaltynumber0介于 -2.0 和 2.0 之间的数字。如果该值为正,那么新 token 会根据其在已有文本中的出现频率受到相应的惩罚,降低模型重复相同内容的可能性。
不支持以下模型(为了兼容已有软件,设置该参数后不会报错,但也不会生效):
DeepSeek-R1-Distill系列
presence_penaltynumber0介于 -2.0 和 2.0 之间的数字。如果该值为正,那么新 token 会根据其是否已在已有文本中出现受到相应的惩罚,从而增加模型谈论新主题的可能性。
不支持以下模型(为了兼容已有软件,设置该参数后不会报错,但也不会生效):
DeepSeek-R1-Distill系列

3.响应参数

名称类型必填描述
idstring该对话的唯一标识符。
choicesobject[]模型生成的 completion 的选择列表,object[]包含以下三个参数:
● finish_reason(string),模型停止生成 token 的原因。必填。
    ○ stop:模型自然停止生成,或遇到 stop 序列中列出的字符串。
    ○ length :输出长度达到了模型上下文长度限制,或达到了 max_tokens 的限制。
    ○ content_filter:输出内容因触发过滤策略而被过滤。
    ○ insufficient_system_resource:系统推理资源不足,生成被打断。
● index(integer),该 completion 在模型生成的 completion 的选择列表中的索引。必填。
● message(object),模型生成的 completion 消息。必填。
    ○ content(string),该 completion 的内容。必填,可为空值。
    ○ reasoning_content(string),适用于DeepSeek-R1-671B,Qwen3-30B-A3B。内容为 assistant 消息中在最终答案之前的推理内容。非必填。
    ○ role(string),生成这条消息的角色。必填。
createdinteger创建聊天完成时的 Unix 时间戳(以秒为单位)。
modelstring生成该 completion 的模型名。
system_fingerprintstring代表模型运行的后端配置。
objectstring对象的类型, 其值为 chat.completion。
usageobjectToken 统计信息。

4.请求示例

cURL请求示例
shell
curl -L -X POST 'https://api.scnet.cn/api/llm/v1/chat/completions' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <API Key>' \
--data-raw '{
  "messages": [
    {
      "content": "You are a helpful assistant",
      "role": "system"
    },
    {
      "content": "Hi",
      "role": "user"
    }
  ],
  "model": "DeepSeek-R1-Distill-Qwen-7B",
  "frequency_penalty": 0,
  "max_tokens": 2048,
  "presence_penalty": 0,
  "response_format": {
    "type": "text"
  },
  "stop": null,
  "stream": false,
  "temperature": 1,
  "top_p": 1
}'
Python请求示例
  • OpenAI SDK
python
from openai import OpenAI

client = OpenAI(api_key="<API Key>", base_url="https://api.scnet.cn/api/llm/v1")

response = client.chat.completions.create(
  model="DeepSeek-R1-Distill-Qwen-7B",
  messages=[
    {"role": "system", "content": "You are a helpful assistant"},
    {"role": "user", "content": "Hello"},
  ],
  max_tokens=1024,
  temperature=0.7,
  stream=False
)
print(response.choices[0].message.content)
  • REQUESTS
python
import requests
import json

url = "https://api.scnet.cn/api/llm/v1/chat/completions"

payload = json.dumps({
  "messages": [
    {
      "content": "You are a helpful assistant",
      "role": "system"
    },
    {
      "content": "Hi",
      "role": "user"
    }
  ],
  "model": "DeepSeek-R1-Distill-Qwen-7B",
  "frequency_penalty": 0,
  "max_tokens": 2048,
  "presence_penalty": 0,
  "response_format": {
    "type": "text"
  },
  "stop": None,
  "stream": False,
  "temperature": 1,
  "top_p": 1
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer <API Key>'
}

response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
  • HTTP.CLIENT
python
import http.client
import json

conn = http.client.HTTPSConnection("api.scnet.cn")
payload = json.dumps({
  "messages": [
    {
      "content": "You are a helpful assistant",
      "role": "system"
    },
    {
      "content": "Hi",
      "role": "user"
    }
  ],
  "model": "DeepSeek-R1-Distill-Qwen-7B",
  "frequency_penalty": 0,
  "max_tokens": 2048,
  "presence_penalty": 0,
  "response_format": {
    "type": "text"
  },
  "stop": None,
  "stream": False,
  "temperature": 1,
  "top_p": 1
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer <API Key>'
}
conn.request("POST", "/api/llm/v1/chat/completions", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Go请求示例
go
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://api.scnet.cn/api/llm/v1/chat/completions"
  method := "POST"

  payload := strings.NewReader(`{
  "messages": [
    {
      "content": "You are a helpful assistant",
      "role": "system"
    },
    {
      "content": "Hi",
      "role": "user"
    }
  ],
  "model": "DeepSeek-R1-Distill-Qwen-7B",
  "frequency_penalty": 0,
  "max_tokens": 2048,
  "presence_penalty": 0,
  "response_format": {
    "type": "text"
  },
  "stop": null,
  "stream": false,
  "temperature": 1,
  "top_p": 1
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Authorization", "Bearer <API Key>")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
Nodejs请求示例
  • OpenAI SDK
javascript
import OpenAI from "openai";

const openai = new OpenAI({
        baseURL: 'https://api.scnet.cn/api/llm/v1',
        apiKey: '<API Key>'
});

async function main() {
  const completion = await openai.chat.completions.create({
    messages: [{ role: "system", content: "You are a helpful assistant." }],
    model: "DeepSeek-R1-Distill-Qwen-7B",
  });

  console.log(completion.choices[0].message.content);
}

main();

5.响应示例

json
{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "Hello! How can I help you today?",
        "role": "assistant"
      }
    }
  ],
  "created": 1740036498,
  "id": "39bff8f688377b9e0c73564ab2fae566",
  "model": "DeepSeek-R1-Distill-Qwen-7B",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 10,
    "prompt_tokens": 16,
    "total_tokens": 26
  }
}

Anthropic 协议

shell
POST https://api.scnet.cn/api/llm/anthropic/v1/messages

1.功能介绍

兼容 Anthropic 协议的对话补全能力,根据输入的上下文生成符合 Anthropic 规范的对话响应。

2.请求参数

Header 参数
名称类型必填示例值描述
Content-Typestringapplication/json请求体内容类型
AuthorizationstringBearer <API Key>身份验证,格式为 Bearer + API Key
anthropic-versionstring2023-06-01anthropic版本,可不填
Body 参数
名称类型支持状态必填描述
modelstring支持使用的模型的 ID,暂只支持:MiniMax-M2.5
messagesarray部分支持支持文本和工具调用,不支持图像和文档输入
- 每个消息包含 role(user/assistant)和 content 字段
- 以 user 消息开头,user 和 assistant 交替出现
- 系统提示词需通过 system 字段传递,而非 messages 中的 system 角色
max_tokensinteger支持模型生成的最大 token 数
streamboolean支持是否开启流式响应
systemstring/array支持系统提示词,用于设定模型的行为和规则
temperaturenumber支持采样温度,取值范围 (0.0, 1.0],控制输出随机性,较高的值增加随机性,较低的值更确定, 建议取值 1
tool_choicestring/object支持工具选择策略
toolsarray支持工具定义。每个工具必须包含input_schema,否则会报错。已知Claude Code自带的web_search工具不支持
top_pnumber支持核采样参数
metadataobject支持自定义元数据,Anthropic 协议兼容字段,格式为 {"user_id": "xxx"},用于标识用户,无实际业务逻辑影响
thinkingobject支持思考模式配置 type 取值:
- enabled:开启思考模式,模型在生成回复前会先进行推理,以提升回答准确度。可设置 budget_tokens限制思考过程的 Token 上限。
- disabled:关闭思考模式。
仅DeepSeek V4系列模型支持
reasoning_effortobject支持控制模型的推理强度。可选值:high、max,默认为max。仅DeepSeek V4系列模型支持
stop_sequencesarray忽略该参数会被忽略
top_knumber忽略该参数会被忽略
service_tierstring忽略该参数会被忽略
mcp_serversarray忽略该参数会被忽略
context_managementobject忽略该参数会被忽略
containerobject忽略该参数会被忽略

Messages 字段支持说明

字段类型支持状态必填描述
type="text"支持文本消息
type="tool_use"支持工具调用
type="tool_result"支持工具调用结果
type="thinking"不支持推理内容
type="image"不支持暂不支持图像输入
type="document"不支持暂不支持文档输入

3.响应参数

名称类型必填描述
idstring对话唯一标识符,格式兼容 Anthropic 规范(如 msg_xxxx)。
typestring响应类型,固定为 "message"(Anthropic 规范)。
rolestring响应消息的角色,固定为 "assistant"。
contentarray模型生成的内容列表,每个元素为 {"type": "text", "text": "生成内容"} 格式。
modelstring生成响应的模型名,兼容 Anthropic 模型名格式。
stop_reasonstring停止生成原因,映射原 finish_reason:
- "end_turn":对应 stop
- "max_tokens":对应 length
- "content_filter":对应 content_filter
- "error":对应 insufficient_system_resource
usageobjectToken 统计信息,格式:
{
"input_tokens": 整数, // 输入 token 数
"output_tokens": 整数, // 输出 token 数
"total_tokens": 整数 // 总 token 数
}

4.请求示例

cURL请求示例
shell
curl https://api.scnet.cn/api/llm/anthropic/v1/messages \
  -H "Content-Type: application/json" \
  -H "anthropic-version: 2023-06-01" \
  -H "Authorization: Bearer <API KEY>" \
  -d '{
      "messages":  [
        {"role": "user", "content": "你好"}
      ],
      "model": "MiniMax-M2.5",
      "max_tokens":196000,
      "stream": false
    }'
Python请求示例
python
import requests
import json

url = "https://api.scnet.cn/api/llm/anthropic/v1/messages"

payload = json.dumps({
    "messages":  [
        {"role": "user", "content": "你好"}
    ],
    "model": "MiniMax-M2.5",
    "max_tokens":196000,
    "stream": false
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer <API Key>'
}

response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)

5.响应示例

json
{
    "id": "chatcmpl-f0ef02e4e54c628bd05fea07cd0b178e",
    "type": "message",
    "role": "assistant",
    "content": [
        {
            "type": "text",
            "text": "\n\n你好!有什么我可以帮助你的吗?"
        }
    ],
    "model": "MiniMax-M2.5",
    "stop_reason": "end_turn",
    "usage": {
        "input_tokens": 40,
        "output_tokens": 30
    }
}
流式响应示例(stream=true)
event: message_start
data: {"type":"message_start","message":{"id":"chatcmpl-17559d29890659196503f551da1f0ef4","content":[],"model":"MiniMax-M2.5","usage":{"input_tokens":40,"output_tokens":0}}}

event: content_block_start
data: {"type":"content_block_start","content_block":{"type":"text","text":""},"index":0}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":">\n"},"index":0}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"\n你"},"index":0}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"好"},"index":0}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"!有什"},"index":0}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"么我可"},"index":0}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"以帮"},"index":0}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"助你"},"index":0}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"的"},"index":0}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"吗"},"index":0}

event: content_block_stop
data: {"type":"content_block_stop","index":0}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"input_tokens":40,"output_tokens":29}}

event: message_stop
data: {"type":"message_stop"}

data: [DONE]