@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.
Files changed (208) hide show
  1. package/README.md +25 -22
  2. package/capabilities.lock.json +535 -131
  3. package/dist/cli.js +2203 -127
  4. package/dist/cli.js.map +1 -1
  5. package/package.json +20 -6
  6. package/requirements-cli.txt +0 -2
  7. package/skills/__lib__/__init__.py +0 -0
  8. package/skills/__lib__/skill-runtime/bootstrap.py +0 -134
  9. package/skills/__lib__/solvea-api/__init__.py +0 -0
  10. package/skills/__lib__/solvea-api/client.py +0 -1944
  11. package/skills/__lib__/solvea-api/dashboard.py +0 -100
  12. package/skills/__lib__/solvea-api/solvea_api.py +0 -1341
  13. package/skills/agent-analytics/SKILL.md +0 -74
  14. package/skills/agent-analytics/references/chat-report-fields.md +0 -36
  15. package/skills/agent-analytics/references/report-fields.md +0 -130
  16. package/skills/agent-analytics/references/transcript.md +0 -110
  17. package/skills/agent-builder/SKILL.md +0 -42
  18. package/skills/agent-builder/interfaces/fallback-chatflow.md +0 -47
  19. package/skills/agent-builder/references/chatflow/graph-spec.md +0 -259
  20. package/skills/agent-builder/references/chatflow/node-selection.md +0 -89
  21. package/skills/agent-builder/references/chatflow/nodes/agent.md +0 -350
  22. package/skills/agent-builder/references/chatflow/nodes/business-track.md +0 -43
  23. package/skills/agent-builder/references/chatflow/nodes/code.md +0 -157
  24. package/skills/agent-builder/references/chatflow/nodes/collect-order.md +0 -47
  25. package/skills/agent-builder/references/chatflow/nodes/finish.md +0 -34
  26. package/skills/agent-builder/references/chatflow/nodes/human-review.md +0 -60
  27. package/skills/agent-builder/references/chatflow/nodes/if-else.md +0 -100
  28. package/skills/agent-builder/references/chatflow/nodes/intent.md +0 -79
  29. package/skills/agent-builder/references/chatflow/nodes/knowledge-reply.md +0 -43
  30. package/skills/agent-builder/references/chatflow/nodes/llm.md +0 -117
  31. package/skills/agent-builder/references/chatflow/nodes/note.md +0 -38
  32. package/skills/agent-builder/references/chatflow/nodes/question.md +0 -97
  33. package/skills/agent-builder/references/chatflow/nodes/rag-reply.md +0 -68
  34. package/skills/agent-builder/references/chatflow/nodes/reply.md +0 -97
  35. package/skills/agent-builder/references/chatflow/nodes/start.md +0 -35
  36. package/skills/agent-builder/references/chatflow/nodes/sub-graph.md +0 -48
  37. package/skills/agent-builder/references/chatflow/nodes/tool.md +0 -138
  38. package/skills/agent-builder/references/chatflow/nodes/transfer-to-human.md +0 -63
  39. package/skills/agent-builder/references/chatflow/nodes/variable-assignment.md +0 -52
  40. package/skills/agent-builder/references/chatflow/nodes/variable-extract.md +0 -50
  41. package/skills/agent-builder/references/chatflow/nodes/variable-process.md +0 -70
  42. package/skills/agent-builder/references/chatflow/overview.md +0 -53
  43. package/skills/agent-builder/references/chatflow/visual-translation.md +0 -64
  44. package/skills/agent-builder/references/chatflow/workflow.md +0 -134
  45. package/skills/agent-builder/references/multi-agent/create-update.md +0 -185
  46. package/skills/agent-builder/references/multi-agent/graph-spec.md +0 -246
  47. package/skills/agent-builder/references/multi-agent/graph-structure.md +0 -12
  48. package/skills/agent-builder/references/multi-agent/migrate-to-chatflow.md +0 -13
  49. package/skills/agent-builder/references/multi-agent/migration/large.md +0 -554
  50. package/skills/agent-builder/references/multi-agent/migration/principles.md +0 -446
  51. package/skills/agent-builder/references/multi-agent/migration/small.md +0 -225
  52. package/skills/agent-builder/references/multi-agent/orchestration.md +0 -11
  53. package/skills/agent-builder/references/multi-agent/overview.md +0 -48
  54. package/skills/agent-builder/references/multi-agent/update.md +0 -128
  55. package/skills/agent-builder/references/multi-agent/workflow.md +0 -87
  56. package/skills/agent-builder/references/single-agent/overview.md +0 -48
  57. package/skills/agent-builder/references/single-agent/prompt.md +0 -16
  58. package/skills/agent-builder/references/single-agent/tools.md +0 -36
  59. package/skills/agent-builder/references/single-agent/voice.md +0 -46
  60. package/skills/agent-builder/references/tools/http-tool.md +0 -315
  61. package/skills/agent-builder/references/tools/mock-tool.md +0 -279
  62. package/skills/agent-builder/references/tools/overview.md +0 -46
  63. package/skills/agent-builder/references/tools/tool-config.md +0 -43
  64. package/skills/agent-builder/references/tools/x-token.md +0 -34
  65. package/skills/agent-builder/scripts/chatflow/chatflow_builder.py +0 -3458
  66. package/skills/agent-builder/scripts/chatflow/validate_graph.py +0 -1697
  67. package/skills/agent-builder/scripts/copy_marketplace_agent.py +0 -61
  68. package/skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py +0 -5974
  69. package/skills/agent-builder/scripts/multi-agent/replay_compare.py +0 -679
  70. package/skills/agent-builder/scripts/patch_agent_tools.py +0 -135
  71. package/skills/agent-builder/scripts/tools/validate_tool_config.py +0 -384
  72. package/skills/agent-tester/SKILL.md +0 -35
  73. package/skills/agent-tester/batch-test/overview.md +0 -86
  74. package/skills/agent-tester/scripts/batch_test_sheet.py +0 -213
  75. package/skills/agent-tester/single-test/badcase-retest.md +0 -85
  76. package/skills/agent-tester/single-test/direct-test.md +0 -24
  77. package/skills/agent-tester/single-test/overview.md +0 -142
  78. package/skills/delivery/SKILL.md +0 -112
  79. package/skills/delivery/interfaces/classify.md +0 -38
  80. package/skills/delivery/interfaces/create-agents.md +0 -89
  81. package/skills/delivery/interfaces/delivery-test.md +0 -67
  82. package/skills/delivery/references/flow.md +0 -40
  83. package/skills/delivery/references/validation.md +0 -15
  84. package/skills/delivery/scripts/batch_test.py +0 -704
  85. package/skills/delivery/scripts/classify.py +0 -22
  86. package/skills/delivery/scripts/create_agents.py +0 -695
  87. package/skills/delivery/scripts/gen_delivery_report.py +0 -335
  88. package/skills/delivery/scripts/gen_excel.py +0 -234
  89. package/skills/delivery/scripts/gen_report.py +0 -208
  90. package/skills/delivery/scripts/plan.py +0 -163
  91. package/skills/delivery/scripts/render.py +0 -713
  92. package/skills/delivery/scripts/render_summary.py +0 -38
  93. package/skills/delivery/scripts/sample_history_cases.py +0 -109
  94. package/skills/kb-builder/SKILL.md +0 -80
  95. package/skills/kb-builder/interfaces/qa-upload.md +0 -55
  96. package/skills/kb-builder/interfaces/web-kb.md +0 -84
  97. package/skills/kb-builder/references/directory.md +0 -373
  98. package/skills/kb-builder/references/export.md +0 -282
  99. package/skills/kb-builder/references/isolation-keywords.md +0 -113
  100. package/skills/kb-builder/references/knowledge.md +0 -153
  101. package/skills/kb-builder/references/product.md +0 -52
  102. package/skills/kb-builder/references/qa-from-help-center.md +0 -58
  103. package/skills/kb-builder/references/qa-from-pdf.md +0 -94
  104. package/skills/kb-builder/references/qa-from-tickets.md +0 -168
  105. package/skills/kb-builder/references/qa-from-web.md +0 -98
  106. package/skills/kb-builder/references/qa-quality.md +0 -73
  107. package/skills/kb-builder/references/reply-template.md +0 -237
  108. package/skills/kb-builder/references/tag-isolation-migration.md +0 -61
  109. package/skills/kb-builder/references/tags.md +0 -45
  110. package/skills/kb-builder/references/upload.md +0 -130
  111. package/skills/kb-builder/scripts/batch_extract_ticket_qa.py +0 -333
  112. package/skills/kb-builder/scripts/build_directory_plan.py +0 -144
  113. package/skills/kb-builder/scripts/crawl_site.py +0 -433
  114. package/skills/kb-builder/scripts/create_dirs.py +0 -146
  115. package/skills/kb-builder/scripts/export_knowledge.py +0 -454
  116. package/skills/kb-builder/scripts/extract_ticket_qa.py +0 -441
  117. package/skills/kb-builder/scripts/extract_web_qa.py +0 -118
  118. package/skills/kb-builder/scripts/import_qa.py +0 -219
  119. package/skills/kb-builder/scripts/import_source_documents.py +0 -143
  120. package/skills/kb-builder/scripts/import_templates.py +0 -409
  121. package/skills/poc/SKILL.md +0 -125
  122. package/skills/poc/assets/default_manual.css +0 -279
  123. package/skills/poc/assets/notice_escalate.png +0 -0
  124. package/skills/poc/assets/notice_escalate2.png +0 -0
  125. package/skills/poc/assets/notice_new_chat.png +0 -0
  126. package/skills/poc/assets/poc_test_template.html +0 -645
  127. package/skills/poc/assets/poc_test_template.md +0 -104
  128. package/skills/poc/assets/step3_preview.png +0 -0
  129. package/skills/poc/assets/step4_order_note.png +0 -0
  130. package/skills/poc/interfaces/classify.md +0 -38
  131. package/skills/poc/interfaces/create-agents.md +0 -108
  132. package/skills/poc/interfaces/poc-test.md +0 -94
  133. package/skills/poc/references/flow.md +0 -47
  134. package/skills/poc/references/kb-directory.md +0 -22
  135. package/skills/poc/references/validation.md +0 -17
  136. package/skills/poc/scripts/classify.py +0 -22
  137. package/skills/poc/scripts/create_agents.py +0 -818
  138. package/skills/poc/scripts/gen_excel.py +0 -234
  139. package/skills/poc/scripts/gen_poc_manual.py +0 -249
  140. package/skills/poc/scripts/gen_report.py +0 -208
  141. package/skills/poc/scripts/inspect_chatflow.py +0 -209
  142. package/skills/poc/scripts/plan.py +0 -178
  143. package/skills/poc/scripts/poc_test.py +0 -495
  144. package/skills/poc/scripts/render.py +0 -713
  145. package/skills/poc/scripts/render_summary.py +0 -41
  146. package/skills/runtime-inspector/SKILL.md +0 -51
  147. package/skills/runtime-inspector/references/frontend-rendering.md +0 -126
  148. package/skills/runtime-inspector/references/model.md +0 -59
  149. package/skills/runtime-inspector/references/sandbox.md +0 -131
  150. package/skills/runtime-inspector/scripts/model_inspect.py +0 -68
  151. package/skills/runtime-inspector/scripts/prepare.py +0 -98
  152. package/skills/runtime-inspector/scripts/process.py +0 -84
  153. package/skills/runtime-inspector/scripts/read_state.py +0 -32
  154. package/skills/runtime-inspector/scripts/sandbox_inspect.py +0 -463
  155. package/skills/runtime-inspector/scripts/test_claude_proxy.py +0 -49
  156. package/skills/runtime-inspector/scripts/test_openai_proxy.py +0 -41
  157. package/skills/runtime-inspector/scripts/verify_persistence.py +0 -101
  158. package/skills/runtime-inspector/scripts/write_test.py +0 -41
  159. package/skills/setup/SKILL.md +0 -17
  160. package/skills/shulex-support/SKILL.md +0 -39
  161. package/skills/shulex-support/references/badcase-analysis/overview.md +0 -34
  162. package/skills/shulex-support/references/badcase-analysis/text/conversation-record.md +0 -105
  163. package/skills/shulex-support/references/badcase-analysis/text/core-flow.md +0 -89
  164. package/skills/shulex-support/references/badcase-analysis/text/log-query-rules.md +0 -36
  165. package/skills/shulex-support/references/badcase-analysis/text/m1-entry.md +0 -53
  166. package/skills/shulex-support/references/badcase-analysis/text/m10-chatflow-service.md +0 -259
  167. package/skills/shulex-support/references/badcase-analysis/text/m11-algorithm-service.md +0 -148
  168. package/skills/shulex-support/references/badcase-analysis/text/m12-quality-inspection.md +0 -57
  169. package/skills/shulex-support/references/badcase-analysis/text/m2-intent.md +0 -120
  170. package/skills/shulex-support/references/badcase-analysis/text/m3-strategy.md +0 -126
  171. package/skills/shulex-support/references/badcase-analysis/text/m4-aifield.md +0 -121
  172. package/skills/shulex-support/references/badcase-analysis/text/m5-agent.md +0 -208
  173. package/skills/shulex-support/references/badcase-analysis/text/m6-tool.md +0 -115
  174. package/skills/shulex-support/references/badcase-analysis/text/m7-reply.md +0 -72
  175. package/skills/shulex-support/references/badcase-analysis/text/m8-error.md +0 -92
  176. package/skills/shulex-support/references/badcase-analysis/text/m9-knowledge-search.md +0 -147
  177. package/skills/shulex-support/references/badcase-analysis/text/sls-query.md +0 -283
  178. package/skills/shulex-support/references/badcase-analysis/voice/core-flow.md +0 -77
  179. package/skills/shulex-support/references/badcase-analysis/voice/dependencies.md +0 -19
  180. package/skills/shulex-support/references/badcase-analysis/voice/platform-api.md +0 -23
  181. package/skills/shulex-support/references/badcase-analysis/voice/sls-playbook.md +0 -31
  182. package/skills/shulex-support/references/product-docs.md +0 -70
  183. package/skills/shulex-support/references/tickets.md +0 -184
  184. package/skills/shulex-support/scripts/support.py +0 -427
  185. package/skills/solvea-desk/SKILL.md +0 -39
  186. package/skills/solvea-desk/references/report/fields.md +0 -82
  187. package/skills/solvea-desk/references/report/report-design.md +0 -200
  188. package/skills/solvea-desk/references/report/report-template.html +0 -44
  189. package/skills/solvea-desk/references/report/report.css +0 -517
  190. package/skills/solvea-desk/references/report/workflow.md +0 -464
  191. package/skills/solvea-desk/references/tickets/query.md +0 -103
  192. package/skills/solvea-desk/references/tickets/tags.md +0 -83
  193. package/skills/solvea-desk/scripts/report/fetch_sources.py +0 -580
  194. package/skills/solvea-desk/scripts/report/render_report.py +0 -763
  195. package/skills/solvea-desk/scripts/tickets/desk_api.py +0 -73
  196. package/skills/solvea-desk/scripts/tickets/fetch_tickets.py +0 -403
  197. package/skills/solvea-desk/scripts/tickets/ticket_tags.py +0 -305
  198. package/skills/solvea-kit/SKILL.md +0 -84
  199. package/skills/solvea-kit/references/agent.md +0 -145
  200. package/skills/solvea-kit/references/chat.md +0 -244
  201. package/skills/solvea-kit/references/intent.md +0 -69
  202. package/skills/solvea-kit/references/plugin.md +0 -53
  203. package/skills/solvea-kit/references/quality-inspection.md +0 -75
  204. package/skills/solvea-kit/references/strategy.md +0 -62
  205. package/skills/solvea-kit/references/tagging.md +0 -231
  206. package/skills/solvea-kit/references/variables.md +0 -53
  207. package/skills/solvea-kit/scripts/generate_label_import_file.py +0 -151
  208. package/skills/solvea-kit/scripts/intent_classify.py +0 -843
@@ -1,97 +0,0 @@
1
- # REPLY
2
-
3
- ## 功能概述
4
-
5
- 发送一段话给用户,然后沿唯一 `SOURCE` 出边继续后续流程。`PROMPT` 由 LLM 按提示词生成回复;
6
- `TEMPLATE` 使用固定模板;`DYNAMIC_TEMPLATE` 先渲染上游变量,再把结果按会话语言翻译后发送。
7
-
8
- REPLY 不是只能做终端。凡是业务语义是“先对用户说一段固定/可生成的话,再继续进入同一个后续路径”,
9
- 都可以用 REPLY 表达。它不负责判断分支,也不调用工具;分支判断应放在上游或下游的 INTENT /
10
- IF_ELSE / QUESTION / AGENT 中。
11
-
12
- REPLY 发送的是用户可见内容。需要知识检索回答时用 `RAG_REPLY`;需要内部摘要、改写或抽取时用
13
- `LLM`;需要发送后立即人工接管时用 `TRANSFER_TO_HUMAN` 的回复配置。
14
-
15
- ## 创建方式
16
-
17
- ```json
18
- {"key": "confirm_platform", "type": "reply", "reply_type": "TEMPLATE", "template_id": 12345}
19
- ```
20
-
21
- ```json
22
- {"key": "explain_policy", "type": "reply", "prompt": "Explain the return policy politely and concisely."}
23
- ```
24
-
25
- ```json
26
- {"key": "reply_with_order", "type": "reply", "prompt": "Answer using the OrderNumber field if present.", "ai_field_ids": [2742]}
27
- ```
28
-
29
- ```json
30
- {
31
- "key": "reply_with_summary",
32
- "type": "reply",
33
- "reply_type": "DYNAMIC_TEMPLATE",
34
- "template_content": "Order summary: [[var:{\"code\":\"summarize_case\",\"field\":\"summary\"}]]"
35
- }
36
- ```
37
-
38
- ## 创建参数
39
-
40
- | 字段 | 说明 |
41
- |------|------|
42
- | prompt | `reply_type` 缺省或为 `PROMPT` 时使用 |
43
- | reply_type | `PROMPT` / `TEMPLATE` / `DYNAMIC_TEMPLATE`,默认 `PROMPT` |
44
- | template_id | `TEMPLATE` 必填 |
45
- | template_content | `DYNAMIC_TEMPLATE` 必填;完整 graph 中可嵌入 `[[var:[...]]]` selector 模板,source 可使用 selector 简写 |
46
- | ai_field_ids | PROMPT 可用的变量系统字段 id 数组;完整 graph 字段为 `aiFieldIds` |
47
- | use_long_memory | PROMPT 是否注入长记忆,默认 false |
48
- | disable_prev_node_results | PROMPT 是否不注入前序节点结果,默认 false |
49
-
50
- ## Edges
51
-
52
- 仅 `SOURCE` 单出边。运行时如果 REPLY 有出边,chatflow 后端会注入 `WAIT -> USER_INPUT -> 原下游`,也就是先把回复发给用户并等待下一轮用户输入,再继续进入原下游节点。
53
-
54
- 如果只是发送最终话术后结束,连 `$finish`;如果发送话术后转人工,连 `$transfer` 或显式 `TRANSFER_TO_HUMAN`。不要让 REPLY 承担分支判断。
55
-
56
- 如果语义是“发送模板/话术后继续路由到同一个确定目标”,REPLY 表达这段发送动作:
57
-
58
- ```text
59
- 上游分支 -> REPLY(TEMPLATE 或 PROMPT) -> 后续处理节点
60
- ```
61
-
62
- 如果发送后要按用户回答分支,不要让 REPLY 直接多出边;改用 `REPLY -> QUESTION`,由 QUESTION
63
- 收集用户回复并分流。
64
-
65
- ## Resource Dependencies
66
-
67
- 使用模板前先查模板库:
68
-
69
- ```bash
70
- npx --yes @shulex/cxclawctl@latest api list-templates --keyword "platform" --pretty
71
- ```
72
-
73
- 模板查询底层走 `/project/{projectId}/templates/filter`。
74
-
75
- ## 限制
76
-
77
- - `TEMPLATE` 必须有 `template_id`。
78
- - `DYNAMIC_TEMPLATE` 必须有非空 `template_content`,不使用 `template_id` 或 `ai_field_ids`。
79
- - 动态模板的完整 selector 例如 `[[var:["CODE","<code_node_id>","summary"]]]`;只能引用当前 REPLY 的上游输出。可用 `SYSTEM`、`TOOL`、`EXTRACT`、`CODE`、`LLM`、`AGENT`、`HUMAN_REVIEW` 或 `NODE` selector,工具状态可用 `ACTION_STATUS_NAME`。
80
- - `DYNAMIC_TEMPLATE` 是确定性的变量渲染与翻译,不是让 LLM 重写模板内容。需要模型措辞时用 `PROMPT`。
81
- - `PROMPT` 必须写生成要求,可以控制回复内容、语气、必须包含/避免的信息;不要只写用户可见的一句话。
82
- - `aiFieldIds` 必须是变量系统字段 id 数组,例如 `[2742]`。
83
- - 字段服务不可用时不要新增未知 `aiFieldIds`;先用固定话术、模板,或复用已有 graph 中已确认字段 id。
84
- - 需要上游节点输出稳定进入 prompt 时,先用 VARIABLE_PROCESS 赋值到 SYSTEM 变量系统字段,再在 `ai_field_ids` 引用该字段。
85
- - 后端会把 `ai_field_ids` 对应字段作为额外系统上下文注入;上游节点结果也可能作为历史节点结果注入,但不要把它当成稳定 prompt 变量。
86
- - REPLY 不承担路由、工具调用、条件判断。
87
- - REPLY 只有一个下游;需要多个下游时,必须由相邻路由节点承担分支。
88
- - REPLY 中写“请提供/请上传/请确认”只是发送提示,不表示已收集或已确认;必须连接 QUESTION 才会等待用户输入。
89
- - `PROMPT` / `TEMPLATE` / `DYNAMIC_TEMPLATE` 各自只使用对应字段;不要在普通 PROMPT 中写 `[[var:...]]`。
90
-
91
- ## Common Mistakes
92
-
93
- - 把固定话术写进 `PROMPT`。固定话术优先用模板;需要模型生成时才用 PROMPT。
94
- - 用 REPLY 问用户选项并期待分支。需要分支时用 `QUESTION(USER_REPLY)`。
95
- - 因为 REPLY 后还要继续流程,就误以为不能用 REPLY;REPLY 可以发送后接一个确定下游。
96
- - 想在 prompt 稳定使用上游输出,却没有先赋值到变量系统字段。
97
- - 动态模板把 selector 写成普通文本,或在 `template_content` 中引用下游/未连通节点。
@@ -1,35 +0,0 @@
1
- # START
2
-
3
- ## 功能概述
4
-
5
- CHAT_FLOW 唯一入口节点。source JSON 通常不显式创建 START,由顶层 `entry` 自动生成。
6
-
7
- ## 创建方式
8
-
9
- ```json
10
- {"entry": "first_business_node"}
11
- ```
12
-
13
- ## 创建参数
14
-
15
- | 字段 | 说明 |
16
- |------|------|
17
- | entry | 首个业务节点 key |
18
-
19
- ## Edges
20
-
21
- START 自动连到 `entry`,handle 为 `SOURCE`。
22
-
23
- ## Resource Dependencies
24
-
25
- 无。
26
-
27
- ## 限制
28
-
29
- - 平台要求 START 必须且只能有一个。
30
- - START 必须有出边。
31
-
32
- ## Common Mistakes
33
-
34
- - 手写多个 START。
35
- - 已写 `entry` 又额外手写一个重复 START。
@@ -1,48 +0,0 @@
1
- # SUB_GRAPH
2
-
3
- ## 功能概述
4
-
5
- 调用另一个 CHAT_FLOW。当前后端 parser 禁止 SUB_GRAPH 有出边,因此它是终止型子流程调用节点。
6
-
7
- ## 创建方式
8
-
9
- ```json
10
- {
11
- "key": "run_return_flow",
12
- "type": "sub_graph",
13
- "target_agent_id": 2496,
14
- "context_turn_limit": 5
15
- }
16
- ```
17
-
18
- ## 创建参数
19
-
20
- | 字段 | 说明 |
21
- |------|------|
22
- | target_agent_id | 被调用的 CHAT_FLOW agent id |
23
- | agent_id / agentId / targetAgentId | source JSON 可用别名,最终写成 `targetAgentId` |
24
- | context_turn_limit | 1-10,默认 5 |
25
-
26
- ## Edges
27
-
28
- 禁止出边。
29
-
30
- ## Resource Dependencies
31
-
32
- 先查可用 agent:
33
-
34
- ```bash
35
- npx --yes @shulex/cxclawctl@latest api list-agents --pretty
36
- ```
37
-
38
- ## 限制
39
-
40
- - 无出边。
41
- - 必须有入边。
42
- - `target_agent_id` 必填,且必须是可转成整数的 CHAT_FLOW agent id。
43
- - `context_turn_limit` 必须在 1-10 之间。
44
- - 如果子流程后还要回主流程,不适合 SUB_GRAPH;改用 AGENT next_steps 或拆回主流程。
45
-
46
- ## Common Mistakes
47
-
48
- - 给 SUB_GRAPH 连出边,后端 parser 会失败。
@@ -1,138 +0,0 @@
1
- # TOOL
2
-
3
- ## 功能概述
4
-
5
- 调用单个外部 HTTP 工具拿结构化数据。下游可接 IF_ELSE;工具定义的 actionStatus 与当前业务分支完全一致时,也可直接按 actionStatus 出边。
6
-
7
- 它把调用、入参、结果和状态暴露在画布上。action status 是工具声明的离散结果;当判断依赖多个返回字段、系统字段或布尔组合时,可将 TOOL 输出交给 IF_ELSE。TOOL 本身不生成对客回复,也不等待用户。
8
-
9
- ## 创建前审计
10
-
11
- 写 TOOL 节点前必须从真实工具定义建立审计表,不只看工具名或旧 prompt:
12
-
13
- | 审计项 | 来源 | 用途 |
14
- |---|---|---|
15
- | `requestParam.items[]` | 工具详情 | 决定 `input_params`,包括必填、类型、object/array 子字段 |
16
- | `responseParam.items[]` | 工具详情 | 决定下游 IF_ELSE / CODE / HUMAN_REVIEW 可引用的字段路径 |
17
- | `actionStatuses[]` | 工具详情 | 决定是否可以 `enable_action_status=true` 以及每个状态下游 |
18
-
19
- 只有 actionStatus 名称、工具合同和目标业务分支三者能对齐时,才用工具状态出边。若流程按返回体字段、系统变量、多个字段组合或代码计算结果判断,应该 `TOOL -> IF_ELSE` 或 `TOOL -> CODE -> IF_ELSE`。
20
-
21
- chatflow 运行时的 TOOL 节点只读取画布上的 `inputParams`、`tool.id/type/enableActionStatus` 后调用工具;节点实现本身不会根据工具详情自动补齐必填参数,也不会猜测缺失参数该绑定哪个变量。工具入参是否完整、TOOL 出参 path 是否存在,必须用真实工具详情和 compile / validate 审计完成。不要只离线编译后就认定工具绑定正确。
22
-
23
- ## 创建方式
24
-
25
- ```json
26
- {
27
- "key": "lookup_order",
28
- "type": "tool",
29
- "tool_id": 12345,
30
- "input_params": [
31
- {"name": "orderId", "variableSelector": {"system": {"category": "Order", "path": [3248, 3249]}}, "varType": "string"}
32
- ]
33
- }
34
- ```
35
-
36
- ## 创建参数
37
-
38
- | 字段 | 说明 |
39
- |------|------|
40
- | tool_id | 必填,项目已有工具 id |
41
- | tool_type | 工具插件类型,默认 `EXTERNAL_HTTP_CALL`;维护已有非 HTTP 工具时保留实际类型 |
42
- | input_params[].name | 参数名,与工具定义一致 |
43
- | input_params[].text | 固定值 |
44
- | input_params[].variableSelector | 参数来源 |
45
- | input_params[].children | object 参数的子字段绑定 |
46
- | input_params[].varType | 类型 |
47
- | enable_action_status | 是否按工具 action status 出边 |
48
-
49
- ## Edges
50
-
51
- - 默认 `SOURCE`。
52
- - `enable_action_status=true` 时,TOOL 直接从工具原始结果 `raw_result["__status"]` 取状态名作为 `output_handle`;缺失时运行时抛 `ToolInvokeError("Tool result missing action status")`。
53
- - 状态名使用工具定义中的原始名称。
54
- - 只有工具定义的 actionStatus 完整、互斥且覆盖当前业务分支时才直接出边;否则用 `SOURCE -> IF_ELSE` 或 `SOURCE -> AGENT` 解读工具结果。
55
- - 多个 actionStatus 不能因为都“失败”就合并到同一个转人工节点;只有责任、用户轮次、回复合同、模板/NO_REPLY 和转人工原因一致时才共享下游。
56
-
57
- ## Output Variables
58
-
59
- TOOL 成功后写入的节点输出形态是:
60
-
61
- ```json
62
- {
63
- "name": "<tool node title>",
64
- "tool_result": "<parsed_result>"
65
- }
66
- ```
67
-
68
- 下游引用工具出参时读取的是 `tool_result`,按返回结构逐层写路径:`{"tool":"lookup_order","path":["order","shipping_method_no"]}`。嵌套字段不能写成单段 `field: "order.shipping_method_no"`。
69
-
70
- 工具状态不是普通出参。判断状态名用:
71
-
72
- ```json
73
- {"variableSelector": {"tool_status": "lookup_order"}}
74
- ```
75
-
76
- 完整 selector 是 `["TOOL", "<tool_node_id>", "ACTION_STATUS_NAME"]`,运行时会读取最近一次该 TOOL 结果中的 `tool_result.__status`。如果工具直接出边和下游 IF_ELSE 都依赖状态,必须确认工具解析后的 `parsed_result` 也保留 `__status`,否则直接出边可用但 IF_ELSE 读不到状态。
77
-
78
- 判断返回体字段才用:
79
-
80
- ```json
81
- {"variableSelector": {"tool": "lookup_order", "path": ["order", "shipping_method_no"]}}
82
- ```
83
-
84
- 不要在未确认 `responseParam` 的情况下凭经验写 `status`、`data.status`、`result.status`。如果只有 actionStatus 可用,就按 actionStatus 出边或在 IF_ELSE 中引用 `tool_status`。
85
-
86
- ## Resource Dependencies
87
-
88
- ```bash
89
- npx --yes @shulex/cxclawctl@latest api list-plugins --pretty
90
- npx --yes @shulex/cxclawctl@latest api list-ai-fields --pretty
91
- ```
92
-
93
- `--bind-tool-params` 只是辅助,不是业务决策来源:
94
-
95
- ```bash
96
- npx --yes @shulex/cxclawctl@latest script skills/agent-builder/scripts/chatflow/chatflow_builder.py compile ... --bind-tool-params
97
- ```
98
-
99
- 实际行为:
100
- - 仅在 `queryAiFields` 可用时生效;字段服务不可用时会被跳过并产生 warning。
101
- - 只尝试自动绑定工具定义中 `required=true` 且 `source=LLM` 的参数。
102
- - 只按内置常见字段名映射或变量系统字段直接同名匹配生成 `SYSTEM` selector。
103
- - 找不到匹配字段时只打印 warning,不会生成 `open_questions`,也不会替你判断是否该新建变量或改成 QUESTION。
104
- - 已经写在 `input_params` 里的参数不会被覆盖。
105
-
106
- 因此不能依赖 `--bind-tool-params` 自动解决业务字段绑定;它只能作为最后的辅助补齐和校验。
107
-
108
- ## 限制
109
-
110
- - 必填参数必须绑定变量系统字段或固定值。
111
- - 找不到明确来源的必填参数时,不得按名称相似自动绑定现有变量;必须输出 `open_questions`,让用户选择新建变量、使用哪个现有变量、改为 `QUESTION(VARIABLE)` 收集、转人工或不迁该自动化。
112
- - chatflow 运行时解析 `inputParams` 时,如果顶层参数解析结果是 `None`,会直接从 `tool_args` 中省略该参数;这不是“已绑定空值”。必填参数不能依赖运行时发现,必须在创建审计和 validate 阶段拦住。
113
- - 固定 `text` 绑定到 `varType=object/array` 时,运行时会 `json.loads(text)`;必须写合法 JSON,不能写 Python 字面量或自然语言描述。
114
- - `variableSelector` 绑定到 `varType=array` 时,如果取到的是非 list,运行时会包装成单元素数组;这只是兼容机制,不代表可把单个商品字段当成完整商品数组使用。
115
- - array/object 参数(如 `itemVos`、`refundProducts`、`productList`)必须确认数组元素结构和同一商品记录的一致性;无法保证时不要把单个商品字段拼成数组执行补发/退款,优先询问或转人工。
116
- - validator 会按真实 `requestParam.items[]` 检查所有 required 参数;object 参数会递归检查 `objectItems`,完整缺失路径会类似 `address.line1`。
117
- - array 参数在 validator 中按叶子处理;它只校验该数组参数本身是否配置,不理解数组元素是否来自同一商品记录。涉及补发/退款商品数组时必须人工审计来源一致性。
118
- - 工具定义里 `source=CUSTOMIZE` 或非 LLM 的必填参数不会被 `--bind-tool-params` 自动补齐;需要根据工具定义和业务语义手写 `text` 或明确 selector,并通过真实 validate 校验。
119
- - object 参数的必填子字段必须逐层写入 `children`,字段名与工具定义 `objectItems[].name` 一致。运行时会把 object 的 `children` 解析成 `{child.name: child_value}`。
120
- - array 参数的 `children` 在运行时会被解析成列表元素;数组元素是对象时,子项也必须按 object 结构显式表达,不能只把多个平铺字段塞进同一个 array。
121
- - `input_params[].name` 必须和工具定义 `requestParam.items[].name` 一致;object 子字段同理。
122
- - `input_params[].variableSelector` 引用上游变量,支持 `SYSTEM`、`TOOL`、`EXTRACT`、`CODE`、`LLM`、`AGENT`、`HUMAN_REVIEW`。
123
- - `input_params[].variableSelector` 不使用工具状态 `ACTION_STATUS_NAME`;需要按工具状态分支时用 TOOL 自身的 actionStatus 出边或下游 IF_ELSE。
124
- - `input_params[].variableSelector` 只能引用当前 TOOL 的上游节点输出;validator 会拒绝引用同级、下游或未连通节点。
125
- - `AGENT` selector 只能引用当前上游路径已连通 nextStep 的 `params[].name`。
126
- - EXTRACT selector 第三段是 extract `id`,不是 `name`。
127
- - TOOL 只负责调用,不负责解释复杂结果。
128
- - 使用 actionStatus 前必须确认状态定义完整、互斥,且能准确覆盖当前业务分支;否则使用工具结构化输出接 IF_ELSE。
129
-
130
- ## Common Checks
131
-
132
- - 多个下游业务节点需要由 IF_ELSE 或 actionStatus 明确承接。
133
- - 参数名与工具定义一致。
134
- - 引用变量时确认被引用节点在当前 TOOL 上游。
135
- - object 参数的必填子字段都已绑定,不只绑定父级 object。
136
- - compile 前确认每个必填参数都有来源说明:`SYSTEM` 字段、上游 TOOL/CODE/QUESTION 输出、固定值,或已记录为阻塞 open question。QUESTION(VARIABLE) 的结果通常先进入变量系统字段,再用 `SYSTEM` selector 绑定工具入参。
137
- - compile 报缺必填参数时,先回到参数审计表补来源,不要临时绑定同名/近似变量来压过校验。
138
- - validate 报 `references invalid TOOL output path` 时,先核对真实 `responseParam.items[]`;数组字段不能继续向内写子路径,object 字段才可逐层引用。
@@ -1,63 +0,0 @@
1
- # TRANSFER_TO_HUMAN
2
-
3
- ## 功能概述
4
-
5
- 终止当前流程并转人工。支持直接无回复转人工、节点内模型生成话术后转人工、节点内固定模板后转人工。
6
-
7
- TRANSFER_TO_HUMAN 表达的是客服会话接管。一旦执行,当前 chatflow 不再继续走后续节点。它不同于 `HUMAN_REVIEW` 的流程内审核,也不同于 `AGENT.next_steps` 的流程内跳转。
8
-
9
- ## 创建方式
10
-
11
- ```json
12
- {"key": "handoff", "type": "transfer"}
13
- ```
14
-
15
- ```json
16
- {"key": "handoff_with_template", "type": "transfer", "transfer_type": "TEMPLATE", "template_id": 12345}
17
- ```
18
-
19
- ## 创建参数
20
-
21
- | 字段 | 说明 |
22
- |------|---------------------------------------------------------|
23
- | transfer_type | `NO_REPLY` / `PROMPT` / `TEMPLATE`,默认 `NO_REPLY` |
24
- | prompt | PROMPT 类型时使用的模型生成提示词 |
25
- | template_id | TEMPLATE 时必填 |
26
- | ai_field_ids | PROMPT 可注入的变量系统字段 id 数组 |
27
- | disable_prev_node_results | PROMPT 是否不注入前序节点结果,默认 false |
28
- | explain | 写入人工接管结果的说明;缺省时使用节点标题 |
29
-
30
- ## Edges
31
-
32
- 无出边。普通默认无回复转人工可直接用 `$transfer`。
33
-
34
- ## Resource Dependencies
35
-
36
- TEMPLATE 转人工先查模板:
37
-
38
- ```bash
39
- npx --yes @shulex/cxclawctl@latest api list-templates --keyword "handoff" --pretty
40
- ```
41
-
42
- ## 限制
43
-
44
- - 不要使用 AGENT `transferToHumans` 字段。
45
- - 确定性转人工路径应显式节点化为 `TRANSFER_TO_HUMAN` 或 `$transfer`。
46
- - 如果转人工由 AGENT 在多轮判断中自主决定,按 `agent.md` 在 prompt 中插入标准 `transferHuman`
47
- LibraryBlock;联网 compile 会把真实 `TRANSFER_TO_HUMAN` 系统插件 ID 加入该 AGENT 的 `usedPlugins`,
48
- 但独立 `TRANSFER_TO_HUMAN` 节点本身不写插件,也不要把转人工伪装成 AGENT `next_steps`。
49
- - `NO_REPLY` 不需要 `prompt` 或模板。
50
- - `PROMPT` 必须有 `prompt`。
51
- - `PROMPT` 可用 `ai_field_ids` 注入变量系统字段;普通 `[[var:...]]` 模板不在此节点渲染。需要上游节点输出时,先桥接到 SYSTEM 字段,不能默认增加普通 REPLY 节点改变终止语义。
52
- - `TEMPLATE` 必须有 `template_id`。
53
- - 有不同回复内容的转人工路径不要合并成同一个 transfer 节点。
54
- - 不同业务职责、不同 action status 或不同 transfer reason 不要全部连到同一个 `$transfer`。
55
- - 如果确实要共享一个 transfer,必须在设计说明中写明相同职责、相同用户轮次、相同回复合同和合并证据。
56
- - `PROMPT` 表示该转人工节点自身先由模型生成一段对客话术,然后执行转人工;它不是前置分类节点。
57
- - `TEMPLATE` 表示该转人工节点自身先发送固定模板,然后执行转人工。
58
- - 转人工节点的 PE 是面向模型的pe,作用是用来让模型生成面向客户的回复。
59
-
60
- ## Common Mistakes
61
-
62
- - 把“先回复再转人工”直接连 `$transfer`,导致回复丢失。
63
- - 多个不同模板共用一个 transfer 节点。
@@ -1,52 +0,0 @@
1
- # VARIABLE_ASSIGNMENT
2
-
3
- ## 功能概述
4
-
5
- 变量赋值兼容节点。仅用于兼容已有图;新建优先使用 `VARIABLE_PROCESS`。
6
-
7
- ## 创建方式
8
-
9
- ```json
10
- {
11
- "key": "set_variables",
12
- "type": "variable_assignment",
13
- "assignments": [
14
- {"id": "assign-001", "operation": "OVER_WRITE", "source": ["TOOL", "lookup_order", "status"], "target": [["SYSTEM", "Custom", 2742]]}
15
- ]
16
- }
17
- ```
18
-
19
- ## 创建参数
20
-
21
- | 字段 | 说明 |
22
- |------|------|
23
- | assignments[].id | 赋值项 id |
24
- | assignments[].operation | `OVER_WRITE` / `CLEAR` / `CONSTANT` |
25
- | assignments[].source | variableSelector 或常量 |
26
- | assignments[].target | 目标 variableSelector 二维数组 |
27
- | assignments[].forceOverride | 是否强制覆盖 |
28
-
29
- ## Edges
30
-
31
- 仅 `SOURCE`。
32
-
33
- ## Resource Dependencies
34
-
35
- 目标变量系统字段先查 `list-ai-fields`。
36
-
37
- ## 限制
38
-
39
- - 新建默认不用。
40
- - 每个 assignment 必须有 `id/operation/target`。
41
- - `CONSTANT` 操作必须有非空 `source`。
42
- - `OVER_WRITE` 的 `source` 引用上游变量,支持 `SYSTEM`、`TOOL`、`EXTRACT`、`CODE`、`LLM`、`AGENT`、`HUMAN_REVIEW`。
43
- - `OVER_WRITE` 的 `source` 不使用工具状态 `ACTION_STATUS_NAME`;需要状态判断时用 IF_ELSE 或 TOOL actionStatus 出边。
44
- - `AGENT` selector 只能引用当前上游路径已连通 nextStep 的 `params[].name`。
45
- - `target` 只能是 `SYSTEM` 变量二维数组,如 `[["SYSTEM", "Custom", 2742]]`。
46
- - EXTRACT selector 第三段是 extract `id`,不是 `name`。
47
- - 能迁成 `VARIABLE_PROCESS` 时优先迁移。
48
-
49
- ## Common Mistakes
50
-
51
- - 新建图继续使用旧节点。
52
- - 把 `source` 写成 extract `name`;应引用 extract `id`。
@@ -1,50 +0,0 @@
1
- # VARIABLE_EXTRACT
2
-
3
- ## 功能概述
4
-
5
- 变量提取兼容节点。仅用于兼容已有图;新建优先使用 `VARIABLE_PROCESS`。向用户收集信息优先使用 `QUESTION(VARIABLE)`。
6
-
7
- ## 创建方式
8
-
9
- ```json
10
- {
11
- "key": "extract_params",
12
- "type": "variable_extract",
13
- "variables": [
14
- {"alias": "order_no_value", "name": "order_no", "describe": "Order number", "type": "string"}
15
- ],
16
- "additional_data": [{"node": "previous_node"}]
17
- }
18
- ```
19
-
20
- ## 创建参数
21
-
22
- | 字段 | 说明 |
23
- |------|------|
24
- | variables / extracts | 提取项,source 写 name/type/describe;需要后续引用时加 alias,compile 后 alias 会变成完整 graph 的 UUID `id` |
25
- | additional_data | 提取时额外拼接的上游变量选择器数组;source 可写 selector 简写,完整 graph 为 `additionalData: [["SYSTEM",...], ["TOOL",...], ["NODE",...]]` |
26
- | use_chat_history | 是否使用历史 |
27
-
28
- ## Edges
29
-
30
- 仅 `SOURCE`。
31
-
32
- ## Resource Dependencies
33
-
34
- 引用上游节点输出或变量系统字段前,先确认对应 id。
35
-
36
- ## 限制
37
-
38
- - 新建默认不用。
39
- - 至少有一个提取项。
40
- - source 每个提取项必须有 `name/describe/type`,需要后续引用时必须有 `alias`;已有完整 graph 必须有 `id/name/describe/type`,其中 `id` 通常是前端或 builder 生成的 UUID。
41
- - `name` 格式 `/^(?!\d)[A-Za-z0-9_-]{1,64}$/`。
42
- - `additional_data` 只能引用上游 `SYSTEM` / `TOOL` / `CODE` / `AGENT` / `HUMAN_REVIEW` / `NODE`,用于补充提取上下文。
43
- - `additional_data` 不使用工具状态 `ACTION_STATUS_NAME`;`AGENT` selector 只能引用当前上游路径已连通 nextStep 的 `params[].name`。
44
- - 下游引用本节点提取结果时用 `["EXTRACT", "<this_node_id>", "<extract_id>"]`;第三段是 extract `id`,不是 `name`。
45
- - 只想收集用户输入时,用 `QUESTION(VARIABLE)`。
46
-
47
- ## Common Mistakes
48
-
49
- - 把用户提问收集误建成变量提取。
50
- - 用 `NODE_OUTPUT` 或 extract `name` 写 selector;source 用 `alias`,完整 graph 用 UUID `id`。
@@ -1,70 +0,0 @@
1
- # VARIABLE_PROCESS
2
-
3
- ## 功能概述
4
-
5
- 提取上下文变量、给变量系统字段赋值,或先提取再赋值。也是把上游节点输出转换成 AGENT / REPLY prompt 可读变量系统字段的桥接节点。
6
-
7
- `shulex-gpt` 会在进入 CHAT_FLOW 前抽取已配置的变量系统字段。这些字段进入图后已可读取;如果需要从 `AttachmentSummary` 等字段中继续提取新参数,仍可使用本节点。
8
-
9
- VARIABLE_PROCESS 不向用户发送消息,也不等待用户输入;它处理的是当前上下文里已经存在的文本、变量或上游节点结果。需要向用户补收字段时用 `QUESTION`。
10
-
11
- ## 创建方式
12
-
13
- ```json
14
- {
15
- "key": "process_variables",
16
- "type": "variable_process",
17
- "additional_data": [{"node": "previous_reply"}],
18
- "variables": [
19
- {"alias": "order_no_value", "name": "order_no", "describe": "Order number", "type": "string"}
20
- ],
21
- "assignments": [
22
- {"id": "assign_order", "operation": "OVER_WRITE", "source": ["SELF", "order_no_value"], "target": [["SYSTEM", "Custom", 2742]]}
23
- ]
24
- }
25
- ```
26
-
27
- ## 创建参数
28
-
29
- | 字段 | 说明 |
30
- |------|------|
31
- | variables / extracts | 提取项,source 写 name/describe/type;需要后续引用时加 alias,compile 后 alias 会变成完整 graph 的 UUID `id` |
32
- | assignments | 赋值项,必填 id/operation/target |
33
- | additional_data | 提取时额外拼接的上游变量选择器数组;source 可写 selector 简写,完整 graph 为 `additionalData: [["SYSTEM",...], ["TOOL",...], ["NODE",...]]` |
34
- | use_chat_history | 是否使用历史 |
35
-
36
- ## Edges
37
-
38
- 仅 `SOURCE`。
39
-
40
- ## Resource Dependencies
41
-
42
- 赋值到变量系统字段前查:
43
-
44
- ```bash
45
- npx --yes @shulex/cxclawctl@latest api list-ai-fields --pretty
46
- ```
47
-
48
- ## 限制
49
-
50
- - 至少有 extract 或 assignment。
51
- - source extract 必须有 `name/describe/type`,需要后续引用时必须有 `alias`;已有完整 graph 必须有 `id/name/describe/type`,其中 `id` 通常是前端或 builder 生成的 UUID。
52
- - extract `name` 格式 `/^(?!\d)[A-Za-z0-9_-]{1,64}$/`。
53
- - assignment 必须有 `id/operation/target`。
54
- - `CONSTANT` 操作必须有非空 `source`。
55
- - `additional_data` 只能引用上游 `SYSTEM` / `TOOL` / `CODE` / `AGENT` / `HUMAN_REVIEW` / `NODE`,用于补充提取上下文;不引用 `SELF`。
56
- - `additional_data` 不使用工具状态 `ACTION_STATUS_NAME`;`AGENT` selector 只能引用当前上游路径已连通 nextStep 的 `params[].name`。
57
- - `assignments[].source` 在 `OVER_WRITE` 时可引用上游变量,或用 `["SELF", "<extract_alias>"]` 引用本节点刚提取的值;compile 后会替换成 extract UUID `id`。
58
- - `assignments[].source` 不使用工具状态 `ACTION_STATUS_NAME`。
59
- - `assignments[].target` 只能是 `SYSTEM` 变量二维数组,如 `[["SYSTEM", "Custom", 2742]]`。
60
- - AGENT / REPLY prompt 需要稳定使用上游输出时,先在这里把 `TOOL` / `EXTRACT` / `CODE` / `AGENT` selector 赋值到 `SYSTEM` 变量系统字段,再让下游节点通过 `ai_field_ids` 读取。
61
- - 下游引用本节点提取结果时用 `["EXTRACT", "<this_node_id>", "<extract_id>"]`;第三段是 extract `id`,不是 `name`。
62
- - 收集用户输入优先用 `QUESTION(VARIABLE)`。
63
- - 已有变量系统字段可直接用 `SYSTEM` selector 读取;需要二次提取、转换或赋值时再使用本节点。
64
-
65
- ## Common Mistakes
66
-
67
- - 新建图继续使用即将下线的 `VARIABLE_EXTRACT` / `VARIABLE_ASSIGNMENT`。
68
- - 只想问用户信息却用变量处理节点。
69
- - 用 extract `name` 引用输出,例如 `["EXTRACT", node_id, "order_no"]`;source 用 `alias`,完整 graph 用 UUID `id`。
70
- - 需要给 AGENT / REPLY prompt 使用的上游输出,没有先赋值到 SYSTEM 变量系统字段。
@@ -1,53 +0,0 @@
1
- # CHAT_FLOW
2
-
3
- 把流程描述、流程图或已有 CHAT_FLOW 修改需求,整理成可校验、可部署的 `chatFlowGraph`。
4
-
5
- ## 先判定模式
6
-
7
- | 输入特征 | 模式 | 先读 |
8
- |---------|------|------|
9
- | 文字描述 / 流程图截图 / PDF | 新建 | `workflow.md`、`node-selection.md`;图片输入再读 `visual-translation.md` |
10
- | 已有 CHAT_FLOW agent_id / graph + 修改要求 | 增量 | `workflow.md`、`graph-spec.md` |
11
-
12
- 新建 / 增量模式确定后:
13
-
14
- 1. 先用 `node-selection.md` 选节点类型,不要凭节点名猜。
15
- 2. 对每个最终会使用的候选节点读取对应 `nodes/<node>.md`;字段、出边和 runtime 行为按节点文档确认。节点文档是功能合同,不是 PE/Role 提示词。
16
- 3. 新建图或用户明确提供 source 时,写 source JSON 前读 `graph-spec.md`;已有 CHAT_FLOW 的增量修改先按 `workflow.md` 执行 `inspect`,完整 graph 就是后续修改、校验和保存草稿的输入。
17
- 4. 只读将要使用的 `nodes/<node>.md`,按节点说明填写字段。
18
- 5. 编译、校验、写回、发布流程按 `workflow.md` 执行。
19
-
20
- 任何节点只要出现必填配置、输入字段、输出字段、变量 selector、资源 id、模板、知识库目录、工具参数、状态分支或等待语义无法从现有上下文唯一确定,都必须提出 `open_questions`,列出“新建资源/变量、使用哪个现有项、转人工或不迁该自动化”等可执行选项和影响;用户确认前不得凭名称相似自动绑定,不得伪造输出字段、资源 id、TOOL 出参路径、CODE 输出字段或下游分支。
21
-
22
- 新建图禁止使用即将下线节点。订单号/订单信息场景禁止选择 `COLLECT_ORDER`;除非是在维护已有图并必须保留
23
- 已存在行为,否则应使用变量系统订单字段、`QUESTION(VARIABLE)`、`TOOL`、`IF_ELSE` / 工具状态分支和必要的
24
- `AGENT` 组合表达。
25
-
26
- 新建图的变量节点只选择 `VARIABLE_PROCESS`;`VARIABLE_EXTRACT` / `VARIABLE_ASSIGNMENT` 只维护已有图。INTENT 节点的 `prompt` 是可选的全局识别 PE,默认使用 `None`;`history_round_limit` 默认使用 `None`,交由后端默认策略。只有当用户需求明确包含跨意图的统一识别规则、边界或优先级时才生成 prompt;生成后先向用户确认是否启用,用户不需要时保留 `prompt: null`。
27
-
28
- 只要候选里出现 AGENT,必须读 `nodes/agent.md` 的 `next_steps And Transfer Tools`:`next_steps` 只生成流程内跳转工具,AGENT 自主转人工使用标准 `transferHuman` LibraryBlock,不能把转人工配置成 nextStep。不要把 AGENT 当作任意业务步骤的默认容器。
29
-
30
- ## 工作文件
31
-
32
- - source:`/workspace/state/agent-builder/chatflow/*_source.json`(新建或整图重建时)
33
- - 大图 fragment / integration:`/workspace/state/agent-builder/chatflow/<task>/blocks/`
34
- - graph:`/workspace/state/agent-builder/chatflow/*_graph.json`(已有图 inspect 后的 patch 也属于此类)
35
- - state:`/workspace/state/agent-builder/chatflow/`,跨轮复用,文件名稳定
36
- - outputs:`/workspace/outputs/agent-builder/chatflow/`,只放用户明确需要下载或留档的文件
37
- - 需要用户确认后继续执行的配置、source、graph 必须写 state,不写 tmp
38
-
39
- 继续已有 CHAT_FLOW 时,先 `inspect` 拉当前完整 graph,并将它作为本次维护的工作文件。
40
-
41
- ## 固定原则
42
-
43
- - 新建图使用 source JSON;整体重建可使用 source -> compile;已有 CHAT_FLOW 的增量修改使用 inspect 得到的完整 `chatFlowGraph`,包括新增/删除节点、修改边和调整条件分支。
44
- - 大图先按已确认的流程块完成 keyed source fragment,再合并为唯一 source 并只编译一次;不合并已编译 graph。
45
- - 固定动作使用 `chatflow_builder.py` CLI,不写临时 Python 脚本,不 import builder 函数。
46
- - `compile` / `validate` 有 error 必须先修同一个 source 或 graph 文件,再重新执行。
47
- - 新建、发布前必须让用户确认;增量修改默认保存草稿,不发布。
48
- - 工具状态确定后必然发送的固定回复优先查模板并使用 `REPLY(TEMPLATE)`;若固定话术是某个上下文判断节点
49
- 的 PE/输出约束,则逐字保留在该节点实际使用的文本字段,不能仅因它是固定话术就强制改成 REPLY。
50
- 需要用户选择并分支时用 `QUESTION(USER_REPLY)`。
51
- - CHAT_FLOW 不感知 `metadata` 路径;禁止在任何节点 prompt、selector、条件、工具入参或代码输入里写 `metadata.xxx`。变量系统字段通过 ai-fields 暴露,使用 `SYSTEM` selector 或相应节点的 ai-field 绑定;支持变量模板的节点可直接引用已连通上游 selector。
52
- - AGENT / `REPLY(PROMPT)` 通过 `ai_field_ids` 读取变量系统字段;需要稳定使用上游输出时,先用 `VARIABLE_PROCESS` 赋值到 SYSTEM 字段。`REPLY(DYNAMIC_TEMPLATE)` 与 LLM 模板按各自节点文档使用 `[[var:...]]`。
53
- - 图中不能有环;多轮追问交给节点 `maxRounds`,不要在图层回连上游节点。