部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >不要盲目再使用DeepSeek R1和QWQ这些推理模型做RAG了

不要盲目再使用DeepSeek R1和QWQ这些推理模型做RAG了

作者头像
技术人生黄勇
发布于 2025-03-11 13:30:27
发布于 2025-03-11 13:30:27
36100
代码可运行
举报
文章被收录于专栏:技术人生黄勇技术人生黄勇
运行总次数:0
代码可运行

DeepSeek R1 在首次发布时就展现出了强大的推理能力。在这篇文章中,我们将详细介绍使用 DeepSeek R1 构建针对法律文件的 RAG 系统的经验。

我们之所以选择法律文件,是因为法律专业人士经常面临一项艰巨的任务:浏览案例、法规和非正式法律评论库。即使是最善意的研究也会因检索正确的文档而陷入困境,更不用说准确地总结它们了。这是 RAG 的绝佳领域!

我们在大量法律文件数据集的基础上构建了 RAG,具体技术栈是:

  • 使用 Qwen2 嵌入用于检索;
  • ChromaDB 作为用于存储嵌入存储和查询的向量存储;
  • DeepSeek R1 生成最终答案。

通过将专用检索器与强大的推理大模型连接起来,我们可以同时获得“三全其美”的效果:

  1. 高相关性文档检索
  2. 推理丰富的文本生成
  3. 通过直接引用减少幻觉

我们开源了构建 RAG 的整个流程(地址在文末),并分享了一些来之不易的经验——哪些有效,哪些无效。

RAG System Website
RAG System Website

来之不易的教训:该做和不该做的事情

1. 不要使用 DeepSeek R1 进行检索

尽管 DeepSeek R1 具有出色的推理能力,但它并不适合生成嵌入,至少目前还不行。

我们发现了一些例子,说明 DeepSeek R1 生成的嵌入与专门的嵌入模型 Alibaba-NLP/gte-Qwen2-7B-instruct 相比有多糟糕,Qwen 2 是 MTEB 排行榜上目前最好的嵌入模型。

我们使用这两个模型为数据集生成嵌入,并组成两个向量数据库。然后,我们对这两个模型使用相同的查询,并在相应模型生成的向量数据库中找到前 5 个最相似的嵌入。

关于解除租约的问答

简单翻译下

关于小额赔偿

简单翻译下

在上表中,DeepSeek R1 的检索结果明显更差。为什么?

我们认为根本问题在于 DeepSeek-R1 的训练方式。DeepSeek-R1 主要被设计为推理引擎,专注于顺序思维和逻辑连接。这意味着 DeepSeek-R1 不会将文档映射到语义空间。

相比之下,Qwen2 模型变体 (gte-Qwen2-7B-instruct) 专门针对语义相似性任务进行训练,创建了一个高维空间,其中概念相似的文档无论具体措辞如何都紧密聚集在一起。

这种训练过程的差异意味着 Qwen 擅长捕捉查询背后的意图,而 DeepSeek-R1 有时会遵循导致主题相关但实际上不相关的结果的推理路径。

除非 DeepSeek-R1 针对嵌入进行了微调,否则不应将其用作 RAG 的检索嵌入模型。

2. 务必使用 R1 进行生成:推理令人印象深刻

虽然 R1 在嵌入方面遇到困难,但我们发现它的生成能力非常出色。通过利用 R1 的思维链方法,我们看到:

  • 更强的连贯性:该模型综合了来自多个文档的见解,清晰地引用相关段落。
  • 减少幻觉:R1 在内部“大声思考”,通过数据的视角验证每个结论。

让我们看几个例子:

从这些例子中,我们观察到了 DeepSeek R1 卓越的推理能力。它的思考过程清楚地表明了如何从源法律文件中得出结论:

  • R1 首先构建了一个连贯的法律问题模型,其详细的思考过程就是明证:首先,我记得读过关于提前终止罚款的内容……文件 1 提到……这种推理优先的方法允许模型在检索之前有条不紊地将多个来源的概念联系起来。
  • 在处理租约终止或小额索赔法庭问题等复杂场景时,我们观察到 R1 明确地理解了每份文件(将所有这些放在一起……),没有幻觉。
  • 最后,推理大模型用精确的引文来解释其推理,将结论与来源联系起来。这建立了从问题到推理再到答案的明确联系,确保了严谨性和可访问性。

我们用各种法律查询尝试了该模型,该模型始终表现出不仅能够从源文件中提取信息,而且还能从中学习和推理的能力。

要点:对于问答和总结,R1 是循序渐进的法律逻辑的金矿。将其保留在生成答案的阶段,肯定没问题。

3. 提示工程仍然很重要

高级推理并不能消除对精心设计的提示的需求。我们发现提示中的明确指导对于以下方面至关重要:

  • 鼓励在生成的答案中引用文档。
  • 使用“引用或说你不知道”的方法防止幻觉。
  • 以用户友好的方式构建最终答案。

我们在整个实验过程中构建了以下提示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
You are a helpful AI assistant analyzing legal documents and related content. When responding, please follow these guidelines:
- In the search results provided, each document is formatted as [Document X begin]...[Document X end], where X represents the numerical index of each document.
- Cite your documents using [citation:X] format where X is the document number, placing citations immediately after the relevant information.
- Include citations throughout your response, not just at the end.
- If information comes from multiple documents, use multiple citations like [citation:1][citation:2].
- Not all search results may be relevant - evaluate and use only pertinent information.
- Structure longer responses into clear paragraphs or sections for readability.
- If you cannot find the answer in the provided documents, say so - do not make up information.
- Some documents may be informal discussions or reddit posts - adjust your interpretation accordingly.
- Put citation as much as possible in your response. 
First, explain your thinking process between <think> tags.
Then provide your final answer after the thinking process.

4. 文档分块

此外,我们发现有效的文档分块对于准确的文档检索非常重要。对文档进行分块有助于使每个嵌入更简洁地表示特定主题,并减少每个嵌入生成需要处理的标记数量。

我们使用句子感知拆分(通过 NLTK)对文档应用分块。我们还让每个块的开头和结尾包含与附近块重叠的内容。它有助于模型更好地解释部分引用而不会丢失全局。文档分块代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def chunk_document(document, chunk_size=2048, overlap=512):
    """Split document into overlapping chunks using sentence-aware splitting."""
    text = document['text']
    chunks = []
    # Split into sentences first
    sentences = nltk.sent_tokenize(text)
    current_chunk = []
    current_length = 0
    for sentence in sentences:
        sentence_len = len(sentence)
        # If adding this sentence would exceed chunk size, save current chunk
        if current_length + sentence_len > chunk_size and current_chunk:
            chunk_text = ' '.join(current_chunk)
            chunks.append({
                'id': document['id'],
                'name': document['name'],
                'content': document['text'],
                'chunk_start': len(' '.join(current_chunk[:-(2 if overlap > 0 else 0)])) if overlap > 0 else 0,
                # Additional metadata fields...
            })
            # Keep last few sentences for overlap
            overlap_text = ' '.join(current_chunk[-2:])  # Keep last 2 sentences
            current_chunk = [overlap_text] if overlap > 0 else []
            current_length = len(overlap_text) if overlap > 0 else 0
        current_chunk.append(sentence)
        current_length += sentence_len + 1  # +1 for space

要点:

  • 使用 NLTK 进行句子感知分词(tokenization),而不是基于字符的分块
  • 使用块间重叠的句子保留文档上下文

5. vLLM 高效快速

由于法律文件包含大量数据,因此生成 RAG 的嵌入可能需要很长时间。

最初,我们使用默认的 HuggingFace 库 sentence_transformer。我们首先使用典型的 Nvidia L4 GPU 运行,但遇到了“最常见”的错误:CUDA 内存不足。在 Nvidia A100 上尝试后,我们发现 sentence_transformer 需要 57GB DRAM 才能加载完整的 Alibaba-NLP/gte-Qwen2-7B-instruct 模型。

sentence_transformer_oom
sentence_transformer_oom

我们改用了 vLLM,这是一种高吞吐量、内存高效的 LLM 推理和服务引擎。

使用 vLLM,我们可以使用标准 Nvidia L4 GPU 运行模型,vllm 大约需要 24G DRAM GPU。L4 也比 A100 便宜得多:在 GCP 上,Nvidia L4 每小时花费超过 0.7 美元,而 Nvidia A100 每小时至少花费 2.9 美元。

在配备 80GB DRAM 的 Nvidia A100 上比较 vllm 和句子转换器时,我们发现与句子转换器相比,使用 vLLM 为 Qwen2 模型生成嵌入的速度提高了 5.5 倍。

对于包含 15000 个块的 10000 份法律文件的语料库,处理时间为:

  • 标准 sentence_transformer:~5.5 小时
  • vLLM 实施:~1 小时
vllm Comparison
vllm Comparison

结论

为法律文件构建 DeepSeek R1 RAG 教会了我们一些重要的经验教训:

  • 利用专门的嵌入模型(如 Qwen2)实现稳健的检索。
  • 在生成阶段使用 R1 的推理能力来解决复杂的法律查询。
  • 提示工程仍然是控制引用和构建内容的关键。
  • 使用 vLLM 加速推理,大幅提高效率和速度。

https://github.com/skypilot-org/skypilot/tree/master/llm/rag https://blog.skypilot.co/deepseek-rag/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术人生黄勇 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何在本地部署 DeepSeek R1 模型?
在这个科技日新月异的时代,人工智能早已不再是遥不可及的未来幻想,而是悄然融入了我们的日常生活。
JanYork_简昀
2025/05/20
3260
如何在本地部署 DeepSeek R1 模型?
分块的艺术:提升 RAG 效果的关键
在RAG系统中,这种高效的实现往往是通过“分块”来实现的。你可以把它想象成把一本厚书分成几章——这样一来,阅读和理解就轻松多了。同样地,分块技术把大段复杂的文本拆分成更小、更容易处理的片段,让AI能更快、更准确地理解和处理信息。
致Great
2025/01/10
4480
分块的艺术:提升 RAG 效果的关键
使用 DeepSeek R1 和 Ollama 搭建一个 RAG 系统(包含完整代码)
你有没有想过,能不能像跟人聊天一样,直接问 PDF 文件或技术手册问题?比如你有一本很厚的说明书,不想一页页翻,只想问它:“这个功能怎么用?”或者“这个参数是什么意思?”现在有了 AI 技术,这完全可以实现!
wayn
2025/02/12
1.9K1
使用 DeepSeek R1 和 Ollama 搭建一个 RAG 系统(包含完整代码)
RAG 切块Chunk技术总结与自定义分块实现思路
在RAG(Retrieval-Augmented Generation)任务中,Chunk切分是一个关键步骤,尤其是在处理结构复杂的PDF文档时。PDF文档可能包含图片、奇怪的排版等,增加了Chunk切分的难度。
致Great
2025/01/18
5850
RAG 切块Chunk技术总结与自定义分块实现思路
3分钟!教会你用Doris+DeepSeek搭建RAG知识库(喂饭级教程)
❝清晨,我泡上一杯98年的咖啡,打开电脑,收到一条来自Doris用户的消息: "请问有 将doris数据库数据作为deepseek大模型的知识库的方法吗" "好滴,安排!" 于是,和这位Doris用户聊了聊,发现这类需求随着DeepSeek的爆火被无限放大了,但也确实是一个‌引申的机遇与挑战。 也罢,今天就来一探究竟,一起学习学习如何基于Doris+DeepSeek打造你的专属AI助手!
一臻数据
2025/02/26
1K1
3分钟!教会你用Doris+DeepSeek搭建RAG知识库(喂饭级教程)
手把手带你用DeepSeek-R1和Ollama搭建本地应用,一文搞定!
昨天文章《DeepSeek R1本地部署,小白教程来了!》的预告来兑现了。同时,有学习者问「可以上传文件啥的吗」?有的兄弟,有的。今天完整教程,它来了!
Datawhale
2025/02/05
10.3K0
手把手带你用DeepSeek-R1和Ollama搭建本地应用,一文搞定!
基于Ollama的DeepSeek R1本地部署全流程指南:从零到推理实战
在人工智能技术快速发展的今天,本地化部署大型语言模型(LLM)已成为开发者与研究人员的重要需求。本文将详细介绍如何通过Ollama框架实现DeepSeek R1模型的本地部署,涵盖从硬件选型到推理实战的全流程,并提供针对不同场景的优化方案。
Towserliu
2025/02/06
11K0
基于Ollama的DeepSeek R1本地部署全流程指南:从零到推理实战
高级RAG技术第1部分:数据处理
最近的论文《搜索增强生成中的最佳实践》通过实证研究评估了各种增强RAG技术的效果,旨在汇聚一套RAG的最佳实践。
点火三周
2024/08/19
5430
高级RAG技术第1部分:数据处理
Chunking:基于大模型RAG系统中的文档分块
【引】“枯萎,无法回避,如人之生老病死;荒芜,无法接受,如碌碌无为一生。” 这是周六回乡下除草的感受。有所得,有所感,对工程技术也是如此。
半吊子全栈工匠
2024/11/07
8980
Chunking:基于大模型RAG系统中的文档分块
私有化搭建、本地知识库、可联网查询、具备RAG能力的私人DeepSeek
以上方式在云端产品上实现 DeepSeek 的私有化部署,除此之外,也可以部署安装在本地机器上,如个人PC电脑、内网电脑等环境。
参谋带个长
2025/02/15
3.3K0
DeepSeek-基于vLLM部署
注:使用不同的推理模型,需要的模型文件是不一样的,比如我前面用的ollama下载的模型,则只能在ollma里面使用,不能拿到vLLM来使用。
运维小路
2025/03/03
1.4K0
DeepSeek-基于vLLM部署
如何高效提升大模型的RAG效果?多种实用策略一次掌握
持续提升RAG(检索增强生成,Retrieval-Augmented Generation)的效果是当前许多企业应用大模型时非常关注的一个关键问题。虽然RAG看起来简单,但真正要做到效果持续提升,还真不是一件容易的事。咱们今天就用更轻松的语言,结合实际案例,聊聊如何通过多种策略持续增强RAG能力,帮助你在实际落地项目中游刃有余。
fanstuck
2025/03/13
3752
如何高效提升大模型的RAG效果?多种实用策略一次掌握
商业实战使用DeepSeek-R1构建本地RAG系统的完整方案02-优雅草卓伊凡
接上一篇研究我们也有采用deepseek-r1 本地模型部署的方案,此方案可以在本地完全部署,其次呢硬件预算在10万文档的数据因此15000-30000之间
卓伊凡
2025/05/07
1760
DeepSeek R1推理
DeepSeek R1和DeepSeek V3的模型结构一致,参数量也一致,R1是基于V3做强化学习得来的。R1主要的创新点都用在训练过程,推理过程和V3是一样的。
aaronwjzhao
2025/02/06
2.6K1
【RAG最新研究】优化RAG系统的最佳实践与深度解析
这篇论文主要关注的是检索增强型生成(RAG)系统中的一个核心问题:不同的组件和配置如何影响系统的性能。
致Great
2025/01/16
5560
【RAG最新研究】优化RAG系统的最佳实践与深度解析
清华大学开源赤兔大模型推理引擎,DeepSeek 推理成本减半,吐字效率翻倍
最近 DeepSeek 火爆全网,相信不少同学都看过所谓的清华大学 DeepSeek 提示词教程(笑)。清华大学是真干实事,近日开源最新的大模型推理引擎赤兔(chitu),是一个专注于效率、灵活性和可用性的高性能大语言模型推理框架。
AgenticAI
2025/03/18
1750
清华大学开源赤兔大模型推理引擎,DeepSeek 推理成本减半,吐字效率翻倍
【大模型部署实战】VLLM+OpenWebUI实现DeepSeek模型部署,文末有福利
vLLM(Very Large Language Model Serving)是由加州大学伯克利分校团队开发的高性能、低延迟大语言模型(LLM)推理和服务框架。其核心创新在于PagedAttention技术,通过将注意力键值(KV)缓存分页管理,显著提升显存利用率并降低碎片化问题,使吞吐量比传统框架(如Hugging Face Transformers)提升24倍。该框架支持连续批处理、动态显存分配和多GPU并行推理,能够高效处理8k+长上下文请求,并兼容OpenAI API接口,开发者可快速部署Hugging Face模型。通过集成FP8、AWQ等量化技术,vLLM在保证推理精度的同时大幅降低资源消耗,目前已成为企业级AI部署(如DeepSeek-R1 671B模型分布式集群)的首选方案。
AI浩
2025/03/17
6610
【大模型部署实战】VLLM+OpenWebUI实现DeepSeek模型部署,文末有福利
Deepseek本地部署 + 个性化 Rag 知识库
Retrieval-Augmented Generation (RAG) 是一种结合了信息检索与文本生成的先进模型架构,旨在提高自然语言处理任务中的准确性和相关性。不同于传统的端到端生成模型,RAG 通过整合外部知识库来增强其输出内容的质量。具体来说,RAG 首先利用一个检索组件从大规模语料库中动态查找与输入查询最相关的文档或段落,然后将这些检索到的信息作为额外上下文传递给生成组件。这样,生成模型不仅能基于预训练的语言知识,还能依据最新的、具体的资讯来生成回复,从而确保了输出内容的时效性和准确性。
用户11404404
2025/04/15
1890
Deepseek本地部署 + 个性化 Rag 知识库
告别碎片化!两大先进分块技术如何提升RAG的语义连贯性?
可以看出, 当前RAG分块策略的研究聚焦于平衡上下文保留与计算效率。传统方法(固定分块、语义分块)在简单场景中仍具优势,而延迟分块和上下文检索在复杂语义任务中表现更优但代价高昂。未来需探索轻量化上下文增强、长文档优化技术,并建立统一评估标准以推动实际应用。
致Great
2025/04/30
2380
告别碎片化!两大先进分块技术如何提升RAG的语义连贯性?
腾讯云DeepSeek开发RAG应用
这篇文章主要是面向初级开发者,适合初学者、没有接触过大模型开发的小白、没有基础想学大模型RAG开发的按照该教程也能踏入开发第一步。主要是介绍通过腾讯云提供的deepseek资源和线上环境,开发一个基于deepseek的RAG系统。RAG开发框架使用的是lamaindex,大模型使用deepseek32B,向量模型使用milkey/dmeta-embedding-zh:f16,rag程序根据给定的txt文件内容进行问答,输入exit退出问答。
用户8800822
2025/03/05
5150
腾讯云DeepSeek开发RAG应用
推荐阅读
相关推荐
如何在本地部署 DeepSeek R1 模型?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验