返回 法律问答系统(llm-wiki-v1)课程讲义

大模型知识问答的困境 —— RAG 的局限与 llm-wiki 理念

所属课程:《法律问答系统(llm-wiki)》八讲课件 · 第 1/8 讲 定位:一门纯概念课。这一讲不出现任何代码,只回答一个关键问题——为什么要做”非 RAG”的知识问答系统?

本讲目标:

  1. 说清大模型直接做领域知识问答的三个致命短板;
  2. 看懂 RAG 的标准流程,以及它解决了什么、遗留了什么;
  3. 理解 llm-wiki 的核心主张:在”摄入期”把知识编译成资产,查询期只做”定位 + 综合”;
  4. 拿到贯穿全课程的一张理念对比表。

1. 直接用大模型做”劳动法问答”,会发生什么

假设我们什么都不做,只把问题丢给一个通用大模型(比如 qwen-max),请它回答”公司拖欠工资,我能主张什么”。

它会遇到三个天然短板:

短板表现例子
领域知识不足训练语料里法条不完整、不精确、还常是旧版本劳动法与劳动合同法在补偿/解除规则上细节极多,模型记不全、记不准
时效性差知识截止到训练时刻,无法更新新司法解释、新法规出台后,模型一无所知
幻觉难溯源回答流畅但可能”一本正经地编”编出一条不存在的”《劳动法》第 XX 条”,且无法回溯到原始出处给用户看

第三点对法律场景尤其致命:用户需要知道”你凭什么这么说”,回答必须能定位到具体法条原文,而不是一段笼统的漂亮话。

一句话:LLM 是”能说”,不是”知道”。它缺少一块可靠、可更新、可溯源的外部知识


2. 主流解法:RAG(检索增强生成)

业界最通用的补法叫 RAG(Retrieval-Augmented Generation,检索增强生成),思想非常朴素:

提问时,先把最相关的文档片段”现找”出来塞给模型,让模型照着这些资料回答

典型流程四步:

用户问题


① 切块      把知识文档切成固定长度的小片段(chunk)


② 向量化    用 embedding 模型把每个 chunk 编码成向量,存进向量数据库


③ 检索      把 query 也编码成向量,在库里找最相似的 top-k 个 chunk


④ 拼接+生成 把 top-k 块拼进 prompt,交给 LLM 综合成答案

RAG 解决了两件事:

  • 给模型”临时喂资料”,弥补领域知识与时效不足;
  • 模型是基于给定资料作答,幻觉显著下降

它已成为当下知识问答的事实标准——所以本系统说自己不是 RAG,反而需要解释清楚:RAG 好端端的,为什么要绕开它?


3. RAG 的四个隐忧

RAG 思路没毛病,但工程上它默认了几件事,恰恰在这些默认上会出问题:

3.1 切块破坏语义(最致命)

RAG 按固定长度(如 500 token)硬切文档。对散文还行,对法律条文是灾难:

  • 一条法条常常横跨几个 chunk → 检索到的是半条法条
  • 语义上应当成一体的”第四十六条+第四十七条”被切散,检索各自为战;
  • chunk 是机器定的,不是语义定的——它不尊重”章→节→条”的天然边界。

3.2 向量库是黑盒,不可读、不可审计

向量是一串浮点数,谁也读不出它”存了什么”。于是:

  • 没法人工检查”知识库里到底有没有这条规则、版本对不对”;
  • 检索”为什么召回它”无法向业务/用户解释;
  • 内容有错,很难定位到是哪一段引入的

对法律这类需要可追溯、可复核的知识,这是硬伤。

3.3 一问一检、答完即弃,知识不”复利”

RAG 每次提问都临时检索一遍,检索完就丢弃。结果:

  • 同一问题答一百遍,检索成本付一百遍;
  • 检索到好的答案,不会沉淀成更好的知识
  • 系统没有”越用越聪明”,只有”每次重新来一遍”。

3.4 答案与出处两张皮

RAG 常把引用做得像”事后贴标签”:模型先答完,再把 top-k chunk 的标题列在末尾。但 model 到底用了哪一块,很难保证——**引用可信度存疑 **。


4. llm-wiki 的解法:把知识”提前编译”成资产

llm-wiki 的想法是:与其每次提问时临时翻书,不如先花力气把书读透、编成目录,提问时只查目录 + 照着目录里的原文作答。

对照上面的四个隐忧,它的立场是:

RAG 的默认llm-wiki 的反问
查询时才处理文档为什么不在摄入期就把文档读好?
按长度切 chunk为什么不按”章→节→条”这样的语义单位切?
向量做知识载体为什么不用可读、可审计的 Markdown + JSON?
问一次丢一次为什么不让每次问答都沉淀、复用?

于是知识处理被拆成两个阶段,而不是一个”查询时临场表演”的过程:

┌─────────────  摄入 Ingest(一次性"编译")  ─────────────┐
│  法律 PDF ──► 结构化知识点(一条法条一个知识点)           │
│              + 知识点之间的关联图谱(谁引用谁、谁和谁相关) │
│              + 可读的 Wiki 页面集(人也能翻)             │
└─────────────────────────────────────────────────────────┘
                           │ query(提问)

┌─────────────  查询 Query(只做"定位 + 综合")  ──────────┐
│  用户问题 ──► 定位最相关的知识点 ──► LLM 依据原文综合回答    │
│              (可读可审计)        (带引用、可回溯)       │
└─────────────────────────────────────────────────────────┘

几个关键词:

  • 知识点(Knowledge Point):最小知识单元。本系统把《劳动合同法》《劳动法》切成 205 个知识点,一条法条对应一个,而不是定长 chunk。粒度是语义天然边界
  • 关联图谱:知识点之间是谁引用谁、谁与谁主题相近,显式建成边。这给”多跳推理”铺好了路(后续第 6 讲细讲)。
  • 向量只当”辅助”,不当”仓库”:向量仍参与召回打分,但知识本体是 Markdown + JSON,可读、可审计。
  • 问答复利:这套架构天然为”随问答复利积累”服务——每回答一次,人对知识结构的理解可以加深、可以补图补概念。

5. 理念对比总表(本讲要背下来的一张表)

维度RAGllm-wiki(本项目)
知识构建时机查询时临时检索摄入时提前”编译”
知识单元定长 chunk法条级知识点(语义边界)
知识载体向量数据库Markdown 页面 + JSON 图谱
可读可审计差(向量不可读)好(人可直接翻 Wiki)
查询行为检索 → 拼接 → 推理定位知识点 → 综合生成
引用可信度事后贴标签回答依据给定知识点,可回溯原文
知识是否复利是(可随问答积累完善图谱)
适用文档类型任意(散文、网页、问答…)结构化强、颗粒分明的领域文档(法律/规章/操作手册)

注意最后一行:llm-wiki 不是万能替代 RAG。对”资料库是海量网页、没有稳定结构”的场景,RAG 仍是首选。本系统的取舍成立的前提是—— 知识是两部结构规整的法律,天然存在”章→节→条”的划分。想清楚”什么知识适合哪种方案”,比只会一种方案更重要。


6. 从理念到本课程项目

后续 7 讲,就是把这个理念落地成真实系统的过程:

  • 摄入期:PDF → 205 个知识点 → 概念增强 → 关联图谱 → Wiki(第 3、4 讲)
  • 查询期:混合检索定位 → 图谱多跳补全 → 大模型综合生成(第 5、6 讲)
  • 工程闭环:短期记忆 / CLI / 日志 / 测试(第 7 讲)
  • 如何证明它够好:recall@k 与 Ragas 评估(第 8 讲)

每讲都会带大家走进 app/ 下的真实代码,对照”理念 → 实现”一条线看下来。


企业常见面试问答

Q1:你们项目为什么不用 RAG?它比 RAG 好在哪?

因为我们处理的是结构化强、语义边界分明的法律文档(章→节→条)。RAG 默认在查询时临时检索、按长度硬切 chunk,会切开法条、破坏语义;向量库又是黑盒,对法律这种需要可溯源、可复核的场景不可审计。llm-wiki 在摄入期就把文档”编译”成* 法条级知识点 + 关联图谱 + 可读 Wiki*,查询时只做”定位知识点 + 让 LLM 依据给定知识点作答”,引用可回溯、知识可随问答复利积累。要强调:这不是全盘否定 RAG,而是针对该领域文档特性的取舍

Q2:你说的”法条级知识点”和 RAG 的 chunk 有什么本质区别?

chunk 是按长度(token 数)机械切分,是机器定的、与语义无关,一条法条可能被切成好几段;知识点按”章→节→条”这类**文档的天然语义边界 **切分,每个知识点是完整的一句话义单元(本系统 205 个 = 劳动合同法 98 条 + 劳动法 107 条)。前者是”碎纸片”,后者是” 一张张完整卡片”。

Q3:怎么解决大模型的幻觉和”编法条”问题?

三层手段:① 检索侧先定位到具体知识点,用真实法条原文兜底;② 生成侧用领域 prompt 约束——” 仅依据【参考资料】作答、不要臆造法条、给不出就如实说明”;③ 回答末尾列出引用的全部知识点标题 ,且每条知识点携带来源文件名+行号,可回溯到原文,让引用可被核验。

Q4:为什么向量检索仍被保留了?你不是说不把向量当仓库吗?

区别在于角色:向量不做知识库的存储载体,只做召回时的一种相似度打分手段,与 BM25 关键词走双路、再用 RRF 融合排序(第 5 讲细讲)。知识本体始终是可读的 Markdown + JSON。这样既保住”可读可审计”,又借助向量抓住了”用户换一种说法也能命中” 的语义召回能力——两全。


下一讲:第 2 讲 系统总览与工程环境