【银行合规 RAG 实战】一文搞懂 KM 知识库:内规外规、1-hop、Neo4j 侧车、RRF 融合检索 【银行合规 RAG 实战】一文搞懂 KM 知识库内规外规、1-hop、Neo4j 侧车、RRF 融合检索文章目录【银行合规 RAG 实战】一文搞懂 KM 知识库内规外规、1-hop、Neo4j 侧车、RRF 融合检索前言为什么你的合规知识库「能搜到但说不清」一、KM 是什么——不是临时 RAG 文件夹二、为啥要分内规和外规——不是爱折腾是法律效力不同三、三维度理解 KM存 · 找 · 连四、Phase 1 是啥——先拿 PG 验证别急着上 Neo4jPhase 1 交付清单Phase 1 刻意不做五、1-hop 是啥——关系网上只扩一圈六、Neo4j 侧车是啥——边斗模式不是换引擎侧车三原则七、RRF 是啥——多路检索的「排名投票器」问题两路分数没法直接比RRF 思路不看分数看排名手算例子RRFRAG检索优化三要素Recall召回 Rank排序 Filter过滤三维度完整大纲维度一Recall 召回粗筛1.专业解释2.大白话3.生活案例4.典故诠释广收博采萧何收秦典籍维度二Rank 排序精排1.专业解释2.大白话3.生活案例4.典故诠释量材而授官诸葛亮选贤排等维度三Filter 过滤降噪1.专业解释2.大白话3.生活案例4.典故诠释删繁就简孔子删诗书整套RRF流程典故总结项目里的真实状态踩坑预警 ⚠️八、全链路串起来一次 002 监管对标检索九、给架构师的决策备忘十、总结一张表带走前言为什么你的合规知识库「能搜到但说不清」做过银行合规 / 监管科技项目的同学大概率踩过这个坑向量检索明明命中了《反洗钱管理办法》却漏掉了外规里点名引用的《客户尽职调查实施细则》——不是文档没入库是**「谁引用谁、谁约束谁」这条链系统里根本没有**。我们团队在做AI 合规审查平台的 KMKnowledge Management模块演进时从「能存能搜」走向「能连能溯」中间一堆术语——内规外规、Phase 1、1-hop、Neo4j 侧车、RRF——把产品和开发都绕晕了。这篇文章用一个真实项目的演进路径把这些概念一次讲透。不讲空理论直接对照代码和架构决策。一、KM 是什么——不是临时 RAG 文件夹KM Knowledge Management知识管理模块在本项目里是合规知识的正式资产层建库 → 上传 PDF/DOCX → 异步解析切块 → 向量化 → 混合检索存储职责PostgreSQL库 / 文档 / 知识 / 版本 / 元数据MinIO原文 PDF、DOCXMilvus语义切块 embeddingkm_chunksAPI 挂载在/api/v1/km/*和业务场景002 监管对标、005 制度比对通过library_ids绑定要查哪些库。和infrastructure.rag的区别KM有 UI、有生命周期draft → published → offline、长期沉淀RAG 基础设施只管某个 Milvus collection 的 ingest retrieve适合临时文件一句话需要「合规人员日常维护的知识库」→ 走 KM场景里临时扔几份 docx 做一次性检索 → 走 infrastructure.rag。二、为啥要分内规和外规——不是爱折腾是法律效力不同KM 用kb_scope三分法KB_SCOPE_INTERNALinternal# 内规KB_SCOPE_EXTERNALexternal# 外规/监管KB_SCOPE_BUSINESSbusiness# 业务知识/案例外规内规谁定法律、监管规章本行制度、细则问什么监管要求什么我们行怎么做、怎么查违反后果行政处罚、刑事责任内部问责 监管穿透大白话外规是交通法规内规是公司《员工用车管理办法》——图书馆不会把宪法和公司手册塞同一格。合规链条图谱要连的那条「纲」外规要求 → 内规落实 → 检查点可验证《吕氏春秋》讲「纲举目张」——外规到内规的引用链是「纲」Milvus 里散落的 chunk 是「目」。没有纲目再多也是碎页。三、三维度理解 KM存 · 找 · 连维度关键词现状典故怎么存PG MinIO Milvus✅ 已有《永乐大典》分册典藏怎么找关键词 向量✅ 已有按图索骥怎么连引用/约束关系网❌ Phase 1 待建纲举目张今天的缺口解析管线已经抽出了cross_references、条款references但关系散落在 JSON 里没持久化。搜得到相似段落答不了「这条内规依据哪条外规」。四、Phase 1 是啥——先拿 PG 验证别急着上 Neo4j分期演进不推翻现有 KM阶段做什么Neo4jPhase 0需求对齐、OpenSpec、画关系图不部署Phase 1PGkm_relation边表 规则抽取 检索 1-hop不上Phase 2Neo4j 侧车 三通道检索 RRF启用Phase 3多跳、可视化、场景深度集成增强Phase 1 交付清单存关系PG 表km_relationCITES / SUPERSEDES / REQUIRES抽关系正则匹配「依据《××办法》」等publish 后自动入库扩检索expand_relationstrue做 1-hop 扩展验价值002 监管对标 PoChit5 目标提升 ≥ 15%Phase 1 刻意不做❌ 部署 Neo4j❌ LLM 全量建图❌ 前端图谱可视化❌ 多跳 Cypher设计哲学先拿绳子把书串起来别急着建整座地图馆。五、1-hop 是啥——关系网上只扩一圈hop 在关系图里走几步边外规 A ──CITES──→ 内规 B ──CITES──→ 内规 C深度搜到 A 时能看到0-hop默认只有 A 自己的 chunk1-hopA 直接引用的 B2-hopA B CB 引用的Phase 1 的expand_relations就是1-hop向量命中 knowledge A → 查 km_relationA 有没有 CITES 边指向 B、C → 把 B、C 的 title excerpt 拼进 A 的检索上下文 → 前缀标记 [关联]下游 SKILL schema 不变为啥只做 1-hopPG 一条WHERE source_knowledge_id A就够实现轻避免关系爆炸2-hop 可能从 10 条边炸到 100 条002 场景里「外规点名内规」往往是直接引用1-hop 够用大白话搜到一本书顺带把参考文献的封面摘要贴过来参考文献的参考文献那是 Phase 2 的事。六、Neo4j 侧车是啥——边斗模式不是换引擎侧车Sidecar 在现有 KM 主链路旁边挂一个专门管关系的存储不替换PG / MinIO / Milvus。KnowledgeService.publish() ├── KmIndexer → Milvus 向量索引 主车 └── GraphIngest → Neo4j 图谱写入 侧车侧车三原则并行写入主流程不阻塞Milvus 成功、Neo4j 失败 → 文档仍可发布后台 Celery 重试检索多一路不替代原路向量只在 MilvusNeo4j不双写 embedding只管结构边可开关KM_GRAPH_NEO4J_ENABLEDfalse时 no-opKM 照常跑src/infrastructure/ ├── rag/ # Milvus已有 └── neo4j/ # 图侧车Phase 2 ├── client.py ├── ingest.py └── retriever.py30 秒版Neo4j 是「关系地图馆」KM 是「合规图书馆」——主馆找段落侧馆追引用链。七、RRF 是啥——多路检索的「排名投票器」RRF Reciprocal Rank Fusion倒数排名融合问题两路分数没法直接比通道分数示例量纲向量语义0.82相似度 0~1BM25 关键词12.5另一套不能直接加权平均。RRF 思路不看分数看排名对排名第rank从 0 开始的结果RRF分 1 / (k rank 1) # 项目里 k 60同一条结果在语义榜第 2、关键词榜第 5→ 两边 RRF 分相加越高越靠前。手算例子搜「客户尽职调查」排名语义BM251文档 A文档 B2文档 B文档 A文档 A语义第 1 关键词第 2 → 两路都靠前 →综合第一文档 C只在语义榜 → 一路分 → 靠后直觉两路都认的结果最靠谱。RRFRAG检索优化三要素Recall召回 Rank排序 Filter过滤三维度完整大纲每一模块统一结构专业定义 大白话解释 生活案例 古代典故诠释维度一Recall 召回粗筛1.专业解释向量库/全文索引中基于用户问题做初步批量检索从海量文档里快速捞出一批候选文本。目标是高召回率宁可多捞不能漏掉有用信息属于大范围粗筛选。2.大白话先大面积撒网把所有沾边的资料全部找出来保证有用内容不会被漏掉暂时不考虑垃圾内容。3.生活案例在图书馆查找历史资料先把所有带“三国”关键词的书籍一次性全部借出来先保证相关书籍一本不落暂时不区分内容好坏。4.典故诠释广收博采萧何收秦典籍刘邦攻入咸阳众人争抢金银财宝唯独萧何第一时间把秦朝天下律令、户籍、地理档案全部收藏。思想内核Recall不求精简只求全覆盖。先把全部潜在有用素材尽数收拢避免关键资料遗失为后续筛选打下基础。维度二Rank 排序精排1.专业解释对召回得到的候选片段做相关性打分依据语义相似度、上下文匹配度重新调整先后顺序把最贴合用户提问的内容排在最前面压低无关内容优先级。2.大白话渔网捞上来一堆鱼之后按照个头大小、新鲜程度重新排队最符合需求的放到首位。3.生活案例拿到几十本三国书籍后逐一翻看内容把专门讲赤壁之战的书本排到最前面人物传记放到后面无关杂书继续往后挪。4.典故诠释量材而授官诸葛亮选贤排等诸葛亮治理西蜀广揽人才之后再依据才干高低划分等级把懂军政的重臣置于决策前排普通官吏位列其后。思想内核完成粗召回之后再依据匹配度分出先后次序让最匹配上下文的信息优先被大模型读取。维度三Filter 过滤降噪1.专业解释对排序后的结果做截断与清洗剔除重复内容、冗余文本、低质量噪声片段控制上下文长度只保留高价值信息防止无关内容干扰大模型输出。2.大白话排好队之后把杂鱼、水草、重复的垃圾全部丢掉只留下几条核心大鱼精简素材总量。3.生活案例排好书籍顺序后删掉内容重复的小册子剔除野史谣言只保留正史原文精简到三五本核心资料再开始阅读。4.典故诠释删繁就简孔子删诗书上古史料浩如烟海孔子广泛收集文献之后删减虚妄、重复、冗余篇章最终整理出精简版《诗经》《尚书》。思想内核召回求全、排序求准、过滤求精砍掉噪声冗余避免上下文被无效信息污染。整套RRF流程典故总结Recall萧何收秦图籍广搜集不漏关键材料Rank孔明铨选官吏排次序优先匹配内容Filter孔子删定六经去糟粕精简上下文噪声。整体思想先撒网、再排队、最后除杂草这就是RAG检索链路RRF三层核心逻辑。需要我把这段整理成考试简答题精简版吗项目里的真实状态踩坑预警 ⚠️基础设施层HybridRetriever— 有真 RRF# src/infrastructure/rag/retrieval/retriever.py_RRF_K60classHybridRetriever:Semantic BM25 hybrid retrieval ... Uses Reciprocal Rank Fusion (RRF) to merge semantic and keyword scores. KM 的SearchService— 目前不是真 RRFPG hits vector hits拼接去重PG 固定 0.5 分PG 先命中还会压制向量分。Phase 2 规划三路 RRFPG 关键词 ──┐ Milvus 向量 ──┼──→ RRF 融合 ──→ 最终结果 Neo4j 图检索 ──┘大白话两个评委打分体系不同RRF 说——别管具体多少分看各自排名第几两边都靠前的赢。八、全链路串起来一次 002 监管对标检索用户: 外规第12条影响哪些内规?SearchServiceMilvus 向量召回PG 关键词兜底expand_relations 1-hop CITESPhase 2: RRF 融合KnowledgeRetrievalSkill002 clause_alignment 条款对齐Phase 1 今天能做的事向量搜相似内规 ✅沿 CITES 1-hop 拉回「被外规点名」的内规 ✅新能力三路 RRF Neo4j 多跳 ⏳ Phase 2九、给架构师的决策备忘问题建议第一期要不要上 Neo4j不要PG 边表先验证关系怎么抽规则优先「依据/参照/按照《》」LLM 辅助可选检索怎么扩1-hop CITES默认关闭保兼容向量还要不要要图谱是叠加层不替代 Milvus业务场景怎么绑库library_ids硬绑别只靠kb_scope十、总结一张表带走术语人话阶段KM合规知识库正式资产层已有内规/外规监管定的 vs 本行落地的已有Phase 1PG 存关系 规则抽取 1-hop首批交付1-hop关系网只扩一圈邻居Phase 1Neo4j 侧车图库伴跑不替主存储Phase 2RRF多路检索按排名融合HybridRetriever 已有KM 三路 Phase 2口语收尾版咱们 KM 已经能把合规文档存好、切好、搜到相似片段——这是「永乐大典」加「按图索骥」。缺的是「纲举目张」那条纲。Phase 1 用 PG 先把绳结打上Phase 2 Neo4j 侧车 RRF 三路融合才是完整版图。如果这篇文章对你有帮助欢迎 点赞 · ⭐ 收藏 · 评论区交流你在做 RAG / 知识图谱 / 合规场景时遇到过「向量搜到了但引用链断了」的情况吗评论区聊聊你的解法。转载声明本文为原创文章如需转载请联系作者获得授权并注明出处。