WebSocket 是面向连接的,全双工通道。建立链接前需要先从服务端获取 Token。通过这个 token 才能与服务端创建 WebSocket 链接。Token 仅建立链接时有效,链接建立成功后废弃。
接入流程图:

通过腾讯云 SDK 调用 GetWsToken 接口获取 Token,可参考 GetWsToken 文档。
说明:
获取的 Token 仅供一次会话连接使用,并且会过期,请在获取到 Token 后及时建立长连接,如需建立其他连接,需要重新获取 Token。
标签相关的值不再使用该接口传递,请参考下面 数据结构 中的 custom_variables 传入知识库检索范围相关参数 。
在应用管理界面,找到您处于运行中的应用(需要先发布),单击调用,会弹出“调用信息”窗口。
在调用信息窗口可以看到 AppKey,单击复制即可。
请求地址:wss://wss.lke.cloud.tencent.com/v1/qbot/chat/conn/?EIO=4&transport=websocket
请求协议:Socket.IO v4 (参考文档)
Websocket 连接建立成功后,服务器回包如下所示:
0{"sid":"xxx","upgrades":[],"pingInterval":25000,"pingTimeout":5000}通过 Socket.IO 的 auth 消息传递。
在建立连接并收到服务器回包后,发送 Token 鉴权。发送 Token 格式如下所示:
40{"token":"xx-xx-xx-xx-xx"}服务器发送的心跳包如下("2"是心跳包的内容):
2
此时客户端需要响应("3"是需要响应的内容):
3
注意:
Socket.IO v4 有心跳包, 必须处理,否则会被服务器断开连接。
如果自己实现 Client,需要注意处理心跳包。本文档提供的 Demo 已经自动处理了心跳包。
Socket.IO 事件格式如下,实现时需要注意其结构。建议尽可能使用 Socket.IO 提供的 标准 Client,或参考本文档下方提供的 前后端 Demo。
42["类型",{"payload":{事件体}}]
例如:
42["send",{"payload":{请参考下面各个不同事件的数据结构}}]
事件名:send
事件方向:前端 > 后端
注意:
发送 send 事件前,需要先发布应用。
用户发出一条消息(发送事件)时,服务器会将该消息原样返回(回复事件,其中 is_from_self = true),以便确认消息被服务端收到并对应更新消息 ID、时间戳。
如果需要携带知识标签信息,请在获取 token 时携带。
数据结构:
名称 | 类型 | 是否必填 | 说明 |
request_id | string(255) | 否 | 请求 ID,用于标识一个请求(作消息串联,建议每个请求使用不同的 request_id)。 为了便于问题排查,建议必填。 |
session_id | string(64) | 是 | 会话 ID,用于标识一个会话(外部系统提供,建议不同的用户端会话传入不同的session_id,否则同一个应用下的不同用户的消息记录会串掉) 参数长度:2-64个字符 校验规则: ^[a-zA-Z0-9_-]{2,64}$ ,一般可以用 uuid 来生成该值 uuid 示例:1b9c0b03-dc83-47ac-8394-b366e3ea67ef |
content | string | 是 | 消息内容,如果发送图片,在此传递 Markdown 格式的图片链接,例如,其中图片链接需要可公有读【需将图片传入 tcadp 的 cos 中】。 最大值限制: 不同模型最大值有差异,请参考 ListModel 接口的 InputLenLimit |
file_infos | Object 数组 | 否 | 文件信息,如果填写该字段,content 字段可以为空。数据结构请参考 file_infos , 依赖 实时文档解析。 注意: 没有文件信息时,该字段可不填或指定为空数组。 |
custom_variables | map[string]string | 否 | 工作流场景: 自定义参数可用于传递参数给工作流开始节点的 API 参数字段,通过该 API 参数字段可以被工作流识别并使用,具体参考开始节点使用文档。 自定义 API 参数的值。可以配置多个 key: value 对,key 为自定义参数的参数名称,value 为对应的自定义参数的运行时的值。 注意: map 的 key 和 value 类型都是 string,如{"UserID":"10220022"}, 不合法的参数如: {"UserID": 10220022}; 其中 value 也可以是 json 字符串,如 {"Data": "{\"UserID\":\"10220022\",\"Score\":{\"Chinese\":89,\"Math\":98}}"} 检索知识库范围设置场景: 自定义参数可用于设置知识库检索范围,如需传入多个参数值,使用英文竖线分隔(|),例如: "user1|user2"。 注意: 如果需要在问题中指定知识库进行检索,可以通过该字段传入相关的标签值, 具体请参考 知识库检索范围设置 。 |
system_role | string | 否 | 角色指令(提示词), 为空时使用应用配置默认设定,填写时取当前值。 最大值限制: 不同模型最大值有差异,请参考 ListModel 接口的 RoleLenLimit |
incremental | bool | 否 | 控制回复事件和思考事件中的 content 是否是增量输出的内容,默认 false 。 注意: 该字段设置为 true , 只对回复事件, 思考事件的生效。 回复事件效果: 思考事件效果: |
search_network | string | 否 | 是否开启联网搜索。取值范围: 空字符串:跟随应用配置 enable:打开联网搜索 disable:关闭联网搜索 注意: 应用配置在未开启联网搜索时,如上取值字段无意义。 |
model_name | string | 否 | 支持在对话的过程传入指定模型, 同一个 session_id 下传入不同的模型名称可以保持上下文之间的关联。 当前支持下面几个自定义模型: Youtu/youtu-mrc-pro:精调知识大模型高级版 Youtu/youtu-mrc-standard:精调知识大模型标准版 Hunyuan/hunyuan:混元大模型高级版 Hunyuan/hunyuan-standard:混元大模型标准版 Hunyuan/hunyuan-turbo:混元大模型 Turbo 版 Hunyuan/hunyuan-standard-256k:混元大模型长文本版 Hunyuan/hunyuan-role:混元大模型角色扮演版 Hunyuan/hunyuan-t1:混元大模型 T1版 Hunyuan/hunyuan-turbos:混元大模型 Turbos 版 Hunyuan/hunyuan-2.0-thinking-251109:混元大模型2.0-Think Hunyuan/hunyuan-2.0-instruct-251111:混元大模型2.0-Instruct Deepseek/deepseek-r1-250528:DeepSeek-R1模型最新版 Deepseek/deepseek-v3-250324:DeepSeek-V3模型最新版 Deepseek/deepseek-v3.1:DeepSeek-V3.1模型 Deepseek/deepseek-v3.2:DeepSeek-V3.2模型 TCADP/glm-5:智谱 GLM-5 TCADP/kimi-k2.5:Kimi K2.5 TCADP/minimax-m2.5:MiniMax M2.5 注意: 请确保账户下有足够的 PU 资源,避免在使用的过程中报错。 |
stream | string | 否 | 是否开启流式传输。取值范围: 空字符串:跟随应用配置 enable:流式传输 disable:非流式传输 |
workflow_status | string | 否 | 是否开启工作流。取值范围: 空字符串:跟随应用配置(页面无配置工作流开关的入口,默认是开启) enable:开启工作流 disable:关闭工作流 该参数仅在标准模式下生效。 |
file_infos
文件信息的数据结构:
名称 | 类型 | 是否必填 | 说明 |
file_name | string | 是 | 文件名称。 |
file_size | string | 是 | 实时文档解析接口返回的文件大小。 |
file_url | string | 是 | 实时文档解析接口返回的文件 URL。 |
file_type | string | 是 | 文件类型。 |
doc_id | string | 是 | 实时文档解析接口返回的 doc_id。 |
事件名:reply
事件方向:后端 > 前端
注意:
如果收到的消息中 is_evil == true 表示该消息命中敏感内容,发送失败。
因并发超限导致排队超时,会返回 "超出并发数限制" 错误。
数据结构:
名称 | 类型 | 说明 |
request_id | string(255) | 请求 ID,用于标识一个请求(作消息串联,建议每个请求使用不同的 request_id) |
content | string | 回复消息内容 |
file_infos | Object 数组 | 文件信息 |
record_id | string(64) | 消息唯一 ID |
related_record_id | string(64) | 关联的消息唯一 ID |
session_id | string(64) | 会话 ID,用于标识一个会话(外部系统提供,建议不同的用户端会话传入不同的 session_id,否则同一个应用下的不同用户的消息记录会串掉) |
is_from_self | bool | 消息是否由客户端发出 |
can_rating | bool | 该消息记录是否能评价 |
timestamp | int64 | 消息时间戳(秒级) |
is_final | bool | reply 事件消息是否已输出完成标记 流式模式下,消息会多次返回,每次返回均覆盖之前的答案 当 is_final == true 时,停止生成按钮隐藏,并显示点赞点踩按钮 reference 事件和 reply 事件无固定顺序关系,不建议以该字段作为消息完整结束的标识 |
is_evil | bool | 是否命中敏感内容 注意:消息上行后会先进行敏感内容检测,并返回一条【reply】事件,告知敏感内容检测结果, 敏感内容检测通过后才会进入正常业务逻辑处理 |
is_llm_generated | bool | 是否为模型生成内容 |
reply_method | uint8 | 回复方式: 1:大模型回复 2:未知问题回复 3:拒答问题回复 4:敏感回复 5:已采纳问答对优先回复 7:并发数超限回复 8:全局干预知识 9:任务流回复 10:任务流答案 11:搜索引擎回复 12:知识润色后回复 13:图片理解回复 14:实时文档回复 15:澄清确认回复 16:工作流回复 17:工作流运行结束 18:智能体回复 19:多意图回复 23:智能体结构化输出 |
knowledge | Object 数组 | 命中的知识 |
option_cards | string 数组 | 选项卡,任务流程专有 说明:该字段可能为空,为空时该字段不返回 |
custom_params | string 数组 | 用户自定义业务参数,用于透传问答中业务参数 说明:该字段可能为空,为空时该字段不返回 |
task_flow | Object | 任务流程调试信息 说明:该字段可能为空,为空时该字段不返回 |
work_flow | Object | 工作流调试信息 说明:该字段可能为空,为空时该字段不返回 |
quote_infos | Object 数组 | 引用信息 |
knowledge 命中的知识的数据结构:
名称 | 类型 | 说明 |
id | string | 命中的知识 ID |
type | uint32 | 命中的知识类型: 1:问答 2:文档片段 |
seg_id | string | 片段 ID , 可通过 DescribeSegments 接口查看片段详情 |
work_flow 工作流调试信息的数据结构:
名称 | 类型 | 说明 |
workflow_name | string | 工作流名称 |
workflow_id | string | 工作流 ID |
qworkflow_run_id | string | 工作流运行 ID |
option_cards | string 数组 | 选项卡 |
current_node | Object | 当前节点信息 |
outputs | string 数组 | 输出结果 |
current_node 当前工作流节点信息:
名称 | 类型 | 说明 |
NodeID | string | 节点 ID |
NodeType | int32 | 节点类型: 0:未指定 1: 开始节点 2:参数提取节点 3:大模型节点 4:知识问答节点 5:知识检索节点 6:标签提取节点 7:代码执行节点 8:工具节点 9:逻辑判断节点 10:回复节点 → 消息节点 11:选项卡节点 12:循环节点 13:意图识别节点 14:工作流节点 15:插件节点 16:结束节点 |
NodeName | string | 节点名称 |
Status | int32 | 状态: 0:初始状态 1: 运行中 2:运行成功 3:运行失败 |
Input | string | 节点的输入。json 字符串(含普通字符串) |
Output | string | 节点的最终输出。json 字符串(含普通字符串) |
TaskOutput | string | 任务的输出。(原始输出) |
FailMessage | string | 异常信息 |
CostMilliSeconds | string | 节点的总耗时。如果节点有多次调用,耗时为多次调用的总和。 |
Reply | string | 当前节点的回复内容。当前参数提取、消息节点、结束回复节点可能非空 |
BelongNodeID | string | 节点所属工作流被引用时的引用节点的 ID,所属的工作流是被引用的时候非空。 |
StatisticInfo | Object | LLM 统计信息 |
StatisticInfo LLM 统计信息:
名称 | 类型 | 说明 |
ModelName | string | 模型名称 |
FirstTokenCost | uint32 | 首 token 耗时 |
TotalCost | uint32 | 推理总耗时 |
InputTokens | uint32 | 输入 token 数量 |
OutputTokens | uint32 | 输出 token 数量 |
TotalTokens | uint32 | 输入+输出总 token |
quote_infos 引用信息数据结构:
名称 | 类型 | 说明 |
index | int | 引用的角标索引, 角标 icon 请接入方自行设计实现 |
position | int | 在回复内容 content 中的位置(中文字符,英文字符,其他符号都算一个字符) |
效果如下:
quote_infos 示例(此处只展示,省略了部分结构):
[ "reply", { "type": "reply", "payload": { "can_feedback": true, "can_rating": false, "content": "2025年2月13日腾讯股价情况如下:\n\n### 腾讯控股(00700.HK)港股市场表现\n\n- **股价波动**:腾讯控股股价在2025年2月13日经历了显著的波动,盘中振幅达到4.35%。这一波动既反映了市场情绪与资金博弈的短期影响,也体现了行业环境与公司基本面的长期逻辑。\n- **股价范围**:腾讯股价在当天最高达到464.6港币,最低跌至437港币。\n\n### 腾讯控股(TCTZF.us)美股市场表现\n\n- **股价上涨**:在美股市场,腾讯控股(TCTZF.us)股价在2025年2月13日盘中一度上涨5.05%,最新报58.10美元/股。\n- **市场反应**:这一异动引发了市场的广泛关注,投资者纷纷开始挖掘其背后的原因及影响。\n\n请注意,以上信息仅供参考,投资有风险,入市请谨慎。", "quote_infos": [ { "index": 1, "position": 323 } ], }, "message_id": "xxxxxxxxxxxxxxxxxxxxxxx" }]事件名:token_stat
事件方向:后端 > 前端
数据结构:
名称 | 类型 | 说明 |
session_id | string(64) | 会话 id |
request_id | string(255) | 对应发送事件对应的请求 id |
record_id | string(64) | 对应发送事件对应的消息记录 id |
status_summary | string | 本轮对话状态, 处理中: processing, 成功: success, 失败: failed |
status_summary_title | string | 本轮对话状态描述 |
elapsed | int | 本轮调用耗时,单位 ms |
token_count | int | 本轮请求消耗 token 数(当包含多个过程时,计算将汇总) |
procedures | Object 数组 | 调用过程列表 |
procedures 调用过程列表的数据结构:
名称 | 类型 | 说明 |
name | string | 英文名, 与下面的 title 字段一一对应 knowledge, task_flow, search_engine, image, large_language_model, pot_math, file |
title | string | 调用过程描述,对应 name 字段,各中文含义如下: 调用知识库、调用任务流程、调用搜索引擎、调用图片理解、大模型回复、调用计算器、阅读文件 |
status | string | 调用过程状态,处理中:processing;成功:success;失败:failed |
input_count | int | 当次过程输入消耗 token 数 |
output_count | int | 当次过程输出消耗 token 数 |
count | int | 当次过程消耗总 token 数:输入 + 输出 |
示例:
[ "token_stat", { "type": "token_stat", "payload": { "elapsed": 1616, "order_count": 50000000, "procedures": [ { "count": 323, "input_count": 308, "name": "knowledge", "output_count": 15, "status": "success", "title": "调用知识库" } ], "record_id": "Hpe_20240625_185659_215_EsH2uf8L", "request_id": "8PUcDU6xyQ-301747294000", "session_id": "2d071ef7-ef76-44df-84a4-9210672ed700c8", "status_summary": "success", "status_summary_title": "调用知识库", "token_count": 323, "used_count": 553 }, "message_id": "89d91395-06bc-4f2e-b240-06f7b4498b0c6e" }]事件名:rating
事件方向:双向
注意:
客户端发出评价事件时,客户端也会收到这个事件,以便客户端确认消息发出成功。
数据结构:
名称 | 类型 | 是否必填 | 说明 |
record_id | string(64) | 是 | 消息 ID(被评价的 reply 事件的消息 ID) |
score | uint8 | 是 | 评分: 1:点赞 2:点踩 |
reasons | string 数组 | 否 | 所选原因(用户反馈的内容,可以有多个) |
feedback_content | string | 否 | 反馈内容 |
事件名:stop_generation
事件方向:前端 > 后端
数据结构:
名称 | 类型 | 是否必填 | 说明 |
record_id | string(64) | 是 | 消息 ID(需要停止生成的 reply 事件消息 ID) |
事件名:reference
事件方向:后端 > 前端
数据结构:
名称 | 类型 | 说明 |
record_id | string(64) | 消息唯一 ID |
references | Object 数组 | 参考来源 |
references 参考来源的数据结构:
名称 | 类型 | 说明 |
id | string | 该 id 使用方法分为两部分, 可参考下面两个示例: 当参考来源类型为1,2,3时,可调用 获取来源详情列表 接口查看参考来源详情。如需预览,可通过上述接口获取对应参数拼接跳转访问:https://lke.cloud.tencent.com/preview?id=${docid}&botBizId=${appid}&page=${跳转的 doc 文档页码}&name=${跳转的 sheet 名称}&test=1 说明: 该 id 字段对应 DescribeRefer 中的 ReferBizIds 字段 当参考来源类型为4的时候,该 id 表示返回多个参考来源的序号 |
type | uint32 | 参考来源类型 1:问答 2:文档片段 4:联网检索到的内容 说明: 当 type = 2 的时候, 参考来源返回的粒度是文档切片维度的数据,需要配合上述 id 字段使用。 一篇文档 doc_id 可能存在多个切片,请自行决定是否需要进行去重展示。 |
url | string | type = 2 时, 该 url 为文档打开外部引用链接设置的自定义跳转链接地址 type = 4 时,该 url 为联网搜索到的信源地址 |
name | string | 参考来源名称 |
doc_id | uint64 | 参考来源文档 ID |
doc_biz_id | uint64 | 参考来源文档业务 ID, 可调用 文档详情接口查看对应文档的基础信息 |
doc_name | string | 参考来源文档名称 |
qa_biz_id | string | 参考来源问答业务 ID |
示例1:
参考来源类型为:
1:问答
2:文档片段
可调用 获取来源详情列表 接口查看参考来源详情, 此时 id 字段对应 DescribeRefer 中的 ReferBizIds 字段。
reference 事件:
[ "reference", { "type": "reference", "payload": { "record_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "references": [ { "doc_biz_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "doc_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "doc_name": "一百个成语典故及其历史人物故事+ (1).docx", "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "name": "一百个成语典故及其历史人物故事+ (1)", "qa_biz_id": "0", "type": 2, "url": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } ], "trace_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "message_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }]示例2:
参考来源类型为:
4:联网检索到的内容
此时,在收到的 thought 事件中或者 reply 事件中,content 字段下的 [3] [4] 表示就是 references 中联网检索到的来源的下标。
reply 事件(此处只展示,省略了部分结构):
[ "reply", { "type": "reply", "payload": { "can_feedback": true, "can_rating": false, "content": "\n\n截至2025年2月13日14:59,《哪吒2》(《哪吒之魔童闹海》)总票房(含预售) 已突破**98亿元**,距离100亿大关仅一步之遥[3][4][7][8]。该票房成绩已超越《黑豹》, 成为全球影史票房榜前18名中唯一一部非好莱坞电影[3][4][8]。 \n\n根据灯塔专业版预测,《哪吒2》最终总票房可能达到**153.38亿元**,而猫眼预测则给出更高的**160.32亿元**[4]。 此外,影片海外票房已超过627万元人民币,观影", }, "message_id": "**************************" }]reference 事件:
[ "reference", { "type": "reference", "payload": { "record_id": "**************************", "references": [ { "doc_biz_id": "0", "doc_id": "0", "doc_name": "", "id": "1", "name": "破82亿元,进入全球票房榜前31!哪吒2海外首映看哭观众,有周边上架3天就卖光", "qa_biz_id": "0", "type": 4, "url": "https://new.qq.com/rain/a/20250210A04P8O00" }, { "doc_biz_id": "0", "doc_id": "0", "doc_name": "", "id": "2", "name": "刚刚!哪吒2票房破90亿", "qa_biz_id": "0", "type": 4, "url": "https://new.qq.com/rain/a/20250211A07V6J00" }, { "doc_biz_id": "0", "doc_id": "0", "doc_name": "", "id": "3", "name": "冲刺百亿票房!《哪吒2》总票房破98亿", "qa_biz_id": "0", "type": 4, "url": "https://view.inews.qq.com/a/20250213A04F7F00?scene=qqsearch" }, { "doc_biz_id": "0", "doc_id": "0", "doc_name": "", "id": "4", "name": "《哪吒2》票房突破98亿元,影视股掀起涨停潮", "qa_biz_id": "0", "type": 4, "url": "https://view.inews.qq.com/a/20250213A04L4M00?scene=qqsearch" }, { "doc_biz_id": "0", "doc_id": "0", "doc_name": "", "id": "5", "name": "哪吒2票房破30亿", "qa_biz_id": "0", "type": 4, "url": "https://new.qq.com/rain/a/20250202A03TL500" }, { "doc_biz_id": "0", "doc_id": "0", "doc_name": "", "id": "6", "name": "哪吒2票房超去年冠军", "qa_biz_id": "0", "type": 4, "url": "https://new.qq.com/rain/a/20250203A02PAT00" }, { "doc_biz_id": "0", "doc_id": "0", "doc_name": "", "id": "7", "name": "《哪吒2》票房突破98亿元", "qa_biz_id": "0", "type": 4, "url": "https://view.inews.qq.com/a/20250213A04DPH00?scene=qqsearch" } ], "trace_id": "**************************" }, "message_id": "**************************" }]事件名:error
事件方向:后端 > 前端
数据结构:
名称 | 类型 | 说明 |
request_id | string(255) | 请求 ID,用于标识一个请求(作消息串联,建议每个请求使用不同的 request_id) |
error | Object | 错误 |
error 错误的数据结构:
名称 | 类型 | 说明 |
code | uint32 | 错误码 |
message | string | 错误信息 |
事件名:thought
事件方向:后端 > 前端
注意:
该事件目前只在使用 DeepSeek-R1 模型的时候有返回。
数据结构:
名称 | 类型 | 说明 |
elapsed | int | 本轮调用耗时,单位 ms |
is_workflow | bool | 是否工作流 |
procedures | Object 数组 | 调用过程列表 |
record_id | string(64) | 对应发送事件对应的消息记录 id |
request_id | string(255) | 对应发送事件对应的请求 id |
session_id | string(64) | 会话 id |
trace_id | string | 链路 id |
workflow_name | string | 工作流名称 |
procedures 的数据结构:
名称 | 类型 | 说明 |
debugging | Object | 调试过程信息 |
index | uint32 | 过程索引 |
name | string | 英文名,与下面的 title 字段一一对应。knowledge, task_flow, search_engine, image, large_language_model, pot_math, file, thought |
title | string | 调用过程描述,对应 name 字段,各中文含义如下: 调用知识库、调用任务流程、调用搜索引擎、调用图片理解、大模型回复、调用计算器、阅读文件、思考 |
status | string | 状态: processing-使用中;success-成功;failed-failed |
icon | string | 图标,用于展示 |
switch | string | 是否切换 Agent |
workflow_name | string | 工作流名称 |
plugin_type | int32 | 插件类型 0:自定义插件;1:官方插件;2:工作流 |
elapsed | uint32 | 当前请求执行时间,单位 ms |
debugging 的数据结构:
名称 | 类型 | 说明 |
content | string | 调试过程中输出的内容 |
效果:
示例:
[ "thought", { "type": "thought", "payload": { "elapsed": 0, "is_workflow": false, "procedures": [ { "debugging": { "content": "\n好的,用户询问DeepSeek-R1的特点,这已经是第三次了。前两次我已经详细列出了它的高效性能、长上下文处理、多领域通用性、安全合规、多语言支持、灵活部署和高性价比等特点。用户可能是在确认信息,或者希望得到更简洁或不同角度的回答。\n\n我需要考虑用户为什么重复提问。可能的情况包括:用户没有完全理解之前的回答,需要更简明的总结;或者他们想确认信息的准确性;亦或是他们希望了解是否有新的更新。此外,用户可能是在测试回答的一致性,或者他们需要将信息用于特定场景,比如报告或比较不同模型。\n\n接下来,我应该检查之前的回答是否全面,是否有遗漏的重要特点。例如,是否提到了模型的训练数据、支持的框架、具体性能指标等。另外,用户可能对技术细节感兴趣,比如模型结构、训练方法,或者是实际应用" }, "elapsed": 9954, "icon": "https://lke-realtime-1251316161.cos.ap-guangzhou.myqcloud.com/icon/thinking.png", "index": 0, "name": "thought", "plugin_type": 0, "status": "processing", "switch": "", "title": "思考", "workflow_name": "" } ], "record_id": "piQ_20250208_140511_254_45ja7HPq", "request_id": "rjbuFuYeDB-8487350785", "session_id": "dfd04cd0-ef69-4fb6-a447-a0b44018a93f", "trace_id": "9a9613dbaa9edd27958bd1180c524295 / piQ_20250208_140511_254_45ja7HPq", "workflow_name": "" }, "message_id": "7070ef0d-4c28-4d5a-abc8-2ea2e7fa027d" }]错误码 | 错误信息 |
400 | 请求参数错误,请参阅接入文档 |
460001 | Token 校验失败 |
460002 | 事件处理器不存在 |
460004 | 应用不存在 |
460006 | 消息不存在或没有操作权限 |
460007 | 会话创建失败 |
460008 | Prompt 渲染失败 |
460009 | 访客用户不存在 |
460010 | 会话不存在或没有操作权限 |
460011 | 超出应用配置模型 QPM 并发数限制 |
460020 | 模型请求超时 |
460021 | 知识库未发布 |
460022 | 访客创建失败 |
460023 | 消息点赞点踩失败 |
460024 | 标签不合法 |
460025 | 图像识别失败 |
460031 | 超出应用 QPS 并发数限制 |
460032 | 当前应用模型余额不足 |
460033 | 应用不存在或没有操作权限 |
460034 | 输入内容过长 |
460035 | 计算内容过长,已经停止 |
460036 | 任务流程节点预览参数异常 |
460037 | 搜索资源已用尽,调用失败 |
460038 | 该 AppID 请求存在异常行为,调用失败 |
adp-chat-client 代码内包括了一个完整连接建立和消息收发的流程。详细请查看 基于官方开源项目 adp-chat-client 的集成方案,来快速部署客户端并集成您的智能体应用,将智能体应用的对话功能嵌入您的业务系统。
如果不需要完整客户端,仅需用于渲染大模型回复消息的前端组件,可直接通过 npm 安装:
消息统一渲染组件(Vue 2 或 React):lke-component - npm
消息统一渲染组件(Vue 3):lke-component-vue3 - npm
安装命令:
框架 | 包名 | 安装 |
Vue2 |
|
|
Vue3 |
|
|
React |
|
|
// main.js
import Vue from 'vue'
import lkeComponent from 'lke-component'
Vue.use(lkeComponent)
<template>
<div>
<!-- 思考过程 -->
<MsgThought
v-if="thought.content"
:content="thought.content"
:title="thought.title"
:status="thought.status"
:elapsed="thought.elapsed"
/>
<!-- 消息内容 -->
<MsgContent
:content="message.content"
:isFinal="message.isFinal"
:isReplaceLinks="true"
clazzMd="answer-md"
/>
<!-- 加载状态 -->
<MsgLoading
v-if="loading"
:loadingMessage="true"
loadingText="正在思考..."
/>
</div>
</template>
<script>
export default {
data() {
return {
loading: false,
message: {
content: '',
isFinal: true
},
thought: {
content: '',
title: '思考完成',
status: 'success',
elapsed: 0
}
}
}
}
</script>
<script>
import { MsgContent, MsgLoading, MsgThought } from 'lke-component'
export default {
components: { MsgContent, MsgLoading, MsgThought }
}
</script>
// main.js
import { createApp } from 'vue'
import App from './App.vue'
import lkeComponent from 'lke-component-vue3'
import 'lke-component-vue3/style.css'
createApp(App).use(lkeComponent).mount('#app')
<template>
<div>
<MsgThought
v-for="(thought, i) in thoughts"
:key="i"
:content="thought.content"
:title="thought.title"
:titleIcon="thought.titleIcon"
:nodeName="thought.nodeName"
:status="thought.status"
:elapsed="thought.elapsed"
/>
<MsgContent
:content="message.content"
:isFinal="message.isFinal"
:isPrintAnimate="!message.isFinal"
/>
</div>
</template>
<script setup>
import { ref } from 'vue'
const message = ref({
content: '',
isFinal: true
})
const thoughts = ref([])
</script>
<script setup>import { MsgContent, MsgThought } from 'lke-component-vue3'import 'lke-component-vue3/style.css'</script>import { useState } from 'react'
import { MsgContent, MsgThought } from 'lke-component/react'
import 'lke-component/css' // 必须引入样式
export default function Chat() {
const [message, setMessage] = useState({
content: '',
isFinal: true
})
const [thoughts, setThoughts] = useState([])
return (
<div>
{thoughts.map((thought, i) => (
<MsgThought
key={i}
content={thought.content}
title={thought.title}
titleIcon={thought.titleIcon}
nodeName={thought.nodeName}
status={thought.status}
elapsed={thought.elapsed}
detailVisible={thought.detailVisible}
onTitleClick={() => {
// 切换展开/收起
const next = [...thoughts]
next[i].detailVisible = !next[i].detailVisible
setThoughts(next)
}}
/>
))}
<MsgContent
content={message.content}
isFinal={message.isFinal}
isReplaceLinks={true}
clazzMd="answer-md"
/>
</div>
)
}