接口说明
对话补全(Chat)
OpenAI 协议
shell
POST https://api.scnet.cn/api/llm/v1/chat/completions1.功能介绍
根据输入的上下文,来让模型补全对话内容。
2.请求参数
Header 参数
| 名称 | 类型 | 必填 | 示例值 |
|---|---|---|---|
| Content-Type | string | 是 | application/json |
| Authorization | string | 是 | Bearer <API Key> |
Body 参数
| 名称 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| model | string | 是 | \ | 使用的模型的 ID。您可以使用DeepSeek-R1-Distill-Qwen-7B和DeepSeek-R1-Distill-Qwen-32B。 |
| messages | array | 是 | \ | 表示聊天上下文信息。 您必须在消息数组中提供一个或多个消息。每个消息必须与system、user或assistant中的一个角色相关联。 角色:表示消息作者的角色。根据角色,模型了解它应该如何行为以及谁在发起调用。 System:这个角色通常负责设定模型的行为和规则。它可以提供上下文信息,定义任务的范围,或者设定对话的主题。 User:用户角色代表与模型进行交互的实际用户。用户提出问题、请求信息或寻求帮助,模型根据用户的输入进行响应。 Assistant:助手角色是模型本身,负责理解用户的输入并生成相应的输出。 其中,system 角色可选,如存在则必须位于列表的最开始。user 和 assistant 需交替出现,以 user 提问开始,user 提问结束,Content 不能为空。Role 的顺序示例:[system(可选) user assistant user assistant user ...]。 |
| max_tokens | integer | 否 | 4096 | 限制一次请求中模型生成 completion 的最大 token 数,输入 token 和输出 token 的总长度受模型的上下文长度的限制。请参考模型进行设置。 例如:DeepSeek-7B模型的上下文长度为32K(输入 token 和输出 token 的总长度),则其max_tokens介于 1 到 32768间的整数。 |
| temperature | number | 否 | 1 | 采样温度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2) 将使输出更加集中和确定。 对于DeepSeek-R1系列模型,官方给出使用建议如下: temperature 设置在 0.5-0.7 之间,推荐 0.6,防止输出重复或不连贯。 |
| enable_thinking | boolean | 否 | true | 是否开启思考模式,适用于 Qwen3系列模型、DeepSeek-V4系列模型。 |
| reasoning_effort | string | 否 | high | 推理强度。可以调整推理强度,可选值为high和max。只适用于 DeepSeek-V4系列模型。只支持OpenAI协议 |
| top_p | number | 否 | 1 | top的值,介于 0 和 1 之间。作为调节采样温度的替代方案,模型会考虑前 top_p 概率的 token 的结果。所以 0.1 就意味着只有包括在最高 10% 概率中的 token 会被考虑。 我们通常建议修改这个值或者更改 temperature,但不建议同时对两者进行修改。 不支持以下模型(为了兼容已有软件,设置该参数后不会报错,但也不会生效): DeepSeek-R1-Distill系列 |
| stop | object | 否 | null | 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成。 |
| stream | boolean | 否 | false | 流式响应的选项,当字段stream为true时,该字段生效。 注意: QwQ-32B 模型可支持流式及非流式输出方式,但使用非流式时,建议设置max_tokens值不超过4096,避免请求超时。 |
| stream_options | object | 否 | text | 当启用流式输出时,可通过将本参数设置为{"include_usage": true},在输出的最后一行显示所使用的Token数。如果设置为false,则最后一行不显示使用的Token数。本参数仅在设置stream为true时生效。 |
| response_format | object | 否 | text | 指定模型必须输出的格式。设置为 { "type": "json_object" } 以启用 JSON 模式,该模式保证模型生成的消息是有效的 JSON。 注意: 使用 JSON 模式时,你还必须通过系统或用户消息指示模型生成 JSON。否则,模型可能会生成不断的空白字符,直到生成达到令牌限制,从而导致请求长时间运行并显得“卡住”。此外,如果 finish_reason="length",这表示生成超过了 max_tokens 或对话超过了最大上下文长度,消息内容可能会被部分截断。 |
| frequency_penalty | number | 否 | 0 | 介于 -2.0 和 2.0 之间的数字。如果该值为正,那么新 token 会根据其在已有文本中的出现频率受到相应的惩罚,降低模型重复相同内容的可能性。 不支持以下模型(为了兼容已有软件,设置该参数后不会报错,但也不会生效): DeepSeek-R1-Distill系列 |
| presence_penalty | number | 否 | 0 | 介于 -2.0 和 2.0 之间的数字。如果该值为正,那么新 token 会根据其是否已在已有文本中出现受到相应的惩罚,从而增加模型谈论新主题的可能性。 不支持以下模型(为了兼容已有软件,设置该参数后不会报错,但也不会生效): DeepSeek-R1-Distill系列 |
3.响应参数
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
| id | string | 是 | 该对话的唯一标识符。 |
| choices | object[] | 是 | 模型生成的 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),生成这条消息的角色。必填。 |
| created | integer | 是 | 创建聊天完成时的 Unix 时间戳(以秒为单位)。 |
| model | string | 是 | 生成该 completion 的模型名。 |
| system_fingerprint | string | 是 | 代表模型运行的后端配置。 |
| object | string | 是 | 对象的类型, 其值为 chat.completion。 |
| usage | object | 是 | Token 统计信息。 |
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/messages1.功能介绍
兼容 Anthropic 协议的对话补全能力,根据输入的上下文生成符合 Anthropic 规范的对话响应。
2.请求参数
Header 参数
| 名称 | 类型 | 必填 | 示例值 | 描述 |
|---|---|---|---|---|
| Content-Type | string | 是 | application/json | 请求体内容类型 |
| Authorization | string | 是 | Bearer <API Key> | 身份验证,格式为 Bearer + API Key |
| anthropic-version | string | 否 | 2023-06-01 | anthropic版本,可不填 |
Body 参数
| 名称 | 类型 | 支持状态 | 必填 | 描述 |
|---|---|---|---|---|
| model | string | 支持 | 是 | 使用的模型的 ID,暂只支持:MiniMax-M2.5 |
| messages | array | 部分支持 | 是 | 支持文本和工具调用,不支持图像和文档输入 - 每个消息包含 role(user/assistant)和 content 字段 - 以 user 消息开头,user 和 assistant 交替出现 - 系统提示词需通过 system 字段传递,而非 messages 中的 system 角色 |
| max_tokens | integer | 支持 | 是 | 模型生成的最大 token 数 |
| stream | boolean | 支持 | 否 | 是否开启流式响应 |
| system | string/array | 支持 | 否 | 系统提示词,用于设定模型的行为和规则 |
| temperature | number | 支持 | 否 | 采样温度,取值范围 (0.0, 1.0],控制输出随机性,较高的值增加随机性,较低的值更确定, 建议取值 1 |
| tool_choice | string/object | 支持 | 否 | 工具选择策略 |
| tools | array | 支持 | 否 | 工具定义。每个工具必须包含input_schema,否则会报错。已知Claude Code自带的web_search工具不支持 |
| top_p | number | 支持 | 否 | 核采样参数 |
| metadata | object | 支持 | 否 | 自定义元数据,Anthropic 协议兼容字段,格式为 {"user_id": "xxx"},用于标识用户,无实际业务逻辑影响 |
| thinking | object | 支持 | 否 | 思考模式配置 type 取值: - enabled:开启思考模式,模型在生成回复前会先进行推理,以提升回答准确度。可设置 budget_tokens限制思考过程的 Token 上限。 - disabled:关闭思考模式。 仅DeepSeek V4系列模型支持 |
| reasoning_effort | object | 支持 | 否 | 控制模型的推理强度。可选值:high、max,默认为max。仅DeepSeek V4系列模型支持 |
| stop_sequences | array | 忽略 | 否 | 该参数会被忽略 |
| top_k | number | 忽略 | 否 | 该参数会被忽略 |
| service_tier | string | 忽略 | 否 | 该参数会被忽略 |
| mcp_servers | array | 忽略 | 否 | 该参数会被忽略 |
| context_management | object | 忽略 | 否 | 该参数会被忽略 |
| container | object | 忽略 | 否 | 该参数会被忽略 |
Messages 字段支持说明
| 字段类型 | 支持状态 | 必填 | 描述 |
|---|---|---|---|
| type="text" | 支持 | 是 | 文本消息 |
| type="tool_use" | 支持 | 否 | 工具调用 |
| type="tool_result" | 支持 | 否 | 工具调用结果 |
| type="thinking" | 不支持 | 否 | 推理内容 |
| type="image" | 不支持 | 否 | 暂不支持图像输入 |
| type="document" | 不支持 | 否 | 暂不支持文档输入 |
3.响应参数
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
| id | string | 是 | 对话唯一标识符,格式兼容 Anthropic 规范(如 msg_xxxx)。 |
| type | string | 是 | 响应类型,固定为 "message"(Anthropic 规范)。 |
| role | string | 是 | 响应消息的角色,固定为 "assistant"。 |
| content | array | 是 | 模型生成的内容列表,每个元素为 {"type": "text", "text": "生成内容"} 格式。 |
| model | string | 是 | 生成响应的模型名,兼容 Anthropic 模型名格式。 |
| stop_reason | string | 是 | 停止生成原因,映射原 finish_reason: - "end_turn":对应 stop - "max_tokens":对应 length - "content_filter":对应 content_filter - "error":对应 insufficient_system_resource |
| usage | object | 是 | Token 统计信息,格式: { "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]