背景与目标
宽表已包含工单名、工单总结(长文本)和聊天记录。传统 SQL 或关键词搜索无法有效挖掘语义层面的重复模式、根因及最佳实践。
本方案目标:
- 从月度 2 万条(或百万级)工单文本中自动发现 10--30 个知识主题
- 生成可读知识卡片(主题名称、典型描述、根因、推荐方案)
- 每条结论附原始工单 ID,确保可追溯
- LLM 调用次数固定,与样本量无关
- 整体处理时间:2 万条数据小于 5 分钟
核心技术组合
- Embedding:BGE-M3(1024 维)
- 聚类:k-LLMmeans(GitHub: jairoadiazr/k-LLMmeans)
- 向量存储:ClickHouse 原生 Array(Float32) + HNSW 索引
- Agent 框架:LangGraph(封装为 KnowledgeMiningTool)
处理位置
- Embedding 与 k-LLMmeans 聚类:全部在 Agent 侧(Python 进程)完成
- ClickHouse:仅负责数据拉取、向量持久化存储及 HNSW 索引
向量存储设计(推荐独立表)
sql
CREATE TABLE IF NOT EXISTS work_order_embeddings (
order_id String,
dt Date,
embedding Array(Float32),
cluster_id UInt32 DEFAULT 0,
cluster_summary String
) ENGINE = MergeTree()
ORDER BY (dt, order_id);
ALTER TABLE work_order_embeddings
ADD INDEX embedding_hnsw embedding TYPE hnsw('L2Distance') GRANULARITY 1000;
系统架构图
graph TB subgraph ClickHouse[ClickHouse 存储层] A[宽表 wide_work_order_table\n工单名 + 总结 + 聊天记录] B[向量表 work_order_embeddings\nembedding + HNSW索引] end subgraph Agent[Agent 侧 Python + LangGraph] C[KnowledgeMiningTool] D[BGE-M3 Embedding\nsentence-transformers] E[k-LLMmeans 聚类引擎] F[LLM\nQwen2.5 / DeepSeek / Grok\n仅生成质心总结] end subgraph Output[输出层] G[知识维度报告\nMarkdown/PDF\n知识卡片 + 可追溯ID] end A -->|1. 时间范围查询| C C -->|2. 拉取文本| D D -->|3. 生成向量| B B -->|4. 读取向量| E E -->|5. LLM 生成质心| F E -->|6. 写入聚类结果| B E -->|7. 生成报告| G
处理流程图
flowchart TD Start[用户输入时间范围] --> S1[Agent 调用 ClickHouse\n拉取工单文本数据] S1 --> S2[Agent 侧 BGE-M3\n批量生成 Embedding\n拼接工单名 + 总结 + 聊天记录] S2 --> S3[向量写入 ClickHouse\nwork_order_embeddings 表\n支持增量] S3 --> S4[Agent 侧 k-LLMmeans\nn_clusters=15~20\nLLM 仅对质心调用\n与样本量无关] S4 --> S5[聚类结果写回 ClickHouse\ncluster_id + cluster_summary] S5 --> S6[LLM 生成知识报告\n每簇包含:\n主题名称\n占比\n根因与方案\nTop5 工单ID] S6 --> End[知识维度报告完成\n可存入知识库 RAG] classDef agent fill:#e8f5e9,stroke:#388e3c classDef ck fill:#fff3e0,stroke:#f57c00 class S1,S3,S5 ck class S2,S4,S6 agent
主要优势
- 聚类结果可解释且 100% 可追溯
- 支持百万级扩展(分批 Embedding + 子采样)
- LLM 调用次数固定,成本可控
- 可直接集成现有 ClickHouse 宽表
该方案基于前期讨论的所有关键技术细节,可直接使用