主题
AI对话
AI对话说明
AI对话定义
一个用户下面,有很多个对话(conversations),每个对话有很多个回合(chats),每个回合包含用户问题(prompt)、问题之外的衡石对象相关信息(userConfig和autoConfig)和ai的文本回答(answer)、生成的chart等信息。userConfig由对话的客户端根据用户所在的产品功能点来设置。 后端主要分成AgentManager和具体Agent两大模块。AgentManager根据chat的prompt和userConfig,判断应该使用哪个Agent来执行任务返回结果,并根据需要设置autoConfig。 具体Agent 5.1版本支持三个:SuggestQuestionsAgent、HQLAgent、MetricSelectAgent。SuggestQuestionsAgent用于生成图表按固定模板的问题列表。HQLAgent用于即时查询。MetricSelectAgent用于指标查询。
数据结构
AgentType
状态值 | 意义 |
---|---|
SUGGEST_QUESTIONS_AGENT | 根据userConfig中图表信息,生成当前用户适宜的推荐问题 |
HQL_AGENT | 根据userConfig中数据集信息和用户问题,生成即时查询结果 |
METRIC_SELECT_AGENT | 根据userConfig中数据集信息和用户问题,生成指标查询结果 |
ProcessStatus
状态值 | 意义 |
---|---|
PENDING | 在等待队列中,所有agent类型适用 |
ANALYZE_REQUEST | 正在分析请求,所有agent类型适用 |
GENERATE_METRIC_QUERY | 生成指标查询,只有METRIC_SELECT_AGENT适用 |
DOING_METRIC_QUERY | 执行指标查询,只有METRIC_SELECT_AGENT适用 |
HQL_SELECT_FIELDS | 执行即时查询字段选择,只有HQL_AGENT适用 |
HQL_SELECT_FUNCTIONS | 执行即时查询函数例子选择,只有HQL_AGENT适用 |
GENERATE_HQL_QUERY | 生成即时查询,只有HQL_AGENT适用 |
DOING_HQL_QUERY | 执行即时查询,只有HQL_AGENT适用 |
DOING_SUMMARY | 执行总结,HQL_AGENT和METRIC_SELECT_AGENT适用 |
DOING_QUESTION_SUGGESTING | 执行问题推荐,HQL_AGENT和METRIC_SELECT_AGENT,SUGGEST_QUESTIONS_AGENT适用 |
DONE | 执行完成,所有agent类型适用 |
FAILED | 执行失败,所有agent类型适用 |
CANCELLED | 执行取消,所有agent类型适用 |
Conversation
字段 | 类型 | 描述 |
---|---|---|
id | INTEGER | 一个对话的唯一id |
title | STRING | 一个对话的标题,默认是对话开头的用户提问 |
createdAt | DATETIME | 创建的时间 |
createdBy | INTEGER | 创建用户的 id |
updatedAt | DATETIME | 最后更新的时间 |
updatedBy | INTEGER | 最后修改用户的 id |
isDelete | BOOL | 后端软删除使用 |
Chat
字段 | 类型 | 描述 |
---|---|---|
conversationId | INTEGER | chat 所属对话的id |
uid | STRING | 一个问答回合的唯一标识 |
createdAt | DATETIME | 创建的时间 |
createdBy | INTEGER | 创建用户的 id |
updatedAt | DATETIME | 最后更新的时间 |
updatedBy | INTEGER | 最后修改用户的 id |
responseAt | DATETIME | 最后响应的时间 |
prompt | STRING | 一个问答回合的用户问题 |
answer | STRING | 一个问答回合的ai文本回答 |
charts | OBJECT ARRAY | 一个问答回合的ai生成的chart,可能有多个 |
suggestQuestions | STRING ARRAY | 一个问答回合的ai下一步的推荐问题 |
isContextEnd | BOOL | 是否结束话题切换新话题,计算时忽略本回合和之前的对话内容 |
statusList | STRING ARRAY | ProcessStatus中当前选择的agent已经完成的步骤 |
model | STRING | 使用的ai模型 |
temperature | DOUBLE | 模型的temperature设置 |
userConfig | OBJECT | 用户问题当前所处的衡石对象上下文信息,比如数据集信息 |
userConfig.appId | INTEGER | 用户问题当前所处的衡石对象上下文信息的应用id |
userConfig.datasetId | INTEGER | 用户问题当前所处的衡石对象上下文信息的数据集id |
userConfig.chartId | INTEGER | 用户问题当前所处的衡石对象上下文信息的图表id |
autoConfig | OBJECT | AgentManager和执行过程自动设置的一些信息,比如选择的agent等 |
autoConfig.agentType | STRING | AgentManager判定应该使用的agent |
liked | BOOL | 赞或者踩 |
likedMsg | STRING | 赞或者踩的具体内容 |
isDelete | BOOL | 后端软删除使用 |
isCurrent | BOOL | 在重新回答的回合中,被用户使用的回合是true,其他回合是false |
parentUid | STRING | 在重新回答的回合中,第一次回答的parentUid是null,其他次的parentUid是第一次回答的uid |
subChats | OBJECT ARRAY | Chat对象的数组,有重新回答的情况才有,包括第一次回答和其他次回答的Chat |
usage | OBJECT ARRAY | 本次对话回合调用大模型api消耗的token情况,每次api调用对应一个统计OBJECT |
ChatLog
字段 | 类型 | 描述 |
---|---|---|
uid | STRING | 一个问答回合的唯一标识 |
logs | OBJECT ARRAY | 一个问答回合的日志 |
logs[i].type | STRING | 日志类型,包括ASSISTANT,USER,PROCESS,ERROR |
logs[i].content | STRING | 日志内容 |
logs[i].timestamp | DATETIME | 日志时间 |
createdAt | DATETIME | 创建的时间 |
createdBy | INTEGER | 创建用户的 id |
updatedAt | DATETIME | 最后更新的时间 |
updatedBy | INTEGER | 最后修改用户的 id |
接口设计
创建对话
请求URL
http
POST /api/conversations HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|
Request Body 参数
见Conversation结构说明。主要是title字段,如果为空,默认生成Conversation YYYY-mm-DD HH:MM:SS为对话标题
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | OBJECT | 对话信息,包括id和标题等 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例:
http
POST /api/conversations HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
// Request Body:
{
"title": "去分析1",
...
}
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": {
"id":1,
"title":"去分析1",
...
}
...
}
删除对话
请求URL
http
DELETE /api/conversations/${conversationId} HTTP/1.1
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id |
Request Body 参数
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例:
http
DELETE /api/conversations/1 HTTP/1.1
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"version": "version@9a5e106#6730f0d",
...
}
获取对话列表
请求URL
http
GET /api/conversations HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
offset | INTERGER | 否 | 偏移的值 |
limit | INTERGER | 否 | 查询的最大个数 |
orderBy | STRING | 否 | 排序字段名,比如 id,title,createdAt, updatedAt 等 |
orderType | STRING | 否 | 排序规则,asc 或者 desc |
returnChats | BOOL | 否 | 是否把对话下面的所有回合都获取并放入chats字段中一起返回 |
Request Body 参数
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | OBJECT ARRAY | 对话列表 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
totalHits | INTEGER | 所有结果列表总数 |
offset | INTEGER | 本次分页结果偏移量 |
接口示例:
http
GET /api/conversations HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": [
{
"id":1,
"title":"去分析1",
...
},
...
]
...
}
修改对话
请求URL
http
PUT /api/conversations/${conversationId} HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id |
Request Body 参数
见Conversation结构说明。主要是title字段,用于修改标题
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | OBJECT | 对话信息,包括id和标题等 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例:
http
PUT /api/conversations/1 HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
// Request Body:
{
"title": "去分析11",
...
}
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": {
"id":1,
"title":"去分析11",
...
}
...
}
获取一个对话
请求URL
http
GET /api/conversations/${conversationId} HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id |
Request Body 参数
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | OBJECT | 对话信息,包括id和标题等 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例:
http
GET /api/conversations/1 HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": {
"id":1,
"title":"去分析11",
...
}
...
}
创建一个对话下的回合
请求URL
http
POST /api/conversations/${conversationId}/chats HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id,如果是专门获取推荐问题,对话内容不展示给用户,用固定的id 0 |
Request Body 参数
见对话回合chat结构说明。主要包括prompt和userConfig,prompt是用户的本回合对话内容,userConfig配置当前用户所针对的衡石实体,目前只支持数据集或图表。
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | OBJECT | 对话回合信息,包括uid和ai的回答等信息,详见对话回合chat结构说明 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例1 创建即时查询对话回合:
http
POST /api/conversations/1/chats HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
// Request Body:
{
"prompt": "每个short_name的最大的latitude是多少?",
"userConfig":{
"appId": 130535,
"datasetId": 2
}
}
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": {
"conversationId":1,
"uid": "a6137043-4074-4e00-a2ff-6ece1dbdabbf",
"createdAt": "2023-12-13 17:26:55",
"charts": [],
"answer": "",
"responseAt": "",
"prompt": "每个short_name的最大的latitude是多少?",
"suggestQuestions":[],
"statusList": ["ANALYZE_REQUEST"],
"userConfig":{
"appId": 130535,
"datasetId": 2
},
"autoConfig":{}
}
...
}
接口示例2 创建指标查询对话回合:
http
POST /api/conversations/1/chats HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
// Request Body:
{
"prompt": "服务咨询量",
"userConfig":{
"appId": 130535,
"datasetId": 3
}
}
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": {
"conversationId": 1,
"uid": "1814fd1a-cbdd-43eb-83f7-014404241379",
"createdAt": "2023-11-27 14:21:35",
"charts": [],
"answer": "",
"responseAt": "",
"prompt": "服务咨询量",
"suggestQuestions":[],
"statusList": ["ANALYZE_REQUEST"],
"userConfig":{
"appId": 130535,
"datasetId": 3
},
"autoConfig":{}
}
...
}
接口示例3 创建图表推荐问题对话回合:
http
POST /api/conversations/0/chats HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
// Request Body:
{
"prompt": "请根据图表字段推荐问题",
"userConfig":{
"appId": 130535,
"chartId": 2
}
}
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": {
"conversationId": 0,
"uid": "1814fd1a-cbdd-43eb-83f7-014404241234",
"createdAt": "2023-11-27 14:21:35",
"charts": [],
"answer": "",
"responseAt": "",
"prompt": "请根据图表字段推荐问题",
"suggestQuestions":[],
"statusList": ["ANALYZE_REQUEST"],
"userConfig":{
"appId": 130535,
"chartId": 2
},
"autoConfig":{}
}
...
}
删除一个对话下的一个回合
请求URL
http
DELETE /api/conversations/${conversationId}/chats/${uid} HTTP/1.1
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id |
uid | STRING | 是 | 对话回合的唯一标识 |
Request Body 参数
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例:
http
DELETE /api/conversations/1/chats/550e8400-e29b-41d4-a716-446655440000 HTTP/1.1
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"version": "version@9a5e106#6730f0d",
...
}
删除一个对话下的所有回合
请求URL
http
DELETE /api/conversations/${conversationId}/chats HTTP/1.1
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id |
Request Body 参数
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例:
http
DELETE /api/conversations/1/chats HTTP/1.1
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"version": "version@9a5e106#6730f0d",
...
}
获取一个对话下的回合列表
请求URL
http
GET /api/conversations/${conversationId}/chats HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id |
offset | INTERGER | 否 | 偏移的值 |
limit | INTERGER | 否 | 查询的最大个数 |
orderBy | String | 否 | 排序字段名,比如 id,title,createdAt, updatedAt 等 |
orderType | String | 否 | 排序规则,asc 或者 desc |
Request Body 参数
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | OBJECT ARRAY | 对话回合列表 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
totalHits | INTEGER | 所有结果列表总数 |
offset | INTEGER | 本次分页结果偏移量 |
接口示例:
http
GET /api/conversations/1/chats HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": [
{
"conversationId":1,
"uid": "a6137043-4074-4e00-a2ff-6ece1dbdabbf",
"createdAt": "2023-12-13 17:26:55",
"charts": [
{
"appId": 130535,
"datasetId": 2,
"options": {
"axes": [
{
"op": "{{2}}.{short_name}",
"uid": "uid1",
"fieldName": "short_name",
"kind": "formula",
"datasetId": 2,
"labelOrigin": "short_name",
"label": "short_name",
"isAggregate": false,
"value": "{{china_map_province1}}.{short_name}",
"dataset": 2,
"fieldType": "string"
},
{
"op": "max({{2}}.{latitude})",
"uid": "uid2",
"fieldName": "latitude",
"kind": "formula",
"datasetId": 2,
"labelOrigin": "latitude",
"label": "latitude",
"isAggregate": true,
"value": "max({{china_map_province1}}.{latitude})",
"dataset": 2,
"fieldType": "number"
}
],
"limit": 100
},
"dataAppId": 130535,
"datasetIds": [
2
]
}
],
"answer": "根据提供的数据,我们可以看到每个short_name(这里指的是中国的各个省份、直辖市和特别行政区)对应的最大纬度值。例如,\"内蒙古\"的最大纬度是40.8182330000,\"湖北\"的最大纬度是30.5462220000,\"海南\"的最大纬度是20.0186390000,以此类推。从数据中我们可以看出,纬度最大的是\"黑龙江\",纬度为45.7422530000,纬度最小的是\"海南\",纬度为20.0186390000。这些数据可以帮助我们了解中国各地区的地理位置分布。",
"responseAt": "2023-12-13 17:27:20",
"prompt": "每个short_name的最大的latitude是多少?",
"suggestQuestions":["哪个short_name的latitude最大?","哪个short_name的latitude最小?"],
"statusList": ["ANALYZE_REQUEST","HQL_SELECT_FIELDS","GENERATE_HQL_QUERY","DOING_HQL_QUERY","DOING_SUMMARY","DONE"],
"userConfig":{
"appId": 130535,
"datasetId": 2
},
"autoConfig":{
"agentType":"HQL_AGENT"
}
},
{
"conversationId": 1,
"uid": "1814fd1a-cbdd-43eb-83f7-014404241379",
"createdAt": "2023-11-27 14:21:35",
"charts": [
{
"appId": 130535,
"datasetId": 3,
"options": {
"axes": [
{
"op": "c38",
"uid": "uid1",
"fieldName": "c38",
"kind": "measure",
"datasetId": 3,
"labelOrigin": "咨询量",
"label": "咨询量",
"isAggregate": true,
"dataset": 3,
"fieldType": "number"
}
],
"limit": 100
},
"dataAppId": 130535,
"datasetIds": [
3
]
}
],
"answer": "根据你的问题和提供的数据,这个数字369可能代表的是\"服务咨询量\"。这意味着在特定的时间段内,有369次服务咨询的记录。这个指标可以帮助我们了解客户对我们的服务有多大的需求,以及我们的服务是否能满足客户的需求。如果服务咨询量持续增长,那么可能意味着我们的服务有很大的市场需求,或者我们的服务有待改进以更好地满足客户的需求。",
"responseAt": "2023-11-27 14:22:05",
"prompt": "服务咨询量",
"suggestQuestions":["成交量","成交率"],
"statusList": ["ANALYZE_REQUEST","GENERATE_METRIC_QUERY","DOING_METRIC_QUERY","DOING_SUMMARY","DONE"],
"userConfig":{
"appId": 130535,
"datasetId": 3
},
"autoConfig":{
"agentType":"METRIC_SELECT_AGENT"
}
},
...
]
...
}
修改一个对话下的回合
请求URL
http
PUT /api/conversations/${conversationId}/chats/${uid} HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id |
uid | STRING | 是 | 对话回合的唯一标识 |
Request Body 参数
见Chat结构说明。主要用于更新liked,likedMsg,isContextEnd,分别表示点赞,踩和结束对话上下文。
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | OBJECT | 对话回合信息,参考Chat结构说明 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例:
http
PUT /api/conversations/1/chats/1814fd1a-cbdd-43eb-83f7-014404241379 HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
// Request Body:
{
"liked": "false",
"likedMsg":"总结不是很好"
...
}
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": {
"conversationId": 1,
"uid": "1814fd1a-cbdd-43eb-83f7-014404241379",
"createdAt": "2023-11-27 14:21:35",
"charts": [
{
"appId": 130535,
"datasetId": 3,
"options": {
"axes": [
{
"op": "c38",
"uid": "uid1",
"fieldName": "c38",
"kind": "measure",
"datasetId": 3,
"labelOrigin": "咨询量",
"label": "咨询量",
"isAggregate": true,
"dataset": 3,
"fieldType": "number"
}
],
"limit": 100
},
"dataAppId": 130535,
"datasetIds": [
3
]
}
],
"answer": "根据你的问题和提供的数据,这个数字369可能代表的是\"服务咨询量\"。这意味着在特定的时间段内,有369次服务咨询的记录。这个指标可以帮助我们了解客户对我们的服务有多大的需求,以及我们的服务是否能满足客户的需求。如果服务咨询量持续增长,那么可能意味着我们的服务有很大的市场需求,或者我们的服务有待改进以更好地满足客户的需求。",
"responseAt": "2023-11-27 14:22:05",
"prompt": "服务咨询量",
"suggestQuestions":["成交量","成交率"],
"statusList": ["ANALYZE_REQUEST","GENERATE_METRIC_QUERY","DOING_METRIC_QUERY","DOING_SUMMARY","DONE"],
"userConfig":{
"appId": 130535,
"datasetId": 3
},
"autoConfig":{
"agentType":"METRIC_SELECT_AGENT"
},
"liked": "false",
"likedMsg":"总结不是很好"
}
...
}
获取一个对话下的回合
请求URL
http
GET /api/conversations/${conversationId}/chats/${uid} HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id,如果是专门获取推荐问题,对话内容不展示给用户,用固定的id 0 |
uid | STRING | 是 | 对话回合的唯一标识 |
Request Body 参数
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | OBJECT | 对话回合信息,包括状态和结果等,参考Chat结构说明 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例1 获取即时查询结果:
http
GET /api/conversations/1/chats/a6137043-4074-4e00-a2ff-6ece1dbdabbf HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": {
"conversationId":1,
"uid": "a6137043-4074-4e00-a2ff-6ece1dbdabbf",
"createdAt": "2023-12-13 17:26:55",
"charts": [
{
"appId": 130535,
"datasetId": 2,
"options": {
"axes": [
{
"op": "{{2}}.{short_name}",
"uid": "uid1",
"fieldName": "short_name",
"kind": "formula",
"datasetId": 2,
"labelOrigin": "short_name",
"label": "short_name",
"isAggregate": false,
"value": "{{china_map_province1}}.{short_name}",
"dataset": 2,
"fieldType": "string"
},
{
"op": "max({{2}}.{latitude})",
"uid": "uid2",
"fieldName": "latitude",
"kind": "formula",
"datasetId": 2,
"labelOrigin": "latitude",
"label": "latitude",
"isAggregate": true,
"value": "max({{china_map_province1}}.{latitude})",
"dataset": 2,
"fieldType": "number"
}
],
"limit": 100
},
"dataAppId": 130535,
"datasetIds": [
2
]
}
],
"answer": "根据提供的数据,我们可以看到每个short_name(这里指的是中国的各个省份、直辖市和特别行政区)对应的最大纬度值。例如,\"内蒙古\"的最大纬度是40.8182330000,\"湖北\"的最大纬度是30.5462220000,\"海南\"的最大纬度是20.0186390000,以此类推。从数据中我们可以看出,纬度最大的是\"黑龙江\",纬度为45.7422530000,纬度最小的是\"海南\",纬度为20.0186390000。这些数据可以帮助我们了解中国各地区的地理位置分布。",
"responseAt": "2023-12-13 17:27:20",
"prompt": "每个short_name的最大的latitude是多少?",
"suggestQuestions":["哪个short_name的latitude最大?","哪个short_name的latitude最小?"],
"statusList": ["ANALYZE_REQUEST","HQL_SELECT_FIELDS","GENERATE_HQL_QUERY","DOING_HQL_QUERY","DOING_SUMMARY","DONE"],
"userConfig":{
"appId": 130535,
"datasetId": 2
},
"autoConfig":{
"agentType":"HQL_AGENT"
}
}
...
}
接口示例2 获取指标查询结果:
http
GET /api/conversations/1/chats/1814fd1a-cbdd-43eb-83f7-014404241379 HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": {
"conversationId": 1,
"uid": "1814fd1a-cbdd-43eb-83f7-014404241379",
"createdAt": "2023-11-27 14:21:35",
"charts": [
{
"appId": 130535,
"datasetId": 3,
"options": {
"axes": [
{
"op": "c38",
"uid": "uid1",
"fieldName": "c38",
"kind": "measure",
"datasetId": 3,
"labelOrigin": "咨询量",
"label": "咨询量",
"isAggregate": true,
"dataset": 3,
"fieldType": "number"
}
],
"limit": 100
},
"dataAppId": 130535,
"datasetIds": [
3
]
}
],
"answer": "根据你的问题和提供的数据,这个数字369可能代表的是\"服务咨询量\"。这意味着在特定的时间段内,有369次服务咨询的记录。这个指标可以帮助我们了解客户对我们的服务有多大的需求,以及我们的服务是否能满足客户的需求。如果服务咨询量持续增长,那么可能意味着我们的服务有很大的市场需求,或者我们的服务有待改进以更好地满足客户的需求。",
"responseAt": "2023-11-27 14:22:05",
"prompt": "服务咨询量",
"suggestQuestions":["成交量","成交率"],
"statusList": ["ANALYZE_REQUEST","GENERATE_METRIC_QUERY","DOING_METRIC_QUERY","DOING_SUMMARY","DONE"],
"userConfig":{
"appId": 130535,
"datasetId": 3
},
"autoConfig":{
"agentType":"METRIC_SELECT_AGENT"
}
}
...
}
接口示例3 获取图表推荐问题:
http
GET /api/conversations/0/chats/1814fd1a-cbdd-43eb-83f7-014404241234 HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": {
"conversationId": 0,
"uid": "1814fd1a-cbdd-43eb-83f7-014404241234",
"createdAt": "2023-11-27 14:21:35",
"charts": [],
"answer": "",
"responseAt": "2023-11-27 14:22:05",
"prompt": "请根据图表字段推荐问题",
"suggestQuestions":["各省份的经纬度分布情况是怎样的?","哪个short_name的latitude最大?"],
"statusList": ["ANALYZE_REQUEST","DOING_QUESTION_SUGGESTING","DONE"],
"userConfig":{
"appId": 130535,
"chartId": 2
},
"autoConfig":{
"agentType":"SUGGEST_QUESTIONS_AGENT"
}
}
...
}
获取一个对话下的一个回合的执行日志
请求URL
http
GET /api/conversations/${conversationId}/chats/${uid}/logs HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id |
uid | STRING | 是 | 对话回合的唯一标识 |
Request Body 参数
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | OBJECT ARRAY | 对话回合的日志信息,参考ChatLog结构说明下的logs字段 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例:
http
GET /api/conversations/1/chats/a6137043-4074-4e00-a2ff-6ece1dbdabbf/logs HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": [
{
"type": "PROCESS",
"content": "begin to prepare base info",
"timestamp": "2023-12-13 17:26:55"
},
{
"type": "PROCESS",
"content": "llm chain build completed:[ContextLLM, HQLLLM, VisualizeLLM, SummaryLLM]",
"timestamp": "2023-12-13 17:26:55"
},
{
"type": "PROCESS",
"content": "LLM ContextLLM begin to analyze",
"timestamp": "2023-12-13 17:26:55"
},
{
"type": "PROCESS",
"content": "ai answer [{\"datasetId\":2,\"fields\":[\"short_name\",\"latitude\"],\"computation_fields\":[\"latitude\"]}]",
"timestamp": "2023-12-13 17:26:57"
},
{
"type": "PROCESS",
"content": "chat answer validateResult is true with message {\"value\":\"[{\\\"datasetId\\\":2,\\\"fields\\\":[\\\"short_name\\\",\\\"latitude\\\"],\\\"computation_fields\\\":[\\\"latitude\\\"]}]\"}",
"timestamp": "2023-12-13 17:26:57"
},
{
"type": "ASSISTANT",
"content": "[{\"datasetId\":2,\"fields\":[\"short_name\",\"latitude\"],\"computation_fields\":[\"latitude\"]}]",
"timestamp": "2023-12-13 17:26:57"
},
{
"type": "PROCESS",
"content": "LLM HQLLLM begin to analyze",
"timestamp": "2023-12-13 17:26:57"
},
{
"type": "PROCESS",
"content": "ai answer {\"axes\":[{\"op\":\"{short_name}\",\"uid\":\"uid1\"},{\"op\":\"max({latitude})\",\"uid\":\"uid2\"}]}",
"timestamp": "2023-12-13 17:27:08"
},
{
"type": "PROCESS",
"content": "LLM VisualizeLLM begin to analyze",
"timestamp": "2023-12-13 17:27:09"
},
{
"type": "PROCESS",
"content": "LLM SummaryLLM begin to analyze",
"timestamp": "2023-12-13 17:27:09"
},
{
"type": "PROCESS",
"content": "ai answer 根据提供的数据,我们可以看到每个short_name(这里指的是中国的各个省份、直辖市和特别行政区)对应的最大纬度值。例如,\"内蒙古\"的最大纬度是40.8182330000,\"湖北\"的最大纬度是30.5462220000,\"海南\"的最大纬度是20.0186390000,以此类推。从数据中我们可以看出,纬度最大的是\"黑龙江\",纬度为45.7422530000,纬度最小的是\"海南\",纬度为20.0186390000。这些数据可以帮助我们了解中国各地区的地理位置分布。",
"timestamp": "2023-12-13 17:27:20"
}
]
...
}
让ai重新回答一个对话下的一个回合
请求URL
http
GET /api/conversations/${conversationId}/chats/${uid}/regenerate HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id |
uid | STRING | 是 | 对话回合的唯一标识 |
Request Body 参数
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | STRING | 回合uid |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例:
http
GET /api/conversations/1/chats/a6137043-4074-4e00-a2ff-6ece1dbdabbf/regenerate HTTP/1.1
Accept: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"version": "version@9a5e106#6730f0d",
"code": 0,
"msg": "success",
"data": "a6137043-4074-4e00-a2ff-6ece1dbdabbf",
"chartDataStartTimeMillis": 0
}
设置一个对话下的回合的多次运行结果为选定答案
请求URL
http
POST /api/conversations/${conversationId}/chats/${uid}/is-current HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
请求参数
URL 参数
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
conversationId | INTEGER | 是 | 对话id,如果是专门获取推荐问题,对话内容不展示给用户,用固定的id 0 |
uid | STRING | 是 | 对话回合的唯一标识 |
Request Body 参数
为空就行
返回对象的格式说明
字段 | 类型 | 说明 |
---|---|---|
version | STRING | 当前系统版本哈希值 |
data | OBJECT | 对话回合信息,包括uid和ai的回答等信息,详见对话回合chat结构说明 |
msg | STRING | http code不是200的话,返回具体的错误信息 |
接口示例:
http
POST /api/conversations/1/chats/a6137043-4074-4e00-a2ff-6ece1dbdabbf/is-current HTTP/1.1
Content-Type: application/json
Cookie: csrf=183f1c4...; sid=26ee552d...; _USER_SESSION_ID=f2a01083...
// Request Body:
{
}
http
HTTP/1.1 200 Ok
Content-Type: application/json
{
"data": {
"conversationId":1,
"uid": "a6137043-4074-4e00-a2ff-6ece1dbdabbf",
"isCurrent": true,
"createdAt": "2023-12-13 17:26:55",
"charts": [],
"answer": "",
"responseAt": "",
"prompt": "每个short_name的最大的latitude是多少?",
"suggestQuestions":[],
"statusList": ["ANALYZE_REQUEST"],
"userConfig":{
"appId": 130535,
"datasetId": 2
},
"autoConfig":{}
}
...
}