技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

项目背景与痛点

法律信息检索是专业服务中最为棘手的场景之一。中国现行法律法规超过200部,加上各类司法解释、部门规章,普通人面对的法律信息量远超认知负荷。更麻烦的是,通用大模型在回答法律问题时经常"一本正经地胡说八道"——给出看似合理但已失效的法律条文,或混淆不同领域的法律概念。

billvsme/law_ai 针对这个矛盾提供了一套可落地的方案:用RAG(检索增强生成)将静态法律手册与动态网络搜索结合,让LLM的回答有据可查、可追溯。

核心技术揭秘

数据流概览

graph TD A[用户输入问题] --> B[LangChain编排链] B --> C[Chroma向量检索<br/>查询200+法律手册] B --> D[DuckDuckGo搜索<br/>获取最新动态] C --> E[召回相关法律条文] D --> F[整理网络资料] E --> G[合并上下文+问题] F --> G[合并上下文+问题] G --> H[OpenAI LLM生成答案] H --> I[Gradio前端展示<br/>附法规来源与链接]

双路检索的RAG设计

项目最值得关注的是其双路检索机制:

  • 静态路径:200+本法律手册预先切分并嵌入Chroma向量库。用户提问后,通过向量相似度检索最相关的法律条文,保证了回答的法律权威性。
  • 动态路径:借助DuckDuckGo搜索获取最新法规变更、司法判例,弥补静态语料库的时效性缺陷。

法律知识更新频繁——新法出台、司法解释变更、判例调整——静态语料再全也无法覆盖最新变化。动态搜索恰好补齐了这块短板,这是整个设计中最具工程智慧的点。

LangChain的编排职责

LangChain在这里承担流程编排与Prompt组装:检索链路采用类似RetrievalQA Chain的模型,先从双路召回上下文,再合并为最终Prompt交给OpenAI完成生成,最后把检索到的法规名称与来源网站一并返回给用户。这个"引用溯源"设定是法律AI可用的关键前提——没有出处,答案再正确也无法用于实际决策。

功能亮点与差异

相比市面上同类法律AI产品,此项目的差异化优势相当明显:

  1. 可本地部署:使用开源向量库Chroma,整条链路可独立运行,数据不经第三方服务器,对数据敏感的律所机构极有吸引力。
  2. 双路证据链:静态手册提供权威依据,网络搜索补充动态信息,答案最终附上法条编号和原文链接,用户可直接核验其真实性。
  3. 全栈极简:LangChain + Chroma + Gradio,无重型知识图谱,无人工标注流程,用更少的工程成本换来80-90%的检索正确率——这本身就是一种务实的设计哲学。

应用场景与落地建议

生产环境落地需注意几个关键点:

  • Embedding模型选型:中文法律语料包含大量专业术语和古语化表达,建议选用BAAI/bge-large-zh或m3e-family这类在中文语料上表现优异的模型,替换默认OpenAI embedding。
  • 切片策略:法律条文常有跨章节引用(“参见第X章第Y条”),简单固定窗口切片会打断语义关联。建议按法规结构(编/章/节/条)做层次化切片。
  • 隐私合规:法律咨询常含敏感个人信息,建议在部署链路中加入脱敏模块;网络检索路径需配置代理,避免用户原始提问被透传给第三方搜索服务。

适合的业务场景:

  • 中小律所的案前检索辅助
  • 企业法务的合同条款初筛(需将内部合规文档提前注入向量库)
  • 法律资讯门户的智能问答插件

综合评价

优点:

  • 架构非常务实——双路RAG解决了权威性与时效性的根本矛盾
  • 引用溯源是法律问答场景的刚需,该项目落实得很到位
  • Gradio界面让非技术人员也可直接交互,使用门槛低

缺点:

  • 依赖OpenAI API,国内直连和合规都存在隐性成本;建议在代码中预留模型层抽象,以便无缝更换为国产模型(如通义千问、DeepSeek)
  • 缺少反馈回流闭环:用户无法对错误回答进行纠偏,检索知识库也不能自动修正
  • Chroma单机架构在大并发下扩展性受限,高流量场景需迁移至Milvus或Qdrant等分布式向量库

一句话总结:这是一个思路清晰、实现规范的法律RAG参考实现,尤其适合作为各类法律智能化产品的起步骨架。

简要分析

热度分
306
价值分
151
活跃状态
活跃

语言占比

Python

贡献者

README

Python version web ui Twitter follow

法律AI助手

法律AI助手,法律RAG,通过倒入全部200+本法律手册、网页搜索内容结合LLM回答你的问题,并且给出对应的法规和网站,基于langchain,openai,chroma,duckduckgo-search, Gradio

Demo

https://law.vmaig.com/

用户名: username
密码: password

原理

基于langchain链式调用,先按条切分法律条文,导入向量数据Chroma。 问答相关问题时,先通过相似度搜索向量数据,获取相关法律条文,然后通过DuckDuckGo互联网搜索相关网页,然后合并法律条文和网页内容,对问题进行回答。

初始化init

flowchart LR A[法律文件加载LawLoader] --> B[MarkdownHeaderTextSplitter] subgraph 文件切分LawSplitter B[MarkdownHeaderTextSplitter] --> C[RecursiveCharacterTextSplitter] end C --> E[Embedding] E --> F[向量数据库Chroma]

提问流程

flowchart LR A[提问] --> B[问题校验]; B -- 否 --> C1[请提问法律相关问题] B -- 是 --> C2[法律Chain]; subgraph Law Chain C2 --> D[LLM] subgraph MultiQuery Retriever D --> E1[相似问题 01] D --> E2[相似问题 02] D --> E3[相似问题 03] E1 --> F[向量数据库Chroma] E2 --> F E3 --> F F --> H[法律docs] end C2 --> G[DuckDuckGo互联网搜索] subgraph Web Retriever G --> I[网页docs] end H --> K[合并combine] I --> K J[提问Prompt] --> K K --> L[LLM] L --> M[callback流输出] end

初始化运行环境

# 创建.env 文件
cp .env.example .env

# 修改.env 中的内容
vim .env

# 安装venv环境
python -m venv ~/.venv/law
. ~/.venv/law
pip install -r requirements.txt

初始化向量数据库

# 加载和切分法律手册,初始化向量数据库
python manager.py --init

运行web ui

python manager.py --web

默认用户名/密码: username / password

运行对话

python manager.py --shell

配置修改

如果你想修改回答中的法律条数和网页条数,可以修改config.py

  • 法律条数: LAW_VS_SEARCH_K
  • 网页条数: WEB_VS_SEARCH_K
  • web ui地址: WEB_HOST
  • web ui端口: WEB_PORT
  • web ui登录用户: WEB_USERNAME
  • web ui登录密码: WEB_PASSWORD

评论

暂无评论