Skip to main content

标准知识问答(Chat)

POST /openapi/api/v1/chat/completions

使用租户配置进行知识问答或纯大模型对话。平台 API Key 要求 chat_v1=READ,请求头为 Authorization: Bearer tk-...Content-Type: application/json。已开通租户用户契约的集成方也可按 契约协议 提供用户身份。

需要基于特定应用的配置对话,或传入外部访客标识时,请阅读 应用对话兼容接口

请求参数

字段类型必填默认值与规则
promptstring条件必填当前问题;与 messages 至少一项有效,非空时优先使用 prompt
messagesarray[object]条件必填prompt 为空时使用;最后一条必须为 role=user,前面的消息作为外部历史
messages[].rolestringuserassistantsystem 等,最后一条要求 user
messages[].contentstring / object / array常规使用文本;兼容消息内容结构不代表所有模型都支持多模态
conversationIdstring省略时新建会话;后续沿用返回值
containerIdarray[string]知识库 code 列表,显式传入最多 10 个,须在当前用户可问答范围内
fileIdsarray[string]进一步限定文件 code;文件须属于当前租户及本次可用知识库
ragSearchboolean默认 true;false 时关闭知识检索
multipleDialogboolean默认 true;使用 prompt 时配合相同 conversationId 进行多轮
streamboolean默认 true;false 返回完整 JSON
modelstring部署方配置的模型编码;省略时使用租户默认模型
reasonStatusboolean默认 false;推理模式实际支持取决于模型
temperaturenumber默认 0.95,0 < temperature <= 1
top_pnumber默认 0.7,0 < top_p < 1
promptTemplatestring自定义 RAG 模板;ragSearch=true 时必须包含 ${question}${context}
userIdstring保留字段,最长 255;当前标准入口固定使用鉴权用户,传入不会切换对话身份
integrationsarray[object]已开通的内置工具设置;每项包含 codeenabled,工具编码及可用性由部署方提供

containerId 省略时使用当前鉴权用户可问答的知识库,不等于整个租户的全部知识库。当前没有可用知识库时执行纯大模型回答。指定 fileIds 不会绕过知识库权限。

请求示例

非流式:

curl --request POST "${BASE_URL}/openapi/api/v1/chat/completions" \
--header "Authorization: Bearer ${AIS_API_KEY}" \
--header "Content-Type: application/json" \
--data '{
"prompt": "请介绍产品支持的部署方式",
"containerId": ["partner_kb_001"],
"ragSearch": true,
"multipleDialog": true,
"stream": false
}'

自行提供历史时,最后一条消息是本次问题,不要求消息必须以 user/assistant 严格成对:

{
"messages": [
{"role": "user", "content": "产品有哪些部署方式?"},
{"role": "assistant", "content": "可以按项目要求部署。"},
{"role": "user", "content": "对运行环境有什么要求?"}
],
"containerId": ["partner_kb_001"],
"stream": false
}

messages 模式使用调用方提供的历史;同时传 prompt 和 messages 时,优先使用 prompt,不进入 messages 历史分支。

非流式响应

成功直接返回对话对象,没有 code/message/data 外层包装。精简示例:

{
"created": 1788575400000,
"id": "message_001",
"conversationId": "conversation_001",
"model": "configured-model",
"costTime": 1200,
"usage": {
"completion_tokens": 30,
"prompt_tokens": 120,
"total_tokens": 150
},
"choices": [
{
"index": 0,
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "请根据项目交付方案准备运行环境。"
}
}
],
"references": [],
"paragraphs": [],
"multiParts": []
}

响应字段

字段JSON 类型说明
idstring本次响应标识
messageIdstring / null消息标识,有值时保存,不等同会话 ID
conversationIdstring会话 ID,多轮续聊和历史查询复用
createdinteger创建时间,Unix 毫秒
modelstring实际使用的模型标识
modelDescstring / null模型描述,可空
costTimeinteger / null总处理耗时,毫秒
choicesarray[object]回答结果
choices[].indexinteger结果下标,通常从 0 开始
choices[].finish_reasonstring / null结束原因;正常终止可为 stop,失败按实际值处理
choices[].messageobject消息对象
choices[].message.rolestring回答角色通常为 assistant
choices[].message.contentstring / object普通文本问答为字符串;兼容内容对象时按实际类型处理
choices[].message.reasoningContentstring / null模型提供且允许返回的推理内容扩展;不保证存在
usageobject / nullToken 统计,部分模型不提供完整统计
usage.prompt_tokensinteger / null输入 Token 数
usage.completion_tokensinteger / null输出 Token 数
usage.total_tokensinteger / null总 Token 数
referencesarray[object]文件级引用,字段见 Reference
paragraphsarray[object]引用段落,字段见 ReferenceParagraph
multiPartsarray[object]多媒体引用,字段见 MultiPart

无知识来源或尚未产生引用时,引用数组可以为空;不能据此假定整个回答失败。相反,有引用也不代表生成内容已通过业务审核。

引用文件编码为 dataSetId。引用 URL 按接口实际返回值使用,不硬编码对象存储签名地址。

SSE 流式响应

设置 stream=true,客户端按 text/event-stream 解析。命令行调试加 curl --no-buffer

event:add
data:{"conversationId":"conversation_001","choices":[{"message":{"role":"assistant","content":"支持"}}]}

event:add
data:{"conversationId":"conversation_001","choices":[{"finish_reason":"stop","message":{"role":"assistant","content":""}}],"references":[],"paragraphs":[],"multiParts":[]}

上例展示事件格式,实际事件可能附带 id 和其他字段。逐事件累加文本,保留结束事件中的引用与 usage;中间事件可能尚未携带这些字段。此标准入口当前固定使用明文 JSON 数据,不需要 Base64 解码,不能沿用旧文档的 encode=true 说明。

建立 SSE 前的失败可能返回 JSON 错误;建立流之后还应处理流内异常和连接中断。不要把一次网络读取直接当成一个完整 SSE 事件。标准 Chat 限流时可能返回 HTTP 429 和 Retry-After,详见 错误处理

流式消费检查表

阶段客户端动作
建立连接检查 HTTP 状态和 Content-Type;JSON 错误不能交给 SSE 解析器
接收事件以空行识别 SSE 事件边界,将事件 data 解析为 JSON;一次网络读取可能包含半个或多个事件
展示文本对增量内容累加;不要每次覆盖已生成的全部文本
读取扩展保留 conversationId、usage 和引用;它们可能只在后续事件出现
正常结束同时关注服务端结束事件、finish_reason 与连接状态,不把任意断连当成功
意外中断标记答案不完整;需要重试时提醒可能重新生成,不承诺断点续传

SSE data 的字段类型与非流式响应一致,但每个事件通常只是其中一部分。只实现固定供应商的 [DONE]choices[].delta 协议不足以消费 AIS 的 choices[].message 事件。