@shulex/cxclawctl 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -22
- package/capabilities.lock.json +535 -131
- package/dist/cli.js +2203 -127
- package/dist/cli.js.map +1 -1
- package/package.json +20 -6
- package/requirements-cli.txt +0 -2
- package/skills/__lib__/__init__.py +0 -0
- package/skills/__lib__/skill-runtime/bootstrap.py +0 -134
- package/skills/__lib__/solvea-api/__init__.py +0 -0
- package/skills/__lib__/solvea-api/client.py +0 -1944
- package/skills/__lib__/solvea-api/dashboard.py +0 -100
- package/skills/__lib__/solvea-api/solvea_api.py +0 -1341
- package/skills/agent-analytics/SKILL.md +0 -74
- package/skills/agent-analytics/references/chat-report-fields.md +0 -36
- package/skills/agent-analytics/references/report-fields.md +0 -130
- package/skills/agent-analytics/references/transcript.md +0 -110
- package/skills/agent-builder/SKILL.md +0 -42
- package/skills/agent-builder/interfaces/fallback-chatflow.md +0 -47
- package/skills/agent-builder/references/chatflow/graph-spec.md +0 -259
- package/skills/agent-builder/references/chatflow/node-selection.md +0 -89
- package/skills/agent-builder/references/chatflow/nodes/agent.md +0 -350
- package/skills/agent-builder/references/chatflow/nodes/business-track.md +0 -43
- package/skills/agent-builder/references/chatflow/nodes/code.md +0 -157
- package/skills/agent-builder/references/chatflow/nodes/collect-order.md +0 -47
- package/skills/agent-builder/references/chatflow/nodes/finish.md +0 -34
- package/skills/agent-builder/references/chatflow/nodes/human-review.md +0 -60
- package/skills/agent-builder/references/chatflow/nodes/if-else.md +0 -100
- package/skills/agent-builder/references/chatflow/nodes/intent.md +0 -79
- package/skills/agent-builder/references/chatflow/nodes/knowledge-reply.md +0 -43
- package/skills/agent-builder/references/chatflow/nodes/llm.md +0 -117
- package/skills/agent-builder/references/chatflow/nodes/note.md +0 -38
- package/skills/agent-builder/references/chatflow/nodes/question.md +0 -97
- package/skills/agent-builder/references/chatflow/nodes/rag-reply.md +0 -68
- package/skills/agent-builder/references/chatflow/nodes/reply.md +0 -97
- package/skills/agent-builder/references/chatflow/nodes/start.md +0 -35
- package/skills/agent-builder/references/chatflow/nodes/sub-graph.md +0 -48
- package/skills/agent-builder/references/chatflow/nodes/tool.md +0 -138
- package/skills/agent-builder/references/chatflow/nodes/transfer-to-human.md +0 -63
- package/skills/agent-builder/references/chatflow/nodes/variable-assignment.md +0 -52
- package/skills/agent-builder/references/chatflow/nodes/variable-extract.md +0 -50
- package/skills/agent-builder/references/chatflow/nodes/variable-process.md +0 -70
- package/skills/agent-builder/references/chatflow/overview.md +0 -53
- package/skills/agent-builder/references/chatflow/visual-translation.md +0 -64
- package/skills/agent-builder/references/chatflow/workflow.md +0 -134
- package/skills/agent-builder/references/multi-agent/create-update.md +0 -185
- package/skills/agent-builder/references/multi-agent/graph-spec.md +0 -246
- package/skills/agent-builder/references/multi-agent/graph-structure.md +0 -12
- package/skills/agent-builder/references/multi-agent/migrate-to-chatflow.md +0 -13
- package/skills/agent-builder/references/multi-agent/migration/large.md +0 -554
- package/skills/agent-builder/references/multi-agent/migration/principles.md +0 -446
- package/skills/agent-builder/references/multi-agent/migration/small.md +0 -225
- package/skills/agent-builder/references/multi-agent/orchestration.md +0 -11
- package/skills/agent-builder/references/multi-agent/overview.md +0 -48
- package/skills/agent-builder/references/multi-agent/update.md +0 -128
- package/skills/agent-builder/references/multi-agent/workflow.md +0 -87
- package/skills/agent-builder/references/single-agent/overview.md +0 -48
- package/skills/agent-builder/references/single-agent/prompt.md +0 -16
- package/skills/agent-builder/references/single-agent/tools.md +0 -36
- package/skills/agent-builder/references/single-agent/voice.md +0 -46
- package/skills/agent-builder/references/tools/http-tool.md +0 -315
- package/skills/agent-builder/references/tools/mock-tool.md +0 -279
- package/skills/agent-builder/references/tools/overview.md +0 -46
- package/skills/agent-builder/references/tools/tool-config.md +0 -43
- package/skills/agent-builder/references/tools/x-token.md +0 -34
- package/skills/agent-builder/scripts/chatflow/chatflow_builder.py +0 -3458
- package/skills/agent-builder/scripts/chatflow/validate_graph.py +0 -1697
- package/skills/agent-builder/scripts/copy_marketplace_agent.py +0 -61
- package/skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py +0 -5974
- package/skills/agent-builder/scripts/multi-agent/replay_compare.py +0 -679
- package/skills/agent-builder/scripts/patch_agent_tools.py +0 -135
- package/skills/agent-builder/scripts/tools/validate_tool_config.py +0 -384
- package/skills/agent-tester/SKILL.md +0 -35
- package/skills/agent-tester/batch-test/overview.md +0 -86
- package/skills/agent-tester/scripts/batch_test_sheet.py +0 -213
- package/skills/agent-tester/single-test/badcase-retest.md +0 -85
- package/skills/agent-tester/single-test/direct-test.md +0 -24
- package/skills/agent-tester/single-test/overview.md +0 -142
- package/skills/delivery/SKILL.md +0 -112
- package/skills/delivery/interfaces/classify.md +0 -38
- package/skills/delivery/interfaces/create-agents.md +0 -89
- package/skills/delivery/interfaces/delivery-test.md +0 -67
- package/skills/delivery/references/flow.md +0 -40
- package/skills/delivery/references/validation.md +0 -15
- package/skills/delivery/scripts/batch_test.py +0 -704
- package/skills/delivery/scripts/classify.py +0 -22
- package/skills/delivery/scripts/create_agents.py +0 -695
- package/skills/delivery/scripts/gen_delivery_report.py +0 -335
- package/skills/delivery/scripts/gen_excel.py +0 -234
- package/skills/delivery/scripts/gen_report.py +0 -208
- package/skills/delivery/scripts/plan.py +0 -163
- package/skills/delivery/scripts/render.py +0 -713
- package/skills/delivery/scripts/render_summary.py +0 -38
- package/skills/delivery/scripts/sample_history_cases.py +0 -109
- package/skills/kb-builder/SKILL.md +0 -80
- package/skills/kb-builder/interfaces/qa-upload.md +0 -55
- package/skills/kb-builder/interfaces/web-kb.md +0 -84
- package/skills/kb-builder/references/directory.md +0 -373
- package/skills/kb-builder/references/export.md +0 -282
- package/skills/kb-builder/references/isolation-keywords.md +0 -113
- package/skills/kb-builder/references/knowledge.md +0 -153
- package/skills/kb-builder/references/product.md +0 -52
- package/skills/kb-builder/references/qa-from-help-center.md +0 -58
- package/skills/kb-builder/references/qa-from-pdf.md +0 -94
- package/skills/kb-builder/references/qa-from-tickets.md +0 -168
- package/skills/kb-builder/references/qa-from-web.md +0 -98
- package/skills/kb-builder/references/qa-quality.md +0 -73
- package/skills/kb-builder/references/reply-template.md +0 -237
- package/skills/kb-builder/references/tag-isolation-migration.md +0 -61
- package/skills/kb-builder/references/tags.md +0 -45
- package/skills/kb-builder/references/upload.md +0 -130
- package/skills/kb-builder/scripts/batch_extract_ticket_qa.py +0 -333
- package/skills/kb-builder/scripts/build_directory_plan.py +0 -144
- package/skills/kb-builder/scripts/crawl_site.py +0 -433
- package/skills/kb-builder/scripts/create_dirs.py +0 -146
- package/skills/kb-builder/scripts/export_knowledge.py +0 -454
- package/skills/kb-builder/scripts/extract_ticket_qa.py +0 -441
- package/skills/kb-builder/scripts/extract_web_qa.py +0 -118
- package/skills/kb-builder/scripts/import_qa.py +0 -219
- package/skills/kb-builder/scripts/import_source_documents.py +0 -143
- package/skills/kb-builder/scripts/import_templates.py +0 -409
- package/skills/poc/SKILL.md +0 -125
- package/skills/poc/assets/default_manual.css +0 -279
- package/skills/poc/assets/notice_escalate.png +0 -0
- package/skills/poc/assets/notice_escalate2.png +0 -0
- package/skills/poc/assets/notice_new_chat.png +0 -0
- package/skills/poc/assets/poc_test_template.html +0 -645
- package/skills/poc/assets/poc_test_template.md +0 -104
- package/skills/poc/assets/step3_preview.png +0 -0
- package/skills/poc/assets/step4_order_note.png +0 -0
- package/skills/poc/interfaces/classify.md +0 -38
- package/skills/poc/interfaces/create-agents.md +0 -108
- package/skills/poc/interfaces/poc-test.md +0 -94
- package/skills/poc/references/flow.md +0 -47
- package/skills/poc/references/kb-directory.md +0 -22
- package/skills/poc/references/validation.md +0 -17
- package/skills/poc/scripts/classify.py +0 -22
- package/skills/poc/scripts/create_agents.py +0 -818
- package/skills/poc/scripts/gen_excel.py +0 -234
- package/skills/poc/scripts/gen_poc_manual.py +0 -249
- package/skills/poc/scripts/gen_report.py +0 -208
- package/skills/poc/scripts/inspect_chatflow.py +0 -209
- package/skills/poc/scripts/plan.py +0 -178
- package/skills/poc/scripts/poc_test.py +0 -495
- package/skills/poc/scripts/render.py +0 -713
- package/skills/poc/scripts/render_summary.py +0 -41
- package/skills/runtime-inspector/SKILL.md +0 -51
- package/skills/runtime-inspector/references/frontend-rendering.md +0 -126
- package/skills/runtime-inspector/references/model.md +0 -59
- package/skills/runtime-inspector/references/sandbox.md +0 -131
- package/skills/runtime-inspector/scripts/model_inspect.py +0 -68
- package/skills/runtime-inspector/scripts/prepare.py +0 -98
- package/skills/runtime-inspector/scripts/process.py +0 -84
- package/skills/runtime-inspector/scripts/read_state.py +0 -32
- package/skills/runtime-inspector/scripts/sandbox_inspect.py +0 -463
- package/skills/runtime-inspector/scripts/test_claude_proxy.py +0 -49
- package/skills/runtime-inspector/scripts/test_openai_proxy.py +0 -41
- package/skills/runtime-inspector/scripts/verify_persistence.py +0 -101
- package/skills/runtime-inspector/scripts/write_test.py +0 -41
- package/skills/setup/SKILL.md +0 -17
- package/skills/shulex-support/SKILL.md +0 -39
- package/skills/shulex-support/references/badcase-analysis/overview.md +0 -34
- package/skills/shulex-support/references/badcase-analysis/text/conversation-record.md +0 -105
- package/skills/shulex-support/references/badcase-analysis/text/core-flow.md +0 -89
- package/skills/shulex-support/references/badcase-analysis/text/log-query-rules.md +0 -36
- package/skills/shulex-support/references/badcase-analysis/text/m1-entry.md +0 -53
- package/skills/shulex-support/references/badcase-analysis/text/m10-chatflow-service.md +0 -259
- package/skills/shulex-support/references/badcase-analysis/text/m11-algorithm-service.md +0 -148
- package/skills/shulex-support/references/badcase-analysis/text/m12-quality-inspection.md +0 -57
- package/skills/shulex-support/references/badcase-analysis/text/m2-intent.md +0 -120
- package/skills/shulex-support/references/badcase-analysis/text/m3-strategy.md +0 -126
- package/skills/shulex-support/references/badcase-analysis/text/m4-aifield.md +0 -121
- package/skills/shulex-support/references/badcase-analysis/text/m5-agent.md +0 -208
- package/skills/shulex-support/references/badcase-analysis/text/m6-tool.md +0 -115
- package/skills/shulex-support/references/badcase-analysis/text/m7-reply.md +0 -72
- package/skills/shulex-support/references/badcase-analysis/text/m8-error.md +0 -92
- package/skills/shulex-support/references/badcase-analysis/text/m9-knowledge-search.md +0 -147
- package/skills/shulex-support/references/badcase-analysis/text/sls-query.md +0 -283
- package/skills/shulex-support/references/badcase-analysis/voice/core-flow.md +0 -77
- package/skills/shulex-support/references/badcase-analysis/voice/dependencies.md +0 -19
- package/skills/shulex-support/references/badcase-analysis/voice/platform-api.md +0 -23
- package/skills/shulex-support/references/badcase-analysis/voice/sls-playbook.md +0 -31
- package/skills/shulex-support/references/product-docs.md +0 -70
- package/skills/shulex-support/references/tickets.md +0 -184
- package/skills/shulex-support/scripts/support.py +0 -427
- package/skills/solvea-desk/SKILL.md +0 -39
- package/skills/solvea-desk/references/report/fields.md +0 -82
- package/skills/solvea-desk/references/report/report-design.md +0 -200
- package/skills/solvea-desk/references/report/report-template.html +0 -44
- package/skills/solvea-desk/references/report/report.css +0 -517
- package/skills/solvea-desk/references/report/workflow.md +0 -464
- package/skills/solvea-desk/references/tickets/query.md +0 -103
- package/skills/solvea-desk/references/tickets/tags.md +0 -83
- package/skills/solvea-desk/scripts/report/fetch_sources.py +0 -580
- package/skills/solvea-desk/scripts/report/render_report.py +0 -763
- package/skills/solvea-desk/scripts/tickets/desk_api.py +0 -73
- package/skills/solvea-desk/scripts/tickets/fetch_tickets.py +0 -403
- package/skills/solvea-desk/scripts/tickets/ticket_tags.py +0 -305
- package/skills/solvea-kit/SKILL.md +0 -84
- package/skills/solvea-kit/references/agent.md +0 -145
- package/skills/solvea-kit/references/chat.md +0 -244
- package/skills/solvea-kit/references/intent.md +0 -69
- package/skills/solvea-kit/references/plugin.md +0 -53
- package/skills/solvea-kit/references/quality-inspection.md +0 -75
- package/skills/solvea-kit/references/strategy.md +0 -62
- package/skills/solvea-kit/references/tagging.md +0 -231
- package/skills/solvea-kit/references/variables.md +0 -53
- package/skills/solvea-kit/scripts/generate_label_import_file.py +0 -151
- package/skills/solvea-kit/scripts/intent_classify.py +0 -843
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
# M8:系统异常模块
|
|
2
|
-
|
|
3
|
-
**信号**:`type=STOPPED` + `reason=SYSTEM_ERROR` / `reason=AGENT_TIMEOUT` / 任意模块未捕获异常
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 核心逻辑
|
|
8
|
-
|
|
9
|
-
系统异常无特定职责模块,全局 AOP 捕获未处理异常后返回 `STOPPED + SYSTEM_ERROR`。
|
|
10
|
-
|
|
11
|
-
常见来源:
|
|
12
|
-
- LLM 调用超时或连接失败(agentAlgClient 异常)
|
|
13
|
-
- SINGLE_AGENT / MULTI_AGENT:`invokeAiAgent` 调用失败
|
|
14
|
-
- CHAT_FLOW 节点执行失败
|
|
15
|
-
- 外部 HTTP 工具接口异常
|
|
16
|
-
- 数据库/缓存访问失败
|
|
17
|
-
- NPE 或其他运行时异常
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Log 层(直接查,无 Config 层)
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
# 全局 ERROR 日志(最直接)
|
|
25
|
-
$BASE --from $BEGIN --to $END \
|
|
26
|
-
--query 'trace:"<trace>" AND severity:"ERROR"' --line 20
|
|
27
|
-
# → 类名、方法名、exception message、堆栈首行
|
|
28
|
-
|
|
29
|
-
# SINGLE_AGENT LLM 调用失败
|
|
30
|
-
$BASE --from $BEGIN --to $END \
|
|
31
|
-
--query 'trace:"<trace>" AND rest:"call ai agent stream" AND rest:"call fail"' --line 5
|
|
32
|
-
|
|
33
|
-
# MULTI_AGENT LLM 调用失败
|
|
34
|
-
$BASE --from $BEGIN --to $END \
|
|
35
|
-
--query 'trace:"<trace>" AND rest:"multiAgent, call fail"' --line 5
|
|
36
|
-
|
|
37
|
-
# CHAT_FLOW 特有错误(精确字符串)
|
|
38
|
-
$BASE --from $BEGIN --to $END \
|
|
39
|
-
--query 'trace:"<trace>" AND (rest:"chatflow return error" OR rest:"chatflow run failed" OR rest:"chatflow no finished data")' \
|
|
40
|
-
--line 10
|
|
41
|
-
|
|
42
|
-
# 兜底:afterChat botChatEvent(包含 request + response 完整数据)
|
|
43
|
-
$BASE --from $BEGIN --to $END \
|
|
44
|
-
--query 'trace:"<trace>" AND rest:"afterChat[.*botChatEvent"' --line 5
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
**精确错误日志字符串**:
|
|
48
|
-
```
|
|
49
|
-
executeAgent[<chatId>]: call ai agent stream, currentLoopCount={}, call fail, reason={}
|
|
50
|
-
↑ SINGLE_AGENT(STOPPED)
|
|
51
|
-
executeAgent[<chatId>]: multiAgent, call fail, reason={}
|
|
52
|
-
↑ MULTI_AGENT(STOPPED)
|
|
53
|
-
executeAgent[<chatId>]: chatflow return error, msg={}
|
|
54
|
-
executeAgent[<chatId>]: chatflow run failed, errorObj={} ← errorObj 含 node_id、node_title
|
|
55
|
-
executeAgent[<chatId>]: chatflow no finished data
|
|
56
|
-
executeAgent[<chatId>]: chatflow unknown finishdata type={}
|
|
57
|
-
chatflow callTool error chatId={} ← 工具调用异常
|
|
58
|
-
aiReply[{}]: aiContent is empty ← LLM 返回空 → TO_AGENT
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
**AGENT_TIMEOUT 特殊说明**:SINGLE_AGENT 超过 10 轮未返回 → `STOPPED + AGENT_TIMEOUT`,无独立 ERROR 日志,需看每轮 `call ai agent stream` 记录是否有进展(→ M5)。
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## 分析要点
|
|
66
|
-
|
|
67
|
-
**从 ERROR 日志定位**:
|
|
68
|
-
- 哪个类(class)的哪个方法(method)抛了异常?
|
|
69
|
-
- exception message 是什么?
|
|
70
|
-
- 是否有 `reason` 字段?(SINGLE_AGENT/MULTI_AGENT call fail 的 reason 字段说明具体失败原因)
|
|
71
|
-
|
|
72
|
-
**SINGLE_AGENT / MULTI_AGENT call fail 的 reason 字段**:
|
|
73
|
-
- `codeMsg`:LLM 服务返回的错误码/描述
|
|
74
|
-
- `errorReason`:内部错误标识
|
|
75
|
-
- 通常是 LLM 服务端异常(rate limit、timeout、服务不可用)
|
|
76
|
-
|
|
77
|
-
**从 botChatEvent 兜底**:
|
|
78
|
-
- `afterChat[chatId]: botChatEvent={}` 包含完整 request + response
|
|
79
|
-
- `response.type`、`response.reason`、`response.reasonDesc` 直接可读
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## 常见根因与建议
|
|
84
|
-
|
|
85
|
-
| 根因 | 建议 |
|
|
86
|
-
|------|------|
|
|
87
|
-
| LLM 服务异常(call fail) | 看 `reason` 中 codeMsg;检查 LLM provider 状态;通常是临时性 |
|
|
88
|
-
| SINGLE_AGENT AGENT_TIMEOUT | 看每轮 arguments 是否有进展;是否陷入工具调用死循环(→ M5) |
|
|
89
|
-
| CHAT_FLOW 节点执行失败 | 从 `errorObj.node_id` 定位节点,看节点配置和工具调用 |
|
|
90
|
-
| 外部 HTTP 工具接口异常 | 检查接口地址、鉴权、网络连通性(→ M6) |
|
|
91
|
-
| NPE / 配置字段缺失 | 从堆栈首行定位代码位置,检查相关配置是否完整 |
|
|
92
|
-
| agentAlgClient 连接失败 | 检查 ChatFlow/AI Agent 服务状态 |
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
# M9:知识召回排查
|
|
2
|
-
|
|
3
|
-
M9 负责判断知识在 query、范围、候选召回、排序、过滤和上下文组装中的问题。知识已经正确进入上下文但回复仍错误时,转 M7 分析 Prompt、LLM 生成和后处理。
|
|
4
|
-
|
|
5
|
-
ChatFlow 场景先按 M10 读取 graph,确认实际节点配置和知识目录,再进入本模块判断知识链路。
|
|
6
|
-
|
|
7
|
-
## 诊断顺序
|
|
8
|
-
|
|
9
|
-
### 1. 对齐问题和目标轮次
|
|
10
|
-
|
|
11
|
-
先写清用户原问题、实际回复和预期回复。知识排查必须回答具体差异,不能只罗列召回 ID 和分数。
|
|
12
|
-
|
|
13
|
-
从目标回复的 `messages[].context` 读取:
|
|
14
|
-
|
|
15
|
-
- `mixedQuery.originTitle/originContent`:原始用户问题。
|
|
16
|
-
- `mixedQuery.userQuery/userEnQuery`:召回和 rerank 使用的用户 query。
|
|
17
|
-
- `mixedQuery.knowledgeQuery/knowledgeEnQuery`:知识检索改写结果。
|
|
18
|
-
- `intents`、变量系统字段和前置轮次:判断 query 是否被错误上下文带偏。
|
|
19
|
-
|
|
20
|
-
原问题与知识 query 语义不一致时,优先定位 query rewrite / 多轮上下文问题,不直接修改知识。
|
|
21
|
-
|
|
22
|
-
### 2. 确认调用路径和检索范围
|
|
23
|
-
|
|
24
|
-
检查:
|
|
25
|
-
|
|
26
|
-
- `touchPoint`:livechat 与非 livechat 的相关性判断配置可能不同。
|
|
27
|
-
- `directoryIds`:Agent、策略或 ChatFlow 节点限定的目录。
|
|
28
|
-
- `metadata.ai_fields`:pn、pdt 等变量系统字段可能影响 query、目录和字段加权。
|
|
29
|
-
- `useQa/useDoc/useProduct`:是否启用 QA、文档和商品召回。
|
|
30
|
-
- ChatFlow:按 M10 从 graph 读取知识节点的真实目录和参数;会话记录只说明实际执行过哪些节点。
|
|
31
|
-
|
|
32
|
-
目录过宽会引入噪音,目录过窄会漏召回。不能只看到某条无关知识就断言 rerank 失败。
|
|
33
|
-
|
|
34
|
-
### 3. 区分候选、排序和实际使用结果
|
|
35
|
-
|
|
36
|
-
QA 主要看 `retrievedKus`。其中 `retrievedKus[].title/content` 是历史运行时保存的知识内容,先用它还原当时模型实际看到的证据:
|
|
37
|
-
|
|
38
|
-
| 字段 | 含义 |
|
|
39
|
-
|------|------|
|
|
40
|
-
| `score` | ES / 混合召回阶段分数,不能跨模式直接比较 |
|
|
41
|
-
| `rerankScore` | rerank 分数 |
|
|
42
|
-
| `relevantScore` | 可选的相关性判断分数 |
|
|
43
|
-
| `rank` | rerank 后排名 |
|
|
44
|
-
| `effect` | 是否最终进入知识上下文;受相关性、TopN 和 token 预算影响 |
|
|
45
|
-
| `title/content` | 真实进入判断的知识内容 |
|
|
46
|
-
| `directoryId/tags/conditionTags` | 目录和标签线索 |
|
|
47
|
-
|
|
48
|
-
文档看 `documentQaContext` 中的 used chunks、chunk 内容和 `usedDocuments`;商品看 `recommendProductContext.usedProducts`。只出现文件名不代表整份文件都进入 Prompt,应尽量确认实际 chunk。
|
|
49
|
-
|
|
50
|
-
需要判断知识当前是否仍有问题,或准备给出修改方案时,再按知识 ID 读取当前知识详情:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
npx --yes @shulex/cxclawctl@latest api get-knowledge --id <knowledge_id> --pretty
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
报告中明确区分“历史运行时内容”和“当前知识详情”。`list-knowledge --keyword` 可用于找候选,但不能代替按 ID 读取详情;不要为核对单条知识扫描整个知识库。
|
|
57
|
-
|
|
58
|
-
诊断时分别回答:
|
|
59
|
-
|
|
60
|
-
1. 正确知识是否进入候选。
|
|
61
|
-
2. 候选排名是否合理。
|
|
62
|
-
3. 正确知识是否 `effect=true` 并进入最终上下文。
|
|
63
|
-
4. 是否同时混入足以误导模型的无关或冲突知识。
|
|
64
|
-
|
|
65
|
-
### 4. 区分召回问题和生成问题
|
|
66
|
-
|
|
67
|
-
对比实际使用的知识、`aiContent` 和最终 `content`:
|
|
68
|
-
|
|
69
|
-
| 现象 | 判断方向 |
|
|
70
|
-
|------|----------|
|
|
71
|
-
| 正确知识未进入候选 | query、目录、过滤条件、索引或混合召回问题 |
|
|
72
|
-
| 正确知识在候选中但排名过低 | rerank、query 或知识标题/内容区分度问题 |
|
|
73
|
-
| 排名合理但 `effect=false` | 相关性判断、TopN 或 token 预算问题 |
|
|
74
|
-
| 无关 QA、文档或商品 `effect=true` | 检索范围、排序、相关性或上下文污染 |
|
|
75
|
-
| 使用知识本身矛盾、过时或缺少目标场景 | 知识内容问题 |
|
|
76
|
-
| 使用知识正确,但 `aiContent` 结论错误 | 召回正确但生成错误,转 M7 |
|
|
77
|
-
| `aiContent` 正确,最终 `content` 错误 | 格式化、检查或后处理问题,转 M7/M11 |
|
|
78
|
-
|
|
79
|
-
不要把所有“回答不准”都归为召回不准。
|
|
80
|
-
|
|
81
|
-
## 当前实现事实
|
|
82
|
-
|
|
83
|
-
- 检索范围按租户走默认 flat 或 `STRICT_ISOLATION` 目录模式。
|
|
84
|
-
- 当前核心路径中 QA / Doc / Product 三路并行召回,再统一 rerank、可选相关性判断、TopN/token 选择和上下文组装。
|
|
85
|
-
- QA 同时使用原始问题与知识 query,对标题和内容进行向量 + BM25 混合召回。
|
|
86
|
-
- rerank 失败会退化为 ES 分数排序,需用日志确认,不能只凭最终排名猜测。
|
|
87
|
-
- livechat 与非 livechat 是否启用相关性判断由租户配置决定。
|
|
88
|
-
- `AiReplyOption` 类型默认值不是运行时事实;普通主路径和 ChatFlow 当前都显式传入 `retrieve_min_score=0.01`。
|
|
89
|
-
- 当前默认 `qaUsedSize/docUsedSize/productUsedSize` 为 `6/4/4`,仍可能被租户配置覆盖。
|
|
90
|
-
- 最终还受 `knowledgeMaxToken` 和单文档 chunk 上限约束。
|
|
91
|
-
|
|
92
|
-
报告引用阈值或模式前,必须先用请求日志或租户配置确认实际值。
|
|
93
|
-
|
|
94
|
-
## 何时查配置和日志
|
|
95
|
-
|
|
96
|
-
会话记录已经能证明“用了哪些知识、内容为何冲突”时,可以直接给出内容层建议。以下情况需要继续查知识检索服务日志:
|
|
97
|
-
|
|
98
|
-
- 正确知识存在但候选为空。
|
|
99
|
-
- query 看起来正确但排序明显异常。
|
|
100
|
-
- 怀疑目录过滤、变量系统字段加权、embedding、BM25、rerank 或相关性服务异常。
|
|
101
|
-
- 需要确认实际检索模式、阈值、候选漏失阶段或 rerank fallback。
|
|
102
|
-
|
|
103
|
-
### 服务边界
|
|
104
|
-
|
|
105
|
-
只有定位代码或查询 SLS 时才需要区分服务:
|
|
106
|
-
|
|
107
|
-
| 环节 | 主要服务 | 查什么 |
|
|
108
|
-
|------|----------|--------|
|
|
109
|
-
| 原问题、上下文和知识请求组装 | `shulex-gpt` | 实际 query、目录、变量系统字段、调用参数 |
|
|
110
|
-
| query rewrite、相关性算法、部分非 LiveChat 回复生成 | `ShulexService` | 改写是否偏离、相关性判断输入输出 |
|
|
111
|
-
| QA / Doc / Product 召回、rerank、过滤和上下文组装 | `qa-bot` | 候选漏失、排序、过滤、fallback、最终使用知识 |
|
|
112
|
-
| ChatFlow 知识节点参数和结果消费 | ChatFlow 服务 | 先按 M10 对照 graph、节点输入、节点输出和运行路径 |
|
|
113
|
-
| LiveChat 最终生成与后处理 | `shulex-gpt` | 召回正确但模型回复或格式化结果错误时转 M7 |
|
|
114
|
-
|
|
115
|
-
不要因为最终回复错误就直接查询 `qa-bot`。先用会话记录判断问题发生在 query、召回、上下文还是生成阶段,再选择服务。
|
|
116
|
-
|
|
117
|
-
先按 `sls-query.md` 获取目标服务可用的关联标识,再聚焦查询:
|
|
118
|
-
|
|
119
|
-
```text
|
|
120
|
-
searchKnowledge[<chatId>]: req=
|
|
121
|
-
searchKnowledgeFlat[<chatId>]
|
|
122
|
-
searchKnowledgeStrictDirs[<chatId>]
|
|
123
|
-
retrieveQaV2[<chatId>]
|
|
124
|
-
retrieveDocV2[<chatId>]
|
|
125
|
-
retrieveProductV2[<chatId>]
|
|
126
|
-
hybridSearch[<chatId>]
|
|
127
|
-
rerankKnowledgeAdaptive[<chatId>]
|
|
128
|
-
cohere rerank error[<chatId>]
|
|
129
|
-
相关性判断过滤掉
|
|
130
|
-
相关性判断通过
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
一次只验证一个假设,并遵守 `log-query-rules.md` 的预算和止损规则。
|
|
134
|
-
|
|
135
|
-
## 根因与建议边界
|
|
136
|
-
|
|
137
|
-
| 已确认根因 | 建议方向 |
|
|
138
|
-
|------------|----------|
|
|
139
|
-
| query rewrite 偏离原问题 | 修正 rewrite / 多轮上下文,不用堆同义知识掩盖 |
|
|
140
|
-
| 目录范围错误 | 调整 Agent、策略或 ChatFlow 知识目录 |
|
|
141
|
-
| 正确知识缺失 | 新增覆盖该业务场景的知识 |
|
|
142
|
-
| 知识内容冲突或留有推断空白 | 统一相关知识口径,明确场景边界 |
|
|
143
|
-
| 知识区分度不足导致排序差 | 优化问题标题、答案关键词和场景限定;必要时评估 rerank |
|
|
144
|
-
| rerank / relevance 服务异常 | 提供日志证据并交研发处理 |
|
|
145
|
-
| 召回正确但生成错误 | 转 M7 检查运行时 Prompt、知识上下文和 LLM 输出 |
|
|
146
|
-
|
|
147
|
-
知识建议必须保持用户确认的政策强度。例如原规则是“不建议,可能影响”,不得改写成“禁止”或确定会失效。未确认运行时 Prompt 时,也不能仅凭当前配置断言 PE 已生效。
|
|
@@ -1,283 +0,0 @@
|
|
|
1
|
-
# SLS 日志查询
|
|
2
|
-
|
|
3
|
-
文本 badcase 的日志查询统一执行 `npx --yes @shulex/cxclawctl@latest sls query`。CLI 先向 `shulex-cloud` 申请 10~15 分钟只读 STS,再由本机使用 `@alicloud/log` 直连 SLS;临时凭据只驻留内存,禁止写入文件、日志或普通命令输出。
|
|
4
|
-
|
|
5
|
-
## 基础用法
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
9
|
-
--from <epoch-seconds> \
|
|
10
|
-
--to <epoch-seconds> \
|
|
11
|
-
--query '<SLS 查询 DSL>' \
|
|
12
|
-
--line 50 \
|
|
13
|
-
--offset 0
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
返回 JSON:`{"count": N, "logs": [{...contents...}, ...]}`
|
|
17
|
-
|
|
18
|
-
字段说明:
|
|
19
|
-
|
|
20
|
-
| 字段 | 含义 |
|
|
21
|
-
|------|------|
|
|
22
|
-
| `fromTime` | 起始时间,epoch 秒 |
|
|
23
|
-
| `toTime` | 结束时间,epoch 秒 |
|
|
24
|
-
| `query` | SLS 查询 DSL,JSON 字符串内的双引号必须写成 `\"` |
|
|
25
|
-
| `line` | 返回条数,默认 50,最大 100 |
|
|
26
|
-
| `offset` | 分页偏移,默认 0 |
|
|
27
|
-
| `reverse` | 是否按时间倒序,默认 false |
|
|
28
|
-
|
|
29
|
-
## 时间窗口
|
|
30
|
-
|
|
31
|
-
会话记录顶层 `createdAt` 是 **epoch 毫秒**(例:`1775793526000`),不是 ISO 字符串。
|
|
32
|
-
|
|
33
|
-
**必须直接用 epoch 秒**做 `fromTime` / `toTime`(等于 `createdAt // 1000`),避免任何时区歧义:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
# createdAt = 1775793526000 (ms) → 1775793526 (s)
|
|
37
|
-
# ±5/10min 窗口
|
|
38
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
39
|
-
--from 1775793226 \
|
|
40
|
-
--to 1775794126 \
|
|
41
|
-
--query 'rest:"HTTP_ASPECT"' \
|
|
42
|
-
--line 5
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
推荐窗口:`createdAt_sec - 300` ~ `createdAt_sec + 600`(即 -5min ~ +10min);漏查扩到 `±1800`(±30min)。
|
|
46
|
-
|
|
47
|
-
**不要用 ISO 字符串**:CLI 只接受 epoch 秒。会话记录没有 ISO 格式,人工转换容易踩时区坑(例如 `1775793526000` 转 UTC 是 03:58,而 SLS 控制台里你看到的是 CN 本地时间 11:58,差 8 小时),一旦转错就查不到日志。
|
|
48
|
-
|
|
49
|
-
## 定位 trace
|
|
50
|
-
|
|
51
|
-
chatId → trace 一对一。先查 HTTP 入口 aspect 拿到 trace:
|
|
52
|
-
|
|
53
|
-
> ⚠️ **禁止使用会话记录返回的 `traceId` 字段**——该值不可信,必须通过下面的 HTTP_ASPECT 查询重新定位 trace。
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
57
|
-
--from <createdAt_sec - 300> \
|
|
58
|
-
--to <createdAt_sec + 600> \
|
|
59
|
-
--query 'rest:"HTTP_ASPECT" AND rest:"<chatId>" AND (rest:"/bot/<botId>/chat " OR rest:"/bot/<botId>/chat/async" OR rest:"/bot/<botId>/chat/stream")' \
|
|
60
|
-
--line 5
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
- chatId 在 `rest` 字段里(不是 `ext_2`)
|
|
64
|
-
- 结果中 `trace` 字段即后续所有查询的 trace 值
|
|
65
|
-
- 查询约束(次数上限、止损规则、DSL 规范)见 `/skills/shulex-support/references/badcase-analysis/text/log-query-rules.md`
|
|
66
|
-
|
|
67
|
-
## 跨服务 trace 拼接(qa-bot / ShulexService / chatflow / tars)
|
|
68
|
-
|
|
69
|
-
文本主链路以 `shulex-gpt` 为入口,qa-bot、ShulexService、chatflow、tars 都是 GPT 发起的下游调用。业务 `trace-id` 通过 HTTP header 透传时可能因异步 / 切线程而衰减,跨服务关联**优先以 `armsTrace` 为准**(SLS 自动注入字段);目标服务没有 `armsTrace` 时,再用 `chatId` / `request_id` / `tenant_id` / 接口路径 / 时间窗兜底。
|
|
70
|
-
|
|
71
|
-
> ⚠️ **armsTrace 字段名首次使用时务必实测验证**:本文件中所有 `armsTrace` 字段名均按用户口述写入;如 SLS 控制台实际字段名不是 `armsTrace`(例如 `arms_trace` / `ARMS_Trace`),把本节及 `m9-knowledge-search.md` 中所有出现处一次性替换。
|
|
72
|
-
|
|
73
|
-
### 标准三步
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
# Step A:和同步路径一样,先用 chatId 拿 shulex-gpt 侧业务 trace
|
|
77
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
78
|
-
--from <createdAt_sec - 300> \
|
|
79
|
-
--to <createdAt_sec + 600> \
|
|
80
|
-
--query 'rest:"HTTP_ASPECT" AND rest:"<chatId>" AND (rest:"/bot/<botId>/chat " OR rest:"/bot/<botId>/chat/async" OR rest:"/bot/<botId>/chat/stream")' \
|
|
81
|
-
--line 5
|
|
82
|
-
# → trace = trace_GPT;同时记录该日志的 armsTrace 字段值
|
|
83
|
-
|
|
84
|
-
# Step B:用 trace_GPT 拉一条 shulex-gpt 业务日志,取其 armsTrace
|
|
85
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
86
|
-
--from <createdAt_sec - 300> \
|
|
87
|
-
--to <createdAt_sec + 600> \
|
|
88
|
-
--query 'trace:"<trace_GPT>" AND rest:"aiReply["' \
|
|
89
|
-
--line 3
|
|
90
|
-
# → 取返回 JSON 第一条的 armsTrace 字段值,记为 armsTrace_X
|
|
91
|
-
# → 如 aiReply 不存在(未走知识召回),换 shulex-gpt 侧任意业务日志关键字(如 rest:"BOT_REPLY" 或 rest:"chat["),目的只是拿到 armsTrace
|
|
92
|
-
|
|
93
|
-
# Step C:用 armsTrace_X 查目标下游服务日志
|
|
94
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
95
|
-
--from <createdAt_sec - 300> \
|
|
96
|
-
--to <createdAt_sec + 600> \
|
|
97
|
-
--query 'armsTrace:"<armsTrace_X>" AND rest:"searchKnowledge["' \
|
|
98
|
-
--line 5
|
|
99
|
-
# → 命中即说明跨服务拼接成功,后续下游模块查询都优先用此 armsTrace
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### qa-bot(M2 意图 / M9 知识)
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
# qa-bot 知识召回
|
|
106
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
107
|
-
--from <begin> \
|
|
108
|
-
--to <end> \
|
|
109
|
-
--query 'armsTrace:"<armsTrace_X>" AND (rest:"searchKnowledge[" OR rest:"rerankKnowledge[" OR rest:"embeddingSearchAsync[")' \
|
|
110
|
-
--line 20
|
|
111
|
-
|
|
112
|
-
# qa-bot 意图识别
|
|
113
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
114
|
-
--from <begin> \
|
|
115
|
-
--to <end> \
|
|
116
|
-
--query 'armsTrace:"<armsTrace_X>" AND (rest:"intentParse" OR rest:"checkIntent" OR rest:"intentIdentify[")' \
|
|
117
|
-
--line 20
|
|
118
|
-
|
|
119
|
-
# qa-bot 兜底:armsTrace 不可用
|
|
120
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
121
|
-
--from <begin> \
|
|
122
|
-
--to <end> \
|
|
123
|
-
--query 'rest:"<chatId>" AND (rest:"searchKnowledge[" OR rest:"intentIdentify[" OR rest:"checkIntent")' \
|
|
124
|
-
--line 20
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### ShulexService(M2 / M4 / M11)
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
# ShulexService 通用 request_start / request_end / ERROR
|
|
131
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
132
|
-
--from <begin> \
|
|
133
|
-
--to <end> \
|
|
134
|
-
--query 'armsTrace:"<armsTrace_X>" AND (rest:"request_start" OR rest:"request_end" OR rest:"ERROR" OR rest:"http_cost_time")' \
|
|
135
|
-
--line 20
|
|
136
|
-
|
|
137
|
-
# ShulexService 按能力缩小
|
|
138
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
139
|
-
--from <begin> \
|
|
140
|
-
--to <end> \
|
|
141
|
-
--query 'armsTrace:"<armsTrace_X>" AND (rest:"intent_identify" OR rest:"intent_pure" OR rest:"general_ner" OR rest:"batch_classify" OR rest:"query_rewrite" OR rest:"ai_reply")' \
|
|
142
|
-
--line 20
|
|
143
|
-
|
|
144
|
-
# ShulexService 兜底:request_id / chatId
|
|
145
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
146
|
-
--from <begin> \
|
|
147
|
-
--to <end> \
|
|
148
|
-
--query '(rest:"<request_id>" OR rest:"<chatId>") AND (rest:"request_start" OR rest:"request_end" OR rest:"ERROR")' \
|
|
149
|
-
--line 20
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
### chatflow(M10)
|
|
153
|
-
|
|
154
|
-
```bash
|
|
155
|
-
# chatflow graph / node / condition
|
|
156
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
157
|
-
--from <begin> \
|
|
158
|
-
--to <end> \
|
|
159
|
-
--query 'armsTrace:"<armsTrace_X>" AND (rest:"graph_exec" OR rest:"node_enter" OR rest:"evaluate_condition" OR rest:"case_matched" OR rest:"no_case_matched")' \
|
|
160
|
-
--line 20
|
|
161
|
-
|
|
162
|
-
# chatflow RAG / KB / tool / variable
|
|
163
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
164
|
-
--from <begin> \
|
|
165
|
-
--to <end> \
|
|
166
|
-
--query 'armsTrace:"<armsTrace_X>" AND (rest:"rag_reply retrieve" OR rest:"kb_reply retrieve" OR rest:"tool_node" OR rest:"selected variable not found")' \
|
|
167
|
-
--line 20
|
|
168
|
-
|
|
169
|
-
# chatflow 兜底:chatId + 节点关键字
|
|
170
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
171
|
-
--from <begin> \
|
|
172
|
-
--to <end> \
|
|
173
|
-
--query 'rest:"<chatId>" AND (rest:"graph_exec" OR rest:"node_enter" OR rest:"tool_node")' \
|
|
174
|
-
--line 20
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
### 质检(M12)
|
|
178
|
-
|
|
179
|
-
先在 GPT 侧确认该轮是否进入后置质检;只有会话记录不足以判断送检、命中或调用失败时才查。`quality-inspection-gate` 是服务端灰度/过滤开关,只能作为“是否可能送检”的运行线索,不能据此改动或推断租户规则。
|
|
180
|
-
|
|
181
|
-
```bash
|
|
182
|
-
# GPT 回复后质检:实时送检、回复送检、结果与豁免
|
|
183
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
184
|
-
--from <begin> \
|
|
185
|
-
--to <end> \
|
|
186
|
-
--query 'trace:"<trace_GPT>" AND (rest:"QualityCheckPostCheck" OR rest:"realTimeInspection" OR rest:"replyInspection" OR rest:"inspectionDataResponse" OR rest:"quality-inspection-gate" OR rest:"exempt_request" OR rest:"exempt_ai_reply")' \
|
|
187
|
-
--line 20
|
|
188
|
-
|
|
189
|
-
# trace 缺失时用 chatId 在 GPT 侧兜底;命中调用异常后再按 armsTrace 查 Intelli
|
|
190
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
191
|
-
--from <begin> \
|
|
192
|
-
--to <end> \
|
|
193
|
-
--query 'rest:"<chatId>" AND (rest:"realTimeInspection" OR rest:"replyInspection" OR rest:"inspectionDataResponse" OR rest:"QualityCheckPostCheck")' \
|
|
194
|
-
--line 20
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
从 GPT 日志取得 `armsTrace` 后,再以该值和 `realTimeInspection` / `replyInspection` / `ERROR` 查询 Intelli 侧 HTTP 调用与异常。不要在没有会话或日志事实时,根据当前质检规则倒推历史是否命中。
|
|
198
|
-
|
|
199
|
-
### tars(M4 变量系统)
|
|
200
|
-
|
|
201
|
-
```bash
|
|
202
|
-
# tars 变量系统字段抽取
|
|
203
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
204
|
-
--from <begin> \
|
|
205
|
-
--to <end> \
|
|
206
|
-
--query 'armsTrace:"<armsTrace_X>" AND (rest:"/service/field/internal/extract" OR rest:"AiFieldExtractService #")' \
|
|
207
|
-
--line 20
|
|
208
|
-
|
|
209
|
-
# tars 兜底:chatId + 变量系统日志
|
|
210
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
211
|
-
--from <begin> \
|
|
212
|
-
--to <end> \
|
|
213
|
-
--query 'rest:"<chatId>" AND (rest:"AiFieldExtractService #" OR rest:"extract aiFieldExtractDTO" OR rest:"extract result aiFieldDbDTOList")' \
|
|
214
|
-
--line 20
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
### 失败兜底
|
|
218
|
-
|
|
219
|
-
- Step C 或服务模板命中为 0:
|
|
220
|
-
1. 检查字段名是否真为 `armsTrace`(注意大小写 / 真实字段名)
|
|
221
|
-
2. 时间窗是否覆盖下游调用时刻(±30s 通常足够,最大放宽到 ±30min)
|
|
222
|
-
3. 该会话是否真正走到了目标服务(参考会话记录的 `reason` / `type` / `chatflow_run_info` / GPT 侧调用日志)
|
|
223
|
-
- 上述均无果 → 退回 GPT 侧结论,按 `log-query-rules.md` 的「连续 3 次空止损」执行,**不再继续追深下游服务**
|
|
224
|
-
|
|
225
|
-
### 配额
|
|
226
|
-
|
|
227
|
-
- Step A / B / C 均算入单轮 20 次硬上限
|
|
228
|
-
- 每个跨服务模块自身的日志查询同样计入;**建议每个模块 ≤ 6 次查询**
|
|
229
|
-
|
|
230
|
-
## 异步路径(/chat/async)
|
|
231
|
-
|
|
232
|
-
Kafka 生产端和消费端是**两条独立的 trace**,不能跨 Kafka 传播。但 SLS 日志里有 `span` 字段可以把两段串起来。
|
|
233
|
-
|
|
234
|
-
分三步:
|
|
235
|
-
|
|
236
|
-
```bash
|
|
237
|
-
# 1a 定位入口请求,拿到 span
|
|
238
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
239
|
-
--from <createdAt_sec - 300> \
|
|
240
|
-
--to <createdAt_sec + 600> \
|
|
241
|
-
--query 'rest:"HTTP_ASPECT" AND rest:"<chatId>" AND rest:"/bot/<botId>/chat/async"' \
|
|
242
|
-
--line 2
|
|
243
|
-
# → 记录返回字段 span
|
|
244
|
-
|
|
245
|
-
# 1b 用 span 找消费端 trace
|
|
246
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
247
|
-
--from <createdAt_sec - 300> \
|
|
248
|
-
--to <createdAt_sec + 1800> \
|
|
249
|
-
--query 'span:"<span>"' \
|
|
250
|
-
--line 5
|
|
251
|
-
# → 消费端日志的 trace 字段就是后续 M2~M8 查询用的 trace
|
|
252
|
-
|
|
253
|
-
# Step 2 起:跟同步完全一样,trace 用消费端那条
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
- `trace_A`(入口)仅用于检查「请求到了 / 生产 Kafka 成功没」,不做 M2~M8 查询
|
|
257
|
-
- `trace_B`(消费端)是 M2~M8 日志真正落在的 trace
|
|
258
|
-
- `trace_A.timestamp` 与 `trace_B.timestamp` 差值 ≈ 消息在 Kafka 里的排队时间
|
|
259
|
-
- 1b 查不到 → 消费端没触达(积压 / consumer group 故障 / 反序列化异常),回到 1a 时间窗附近查 `severity:"ERROR"`
|
|
260
|
-
|
|
261
|
-
## 通用模板(按 trace 查)
|
|
262
|
-
|
|
263
|
-
```bash
|
|
264
|
-
# 模块相关日志
|
|
265
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
266
|
-
--from <begin> \
|
|
267
|
-
--to <end> \
|
|
268
|
-
--query 'trace:"<trace>" AND rest:"<关键字>"' \
|
|
269
|
-
--line <N>
|
|
270
|
-
|
|
271
|
-
# 所有 ERROR(M8 系统异常排查用)
|
|
272
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
273
|
-
--from <begin> \
|
|
274
|
-
--to <end> \
|
|
275
|
-
--query 'trace:"<trace>" AND severity:"ERROR"' \
|
|
276
|
-
--line 20
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
## 配置缺失处理
|
|
280
|
-
|
|
281
|
-
若 `npx --yes @shulex/cxclawctl@latest sls query` 返回未登录、未选择租户或 SLS 配置缺失,依次运行
|
|
282
|
-
`npx --yes @shulex/cxclawctl@latest auth status`、`npx --yes @shulex/cxclawctl@latest tenant current` 定位问题。SLS 长期 AK/SK 只存在于
|
|
283
|
-
`shulex-cloud` 配置;CLI 每次查询前申请短期只读 STS,凭据只驻留进程内存。
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# 语音 badcase 核心分析流程
|
|
2
|
-
|
|
3
|
-
## 进入条件
|
|
4
|
-
|
|
5
|
-
以下任一情况进入语音流程:
|
|
6
|
-
|
|
7
|
-
1. 用户明确描述语音、电话、VAPI、Twilio、callId、callSid、断音、延迟、STT、TTS、录音、webhook 问题。
|
|
8
|
-
2. 文本流程执行 `get-transcript --chat-id <chatId>` 查不到、返回空或 404。
|
|
9
|
-
|
|
10
|
-
## 核心原则
|
|
11
|
-
|
|
12
|
-
1. 先确认排查对象:默认沿用当前 badcase 上下文;用户显式指定范围时以用户为准。
|
|
13
|
-
2. 先用稳定标识缩小范围:`chatId`、`callId`、`callSid`、`traceId`、电话号码 + 时间段。
|
|
14
|
-
3. SLS 通过本机 `npx --yes @shulex/cxclawctl@latest sls query` 直查;语音会话通过 `npx --yes @shulex/cxclawctl@latest api list-voice-transcripts`
|
|
15
|
-
和 `npx --yes @shulex/cxclawctl@latest api get-voice-transcript` 查询,客户端不持有 VAPI/Twilio 长期密钥。
|
|
16
|
-
4. 不生成独立语音报告模板;最终按 badcase 回复风格输出。
|
|
17
|
-
5. 不要只凭单一数据源下结论,缺失证据必须说明。
|
|
18
|
-
|
|
19
|
-
## 1. 识别入口
|
|
20
|
-
|
|
21
|
-
| 输入 | 优先动作 |
|
|
22
|
-
|------|----------|
|
|
23
|
-
| `chatId` | 查 SLS 定位 callId/callSid/voice trace |
|
|
24
|
-
| VAPI `callId` | 查语音会话详情 + SLS callId 相关日志 |
|
|
25
|
-
| Twilio `callSid` | 查语音会话详情 + SLS callSid 相关日志 |
|
|
26
|
-
| `traceId` / `armsTrace` | 查 SLS 链路日志 |
|
|
27
|
-
| 电话号码 + 时间段 | 先要求用户补充时间窗,再查 SLS/VAPI/Twilio |
|
|
28
|
-
|
|
29
|
-
不确定字段含义时只问一个澄清问题。
|
|
30
|
-
|
|
31
|
-
## 2. 查询 SLS
|
|
32
|
-
|
|
33
|
-
读取 `/skills/shulex-support/references/badcase-analysis/voice/sls-playbook.md`。
|
|
34
|
-
|
|
35
|
-
优先用 chatId/callId/callSid 做最小时间窗查询。连续 3 次空结果停止扩词,避免无节制查询。
|
|
36
|
-
|
|
37
|
-
## 3. 查询语音平台数据
|
|
38
|
-
|
|
39
|
-
读取 `/skills/shulex-support/references/badcase-analysis/voice/platform-api.md`。
|
|
40
|
-
|
|
41
|
-
- 先用 `npx --yes @shulex/cxclawctl@latest api list-voice-transcripts` 缩小范围,再用
|
|
42
|
-
`npx --yes @shulex/cxclawctl@latest api get-voice-transcript --history-id <historyId>` 读取详情。
|
|
43
|
-
- 有 `callId` / `callSid` 时同时查 SLS,补齐 provider 原始错误和时间线。
|
|
44
|
-
- 当前本地插件不下发 VAPI/Twilio 长期密钥,也不直接请求 provider 私有 API;产品接口和
|
|
45
|
-
SLS 都缺少证据时,明确标为“未确认”,不要要求用户粘贴 token。
|
|
46
|
-
|
|
47
|
-
## 4. 依赖或配置缺失
|
|
48
|
-
|
|
49
|
-
读取 `/skills/shulex-support/references/badcase-analysis/voice/dependencies.md`。
|
|
50
|
-
|
|
51
|
-
## 5. 输出方式
|
|
52
|
-
|
|
53
|
-
按 badcase 风格回复:
|
|
54
|
-
|
|
55
|
-
```markdown
|
|
56
|
-
## 会话诊断:chatId=<xxx>
|
|
57
|
-
|
|
58
|
-
### 发生了什么
|
|
59
|
-
<一句话描述语音/通话现象>
|
|
60
|
-
|
|
61
|
-
### 根因
|
|
62
|
-
<基于 SLS/VAPI/Twilio 证据解释原因;证据不足时说明未确认>
|
|
63
|
-
|
|
64
|
-
- **问题层级**:客户端 / Twilio / VAPI / 应用服务 / STT / LLM / TTS / 未确认
|
|
65
|
-
- **Log 层**:<关键发现 / 未查询 / 配置缺失>
|
|
66
|
-
- **Platform 层**:<VAPI/Twilio 关键发现 / 未查询 / 配置缺失>
|
|
67
|
-
|
|
68
|
-
### 关键证据
|
|
69
|
-
<只列最少必要字段;不要粘贴 token、完整客户号码>
|
|
70
|
-
|
|
71
|
-
### 建议
|
|
72
|
-
1. [可自行调整] <后台配置类建议,如有>
|
|
73
|
-
2. [需联系研发] <代码/平台链路问题,如有>
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
以上分析是否符合你的预期?需要更深入排查吗?
|
|
77
|
-
```
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# 语音排查依赖与降级
|
|
2
|
-
|
|
3
|
-
## 运行依赖
|
|
4
|
-
|
|
5
|
-
- SLS:由本机 `npx --yes @shulex/cxclawctl@latest sls query` 使用短期只读 STS 直连。
|
|
6
|
-
- 语音会话:由 `npx --yes @shulex/cxclawctl@latest api list-voice-transcripts` / `get-voice-transcript` 查询现有业务 API。
|
|
7
|
-
- 沙箱不需要 VAPI CLI、Twilio CLI、aliyun CLI、本地 `.env` 或平台 token。
|
|
8
|
-
|
|
9
|
-
## 降级规则
|
|
10
|
-
|
|
11
|
-
| 缺失项 | 降级方式 |
|
|
12
|
-
|--------|----------|
|
|
13
|
-
| SLS 配置缺失 | 继续查语音会话业务数据;结论中说明日志证据缺失 |
|
|
14
|
-
| 语音会话查不到 | 继续查 SLS;不直接访问 VAPI/Twilio 私有 API |
|
|
15
|
-
| callId 缺失 | 优先用 chatId 在 SLS 中定位 callId |
|
|
16
|
-
| callSid 缺失 | 优先用 callId/VAPI/SLS 定位 callSid |
|
|
17
|
-
| 时间窗缺失 | 向用户追问通话大致时间;不要按电话号码扫全量日志 |
|
|
18
|
-
|
|
19
|
-
不要让用户在对话中粘贴 token、AccessKey、Twilio Auth Token 或 VAPI API Key。
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# VAPI / Twilio 平台数据
|
|
2
|
-
|
|
3
|
-
本地插件不持有 VAPI/Twilio 长期凭据。优先通过现有语音会话业务 API 和 SLS 取证。
|
|
4
|
-
|
|
5
|
-
| 平台 | 用途 | 命令 | 使用时机 |
|
|
6
|
-
|------|------|------|----------|
|
|
7
|
-
| 业务平台 | 会话列表 | `npx --yes @shulex/cxclawctl@latest api list-voice-transcripts` | 按时间、状态缩小范围 |
|
|
8
|
-
| 业务平台 | 会话详情 | `npx --yes @shulex/cxclawctl@latest api get-voice-transcript --history-id <historyId>` | 查看 transcript 和已落库平台字段 |
|
|
9
|
-
| SLS | provider 日志 | `npx --yes @shulex/cxclawctl@latest sls query ...` | 按 callId/callSid 补齐原始错误 |
|
|
10
|
-
|
|
11
|
-
## 调用示例
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
npx --yes @shulex/cxclawctl@latest api list-voice-transcripts --begin-ts <ms> --end-ts <ms> --pretty
|
|
15
|
-
npx --yes @shulex/cxclawctl@latest api get-voice-transcript --history-id <historyId> --pretty
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 错误处理
|
|
19
|
-
|
|
20
|
-
- 业务接口为空:校验环境和时间窗,再按 callId/callSid 查 SLS。
|
|
21
|
-
- SLS 也无结果:记录当前证据边界,结论标为“未确认”。
|
|
22
|
-
|
|
23
|
-
不要猜测未公开 provider 接口,也不要要求用户提供 VAPI/Twilio token。
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# 语音链路 SLS 查询 Playbook
|
|
2
|
-
|
|
3
|
-
所有 SLS 查询都通过本机 `npx --yes @shulex/cxclawctl@latest sls query` 使用 `shulex-cloud` 下发的短期只读 STS 直连阿里云,不经过业务服务查询代理。
|
|
4
|
-
|
|
5
|
-
## 基础模板
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npx --yes @shulex/cxclawctl@latest sls query \
|
|
9
|
-
--from <epoch-seconds> \
|
|
10
|
-
--to <epoch-seconds> \
|
|
11
|
-
--query 'rest:"<keyword>"' \
|
|
12
|
-
--line 50 \
|
|
13
|
-
--offset 0
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## 查询策略
|
|
17
|
-
|
|
18
|
-
| 标识 | 查询策略 |
|
|
19
|
-
|------|----------|
|
|
20
|
-
| `chatId` | `rest:"<chatId>" AND (rest:"callId" OR rest:"callSid" OR rest:"voice")` |
|
|
21
|
-
| `callId` | `rest:"<callId>"`,必要时加 `severity:"ERROR"` |
|
|
22
|
-
| `callSid` | `rest:"<callSid>"`,必要时加 `rest:"Twilio"` |
|
|
23
|
-
| `trace` | `trace:"<trace>"` |
|
|
24
|
-
| `armsTrace` | `armsTrace:"<armsTrace>"`,字段名首次使用需用实际日志验证 |
|
|
25
|
-
|
|
26
|
-
## 止损规则
|
|
27
|
-
|
|
28
|
-
- 单轮语音排查 SLS 查询最多 20 次。
|
|
29
|
-
- 连续 3 次 `count=0` 停止扩词。
|
|
30
|
-
- 查询不到时先检查时间窗、字段名、环境,不要直接下根因结论。
|
|
31
|
-
- 配置缺失时,降级为语音会话业务数据 + 已知输入排查。
|