Learn
RAG/25-vertical-scenarios

垂直场景:代码与法律

通用 RAG 套路在垂直领域常水土不服。本章以代码与法律两个高频场景为例,讲适配要点。

1. 代码检索 RAG

代码不是散文,切分时不能破坏语法结构:

# 按「函数 / 类」为粒度切分,而非固定字数
def chunk_by_symbol(code):
    return [extract_function(fn) for fn in parse_ast(code)]
 
# 用代码专用 Embedding(如针对代码的向量模型)效果更好
vec = code_embedding(chunk)
ℹ️代码要保留结构上下文

光给一个函数往往不够——调用方、所属模块、依赖才决定含义。父子文档(第 14 章)在此特别有用:检索命中函数,返回其所在文件上下文。

要点:

  • 优先按 AST/符号切分,避免截断语句
  • 用代码专用嵌入模型,而非通用文本模型
  • 检索时附上文件路径、导入关系,帮模型定位

2. 法律合同 RAG

法律文本长、条款相互引用、措辞严谨,错一字意思全变:

# 保留条款编号层级,检索结果带出处条款号
hits = retrieve(question, k=5)
for h in hits:
    print(h["clause_no"], h["text"])   # 如「第 8.2 条」

要点:

  • 切分保留条款边界,别把「8.2 条」拆成两半
  • 答案必须精确引用条款号,便于律师核验
  • 长合同用父子文档:命中小条款,返回整章上下文防断章取义
⚠️法律场景严禁编造条款

幻觉在医疗/法律下后果严重。务必开第 20 章的 Self-RAG 反思校验,且生成时强制「每条结论附条款号」,无出处即拒答。

3. 两场景对比

维度代码 RAG法律 RAG
切分粒度函数 / 类(AST)条款(保留编号)
嵌入模型代码专用通用或更细粒度
核心风险结构丢失、缺上下文断章取义、幻觉条款
必做校验父子文档补全上下文强制引用 + 反思校验
💡垂直领域先改切分与嵌入

多数垂直 RAG 的失败不在模型,而在「切分破坏了领域结构」。先按领域结构切分、选对嵌入模型,再用指标验证。

🎯练习

拿一段你熟悉的代码文件,分别用「固定 200 字切分」和「按函数切分」建库,问一个需要跨函数理解的问题,对比两种召回的答案质量。

小结

  • 代码 RAG:按 AST/符号切分 + 代码专用嵌入 + 父子文档补上下文
  • 法律 RAG:保留条款边界、强制引用条款号、开反思校验防幻觉
  • 两类场景失败多在「切分破坏结构」,先改切分与嵌入
  • 下一章讲如何低成本自动构建评测集,持续衡量这些适配效果 →