SafeQuestionPoll - 轮询问题结果
轮询查询指定问题的分析执行状态和结果。
接口说明
在通过 Text2InsightQuery 发起问题后,客户端需循环调用本接口获取分析进度和最终结果。每次调用返回当前已产生的所有
responses
responses
消息列表。
轮询策略
| 参数 | 推荐值 |
|---|
| 轮询间隔 | 2 秒 |
| 单次请求超时 | 60 秒 |
| 总超时时间 | 360 秒 |
终止条件
每次轮询时,取
responses
responses
数组最后一条消息的
dataType
dataType
,当值为以下之一时停止轮询:
finish
finish
— 分析正常完成
finish_stop
finish_stop
— 用户主动停止
error
error
— 执行出错
请求方式
POST /open/safe_question_poll?tenantId={tenantId}&userId={userId}&loginToken={loginToken}
💡 提示:
tenantId
tenantId
、
userId
userId
、
loginToken
loginToken
需要
同时出现在 URL query 参数和 request body 中,缺少 query 参数会导致请求失败。
请求参数
| 参数名 | 位置 | 类型 | 是否必须 | 说明 |
|---|
| tenantId | Query + Body | Integer | 是 | 租户 ID |
| userId | Query + Body | Integer | 是 | 用户 ID |
| domainId | Body | Integer | 是 | 数据域 ID |
| questionId | Body | Integer | 是 | 问题 ID,通过 Text2InsightQuery 获取 |
| loginToken | Query + Body | String | 是 | 认证 Token |
返回参数
| 参数名 | 类型 | 说明 |
|---|
| success | Boolean | 请求是否成功 |
| data.responses | Array | 消息列表,包含分析过程中产生的所有消息 |
| data.responses[].id | String | 消息 ID |
| data.responses[].dataType | String | 消息类型,见下方说明 |
| data.responses[].message | String | 消息文本内容 |
| data.responses[].modelRes | Object | 模型返回的原始结构 |
| data.responses[].modelRes.code | Integer | 模型响应码 |
| data.responses[].modelRes.data | Object | 模型返回的业务数据 |
消息类型说明(dataType)
| 类型 | 说明 | 关键字段 |
|---|
| message | 普通消息,可能包含知识详情或执行过程日志 | message, knowledgeData |
| notify | 进度通知(如"正在思考") | message |
| summary | 分析总结,包含最终答案 | summaryData |
| metric | 指标计算结果 | message, metricDsl, physicalMetricDsl |
| echarts_plus | 图表数据 | message, chartType, columns, calculateSql |
| code | 代码块(如生成的 SQL) | message, codeType, code |
| finish | 分析正常结束 | message |
| finish_stop | 用户主动停止 | message |
| error | 执行出错 | message |
字段读取优先级
responses
responses
中每条消息的业务字段可能出现在不同层级,读取优先级如下:
- 顶层:
response[fieldName]
response[fieldName]
- modelRes:
response.modelRes.data[fieldName]
response.modelRes.data[fieldName]
- rawRes:解析
response.rawRes
response.rawRes
(JSON 字符串)后取 data[fieldName]
data[fieldName]
请求示例
POST /open/safe_question_poll
Content-Type: application/json
{
"tenantId": 10,
"userId": 1,
"domainId": 106,
"questionId": 34339,
"loginToken": "eyJhbGciOiJIUzI1NiJ9..."
}
返回示例
分析进行中
{
"success": true,
"data": {
"responses": [
{
"id": "745601",
"dataType": "notify",
"message": "Thinking next step"
}
]
}
}
分析完成(包含指标结果)
{
"success": true,
"data": {
"responses": [
{
"id": "745618",
"dataType": "message",
"message": "Viewed knowledge details: 北京二手房10年交易数据",
"modelRes": {
"code": 200,
"data": {
"dataType": "message",
"message": "Viewed knowledge details: 北京二手房10年交易数据",
"knowledgeData": {
"detailItems": [
{
"id": 51,
"keys": "北京二手房10年交易数据",
"value": "{\"desc\": \"如果问题中没有明确指明时间,就使用昨天\", \"type\": \"time_range_func\"}",
"type": "TEXT"
}
]
}
}
}
},
{
"id": "745620",
"dataType": "metric",
"message": "Metric: 过去6年各区总成交金额",
"modelRes": {
"code": 200,
"data": {
"dataType": "metric",
"message": "Metric: 过去6年各区总成交金额",
"metricDsl": "{\"useDefaultLimit\":true,\"metricId\":{\"metricType\":\"SQL_SIMPLE\",\"id\":631},\"name\":\"过去6年各区总成交金额\"}",
"physicalMetricDsl": "{\"useDefaultLimit\":true,\"metricId\":{\"metricType\":\"SQL_SIMPLE\",\"id\":631}}"
}
}
},
{
"id": "745625",
"dataType": "echarts_plus",
"message": "北京二手房过去6年各区总成交金额 (2015-2021)",
"modelRes": {
"code": 200,
"data": {
"dataType": "echarts_plus",
"chartType": "ECHARTS",
"columns": "区域 (STRING), 总成交金额(万元) (LONG)",
"calculateSql": "SELECT region AS 区域, SUM(transaction_price) AS 总成交金额 FROM ... GROUP BY region"
}
}
},
{
"id": "745630",
"dataType": "summary",
"message": "Analysis complete",
"modelRes": {
"code": 200,
"data": {
"dataType": "summary",
"summaryData": "**北京二手房过去6年各区总成交金额:**\n- 朝阳区:10349.27 亿元\n- 海淀区:5850.22 亿元\n..."
}
}
},
{
"id": "745631",
"dataType": "finish",
"message": "Analysis complete"
}
]
}
}
错误码
| 错误码 | 说明 |
|---|
| success=false | Token 无效、questionId 不存在或权限不足 |
相关文档