@shulex/cxclawctl 0.1.2 → 0.1.3
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/dist/cli.js +2202 -127
- package/dist/cli.js.map +1 -1
- package/package.json +19 -6
- package/capabilities.lock.json +0 -898
- 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,38 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Render a concise Delivery progress / deliverables summary."""
|
|
3
|
-
import os, sys
|
|
4
|
-
sys.path.insert(0, os.path.join(os.environ.get("SOLVEA_LIB_DIR", os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "__lib__"))), "skill-runtime"))
|
|
5
|
-
from bootstrap import * # noqa: F401,F403
|
|
6
|
-
|
|
7
|
-
import json
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
STATE_FILE = STATE_DIR / "progress.json"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def main() -> None:
|
|
14
|
-
if not STATE_FILE.exists():
|
|
15
|
-
print("Delivery progress not found. Run `python3 /skills/delivery/scripts/plan.py --init` first.")
|
|
16
|
-
return
|
|
17
|
-
state = json.loads(STATE_FILE.read_text(encoding="utf-8"))
|
|
18
|
-
print("# Delivery Progress Summary")
|
|
19
|
-
print(f"- status: `{state.get('status', 'empty')}`")
|
|
20
|
-
print(f"- tenant: `{state.get('tenant') or '-'}`")
|
|
21
|
-
print(f"- brand: `{state.get('brand_name') or '-'}`")
|
|
22
|
-
intent = state.get("intent") or {}
|
|
23
|
-
kb = state.get("kb") or {}
|
|
24
|
-
regression = state.get("regression") or {}
|
|
25
|
-
if intent.get("classification_report_path"):
|
|
26
|
-
print(f"- classification report: `{intent['classification_report_path']}`")
|
|
27
|
-
if intent.get("created_log_path"):
|
|
28
|
-
print(f"- created log: `{intent['created_log_path']}`")
|
|
29
|
-
if kb.get("qa_plan_path"):
|
|
30
|
-
print(f"- kb qa plan: `{kb['qa_plan_path']}`")
|
|
31
|
-
if regression.get("report_html"):
|
|
32
|
-
print(f"- regression HTML: `{regression['report_html']}`")
|
|
33
|
-
if regression.get("report_md"):
|
|
34
|
-
print(f"- regression MD: `{regression['report_md']}`")
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if __name__ == "__main__":
|
|
38
|
-
main()
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""按意图配额从历史会话抽样 → 标准 cases.json(喂给 batch_test.py)。
|
|
3
|
-
|
|
4
|
-
CLI:
|
|
5
|
-
--total 100 整批配额(按意图分配,floor + 余数 +1)
|
|
6
|
-
--intents A --intents B 指定意图(可重复);不传则 list_intents() 全量
|
|
7
|
-
--mode single|multi single=只取首条 USER;multi=取所有 USER(默认 single)
|
|
8
|
-
--with-metadata 抽样时把会话首轮 metadata 带进 case;默认不带
|
|
9
|
-
--max-conversations 50 每个意图 limit
|
|
10
|
-
--output cases.json 输出 cases.json 路径
|
|
11
|
-
|
|
12
|
-
stdout:完成 `Wrote {N} cases → {output}`;意图列表为空 → exit 2。
|
|
13
|
-
"""
|
|
14
|
-
|
|
15
|
-
import argparse
|
|
16
|
-
import json
|
|
17
|
-
import os
|
|
18
|
-
import sys
|
|
19
|
-
|
|
20
|
-
sys.path.insert(0, os.path.join(os.environ.get("SOLVEA_LIB_DIR", os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "__lib__"))), "skill-runtime"))
|
|
21
|
-
from bootstrap import * # noqa: F401,F403
|
|
22
|
-
from client import SolveaClient
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def allocate_quota(total: int, intents: list[str]) -> dict[str, int]:
|
|
26
|
-
"""按意图均匀分配总配额:floor 分配 + 余数从前往后各 +1。"""
|
|
27
|
-
n = len(intents)
|
|
28
|
-
if n == 0 or total <= 0:
|
|
29
|
-
return {it: 0 for it in intents}
|
|
30
|
-
base = total // n
|
|
31
|
-
extra = total - base * n
|
|
32
|
-
quota = {}
|
|
33
|
-
for i, it in enumerate(intents):
|
|
34
|
-
quota[it] = base + (1 if i < extra else 0)
|
|
35
|
-
return quota
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def _slim_messages(messages: list[str], mode: str) -> list[str]:
|
|
39
|
-
if mode == "single":
|
|
40
|
-
return messages[:1]
|
|
41
|
-
return messages
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def main():
|
|
45
|
-
parser = argparse.ArgumentParser(description="按意图配额抽历史会话 → cases.json")
|
|
46
|
-
parser.add_argument("--total", type=int, default=100, help="整批配额")
|
|
47
|
-
parser.add_argument("--intents", action="append", default=None,
|
|
48
|
-
help="指定意图名(可重复传);不传则 list_intents 全量")
|
|
49
|
-
parser.add_argument("--mode", choices=["single", "multi"], default="single",
|
|
50
|
-
help="single=只取首条 USER;multi=取所有 USER")
|
|
51
|
-
parser.add_argument("--with-metadata", action="store_true",
|
|
52
|
-
help="把会话首轮 metadata 带进 case")
|
|
53
|
-
parser.add_argument("--max-conversations", type=int, default=50,
|
|
54
|
-
help="每个意图最多拉多少 chat(API limit)")
|
|
55
|
-
parser.add_argument("--output", required=True, help="输出 cases.json 路径")
|
|
56
|
-
args = parser.parse_args()
|
|
57
|
-
|
|
58
|
-
client = SolveaClient()
|
|
59
|
-
|
|
60
|
-
intents = args.intents
|
|
61
|
-
if not intents:
|
|
62
|
-
all_resp = client.list_intents(category=None)
|
|
63
|
-
all_list = all_resp if isinstance(all_resp, list) else \
|
|
64
|
-
all_resp.get("data", all_resp.get("list", []))
|
|
65
|
-
intents = [it.get("name") for it in all_list
|
|
66
|
-
if isinstance(it, dict) and it.get("name")]
|
|
67
|
-
|
|
68
|
-
if not intents:
|
|
69
|
-
print("意图列表为空:list-intents 返回空,且 --intents 也未指定", file=sys.stderr)
|
|
70
|
-
sys.exit(2)
|
|
71
|
-
|
|
72
|
-
quota = allocate_quota(args.total, intents)
|
|
73
|
-
|
|
74
|
-
cases = []
|
|
75
|
-
for intent in intents:
|
|
76
|
-
want = quota.get(intent, 0)
|
|
77
|
-
if want <= 0:
|
|
78
|
-
continue
|
|
79
|
-
try:
|
|
80
|
-
convs = client.get_conversations_by_intent(intent, limit=args.max_conversations)
|
|
81
|
-
except Exception as e:
|
|
82
|
-
print(f" WARN: get_conversations_by_intent({intent}) failed: {e}",
|
|
83
|
-
file=sys.stderr)
|
|
84
|
-
convs = []
|
|
85
|
-
print(f" Loaded {len(convs)} conversations for intent '{intent}'",
|
|
86
|
-
file=sys.stderr)
|
|
87
|
-
# 取前 want 条(API 已经做了排序,这里不再重排)
|
|
88
|
-
for c in convs[:want]:
|
|
89
|
-
messages = _slim_messages(c.get("messages") or [], args.mode)
|
|
90
|
-
if not messages:
|
|
91
|
-
continue
|
|
92
|
-
case = {
|
|
93
|
-
"name": c.get("source_chat_id") or "",
|
|
94
|
-
"messages": messages,
|
|
95
|
-
"intent": intent,
|
|
96
|
-
"source_chat_id": c.get("source_chat_id", ""),
|
|
97
|
-
}
|
|
98
|
-
if args.with_metadata and c.get("metadata"):
|
|
99
|
-
case["metadata"] = c["metadata"]
|
|
100
|
-
cases.append(case)
|
|
101
|
-
|
|
102
|
-
os.makedirs(os.path.dirname(os.path.abspath(args.output)) or ".", exist_ok=True)
|
|
103
|
-
with open(args.output, "w", encoding="utf-8") as f:
|
|
104
|
-
json.dump(cases, f, ensure_ascii=False, indent=2)
|
|
105
|
-
print(f"Wrote {len(cases)} cases → {args.output}")
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
if __name__ == "__main__":
|
|
109
|
-
main()
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: kb-builder
|
|
3
|
-
description: Shulex 知识库搭建与原子管理能力。用于目录管理,问答、文档、网页和产品知识的导入、查询、更新、状态管理与导出,以及标签、隔离关键词和回复模板管理。
|
|
4
|
-
requires:
|
|
5
|
-
libs: [solvea-api]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Shulex KB Builder
|
|
9
|
-
|
|
10
|
-
本 skill 提供知识库的原子管理能力、场景 reference 路由和通用执行规范。
|
|
11
|
-
|
|
12
|
-
详细格式、字段、确认步骤和异常处理都以对应 reference 为准;只在命中具体场景时读取相关 reference。
|
|
13
|
-
|
|
14
|
-
## 能力路由
|
|
15
|
-
|
|
16
|
-
| 用户意图 | 读取的 interface / reference | 主要执行入口 |
|
|
17
|
-
|---|---|---|
|
|
18
|
-
| 网页建知识库、探查网站、设计目录 | [`interfaces/web-kb.md`](interfaces/web-kb.md)、[`references/directory.md`](references/directory.md) | `crawl_site.py`、`build_directory_plan.py`、`create_dirs.py` |
|
|
19
|
-
| 网页/Word/PDF 保留原文 | 本文件“来源模式” | `import_source_documents.py` |
|
|
20
|
-
| 网页/文件/工单整理成问答 | [`qa-quality.md`](references/qa-quality.md)、[`qa-from-web.md`](references/qa-from-web.md)、[`qa-from-help-center.md`](references/qa-from-help-center.md)、[`qa-from-pdf.md`](references/qa-from-pdf.md)、[`qa-from-tickets.md`](references/qa-from-tickets.md) | `extract_web_qa.py`、`batch_extract_ticket_qa.py`、`import_qa.py` |
|
|
21
|
-
| 上传已有 QA 计划 | [`references/upload.md`](references/upload.md) | `import_qa.py` |
|
|
22
|
-
| 回复模板库导入 | [`references/reply-template.md`](references/reply-template.md) | `import_templates.py` |
|
|
23
|
-
| 查看、更新、移动、删除或改变知识状态 | [`references/knowledge.md`](references/knowledge.md) | 按 reference 提供的固定入口 |
|
|
24
|
-
| 创建或更新产品知识 | [`references/product.md`](references/product.md) | `create-product-knowledge`、`update-product-knowledge` |
|
|
25
|
-
| 导出知识 | [`references/export.md`](references/export.md) | `export_knowledge.py` |
|
|
26
|
-
| 知识库目录管理 | [`references/directory.md`](references/directory.md) | 按 reference 提供的操作入口 |
|
|
27
|
-
| 标签管理 | [`references/tags.md`](references/tags.md) | 按 reference 提供的操作入口 |
|
|
28
|
-
| 隔离关键词及绑定 | [`references/isolation-keywords.md`](references/isolation-keywords.md)、[`references/tag-isolation-migration.md`](references/tag-isolation-migration.md) | 按 reference 提供的操作入口 |
|
|
29
|
-
|
|
30
|
-
## 来源模式
|
|
31
|
-
|
|
32
|
-
- 网页可保存为“网页”,也可整理成“问答”;Word/PDF 可保存为“文档”,也可整理成“问答”。
|
|
33
|
-
- 用户只提供网址或文件时,默认准备保留原文,但提交前询问:直接保存原始资料,还是整理成问答?用户已明确要求 FAQ/问答时不重复确认。
|
|
34
|
-
- 保留原文计划格式:`{"source": "URL 或本地文件路径", "dir_path": ["一级", "二级", "三级"]}`。多条记录组成 JSON 数组;Word/PDF 先通过 `read_file` 物化。
|
|
35
|
-
- 先运行 `import_source_documents.py --plan-file <plan>` 预览,用户明确确认后再加 `--execute`。脚本对本次计划内 URL 去重;历史重复由后端处理,执行结果保留后端响应。
|
|
36
|
-
|
|
37
|
-
## 基础查询入口
|
|
38
|
-
|
|
39
|
-
以下是本 skill 约定的只读查询入口,按需直接使用;涉及写入、查重、迁移、导出或结果校验时,再读取对应 reference。不要自行猜测其他 CLI 命令。
|
|
40
|
-
|
|
41
|
-
| 查询内容 | 固定命令 |
|
|
42
|
-
|---|---|
|
|
43
|
-
| 目录树 | `npx --yes @shulex/cxclawctl@latest api list-directories --pretty` |
|
|
44
|
-
| 知识列表 | `npx --yes @shulex/cxclawctl@latest api list-knowledge --type ALL --page-size 50 --page 1 --pretty` |
|
|
45
|
-
| 按关键词查知识 | `npx --yes @shulex/cxclawctl@latest api list-knowledge --keyword "关键词" --page-size 50 --pretty` |
|
|
46
|
-
| 单条知识 | `npx --yes @shulex/cxclawctl@latest api get-knowledge --id <knowledge_id> --type {QA,LEARN_SELF,FILE,WEBSITE,PRODUCT} --pretty` |
|
|
47
|
-
| 知识标签定义 | `npx --yes @shulex/cxclawctl@latest api list-knowledge-tags --pretty` |
|
|
48
|
-
| 隔离关键词 | `npx --yes @shulex/cxclawctl@latest api list-isolation-keywords --page-size 50 --page 1 --pretty` |
|
|
49
|
-
| 单条知识已绑定的隔离关键词 | `npx --yes @shulex/cxclawctl@latest api get-knowledge-isolation-keywords --id <knowledge_id> --type {QA,LEARN_SELF,FILE,WEBSITE,PRODUCT} --pretty` |
|
|
50
|
-
| 回复模板 | `npx --yes @shulex/cxclawctl@latest api list-templates --page-size 50 --pretty` |
|
|
51
|
-
|
|
52
|
-
`list-knowledge` 分页时先看返回的 `total`,再按需增加 `--page`;接口最大 `--page-size` 为 1000,不要用不断增大页大小的方式探测总量。
|
|
53
|
-
|
|
54
|
-
## 写入入口索引
|
|
55
|
-
|
|
56
|
-
以下能力仍由本 skill 提供,但必须先读对应 reference、展示变更计划并取得明确确认,再使用其中规定的参数:
|
|
57
|
-
|
|
58
|
-
| 写入能力 | 固定入口 | 必读 reference |
|
|
59
|
-
|---|---|---|
|
|
60
|
-
| 更新问答 / AI自学习 / 文档 / 网页 | `update-knowledge` / `batch-update-knowledge` / `update-document-content` | [`knowledge.md`](references/knowledge.md) |
|
|
61
|
-
| 创建或更新产品知识 | `create-product-knowledge` / `update-product-knowledge` / `batch-update-products` | [`product.md`](references/product.md) |
|
|
62
|
-
| 删除、移动、发布/下架、显示/隐藏各类知识 | `operate-knowledge` | [`knowledge.md`](references/knowledge.md) |
|
|
63
|
-
| 创建、重命名、移动或删除目录 | `create-folder` / `create_dirs.py` / `update-directory` / `move-directory` / `delete-directory` | [`directory.md`](references/directory.md) |
|
|
64
|
-
| 导入问答 | `import_qa.py` | [`upload.md`](references/upload.md) |
|
|
65
|
-
| 导入文档或网页 | `import_source_documents.py` | 本文件“来源模式” |
|
|
66
|
-
| 修改知识标签 | `edit-knowledge-tags` | [`tags.md`](references/tags.md) |
|
|
67
|
-
| 创建、修改、删除或绑定隔离关键词 | `create-isolation-keyword` / `update-isolation-keyword` / `delete-isolation-keyword` / `batch-update-isolation-keyword-bindings` | [`isolation-keywords.md`](references/isolation-keywords.md) |
|
|
68
|
-
| 创建、修改或删除回复模板 | `create-template` / `update-template` / `delete-templates` | [`reply-template.md`](references/reply-template.md) |
|
|
69
|
-
|
|
70
|
-
## 统一规则
|
|
71
|
-
|
|
72
|
-
- 客户侧始终使用产品界面术语,并跟随用户的界面语言:中文使用“AI自学习 / 问答 / 文档 / 网页 / 产品”,英文使用“AI Self-learning / Q&A / Documents / Websites / Products”;不要向客户暴露 `QA`、`KU`、`FILE`、`DOCUMENT`、`WEBSITE` 等内部字段。
|
|
73
|
-
- 网页和 Word/PDF 在执行前确认“保留原文”还是“整理成问答”;用户明确要求 FAQ/问答时才直接走 QA 流程。
|
|
74
|
-
- 未明确指定时,目录默认最多三级;超过三级只能在用户明确要求后通过 `--max-depth` 覆盖。
|
|
75
|
-
- 业务产物语言遵循:用户明确指定的产物语言 > 会话上下文中的用户界面语言偏好 > 用户当前消息语言。
|
|
76
|
-
- 所有线上写入(创建目录、上传知识、修改知识、关键词变更)都必须先展示计划并等待明确确认。
|
|
77
|
-
- 删除前必须展示影响范围,并获得同时表达“已知晓影响”和“确认删除”的强确认;简单的“确认 / OK / 可以”不足以授权删除。
|
|
78
|
-
- 具体格式、目录规则、查重、结果校验和 API 参数以对应 reference 为准;不要把这些细节复制到本文件。
|
|
79
|
-
|
|
80
|
-
根据用户明确意图读取上表对应 reference,再执行相应的原子能力。
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# QA Upload Interface
|
|
2
|
-
|
|
3
|
-
公开能力:合并 QA parts 或现成 qa_plan,并上传到 Shulex 知识库。
|
|
4
|
-
|
|
5
|
-
## Stable commands
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
# QA parts 合并 + dry-run
|
|
9
|
-
npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/import_qa.py \
|
|
10
|
-
--from-dir /workspace/tmp/kb-builder/qa_parts/ \
|
|
11
|
-
--dry-run
|
|
12
|
-
|
|
13
|
-
# 使用 dry-run 已落盘的 qa_plan 正式上传
|
|
14
|
-
npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/import_qa.py \
|
|
15
|
-
--qa-file /workspace/outputs/kb-builder/qa_plan_<ts>.json
|
|
16
|
-
|
|
17
|
-
# 或直接从 parts 合并并上传
|
|
18
|
-
npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/import_qa.py \
|
|
19
|
-
--from-dir /workspace/tmp/kb-builder/qa_parts/
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Input qa item
|
|
23
|
-
|
|
24
|
-
```json
|
|
25
|
-
{
|
|
26
|
-
"dir_path": ["Product Introduction", "Smart Plugs", "Kasa EP25"],
|
|
27
|
-
"question": "Kasa EP25 — What is the product overview?",
|
|
28
|
-
"answer": "Markdown answer"
|
|
29
|
-
}
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
`dir_path` 必须是目录名数组,每一段都是一个实际文件夹名称。禁止写成字符串路径,例如
|
|
33
|
-
`"/kb/B0117-03018-BK"` 或 `"Product Introduction/Speakers/B0117-03018-BK"`;这类输入会在
|
|
34
|
-
dry-run 阶段失败。上传到已有目录前先用 `list-directories` 确认真实目录层级,并按该层级写数组。
|
|
35
|
-
|
|
36
|
-
如果 `answer` 包含图片,必须保留 markdown 图片语法:
|
|
37
|
-
|
|
38
|
-
```markdown
|
|
39
|
-

|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
处理 DOCX / PDF / 网页来源时,优先使用能保留 markdown 图片的读取结果。不要把含图文档重新降级为
|
|
43
|
-
纯段落文本后再生成 QA,否则会丢失图片但上传仍可能成功。
|
|
44
|
-
|
|
45
|
-
## Guarantees
|
|
46
|
-
|
|
47
|
-
- `--from-dir` 会合并多个 QA part 并输出 `qa_plan_<ts>.json`。
|
|
48
|
-
- 正式上传前必须先 dry-run 并获得用户明确确认。
|
|
49
|
-
- `dir_path` schema 错误会在 dry-run 和正式上传前失败,不会创建目录。
|
|
50
|
-
- `answer` 使用 markdown;上传脚本透传 answer 内容,不会替调用方补图片。
|
|
51
|
-
|
|
52
|
-
## Non-guarantees
|
|
53
|
-
|
|
54
|
-
- 上传 API payload 结构不对调用方暴露。
|
|
55
|
-
- 去重和目录匹配细节归 kb-builder 内部维护。
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
# Web KB Interface
|
|
2
|
-
|
|
3
|
-
公开能力:从网站、产品站、帮助中心或文档站构建知识库目录与 QA,也支持在确认“保留网页原文”后创建网页资料。
|
|
4
|
-
|
|
5
|
-
网页地址先做模式确认:保留原始网页时使用
|
|
6
|
-
`../scripts/import_source_documents.py --plan-file <plan> --execute`;选择整理问答时才进入下面的 crawl → extract → import_qa 流程。
|
|
7
|
-
|
|
8
|
-
## Modes
|
|
9
|
-
|
|
10
|
-
```text
|
|
11
|
-
auto # 默认;适合网页整理的任务使用 crawl pipeline,其他任务走 legacy
|
|
12
|
-
crawl # 新脚本化网页 pipeline,可使用 Crawl4AI
|
|
13
|
-
legacy # 旧 reference + Tavily 工具路径,兼容历史行为
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Provider
|
|
17
|
-
|
|
18
|
-
```text
|
|
19
|
-
auto | crawl4ai | tavily
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
原则:
|
|
23
|
-
|
|
24
|
-
- Crawl4AI 只用于适合网页抓取/整理的任务。
|
|
25
|
-
- PDF / xlsx / qa_plan.json / 回复模板 / 导出 / 单条知识更新不使用 Crawl4AI。
|
|
26
|
-
- Crawl4AI 作为 Python 依赖运行在 sandbox 内的 skill 脚本中,不接入主服务全局工具。
|
|
27
|
-
- 默认 `provider=auto` 保持轻量兼容路径;需要 JS/动态页面抓取时显式使用 `provider=crawl4ai`。
|
|
28
|
-
|
|
29
|
-
## Stable commands
|
|
30
|
-
|
|
31
|
-
首版脚本化 pipeline 目标入口:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/crawl_site.py \
|
|
35
|
-
--url <source_url> \
|
|
36
|
-
--mode auto \
|
|
37
|
-
--provider auto \
|
|
38
|
-
--max-depth 3 \
|
|
39
|
-
--max-pages 100 \
|
|
40
|
-
--output /workspace/outputs/kb-builder/crawl_result_<ts>.json
|
|
41
|
-
|
|
42
|
-
npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/build_directory_plan.py \
|
|
43
|
-
--crawl-result /workspace/outputs/kb-builder/crawl_result_<ts>.json \
|
|
44
|
-
--output /workspace/outputs/kb-builder/directory_plan_<ts>.json
|
|
45
|
-
|
|
46
|
-
# 展示 directory_plan_<ts>.json,等待用户明确确认后写入 confirmed_tree
|
|
47
|
-
npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/build_directory_plan.py \
|
|
48
|
-
--crawl-result /workspace/outputs/kb-builder/crawl_result_<ts>.json \
|
|
49
|
-
--output /workspace/outputs/kb-builder/directory_plan_<ts>.json \
|
|
50
|
-
--write-confirmed-tree
|
|
51
|
-
|
|
52
|
-
npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/create_dirs.py
|
|
53
|
-
|
|
54
|
-
npx --yes @shulex/cxclawctl@latest script skills/kb-builder/scripts/extract_web_qa.py \
|
|
55
|
-
--crawl-result /workspace/outputs/kb-builder/crawl_result_<ts>.json \
|
|
56
|
-
--output-dir /workspace/tmp/kb-builder/qa_parts
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
兼容路径:
|
|
60
|
-
|
|
61
|
-
- `mode=legacy` 或 `provider=tavily` 时,按 `kb-builder/SKILL.md` 和对应 reference 走 legacy。
|
|
62
|
-
- `provider=crawl4ai` 只在 sandbox 依赖可用时执行;失败时输出显式错误,不把调用方切到其他 skill 内部实现。
|
|
63
|
-
|
|
64
|
-
## Outputs
|
|
65
|
-
|
|
66
|
-
- `crawl_result_<ts>.json`
|
|
67
|
-
- `directory_plan_<ts>.json`
|
|
68
|
-
- `/workspace/state/kb-builder/confirmed_tree.json`
|
|
69
|
-
- `/workspace/tmp/kb-builder/qa_parts/*.json`
|
|
70
|
-
|
|
71
|
-
## Guarantees
|
|
72
|
-
|
|
73
|
-
- 用户或上游 SOP 明确给出目录 schema 时,按输入 schema 生成目录树,不额外增加 Product Introduction 等默认根目录。
|
|
74
|
-
- 未给出目录 schema 时,使用 kb-builder 默认标准模板:Product Introduction / Brand Policy / Help Center / Pending Assignment。
|
|
75
|
-
- `Help Center` 仅在发现帮助中心/FAQ/文档站时创建。
|
|
76
|
-
- QA parts 兼容 `import_qa.py --from-dir`。
|
|
77
|
-
- `create_dirs.py` 前必须已经存在 `/workspace/state/kb-builder/confirmed_tree.json`;没有用户确认时不得写入或创建目录。
|
|
78
|
-
- 调用方不需要知道 crawl provider 内部策略。
|
|
79
|
-
|
|
80
|
-
## Non-guarantees
|
|
81
|
-
|
|
82
|
-
- 页面顺序不保证稳定。
|
|
83
|
-
- Markdown 具体格式不保证完全一致。
|
|
84
|
-
- Crawl provider 的具体实现不对调用方暴露。
|