DeepSeek r1+RAG:基于langchain实现RAG系统

在人工智能蓬勃发展的当下,大语言模型的应用越来越广泛。然而,如何让大模型更加智能,能够结合特定的知识给出更准确的回答,成为了许多开发者关注的焦点。今天,我们就来探讨一下如何基于 langchain 实现一个强大的 RAG 系统,并结合 DeepSeek 模型
在这里插入图片描述

一、准备工作

首先需要在虚拟环境中安装下面所需要的包,主要是langchain的包。

# 导入必要的库
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import TextLoader, DirectoryLoader
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
from langchain_community.llms.huggingface_pipeline import HuggingFacePipeline
from langchain_community.embeddings import HuggingFaceBgeEmbeddings
from langchain.prompts import ChatPromptTemplate
from langchain_community.vectorstores import FAISS
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CrossEncoderReranker
from langchain_community.cross_encoders import HuggingFaceCrossEncoder
from langchain_community.retrievers import BM25Retriever
from langchain.retrievers import EnsembleRetriever
import time
import re
import torch
import warnings
import string

warnings.filterwarnings("ignore")

第二步,下载deepseek模型,我这里下载的是deepseek-r1蒸馏的Qwen-14B的模型,下载地址,你也可以根据自己的需要选择deepseek的不同版本模型,不知道怎么从huggingface上下载模型的小伙伴可以看我的这篇博客:如何从huggingface上下载模型到本地?

在这里插入图片描述
然后可以准备一段txt的语料作为RAG的知识库,我这里就随便复制了一点关于水浒传的介绍。你可以将其替换成你真正想要检索的内容。

《水浒传》主要描写的是北宋末年,天罡地煞降生人间,一百零八好汉被逼上梁山,大聚义替天行道,后接受招安,投降封建王朝、起义走向失败的故事。
宋仁宗时期,由于宋朝境内瘟疫横行,皇帝遣太尉洪信与龙虎山张天师同去祈禳 [39]。在龙虎山,洪太尉命人开掘伏魔殿中的地穴,误放一百零八个魔星,下凡化身为一百零八条好汉。
书中第一位出场的好汉是"九纹龙"史进,在一日练武时巧遇被高俅陷害的前禁军教头王进,史进与其比武,被击败,遂拜为师。之后,史进因一次冲突,结识了少华山首领“神机军师”朱武等三人,却遭人告发,官兵将史家庄围困,史进与三名首领共同突围,而后决定去延安府投奔王进,却意外行至渭州城。史进在城中结识了经略相公帐下的提辖官鲁达,并重会先师"打虎将"李忠。三人共饮时得知歌女金翠莲遭到当地恶霸"镇关西"郑屠讹诈欺压一事。鲁达翌日当街打死郑屠,随后弃职逃至代州,经金氏父女及当地赵员外介绍,前往五台山出家为僧,寺中智真长老赐其法名"智深"。
在寺中,鲁智深两次破戒饮酒、大闹山门,长老只得将其荐往东京大相国寺。途中,鲁智深在桃花山刘家庄打伤了试图强娶民女的"小霸王"周通,随后又在瓦罐寺与路过的史进共同击杀恶霸“生铁佛”崔道成和“飞天夜叉”丘小乙,火烧了破败的瓦罐寺。
到达东京后,鲁智深结识了禁军教头"豹子头"林冲。林冲的妻子当天遭高俅义子调戏,被林冲喝止。此后,高衙内觊觎林妻美貌,联结高俅、陆谦设计陷害林冲于白虎节堂,将其发配沧州,欲命从人在途中将其谋害,被鲁智深跟踪搭救。随后,林冲又在沧州偶遇富豪"小旋风"柴进。柴进赠其钱财以贿赂沧州管营、差拨等人,但因高俅施压,管营将林冲派遣至草料场任职,欲与陆谦等放火谋杀林冲。林冲杀死三人,逃至柴进庄上,后经柴进与梁山泊头领"旱地忽律"朱贵举荐,至梁山泊王伦处入伙。王伦让林冲杀个人作“投名状”,林冲却遇上了杨家将后人"青面兽"杨志。
王伦阻止二人争斗,欲留杨志入伙,被拒,任杨志返回东京。杨志因丢失花石纲被削去职位,因经济拮据,被迫拿出家传宝刀游街售卖,却遭遇市井泼皮牛二强夺宝刀,杨志一怒之下拔刀将其杀死,因此获罪,被发往大名府充军。中书梁世杰看中杨志,留下听用。杨志在校场比武时击败周谨,又与留守司正牌"急先锋"索超战平,遂得受用。
此后正逢太师蔡京生辰,梁中书命杨志押送祝寿礼物(即生辰纲)前往东京。此事被游走江湖的"赤发鬼"刘唐得知,意图联合郓城县东溪村保正晁盖共同劫取。
“智多星”吴用得知后联合石碣村阮氏三雄共商计谋,期间又得云游道士"入云龙"公孙胜与市井闲汉
### 使用 DeepSeekRAG 构建智能问答系统的方案 #### 1. 系统架构概述 构建基于 DeepSeek 和 Retrieval-Augmented Generation (RAG) 的智能问答系统涉及多个组件的集成。该系统能够通过检索增强机制提高回答准确性,尤其适合处理复杂查询和特定领域问题。 #### 2. 数据准备与预处理 为了使问答系统有效工作,需先准备好用于训练和支持检索的数据集。这通常包括但不限于文档集合、FAQ列表以及其他结构化或半结构化的文本资源。对于这些数据源: - **加载文件**:采用 `FileSystemDocumentLoader` 来读取存储于本地磁盘上的各种格式(PDF, DOCX, TXT等)的知识库文件[^2]。 - **解析内容**:利用 `TextDocumentParser` 将上述载入的内容转换为统一的标准形式——即 Document 对象,以便后续处理。 ```python from langchain.document_loaders import FileSystemDocumentLoader from langchain.text_parsers import TextDocumentParser loader = FileSystemDocumentLoader(path_to_documents) documents = loader.load() parser = TextDocumentParser() parsed_docs = parser.parse(documents) ``` #### 3. 文档切片与向量化表示 完成初步的数据准备工作之后,下一步是对较长的文章进行合理分割,形成更易于管理和索引的小片段。此过程不仅有助于加速检索速度,还能提升匹配精度。具体做法如下: - 实现自定义函数来执行文章切割逻辑; - 应用合适的嵌入模型将每一片段转化为低维稠密向量表达; ```python def split_into_chunks(texts, chunk_size=500): chunks = [] for text in texts: words = text.split(' ') n = len(words) i = 0 while i < n: chunks.append(' '.join(words[i:i + chunk_size])) i += chunk_size return chunks chunks = split_into_chunks([doc.page_content for doc in parsed_docs]) embeddings = embedding_model.encode(chunks) ``` #### 4. 集成 DeepSeek 模型 考虑到 DeepSeek 在自然语言理解和生成方面的卓越表现,可以将其作为核心模块引入到整个框架之中。特别地, - 当接收到用户的提问时,调用预先部署好的 DeepSeek API 或者直接运行其 Python SDK 进行交互式响应; - 结合之前建立起来的向量数据库实现精准的信息检索功能,从而辅助最终答案的合成。 ```python import deepseek as ds client = ds.Client(api_key='your_api_key') response = client.generate(prompt=user_query, model="DeepSeek-V3") # or "DeepSeek-R1" retrieved_context = retrieve_relevant_context(user_query) final_answer = refine_response(response.choices[0].text.strip(), retrieved_context) print(final_answer) ``` #### 5. 测试优化与迭代改进 最后阶段着重于评估现有系统的实际效能并据此作出必要的调整。一方面要确保各个部分协同运作良好,另一方面也要不断积累反馈意见以指导未来的升级方向。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱睡觉的咋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值