协议类型:OpenAI Chat Completions
版本:稳定版(max_tokens已弃用,使用max_completion_tokens)
| 环境 | 地址 |
|---|---|
| 公网 | https://api-maas.teleai.com.cn/v1/chat/completions |
| openai专属baseurl | https://api-maas.teleai.com.cn/v1 |
POSTapplication/json采用 Bearer Token 鉴权,在请求头中携带 API Key:
Authorization: Bearer <用户申请的API-KEY>
请求头说明:
| 请求头 | 必填 | 说明 |
|---|---|---|
Authorization |
是 | Bearer <API_KEY> |
session-id |
否 | 多轮对话场景下传入,不同 session 传入不同 session-id,非多轮对话场景请不要设置此字段 |
traceparent |
否 | W3C Trace Context 链路追踪头,格式{version}-{trace-id}-{parent-id}-{flags},见下表 |
traceparent 字段说明:
| 字段 | 示例值 | 说明 |
|---|---|---|
version |
00 |
W3C 版本号,默认00 |
trace-id |
0af7651916cd43dd8448eb211c80319c |
32 位十六进制,整条链路唯一 ID |
parent-id |
b7ad6b7169203331 |
16 位十六进制,当前请求 span ID |
flags |
01 |
默认01 即可 |
| 能力项 | 支持情况 | 能力项 | 支持情况 |
|---|---|---|---|
| 输入模态 | 文本输入 | 输出模态 | 文本输出 |
| 模型体验 | ✅ 支持 | 结构化输出 | ✅ 支持 |
| Function Call | ✅ 支持 | 深度思考 | ❌ 不支持 |
| 在线推理 | ✅ 支持 | 批量推理 | ❌ 不支持 |
| 显式缓存 | ❌ 不支持 | 隐式缓存 | ✅ 支持 |
| 限制项 | 数值 | 限制项 | 数值 |
|---|---|---|---|
| 上下文长度 | 256K | 最大思维链长度 | 128K |
| 最大输入长度 | 192K | 最大输入长度(思考模式下) | 64K |
| 最大输出长度 | 192K | 最大输出长度(思考模式下) | 64K |
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | 是 | 固定值Xing4.0-29B-Intent |
messages |
array | 是 | 消息数组,按对话顺序排列,见 4.1.2 |
frequency_penalty |
number | 否 | 频率惩罚,范围-2.0 ~ 2.0,默认 0 |
logprobs |
boolean | 否 | 是否返回每个输出 token 的对数概率,默认false |
top_logprobs |
integer | 否 | 每个 token 返回概率最高的前 N 个备选,0 ~ 20,需 logprobs=true |
max_tokens |
integer | 否 | 已弃用,请改用 max_completion_tokens |
max_completion_tokens |
integer | 否 | 生成的最大 token 数(含推理 token) |
n |
integer | 否 | 生成的候选回复数,默认1 |
presence_penalty |
number | 否 | 存在惩罚,范围-2.0 ~ 2.0,默认 0 |
repetition_penalty |
number | 否 | 默认值:1.05,取值范围 0 ~ 2。模型生成时连续序列中的重复度。提高该参数时可以降低模型生成的重复度,1.0 表示不做惩罚 |
response_format |
object | 否 | 输出格式约束,见 4.1.3 |
seed |
integer | 否 | 随机种子,用于可复现采样 |
stop |
string / array | 否 | 停止序列 |
stream |
boolean | 否 | 是否流式返回,默认false |
stream_options |
object | 否 | 流式附加选项,见 4.1.4 |
temperature |
number | 否 | 采样温度,范围0 ~ 2,默认 1.0 |
top_p |
number | 否 | 核采样,范围0 ~ 1,默认 0.95 |
tools |
array | 否 | 工具定义数组,见 4.1.5 |
tool_choice |
string / object | 否 | 工具调用策略,见 4.1.6 |
parallel_tool_calls |
boolean | 否 | 是否允许并行调用多个工具,默认true |
chat_template_kwargs |
object | 否 | 深度思考模式参数,默认开启,传入{"enable_thinking": true} 启用深度思考 |
reasoning_effort |
string | 否 | 推理力度,该模型不支持 |
采样参数建议:推荐使用 temperature = 1.0,top_p = 0.95。
messages消息对象 messages[]
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
role |
string | 是 | 角色:system / user / assistant / tool |
content |
string / array | 是 | 消息内容,支持纯文本或内容块数组 |
name |
string | 否 | 参与者名称,用于区分同名角色 |
tool_calls |
array | 否 | 助手消息触发的工具调用(仅assistant) |
tool_call_id |
string | 否 | 关联的工具调用 ID(tool 角色必填) |
消息内容对象 content[]
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type |
string | 是 | 分片类型,此模型仅支持text |
text |
string | 是 | 文本内容 |
content结构约束
schema格式
schema定义模型接受请求方创建的意图名称及其参数集,格式为JSON 数组。每个对象定义一个需要模型判别或者抽取的意图信息,具体字段如下,调用方可自定义需要抽取判定的关键信息,但json的字段key应与本文档说明中的保持一致。
标准字段说明:
| 字段 | 含义 |
| category | 意图名称,也是模型输出时使用的意图名 |
| category_description | 意图是含义、判断条件和边界 |
| args | 可抽取参数的定义列表,每项包含 name 和 description分别用于定义参数的名称及其描述;无参数时为 [] |
调用时,替换为待测试任务的完整候选类别集合。
[
{
"category": "查看摄像头直播",
"category_description": "用户想要实时查看摄像头、门铃、猫眼、视频锁等设备的当前实时画面,区别于查看历史存储的回放画面。典型表达:看直播、看实时画面、看看现在/当前、看客厅的实时监控;用户未提及过去时间的查看监控请求属于此类。",
"args": [
{
"name": "设备名称",
"description": "用户明确提及的设备名称或位置,例如卧室、客厅;未提及时不填写。"
}
]
},
{
"category": "查看摄像头回放",
"category_description": "用户想要查看天翼看家、摄像头、门铃、猫眼、视频锁等设备的回看或存储画面,包括回放、录像、云回看、监控回看等表达。典型表达:看第X个设备的录像/回放、看第X条录像、看昨天下午4点的云回看;用户用'第X个+设备'或'第X条+录像'指代具体设备或录像时,均属于本意图。",
"args": [
{
"name": "设备类型",
"description": "摄像头、门铃、猫眼、视频锁等设备类型。"
},
{
"name": "位置",
"description": "用户提及的设备所在位置,如卧室、客厅、门口。"
},
{
"name": "时间",
"description": "用户要查看的回放时间段,如今天9点、昨天下午4点。"
},
{
"name": "设备序号",
"description": "用户用'第X个+设备'指代设备时的序号。"
},
{
"name": "录像序号",
"description": "用户用'第X条+录像'指代录像时的序号,不得与设备序号混淆。"
}
]
},
{
"category": "其他意图",
"category_description": "用户输入无法匹配上述类别。",
"args": []
}
]
消息结构
模型请求统一采用 OpenAI chat completions 风格的 messages 三段式:
| 角色 | 数量 | 固定性 | 内容来源 |
| user | 1 | 动态,调用方自由组织 | 任务提示词 + schema + 对话内容 |
调用方只组织 user 内容,system 为模型方预置,禁止改写和传入。每次请求只发送一条 role: "user" 消息,将任务说明、完整 schema、待测试输入全部拼接到同一个 content 中,测试标签、标准答案不应出现在请求中。不同测试样本分别构造请求,不累积其他样本的输入或输出。
{
"model": "Xing4.0-29B-Intent",
"messages": [
{
"role": "user",
"content": "### 任务说明\n\n### 字段说明(完整 schema)\n\n### 输入内容(待测试文本)"
}
]
}
工具调用对象 tool_calls[]
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id |
string | 是 | 工具 ID |
type |
string | 是 | 工具类型,目前仅支持function |
function |
object | 是 | 工具定义 |
工具定义对象 function
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
arguments |
string | 是 | JSON 文本 |
name |
string | 是 | 工具名称 |
response_format| 结构 | 说明 |
|---|---|
{"type":"text"} |
默认文本输出 |
{"type":"json_object"} |
JSON 对象输出(提示词中需包含「json」字样) |
{"type":"json_schema","json_schema":{"name":"...","description":"...","schema":{...},"strict":true}} |
按 JSON Schema 约束输出,暂不支持 |
stream_options| 字段 | 类型 | 说明 |
|---|---|---|
include_usage |
boolean | 为true 时,流式末尾额外返回一个仅含 usage 的 chunk |
tools[]| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type |
string | 是 | 工具类型,当前为function |
function |
object | 是 | 函数定义 |
function.name |
string | 是 | 函数名 |
function.description |
string | 否 | 函数描述 |
function.parameters |
object | 否 | JSON Schema 形式的参数定义 |
tool_choicenone(不调用工具)/ auto(自动决定)/ required(必须调用){"type":"function","function":{"name":"<函数名>"}} 指定具体函数| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 本次完成的唯一 ID |
object |
string | 固定为chat.completion |
created |
integer | 创建时间(Unix 秒级时间戳) |
model |
string | 实际使用的模型 |
choices |
array | 结果数组 |
usage |
object | token 用量 |
消息数组 choices[]
| 字段 | 类型 | 说明 |
|---|---|---|
index |
integer | 候选序号 |
message |
object | 消息体 |
finish_reason |
string | 结束原因:stop(自然结束 / 命中 stop)、length(达上限)、tool_calls / function_call(转去调用工具)、content_filter(内容过滤)、null(未完成)、abort(中止) |
logprobs |
object | 输出 token 的对数概率(开启logprobs 时返回) |
消息对象 message
| 字段 | 类型 | 说明 |
|---|---|---|
role |
string | 角色:system / user / assistant / tool |
content |
string | 文本内容 |
reasoning_content / reasoning |
string | 深度思考内容 |
tool_calls[] |
object | {id, type:function, function:{name, arguments}},arguments 为 JSON 字符串 |
Token 用量 usage
| 字段 | 类型 | 说明 |
|---|---|---|
prompt_tokens |
integer | 输入 token 数 |
completion_tokens |
integer | 输出 token 数 |
total_tokens |
integer | 总 token 数 |
prompt_tokens_details.cached_tokens |
integer | 命中的缓存 token 数 |
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 本次完成的唯一 ID |
object |
string | 固定为chat.completion.chunk |
created |
integer | 创建时间(Unix 秒级时间戳) |
model |
string | 实际使用的模型 |
choices |
array | 结果数组 |
choices[].index |
integer | 候选序号 |
choices[].delta |
object | 同返回体中choices[].message |
choices[].finish_reason |
string | 结束原因:stop(自然结束 / 命中 stop)、length(达上限)、tool_calls / function_call(转去调用工具)、content_filter(内容过滤)、null(未完成)、abort(中止) |
choices[].logprobs |
object | 输出 token 的对数概率(开启logprobs 时返回) |
usage |
object | token 用量 |
curl --location 'https://api-maas.teleai.com.cn/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <用户申请的API-KEY>' \
--data '{
"model": "Xing4.0-29B-Intent",
"messages": [
{
"role": "user",
"content": "### 任务说明\n根据【字段说明】判断【输入内容】所属类别,并抽取该类别对应的参数。\ncategory 和参数名必须来自字段说明,不得自行新增。\n只填写输入中明确表达的参数;没有可填写参数时 args 为 []。\nargs 中每个对象表示一组相关参数实例,多组独立实例分别放在不同对象中。\n如果输入涉及多个类别,以列表形式返回。\n如果输入包含多轮对话,根据最后一轮用户输入判断,并结合对话历史抽取参数。\n只输出有效 JSON 数组,不包含 Markdown 标记或额外说明。\n输出结构:`[{\"category\":\"意图名称\",\"args\":[{\"参数名\":\"参数值\"}]}]`\n\n### 字段说明\n[{\"category\": \"查看摄像头直播\", \"category_description\": \"用户想要实时查看摄像头、门铃、猫眼、视频锁等设备的当前实时画面,区别于查看历史存储的回放画面。典型表达:看直播、看实时画面、看看现在/当前、看客厅的实时监控;用户未提及过去时间的查看监控请求属于此类。\", \"args\": [{\"name\": \"设备名称\", \"description\": \"用户明确提及的设备名称或位置,例如卧室、客厅;未提及时不填写。\"}]}, {\"category\": \"查看摄像头回放\", \"category_description\": \"用户想要查看天翼看家、摄像头、门铃、猫眼、视频锁等设备的回看或存储画面,包括回放、录像、云回看、监控回看等表达。典型表达:看第X个设备的录像/回放、看第X条录像、看昨天下午4点的云回看;用户用'第X个+设备'或'第X条+录像'指代具体设备或录像时,均属于本意图。\", \"args\": [{\"name\": \"设备类型\", \"description\": \"摄像头、门铃、猫眼、视频锁等设备类型。\"}, {\"name\": \"位置\", \"description\": \"用户提及的设备所在位置,如卧室、客厅、门口。\"}, {\"name\": \"时间\", \"description\": \"用户要查看的回放时间段,如今天9点、昨天下午4点。\"}, {\"name\": \"设备序号\", \"description\": \"用户用'第X个+设备'指代设备时的序号。\"}, {\"name\": \"录像序号\", \"description\": \"用户用'第X条+录像'指代录像时的序号,不得与设备序号混淆。\"}]}, {\"category\": \"其他意图\", \"category_description\": \"用户输入无法匹配上述类别。\", \"args\": []}]\n\n### 输入内容\n我要看第二个摄像头昨晚9点的云回放"
}
],
"temperature": 0,
"max_tokens": 128,
"chat_template_kwargs": {
"enable_thinking": false
}
}
'
import requests
url = "https://api-maas.teleai.com.cn/v1/chat/completions"
api_key = "<用户申请的API-KEY>"
payload = {
"model": "Xing4.0-29B-Intent",
"messages": [{"role": "user", "content": "### 任务说明\n根据【字段说明】判断【输入内容】所属类别,并抽取该类别对应的参数。\ncategory 和参数名必须来自字段说明,不得自行新增。\n只填写输入中明确表达的参数;没有可填写参数时 args 为 []。\nargs 中每个对象表示一组相关参数实例,多组独立实例分别放在不同对象中。\n如果输入涉及多个类别,以列表形式返回。\n如果输入包含多轮对话,根据最后一轮用户输入判断,并结合对话历史抽取参数。\n只输出有效 JSON 数组,不包含 Markdown 标记或额外说明。\n输出结构:`[{\"category\":\"意图名称\",\"args\":[{\"参数名\":\"参数值\"}]}]`\n\n### 字段说明\n[{\"category\": \"查看摄像头直播\", \"category_description\": \"用户想要实时查看摄像头、门铃、猫眼、视频锁等设备的当前实时画面,区别于查看历史存储的回放画面。典型表达:看直播、看实时画面、看看现在/当前、看客厅的实时监控;用户未提及过去时间的查看监控请求属于此类。\", \"args\": [{\"name\": \"设备名称\", \"description\": \"用户明确提及的设备名称或位置,例如卧室、客厅;未提及时不填写。\"}]}, {\"category\": \"查看摄像头回放\", \"category_description\": \"用户想要查看天翼看家、摄像头、门铃、猫眼、视频锁等设备的回看或存储画面,包括回放、录像、云回看、监控回看等表达。典型表达:看第X个设备的录像/回放、看第X条录像、看昨天下午4点的云回看;用户用'第X个+设备'或'第X条+录像'指代具体设备或录像时,均属于本意图。\", \"args\": [{\"name\": \"设备类型\", \"description\": \"摄像头、门铃、猫眼、视频锁等设备类型。\"}, {\"name\": \"位置\", \"description\": \"用户提及的设备所在位置,如卧室、客厅、门口。\"}, {\"name\": \"时间\", \"description\": \"用户要查看的回放时间段,如今天9点、昨天下午4点。\"}, {\"name\": \"设备序号\", \"description\": \"用户用'第X个+设备'指代设备时的序号。\"}, {\"name\": \"录像序号\", \"description\": \"用户用'第X条+录像'指代录像时的序号,不得与设备序号混淆。\"}]}, {\"category\": \"其他意图\", \"category_description\": \"用户输入无法匹配上述类别。\", \"args\": []}]\n\n### 输入内容\n我要看第二个摄像头昨晚9点的云回放"}],
"stream": True
}
resp = requests.post(
url,
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}",
},
json=payload,
stream=True,
)
# 流式解析 SSE
for line in resp.iter_lines(decode_unicode=True):
if line and line.startswith("data:"):
data = line[len("data:"):].strip()
if data == "[DONE]":
break
print(data)
import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ChatCompletionsExample {
public static void main(String[] args) throws Exception {
String url = "https://api-maas.teleai.com.cn/v1/chat/completions";
String apiKey = "<用户申请的API-KEY>";
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(java.util.Map.of(
"model", "Xing4.0-29B-Intent",
"messages", java.util.List.of(
java.util.Map.of("role", "user", "content", "### 任务说明\n根据【字段说明】判断【输入内容】所属类别,并抽取该类别对应的参数。\ncategory 和参数名必须来自字段说明,不得自行新增。\n只填写输入中明确表达的参数;没有可填写参数时 args 为 []。\nargs 中每个对象表示一组相关参数实例,多组独立实例分别放在不同对象中。\n如果输入涉及多个类别,以列表形式返回。\n如果输入包含多轮对话,根据最后一轮用户输入判断,并结合对话历史抽取参数。\n只输出有效 JSON 数组,不包含 Markdown 标记或额外说明。\n输出结构:`[{\"category\":\"意图名称\",\"args\":[{\"参数名\":\"参数值\"}]}]`\n\n### 字段说明\n[{\"category\": \"查看摄像头直播\", \"category_description\": \"用户想要实时查看摄像头、门铃、猫眼、视频锁等设备的当前实时画面,区别于查看历史存储的回放画面。典型表达:看直播、看实时画面、看看现在/当前、看客厅的实时监控;用户未提及过去时间的查看监控请求属于此类。\", \"args\": [{\"name\": \"设备名称\", \"description\": \"用户明确提及的设备名称或位置,例如卧室、客厅;未提及时不填写。\"}]}, {\"category\": \"查看摄像头回放\", \"category_description\": \"用户想要查看天翼看家、摄像头、门铃、猫眼、视频锁等设备的回看或存储画面,包括回放、录像、云回看、监控回看等表达。典型表达:看第X个设备的录像/回放、看第X条录像、看昨天下午4点的云回看;用户用'第X个+设备'或'第X条+录像'指代具体设备或录像时,均属于本意图。\", \"args\": [{\"name\": \"设备类型\", \"description\": \"摄像头、门铃、猫眼、视频锁等设备类型。\"}, {\"name\": \"位置\", \"description\": \"用户提及的设备所在位置,如卧室、客厅、门口。\"}, {\"name\": \"时间\", \"description\": \"用户要查看的回放时间段,如今天9点、昨天下午4点。\"}, {\"name\": \"设备序号\", \"description\": \"用户用'第X个+设备'指代设备时的序号。\"}, {\"name\": \"录像序号\", \"description\": \"用户用'第X条+录像'指代录像时的序号,不得与设备序号混淆。\"}]}, {\"category\": \"其他意图\", \"category_description\": \"用户输入无法匹配上述类别。\", \"args\": []}]\n\n### 输入内容\n我要看第二个摄像头昨晚9点的云回放")
),
"stream", true
));
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer " + apiKey)
.post(RequestBody.create(json, MediaType.get("application/json")))
.build();
try (Response response = client.newCall(request).execute()) {
// 非流式:直接打印 body
System.out.println(response.body().string());
// 流式:通过 ResponseBody.source() 逐行读取 SSE,遇 [DONE] 结束
}
}
}