当前位置: 首页 > news >正文

基于FAISS和Ollama的法律智能对话系统开发实录-【大模型应用班-第5课 RAG技术与应用学习笔记】

🎯 项目简介:让法律咨询变得"聪明"起来

本项目构建了一个智能劳动法对话系统,就像给你的电脑装了个"法律小助手"!它结合了FAISS向量数据库的闪电检索能力和Ollama本地部署的大型语言模型(LLM)的智能问答功能。而且全部本地化部署,笔记本就能跑起来。

资源地址

https://github.com/chenchihwen/Labor-Law-Intelligent-Dialogue-System/tree/masterhttps://github.com/chenchihwen/Labor-Law-Intelligent-Dialogue-System/tree/master

最酷的是——它支持动态更新知识库!用户上传新的.docx法律文档后,系统会自动"消化"内容,就像给AI喂知识一样简单~

# 核心功能代码示例 - 文档处理流程
def process_document(file_path):# 1. 提取法律条文documents = extract_law_articles(file_path)# 2. 分割过长的条文(避免AI"噎住")documents = split_long_articles(documents, max_length=500)# 3. 添加文档概述(给AI一个"目录")documents = add_document_overview(documents, file_path)# 4. 转换为向量(把文字变成AI能理解的数字)index, metadata = create_vector_database(documents)return index, metadata

✨ 核心功能:你的私人法律顾问

1. 🚀 闪电检索功能

FAISS向量数据库让法律条文检索快到飞起!就像Ctrl+F的超级加强版,能理解你的问题意图,而不仅仅是关键词匹配。

# 搜索相关法律条文代码示例
def search_laws(query, top_k=3):# 把问题变成向量(AI的语言)query_embedding = get_embedding(query)# 在向量空间中寻找最相似的条文scores, indices = vector_db.search(query_embedding, top_k)# 返回匹配结果return [(metadata[idx], score) for idx, score in zip(indices, scores)]

2. 💡 智能问答功能

Ollama本地LLM就像一个懂法律的朋友,不仅能找到相关条文,还能用大白话给你解释清楚!

# 智能回答生成示例
def generate_answer(question):# 先找相关法律条文(RAG技术)relevant_laws = search_laws(question)# 构建专业提示词prompt = f"""你是一个专业的劳动法律顾问。请基于以下法律条文回答:{relevant_laws}问题:{question}请用通俗易懂的语言解释,并给出实用建议!"""# 获取AI的回答return ollama_client.generate(prompt)

3. 📤 文档上传与知识更新

上传新法律文档就像给AI"充电"!系统会自动处理文档内容,让知识库保持最新状态。

# 文件上传处理代码示例
@app.post("/upload_legal_document")
async def upload_document(file: UploadFile):# 保存上传的文件file_path = save_upload_file(file)# 处理文档并更新向量数据库new_index, new_metadata = process_document(file_path)# 合并到现有知识库merged_index = merge_with_existing(new_index)return {"status": "success", "message": "知识库已更新!"}

 新增法律文件的测试搜索: '劳动争议处理'

🛠️ 开发历程:从0到1的构建故事

阶段一:让数据库"长大"的魔法

最初的版本每次都会创建全新的数据库,就像每次搬家都买新家具一样浪费。我们改进了docx2vector_db.py脚本,让它能增量更新知识库!

# 数据库追加逻辑代码
def update_database(new_index, new_metadata):# 检查现有数据库if os.path.exists("all_legal_faiss.index"):old_index = faiss.read_index("all_legal_faiss.index")old_metadata = load_metadata()# 合并新旧数据merged_index = merge_indexes(old_index, new_index)merged_metadata = old_metadata + new_metadata# 保存合并后的数据库save_database(merged_index, merged_metadata)else:# 如果是第一次,直接保存save_database(new_index, new_metadata)

阶段二:打造完整的API生态系统

我们为系统添加了完整的API接口,让前后端能流畅沟通:

  1. 文件上传端点/upload_legal_document - 处理用户上传的法律文档

  2. 智能问答端点/api/chat - 获取AI的专业回答

  3. 条文搜索端点/api/search - 直接检索相关法律条文

# FastAPI端点示例
@app.post("/api/chat")
async def chat(request: ChatRequest):# 获取AI回答(支持流式和非流式)if request.stream:return StreamingResponse(generate_stream_response(request))else:answer = generate_answer(request.question)return {"answer": answer}

阶段三:系统联调与优化

经过反复测试,我们解决了各种"小脾气":

  • 🐞 文档处理时的编码问题

  • ⚡ 向量维度不匹配的bug

  • 🔍 搜索结果相关性优化

最终系统能稳定运行,响应速度控制在3秒以内!

🎨 技术栈:强大工具的组合拳

技术领域使用工具亮点说明
后端框架FastAPI (Python)轻量级高性能,开发体验爽到飞起
向量数据库FAISSFacebook出品,检索速度超快
本地LLMOllama + Qwen3:1.7b免费用强大模型,数据不出本地
文档处理python-docx专治各种Word文档"疑难杂症"
前端HTML5 + CSS3 + JavaScript简洁美观,零依赖

🚀 部署指南:三步启动你的法律AI

  1. 安装依赖(一行命令搞定):

pip install fastapi uvicorn python-docx faiss-cpu sentence-transformers
  1. 启动服务

# 启动Ollama服务(确保已下载模型)
ollama serve
​
# 启动我们的API
uvicorn labor_law_chat_api:app --reload
  1. 访问前端: 浏览器打开http://localhost:8000,就能和你的法律助手聊天啦!

🌟 项目总结与未来展望

这个项目成功打造了一个可动态更新的劳动法智能对话系统,具有以下亮点:

  1. 专业性强:准确理解法律条文,回答靠谱

  2. 扩展性好:支持随时更新知识库

  3. 隐私安全:全部在本地运行,数据不出门

未来我们计划:

  • 增加更多法律领域支持(劳动合同法、社保法等)

  • 优化RAG策略,让回答更精准

  • 支持PDF/ html, txt 等多种文档格式

  • 可以直接从网站爬取资料,随时随地咨询

这个项目证明,即使是非专业开发者,也能用开源工具构建实用的AI应用!期待看到更多开发者加入法律AI的探索~

💡 小贴士:系统完整代码已开源,欢迎Star和下载!如果你在部署或使用中遇到问题,欢迎在评论区留言讨论~

下载 法律智能对话系统.rar 里面包含:

下载地址:

基于FAISS和Ollama的劳动法智能对话系统https://download.csdn.net/download/chenchihwen/91591075

RAG技术与应用学习笔记

一、RAG技术概述

RAG(Retrieval-Augmented Generation)是一种结合信息检索和文本生成的技术,通过实时检索相关文档作为上下文输入,提高生成结果的时效性和准确性。

RAG的三大优势:

  1. 解决知识时效性问题​:弥补大模型训练数据静态的不足
  2. 减少模型幻觉​:通过引入外部知识降低虚假内容生成
  3. 提升专业领域回答质量​:结合垂直领域知识库生成更专业的回答

二、RAG核心原理与流程

1. 数据预处理阶段

  • 知识库构建​:收集整理多源数据
  • 文档分块​:平衡语义完整性与检索效率
  • 向量化处理​:使用嵌入模型转换文本为向量

2. 检索阶段

  • 查询向量化
  • 向量数据库相似度检索
  • 结果重排序

3. 生成阶段

  • 上下文组装
  • 基于增强上下文的答案生成

三、关键技术实现

1. Embedding模型选择

根据MTEB排行榜,当前表现优异的模型包括:

  • Linq-Embed-Mistral
  • gte-Qwen2-7B-instruct
  • multilingual-e5-large-instruct
中文场景推荐:
  • BGE-M3:支持100+语言,长文本处理能力强
  • M3E-Base:轻量级中文优化模型
  • stella-mrl-large-zh-v3.5-1792:中文语义分析能力强

2. 文档切片策略对比

策略语义保持长度控制适用场景
固定长度切片中等优秀技术文档
语义切片优秀中等自然语言文本
LLM语义切片优秀优秀高质量要求
层次切片优秀结构化文档
滑动窗口中等优秀长文档处理

四、实践案例

案例1:DeepSeek+Faiss本地知识库

技术栈​:

  • 向量数据库:Faiss
  • 嵌入模型:DashScope text-embedding-v1
  • LLM:deepseek-v3
  • 文档处理:PyPDF2

核心代码​:

# 文档处理
pdf_reader = PdfReader('document.pdf')
text, page_numbers = extract_text_with_page_numbers(pdf_reader)# 向量库构建
embeddings = DashScopeEmbeddings(model="text-embedding-v1")
knowledgeBase = FAISS.from_texts(chunks, embeddings)# 问答处理
docs = knowledgeBase.similarity_search(query)
chain = load_qa_chain(llm, chain_type="stuff")
response = chain.invoke(input={"input_documents": docs, "question": query})

案例2:迪士尼RAG助手

特色功能​:

  • 多模态处理:支持文本和图片查询
  • 混合检索策略:结合语义检索和关键词触发
  • 严格的事实核查机制

处理流程​:

  1. 文档解析(支持PDF、Word、图片)
  2. 多模态向量化(文本+图像)
  3. 混合检索
  4. 答案生成与验证

五、RAG质量提升方案

1. 数据准备阶段

  • 建立完整的数据治理流程
  • 采用智能文档处理技术
  • 多粒度知识提取

2. 检索阶段

  • 查询意图澄清
  • 多路召回策略
  • 混合检索+重排序

3. 生成阶段

  • 优化提示词模板
  • 实施动态防护栏
  • FoRAG两阶段生成策略

六、关键思考

  1. 提示工程 vs RAG vs 微调如何选择?
  • 提示工程:简单问题、通用场景
  • RAG:需要外部知识、时效性要求高
  • 微调:专业领域、特有风格需求
  1. LLM处理无限上下文后RAG还有意义吗​?
  • 效率与成本考量
  • 知识更新需求
  • 可解释性要求
  • 数据隐私考虑

七、学习资源

  • MTEB排行榜
  • BGE-M3官方文档
  • DeepSeek API文档
  • Faiss官方教程

源码下载:

https://download.csdn.net/download/chenchihwen/91591075

http://www.lryc.cn/news/610179.html

相关文章:

  • Ubuntu系统VScode实现opencv(c++)图像一维直方图
  • 机器学习【六】readom forest
  • 微服务配置管理:Spring Cloud Alibaba Nacos 实践
  • 电子电气架构 ---智能电动汽车嵌入式软件开发过程中的block点
  • Nginx服务做负载均衡网关
  • 36.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--缓存Token
  • FPGA学习笔记——简单的乒乓缓存(RAM)
  • 飞算JavaAI需求转SpringBoot项目沉浸式体验
  • android内存作假通杀补丁(4GB作假8GB)
  • labview连接PLC的三种方式
  • 设计模式(一)——抽象工厂模式
  • ES集群规划与调优
  • 进程间通信:管道与共享内存
  • 移动前后端全栈项目
  • 读写分离有那些坑?
  • 16.8 华为昇腾CANN架构深度实战:3大核心引擎解析与性能优化216%秘籍
  • 手搓TCP服务器实现基础IO
  • falsk windows 服务器部署-解决服务器外无法访问
  • javacc学习笔记 02、JavaCC 语法描述文件的格式解析
  • Sklearn 机器学习 数据聚类 肘部法则选择聚类数目
  • 昇思学习营-模型推理和性能优化学习心得
  • MS-DOS 常用指令集
  • 【清除pip缓存】Windows上AppData\Local\pip\cache内容
  • 我的世界进阶模组开发教程——附魔(2)
  • (二)软件工程
  • 论文阅读笔记:《Dataset Distillation by Matching Training Trajectories》
  • 在CentOS 7上安装配置MySQL 8.0完整指南
  • PyTorch :三角函数与特殊运算
  • MFC-Ribbbon-图标-PS
  • 【秋招笔试】2025.08.03虾皮秋招笔试-第二题