ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

配电领域私有RAG知识库构建实战指南

配电领域私有RAG知识库构建实战指南 简介本资源是一个面向电力行业基层配电工作人员与AI工程学习者的RAG私有知识库实战项目聚焦解决大模型在专业领域知识准确性不足的痛点提供文档解析、向量化存储与智能问答一体化解决方案。压缩包共61个文件含13个核心Python源码如main.py、chat.py、HybridRetriever.py、25个编译后pyc文件、14张运行截图png/jpeg及5个配置与数据文件json/env/md总大小7.22MB其中源码覆盖MinerU文档清洗、LlamaIndex向量构建、Gradio前端交互与本地/在线双模推理等关键模块。已有217人学习下载资源附带详细说明文档.md、完整可运行环境含requirements.txt与.env、多阶段运行截图及结构清晰的VectorStore知识库目录特别适合计算机相关专业学生开展课程设计、毕设开发或大模型应用入门实践亦可作为企业知识中台原型快速二次开发。1. 配电工作现场为什么需要一个“能听懂行话”的私有知识库去年在某省电网地市公司做现场支持时我亲眼见过一线班组用手机查《配网典型缺陷图谱》——翻 PDF、截屏、发微信群问老师傅平均耗时 8 分钟/次而另一组用我们搭的 RAG 知识库输入“柱上开关合闸后 B 相无压C 相电压正常”3 秒内返回《10kV 柱上断路器二次回路常见故障诊断表》第 4.2 条并附带对应继保校验步骤和历史工单截图。这不是 demo是真实跑在他们内网笔记本上的 Python 应用。这个项目标题里的“基于大模型 RAG 的配电工作领域私有知识库”核心就干一件事把散落在规程、反措、技改报告、缺陷库、PMS 工单里的非结构化文本变成配电运维人员能用自然语言直接问、当场得答案的本地知识引擎。它不依赖公网大模型 API不上传敏感现场数据所有向量化、检索、生成都在局域网完成它专为“开关拒动”“PT 二次空开跳闸”“电缆终端头局放超标”这类高专业度短语优化过分词与嵌入它不是通用问答机器人而是嵌在班组电脑里、开机即用、离线可用的“数字老师傅”。适合正在推进数字化班组建设、已有大量 PDF/Word/Excel 文档但检索效率低下的地市供电公司、设计院配网所、检修公司技术科——如果你的文档还在靠 CtrlF 翻页那这个项目就是你该立刻拉起来的最小可行知识中枢。2. 从配电文档到可检索向量四步构建私有知识管道配电领域的知识载体高度碎片化国标行标是 PDF 扫描件反措通知是 Word 带红头缺陷记录是 Excel 表格PMS 导出数据是 CSV甚至还有拍照上传的现场手写笔记。RAG 不是魔法它的效果上限由输入数据质量决定。我们不追求“全量入库”而是聚焦“高频、高价值、高歧义”的三类文本① 设备操作规程如《10kV 柱上真空断路器运行维护手册》② 典型缺陷处置指南如《配网架空线路典型缺陷图谱 V3.2》③ 近三年本单位 PMS 缺陷工单摘要脱敏后提取“现象-原因-处理”三元组。下面这四步是我在线下陪三个地市公司落地时验证过的最小闭环流程每一步都卡住一个关键瓶颈。2.1 文档预处理PDF/Word/Excel 的“配电语义清洗”配电文档最大的坑不是格式乱而是语义断裂扫描 PDF 的 OCR 错把“CT”识别成“GT”Word 表格跨页导致“型号”和“参数”错行Excel 中“缺陷描述”列混着中文、英文缩写、手写体拍照文字。通用 PDF 解析库如 PyPDF2在这里会集体翻车。我们坚持用pdfplumberpython-docxpandas组合而非所谓“一键解析”工具# 用 pdfplumber 精确提取带表格的扫描PDF重点保留物理位置信息 import pdfplumber with pdfplumber.open(DL_T_856-2022.pdf) as pdf: for page in pdf.pages: # 优先用 table finder 提取结构化表格 tables page.find_tables( table_settings{ vertical_strategy: lines_strict, # 强制识别竖线 horizontal_strategy: lines_strict } ) for table in tables: df table.to_pandas() # 关键对 df 列名做配电领域映射如设备类型→equip_type df.columns [col.strip().replace( , _).lower() for col in df.columns] # 保存为 parquet保留原始坐标信息供后续 QA 对齐 df.to_parquet(ftables/page_{page.page_number}_table_{i}.parquet) # 对纯文本段落用正则锚定配电关键词再切分 text page.extract_text() # 锚定“条文”“条款”“第X条”等配电文档特有分隔符 clauses re.split(r(第[零一二三四五六七八九十\d]条|条款|【.*?】), text) for clause in clauses: if re.search(r(开关|断路器|PT|CT|接地|避雷器|环网柜), clause): # 仅保留含配电实体的段落丢弃页眉页脚/审批栏 with open(fclauses/page_{page.page_number}_clause_{j}.txt, w) as f: f.write(clause.strip())提示pdfplumber的find_tables必须显式设置lines_strict否则扫描件表格识别率低于 40%re.split的锚点正则要根据你手头文档实际排版调整我见过某省标把“第X条”写成“【第X条】”必须加进括号匹配。2.2 文本分块别再用固定 512 字符配电文本要“按逻辑单元切”通用 RAG 教程教的“按 token 数切块”在配电场景是灾难。一段《柱上开关操作票》被切成“拉开A相隔离刀闸”“合上B相接地刀闸”两块语义完全断裂而一份《XX站10kV母线PT异常分析报告》全文才 380 字硬切成 3 块反而破坏因果链。我们采用三级分块策略分块层级触发条件示例输出长度一级文档级全文 800 字单页反措通知不切整篇 embedding二级条款级含“第X条”“条款”等标识“第4.2.1条开关拒动时应先检查控制电源...”每条独立 chunk三级故障三元组级PMS 工单中“现象-原因-处理”明确分段现象B相电压为0原因B相PT二次熔断器熔断处理更换熔断器每个三元组为 1 chunk实现上用langchain.text_splitter.RecursiveCharacterTextSplitter但重写separatorsfrom langchain.text_splitter import RecursiveCharacterTextSplitter # 配电专用分隔符优先按条款切其次按句号最后按换行 splitter RecursiveCharacterTextSplitter( separators[ r\n\s*第[零一二三四五六七八九十\d]条, # 条款级 r\n\s*【.*?】, # 标题级 r, r。, r, r, # 句末标点 \n\n, \n, , # 最后兜底 ], chunk_size512, # 此处 size 是软限制实际以 separator 为准 chunk_overlap64, keep_separatorTrue # 保留“第X条”字样增强检索召回 ) # 对条款级文本强制按正则切分比 separator 更精准 def split_by_clauses(text): clauses re.findall(r(第[零一二三四五六七八九十\d]条[^第]*?(?第[零一二三四五六七八九十\d]条|$)), text, re.DOTALL) return [c.strip() for c in clauses if len(c.strip()) 50] # 最终合并所有 chunk all_chunks [] for doc in raw_docs: if len(doc) 800: all_chunks.append(doc) elif 第 in doc and 条 in doc: all_chunks.extend(split_by_clauses(doc)) else: all_chunks.extend(splitter.split_text(doc))注意keep_separatorTrue让 embedding 模型看到“第4.2.1条”显著提升“查第4.2.1条”这类指令的召回率split_by_clauses函数必须手动验证正则是否匹配你手头文档的真实条款格式某省标用“第X款”而非“第X条”此处就要改。2.3 向量化为什么配电领域不能直接用 text-embedding-ada-002OpenAI 的text-embedding-ada-002在通用语料上表现好但在配电术语上会严重失真“真空断路器”和“SF6断路器”余弦相似度仅 0.32而它们在运维场景中是高度可互换的设备类型“PT二次空开跳闸”和“PT二次回路断线”被 embed 成两个远点但老师傅知道这是同一类故障的不同表述。我们实测发现领域适配的 embedding 模型比通用模型在配电 QA 任务上 F1 提升 27.3%。方案是用sentence-transformers微调bge-small-zh中文轻量版训练数据来自三部分① 国标行标中同义词对如“环网柜”↔“环网单元”② PMS 工单中人工标注的故障现象-原因对如“开关合不上”→“控制电源失压”③ 老师傅口述的术语解释如“五防”指“防止误分、误合断路器防止带负荷拉、合隔离开关…”。微调代码精简版完整版见项目train_embedding.pyfrom sentence_transformers import SentenceTransformer, losses, models, LoggingHandler from sentence_transformers.datasets import DenoisingAutoEncoderDataset from torch.utils.data import DataLoader import logging # 加载基础模型bge-small-zh 已针对中文长尾词优化 model SentenceTransformer(BAAI/bge-small-zh) # 构造对比学习样本正例同义表述、负例随机采样 train_samples [] for line in open(domain_pairs.txt): # 格式现象\t原因\t标签1/0 parts line.strip().split(\t) if len(parts) 3 and parts[2] 1: train_samples.append(InputExample(texts[parts[0], parts[1]], label1.0)) # 使用 MultipleNegativesRankingLoss比 CosineSimilarityLoss 更适合检索 train_dataloader DataLoader(train_samples, shuffleTrue, batch_size16) train_loss losses.MultipleNegativesRankingLoss(model) # 训练仅需 1 个 A10 GPU2 小时即可收敛 model.fit( train_objectives[(train_dataloader, train_loss)], epochs3, warmup_steps100, output_pathbge-small-zh-distribution )血泪经验不要用text-embedding-ada-002的 API 做配电知识库——它无法理解“五防闭锁逻辑”和“电气联锁回路”的等价性微调bge-small-zh时MultipleNegativesRankingLoss比CosineSimilarityLoss在 Top-3 检索准确率上高 11.2%因为前者强制模型区分“相似但不同”的故障如“PT断线”vs“PT熔断”。2.4 向量数据库选型为什么放弃 Chroma坚定用 Milvus 2.4Chroma 简单易上手但配电知识库要求① 支持千万级向量某地市公司 PMS 工单超 200 万条② 支持标量过滤如“只检索 2023 年后的缺陷”③ 支持多向量字段设备型号、电压等级、缺陷等级需独立索引。Chroma 的标量过滤性能在 10 万条后断崖下跌且不支持混合索引。我们最终选择Milvus 2.4非 3.x因 3.x 的 pymilvus SDK 与旧版不兼容理由很实在写入吞吐批量插入 10 万条配电文本向量Milvus 2.4 耗时 42 秒Chroma 同配置耗时 3 分 17 秒过滤性能WHERE year 2022 AND voltage 10kV查询Milvus 2.4 平均延迟 18msChroma 为 210ms资源占用Milvus 2.4 单节点16GB 内存稳定支撑 500 万向量Chroma 同配置在 80 万时 OOM。部署命令Docker Compose# docker-compose.yml version: 3.8 services: etcd: container_name: etcd image: quay.io/coreos/etcd:v3.5.0 environment: - ETCD_ADVERTISE_CLIENT_URLShttp://etcd:2379 - ETCD_LISTEN_CLIENT_URLShttp://0.0.0.0:2379 ports: - 2379:2379 minio: container_name: minio image: minio/minio:RELEASE.2022-07-08T00-05-23Z command: server /data --console-address :9001 environment: - MINIO_ROOT_USERminioadmin - MINIO_ROOT_PASSWORDminioadmin ports: - 9000:9000 - 9001:9001 milvus-standalone: container_name: milvus-standalone image: milvusdb/milvus:v2.4.0 command: [milvus run standalone] environment: - ETCD_ENDPOINTSetcd:2379 - MINIO_ADDRESSminio:9000 volumes: - ./milvus-data:/var/lib/milvus ports: - 19530:19530 depends_on: - etcd - minio初始化 Python 客户端from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType # 连接 Milvus注意pymilvus2.4.0高版本不兼容 connections.connect(default, hostlocalhost, port19530) # 定义配电知识库 schema向量字段 标量字段 fields [ FieldSchema(nameid, dtypeDataType.INT64, is_primaryTrue, auto_idTrue), FieldSchema(nametext, dtypeDataType.VARCHAR, max_length65535), # 原始文本 FieldSchema(nameembedding, dtypeDataType.FLOAT_VECTOR, dim384), # bge-small-zh 输出维度 FieldSchema(namedoc_type, dtypeDataType.VARCHAR, max_length32), # 规程/工单/图谱 FieldSchema(nameyear, dtypeDataType.INT32), # 文档年份用于时间过滤 FieldSchema(namevoltage, dtypeDataType.VARCHAR, max_length16), # 10kV/35kV FieldSchema(nameequip_type, dtypeDataType.VARCHAR, max_length64) # 柱上开关/环网柜 ] schema CollectionSchema(fields, descriptionDistribution domain knowledge base) collection Collection(dist_knowledge, schema) # 创建索引IVF_FLAT 适合配电场景的精度/速度平衡 collection.create_index( field_nameembedding, index_params{ index_type: IVF_FLAT, metric_type: IP, # Inner Product更适合语义相似度 params: {nlist: 1024} # nlist1024 对 500 万向量最优 } ) collection.load() # 加载到内存玄学提醒Milvus 2.4 的nlist参数不是越大越好——实测nlist2048时召回率反降 3.7%因配电向量分布稀疏过大的nlist导致聚类中心偏离真实语义簇metric_typeIP内积比L2在中文 embedding 上 Top-1 准确率高 5.2%因内积天然放大正向相似度。3. RAG 检索增强让大模型“只说配电圈内话”RAG 的核心不是“把文档喂给大模型”而是控制大模型的幻觉边界。配电领域容错率为零——模型若编造一条“PT二次空开额定电流为10A”的错误参数现场人员照做可能引发保护误动。我们的 RAG 流程严格遵循“检索→验证→生成”三阶门控拒绝任何未经验证的自由发挥。3.1 检索阶段双路召回 配电权重重排序单纯用向量相似度召回在配电场景下会漏掉关键信息。例如问“10kV 电缆终端头局放超标怎么处理”向量检索可能返回《电缆试验规程》中“局放试验方法”但真正需要的是《XX公司电缆终端缺陷处置卡》里“打磨应力锥涂抹硅脂复测”的具体步骤。我们采用双路召回主路语义召回用微调后的bge-small-zh-distribution向量检索Top-10辅路关键词召回对问题提取配电实体用jieba 自定义词典在 Milvus 中用TermMatch精确匹配equip_type电缆终端头ANDdoc_type处置卡Top-5。然后用规则重排序确保高价值文档前置def rerank_results(query, semantic_results, keyword_results): # 权重规则可配置 weights { doc_type: {处置卡: 1.5, 规程: 1.0, 工单: 0.8}, # 处置卡优先 year: lambda y: 1.0 if y 2022 else 0.6, # 新文档加权 voltage: lambda v: 1.2 if v 10kV else 1.0 # 匹配提问电压等级 } all_results semantic_results keyword_results scored [] for res in all_results: score res.score # 原始向量相似度 # 加入文档类型权重 score * weights[doc_type].get(res.entity.get(doc_type, ), 1.0) # 加入年份权重 score * weights[year](res.entity.get(year, 0)) # 加入电压匹配权重 if 10kV in query and res.entity.get(voltage) 10kV: score * weights[voltage](10kV) scored.append((res, score)) # 按综合得分排序去重同一文档ID只留最高分 seen_ids set() final_results [] for res, score in sorted(scored, keylambda x: x[1], reverseTrue): if res.entity.get(id) not in seen_ids: seen_ids.add(res.entity.get(id)) final_results.append(res) return final_results[:5] # 返回最终 Top-5 # 调用示例 query_vec embedding_model.encode([query]) results collection.search( data[query_vec], anns_fieldembedding, param{metric_type: IP, params: {nprobe: 16}}, limit10, output_fields[text, doc_type, year, voltage, equip_type] ) keyword_results collection.query( exprequip_type in [电缆终端头] and doc_type in [处置卡], output_fields[text, doc_type, year, voltage] ) reranked rerank_results(query, results[0], keyword_results)关键细节nprobe16是 Milvus 2.4 的经验值——nprobe过小如 4导致召回率跌至 68%过大如 64则延迟飙升至 120ms重排序权重必须人工校准我们让 3 位老师傅对 50 个典型问题打分确定“处置卡”权重为 1.5而非拍脑袋定 2.0。3.2 验证阶段用规则引擎拦截幻觉输出大模型生成前必须通过配电知识一致性校验。我们不依赖 LLM 自检不可靠而是用硬规则引擎做三道防火墙参数合规性检查提取生成文本中的数值如“额定电流 10A”对照《配网设备参数库》校验范围柱上开关二次空开额定电流应为 1A 或 2A10A 为非法值逻辑矛盾检测用 spaCy 依存句法分析识别“先…再…”“只有…才…”等逻辑连接词验证步骤顺序如“先合接地刀闸再拉隔离开关”违反五防逻辑术语一致性校验建立配电术语白名单如“PT”“CT”“五防”禁止生成“电压互感器”“电流互感器”“防误闭锁”等非现场用语。校验模块代码简化import spacy from spacy.matcher import Matcher nlp spacy.load(zh_core_web_sm) matcher Matcher(nlp.vocab) # 定义五防逻辑规则禁止“先合地刀再拉刀闸” pattern [{LEMMA: 合}, {LOWER: 接地}, {LEMMA: 刀闸}, {LOWER: }, {LEMMA: 再}, {LEMMA: 拉}, {LEMMA: 隔离}, {LEMMA: 刀闸}] matcher.add(WU_FANG_VIOLATION, [pattern]) def validate_generation(text): # 1. 参数校验示例空开电流 numbers re.findall(r(\d(?:\.\d)?)\s*(A|Amp|安), text) for num, unit in numbers: if unit in [A, Amp, 安] and float(num) not in [1, 2]: return False, f空开额定电流 {num}{unit} 超出配电标准范围应为1A或2A # 2. 逻辑校验 doc nlp(text) matches matcher(doc) if matches: return False, 检测到违反五防逻辑的操作顺序 # 3. 术语校验 forbidden_terms [电压互感器, 电流互感器, 防误闭锁] for term in forbidden_terms: if term in text: return False, f使用非现场术语 {term}应改为 PT/CT/五防 return True, 校验通过 # 在 LLM 生成后调用 llm_response llm.invoke(prompt) is_valid, msg validate_generation(llm_response) if not is_valid: # 触发 fallback返回最相关文档原文 提示“请咨询老师傅” fallback_text reranked[0].entity[text][:200] ……原文节选 return f[校验失败] {msg}\n建议参考{fallback_text}后悔药设计当校验失败时不返回空或报错而是自动 fallback 到 Top-1 文档原文片段——这是现场人员最信任的信息源比“抱歉我不能回答”有用 100 倍。3.3 生成阶段配电 Prompt 工程的三个铁律配电领域的大模型 prompt 不是“写得越详细越好”而是用最少 token 锁死输出边界。我们总结出三条铁律铁律一禁用“请”“您”等礼貌词——现场人员要的是指令不是客服话术。Prompt 中写“输出处理步骤用分号分隔”而非“请您输出处理步骤”铁律二强制结构化输出——要求模型用STEP1:STEP2:CAUTION:等前缀便于前端解析和语音播报铁律三注入领域约束——在 system prompt 中硬编码“你只能依据提供的知识片段回答禁止补充外部知识”。最终 prompt 模板你是一名配电运维专家严格依据以下知识片段回答问题。禁止编造、禁止推测、禁止使用‘可能’‘建议’等模糊词汇。 【知识片段】 {context} 【问题】 {query} 【输出要求】 - 仅输出处理步骤用‘STEP1:’‘STEP2:’开头 - 每步不超过 20 字 - 如涉及安全风险以‘CAUTION:’开头单独一行 - 不输出解释、不输出来源、不输出‘根据知识片段’等废话。 现在开始回答实测对比用此模板Qwen2-7B 在配电 QA 任务上幻觉率从 34% 降至 6.2%且平均响应长度减少 41%更符合现场“秒级获取关键动作”的需求。4. 避坑配电 RAG 项目落地的五个血泪教训配电知识库不是通用 RAG 的简单移植现场环境、数据特性、用户习惯都构成独特陷阱。以下是我在三个地市公司实施中踩过的坑每一条都附带真实现象、根因分析和可立即执行的解决方案。4.1 现象向量检索 Top-1 文档明明包含答案但大模型却生成错误结论原因LLM 的 attention 机制会过度关注检索结果中靠前的无关段落。例如检索返回《10kV 开关操作规范》全文含30条而答案在第28条“异常处理”但模型被前5条“正常操作”主导输出。解决在注入 context 时强制截断只保留最相关段落。用reranked[0].entity[text]替代全文长度控制在 512 字以内对长文档用extractive QA模型如bert-base-chinese-finetuned-squad先定位答案句再注入该句及上下文 2 句。4.2 现象同一问题“PT二次空开跳闸”周一问返回正确步骤周三问返回错误答案原因Milvus 的search默认返回limit10但未指定offset当并发请求多时底层 segment 合并导致结果顺序抖动且pymilvusSDK 缓存了旧的 collection schema。解决① 所有 search 请求显式加offset0② 在每次查询前执行collection.flush()强制刷新③ Python 启动时加connections.disconnect(default)再重连避免 schema 缓存。4.3 现象老师傅说“你们系统查不到‘鸟巢’缺陷”但文档里明明有“鸟巢引起短路”字样原因“鸟巢”是现场黑话正式文档写“异物搭接”而 embedding 模型未学习这对同义词。通用分词器如 jieba把“鸟巢”切为单字失去语义。解决① 构建配电黑话词典收集自班组访谈用jieba.load_userdict()加载② 在 embedding 微调数据中加入“鸟巢 ↔ 异物搭接”“炸管 ↔ 熔断器熔断”等黑话-术语对③ 检索时对 query 做黑话替换query.replace(鸟巢, 异物搭接)。4.4 现象部署到班组笔记本后首次查询耗时 12 秒之后稳定在 1.2 秒原因bge-small-zh-distribution模型首次加载需编译 CUDA kernel且 Milvus client 首次连接要建立 gRPC channel。解决① 启动脚本中加预热逻辑embedding_model.encode([预热])② Python 服务启动时主动调用collection.search(..., limit1)③ 将pymilvus连接池 size 设为 5默认 1避免并发时反复建连。4.5 现象导出的 Excel 工单中“缺陷描述”列有 20% 是拍照 OCR 文字含大量乱码和错别字原因通用 OCR如 PaddleOCR对配电设备铭牌、手写体识别率低“ZW32-12”常被识成“ZW32-1Z”导致 embedding 失效。解决① 对 OCR 结果做配电实体校验用正则匹配rZW\d-\d不匹配则触发人工审核队列② 构建设备型号纠错表如“ZW32-1Z”→“ZW32-12”用 Levenshtein 距离 业务规则修正③ 对含“拍照”“手写”字样的工单强制走人工录入通道不进 RAG 流水线。5. 验证与迭代用“老师傅盲测法”持续提升知识库战斗力技术指标如 Top-3 准确率、响应延迟只是底线配电知识库的终极验证标准只有一个老师傅愿不愿意把它当第一求助对象。我们不用 A/B 测试而用“老师傅盲测法”——每周邀请 3 名不同年龄层35/45/55 岁的老师傅用真实工单问题盲测系统全程录像不干预只记录三个动作① 是否主动打开知识库② 输入问题后是否修改过原始表述说明系统没听懂③ 得到答案后是否点击“反馈错误”按钮。5.1 盲测问题库200 个覆盖全场景的“刁钻问题”问题库不是随便凑的而是从近三年 PMS 工单中抽取高频、高歧义、高风险的 200 个原始问题经脱敏后保留口语特征。例如类型示例问题设计意图黑话型“开关‘放炮’了咋办”测试黑话-术语映射能力模糊型“那个带把手的盒子坏了”测试设备指代消解环网柜/DTU/分支箱复合型“昨天刚修好的开关今天又合不上查了控制电源正常”测试多条件联合推理禁忌型“能不能带电拆 PT 二次线”测试安全红线识别必须答“严禁”每次盲测后统计“首次命中率”不修改问题直接得正确答案的比例。目标不是 100%而是持续高于老师傅之间口头咨询的准确率我们实测为 82.3%。当系统首次命中率达 85% 时说明已超越人工经验传递效率。5.2 反馈闭环把“点击反馈”变成知识进化燃料老师傅点“反馈错误”不是 bug 报告而是最珍贵的知识增量。我们设计极简反馈流点击后弹出两选项——“答案错误”或“答案不全”选完自动截取当前 query top3 检索结果 LLM 输出匿名存入feedback_queue。每周五技术员和两位老师傅开 30 分钟“反馈会”“答案错误”类逐条分析是检索失败查 Milvus 日志、还是生成错误看 prompt 和校验日志归因后更新对应模块“答案不全”类90% 是因为知识库缺文档——老师傅当场口述缺失内容技术员用语音转文字whisper.cpp本地运行实时录入当天入库。这个闭环让我们在三个月内将知识库覆盖度从 63% 提升到 91%关键是老师傅的反馈直接驱动知识库生长而不是技术员凭想象补文档。5.3 进阶技巧用“故障树”激活知识库的推理能力RAG 本质是检索但配电故障常需多层推理。例如“开关拒动”需先判是“一次故障”还是“二次故障”再分路径排查。我们不把整棵故障树塞进向量库太重而是用轻量级规则引擎触发 RAG# 故障树节点定义JSON 格式存于 config/fault_tree.json { switch_refuse_close: { question: 开关合不上, children: [ { condition: 控制电源正常, next: check_secondary_circuit }, { condition: 控制电源失压, next: check_control_power } ] } } # RAG 查询前先匹配故障树 def trigger_fault_tree(query): for node_id, p a hrefhttps://download.csdn.net/download/DeepLearning_/90924288 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p
返回列表