基于知识库的智能问答接口,通过 SSE 流式输出,依次返回规划、工具调用、生成三个阶段。
接口说明
权限要求:调用本接口需提供阿里云百炼 API Key及业务空间。在控制台 API Key 页面及业务空间管理获取。
调用方式:HTTP REST,
POST+application/json。Base URL 为https://{workspaceId}.cn-beijing.maas.aliyuncs.com,其中{workspaceId}为业务空间 ID。前置条件:调用前须在百炼控制台 知识问答服务页面 创建并发布知识问答服务,获取应用 ID(
agent_id),否则报 Agent 未发布。多轮上下文:平台不保存对话状态,每次请求需传入完整
messages历史。建议限制历史长度(如最近 10 轮),避免超出模型上下文窗口。响应不返回session_id。流式要求:
stream必须为true,当前版本仅支持流式响应;若为false或为空将导致请求失败。临时文件:开启控制台文件预解析后,可在对话时通过
parameters.agent_options.session_files临时传入文件(最多 10 个),文件 ID 通过添加文件接口获取。限流:默认用户维度 25 QPS。如遇限流,请稍后重试。
请求语法
POST /api/v2/apps/knowledge/chat HTTP/1.1
Host: {workspaceId}.cn-beijing.maas.aliyuncs.com
Authorization: Bearer <API-Key>
Content-Type: application/json
Accept: text/event-stream请求参数
请求体为 input / parameters / stream 三部分。嵌套字段在下表中以缩进表示层级。
名称 | 类型 | 必填 | 描述 | 示例 |
input | object | 是 | 输入参数。 | |
input.messages | array<object> | 是 | 对话消息列表,DashScope 标准格式。 | |
messages[].role | string | 是 | 消息角色: | user |
messages[].content | string\|array | 是 | 消息内容,支持纯文本或多模态数组。纯文本传字符串;多模态传数组,元素为 ContentPart(如 | |
input.request_id | string | 否 | 业务侧自定义请求 ID。 | |
parameters | object | 是 | 配置参数字段。 | |
parameters.agent_options | object | 是 | 智能体专用参数,包含 | |
agent_options.agent_id | string | 是 | 问答服务(agent)应用 ID,在控制台知识问答页面创建并发布后获取。 | aid-xxxxxxxxxxxxxxxx |
agent_options.session_files | array<string> | 否 | 会话文件 ID 列表,最多 10 个。须在控制台开启文件预解析后传入才生效;文件 ID 通过 | |
stream | boolean | 是 | 是否开启流式输出。必须填 | true |
响应参数
顶层字段
名称 | 类型 | 描述 |
output | object | 模型输出。 |
output.request_id | string | 业务侧自定义请求 ID(与请求 |
output.choices | array<object> | 模型输出信息,长度恒为 1。结构见下表。 |
code | string | 状态码,成功为 |
message | string | 状态信息,成功为 |
request_id | string | 请求 ID(DashScope 平台级,全流不变)。 |
usage | object | 用量统计( |
output.choices[] 结构
名称 | 类型 | 描述 |
message | object | 一条消息,包含模型回复的内容、工具调用信息和当前所处阶段。 |
message.role | string | 角色: |
message.content | string\|array | 生成内容/工具返回内容。 |
message.id | string | 本次 run 的唯一 ID(如 |
message.type | string | 消息类型: |
message.tool_calls | array<object> | 工具调用信息。仅 |
message.tool_call_id | string | 工具返回帧:对应 |
message.additional_kwargs | object | 附加参数。assistant 帧为 |
message.extra | object | 步骤状态信息。见下表。 |
message.response_metadata | object | 请求模型调用详细信息。边界帧携带 |
finish_reason | string | 生成结束原因,仅尾包输出 |
message.extra 结构
名称 | 类型 | 描述 |
group | string | 大阶段: |
step | string | 当前步骤: |
step_change | string | 步骤变化事件: |
执行阶段(group)
group | 说明 |
planning | 规划中,包含 start 和 end 事件。 |
generating | 生成中,包含 start 和 end 事件。 |
当前步骤(step)
step | 说明 |
planning | 规划中。 |
tool_calling | 工具调用中(此时 |
generating | 生成中。 |
步骤变化事件(step_change)
step | step_change | 事件 | 说明 |
planning | plan_start | 开始规划 |
|
planning | 空 | 规划中 |
|
planning | plan_end | 结束规划 |
|
tool_calling | tool_calling | 工具调用 | 抛出完整 |
tool_calling | tool_return | 工具返回 |
|
generating | generation_start | 开始生成 | 后续 |
generating | 空 | 生成中 |
|
generating | generation_end | 结束生成 |
|
工具清单
模型在工具调用阶段会从以下工具里选用,工具名放在 tool_calls[].function.name。arguments 是一段 JSON 字符串,需要再解析一次才能拿到具体参数;工具的返回结果放在 tool_return 帧的 additional_kwargs.extra_json.docs 里。
function.name | 工具 | arguments | 返回 docs[] |
semantic_search | 知识库搜索 | {"query", "target_ids"} | 命中切片数组,含正文与多维得分。 |
obtain_file | 获取文件完整内容 | {"file_id", "max_tokens"} | 文件级信息(含 Markdown 预签 URL),全文在 |
execute_sql | 执行 SQL 查询(NL2SQL) | {"sql", "knowledge_base_id"} | SQL 结果行,每行 = |
section_browse | 章节检索 | {"knowledge_base_id", "file_id", "section_path"} | 章节预览(前 300 字)。 |
section_peruse | 章节精读 | {"knowledge_base_id", "file_id", "section_path", "max_tokens"} | 章节完整内容。 |
max_tokens(obtain_file / section_peruse)为字符串形式的数字,如 "989482"。target_ids / knowledge_base_id 即知识库(pipeline)ID;section_path 由> 分隔层级,例如:开放接口文档>接口调用说明。一次请求中多个工具可串联调用(如 semantic_search 定位文件 → obtain_file 取全文)。
错误码
SSE 流式响应中,错误以 event: error 帧返回(data: 后为错误 JSON,含 code / message / request_id)。鉴权失败在 HTTP 层返回。
HTTP 状态码 | 错误码 | 说明 |
401 | InvalidApiKey | 鉴权失败,API Key 无效或缺失。 |
500 | AgentApp.NotFound | Agent 不存在或未发布等服务端错误,以 SSE error 帧返回。 |
示例
以下示例向已发布的知识问答服务提问「什么是百炼知识库?」,agent_id 替换为实际问答服务 ID。
cURL
curl -X POST "https://{workspaceId}.cn-beijing.maas.aliyuncs.com/api/v2/apps/knowledge/chat" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{
"input": {
"messages": [
{"role": "user", "content": [{"type": "text", "text": "什么是百炼知识库?"}]}
]
},
"parameters": {
"agent_options": {
"agent_id": "aid-xxxxxxxxxxxxxxxx"
}
},
"stream": true
}'Python
import os
import requests
resp = requests.post(
"https://{workspaceId}.cn-beijing.maas.aliyuncs.com/api/v2/apps/knowledge/chat",
headers={
"Authorization": f"Bearer {os.getenv('DASHSCOPE_API_KEY')}",
"Content-Type": "application/json",
"Accept": "text/event-stream",
},
json={
"input": {
"messages": [
{"role": "user", "content": [{"type": "text", "text": "什么是百炼知识库?"}]}
]
},
"parameters": {
"agent_options": {
"agent_id": "aid-xxxxxxxxxxxxxxxx"
}
},
"stream": True,
},
stream=True,
)
for line in resp.iter_lines():
if line:
print(line.decode())