0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RAG实践:一文掌握大模型RAG过程

京东云 来源:jf_75140285 作者:jf_75140285 2025-10-27 18:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、RAG是什么?

RAG(Retrieval-Augmented Generation,检索增强生成), 一种AI框架,将传统的信息检索系统(例如数据库)的优势与生成式大语言模型(LLM)的功能结合在一起。不再依赖LLM训练时的固有知识,而是在回答问题前,先从外部资料库中"翻书"找资料,基于这些资料生成更准确的答案。

RAG技术核心缓解大模型落地应用的几个关键问题:

知识新鲜度:大模型突破模型训练数据的时间限制

幻觉问题:降低生成答案的虚构概率,提供参照来源

信息安全:通过外挂知识库而不是内部训练数据,减少隐私泄露

垂直领域知识:无需训练直接整合垂直领域知识

二、RAG核心流程

wKgZO2jZEC2AGKWkAAfb05cfWYU080.png

2.1 知识准备阶段

1、数据预处理

1、文档解析

输入:原始文档(如Markdown/PDF/HTML)

操作

▪提取纯文本(如解析Markdown标题、段落)

▪处理特殊格式(如代码块、表格、图片、视频等)

例如:

[标题] 什么是 ROMA?
[段落] ROMA 是一个全自主研发的前端开发基于自定义DSL(Jue语言),一份代码,可在iOSAndroidHarmony、Web四端运行的跨平台解决方案。
[段落] ROMA 框架的中文名为罗码。
[标题] 今天天气
[列表项] 今天的室外温度为35°C,天气晴朗。

文档的解析过程需要考虑不同文档内容例如文本、图片、表格等场景,以及文档的语言,布局情况,可以考虑使用一些优秀的三方工具或者一些视觉模型,布局分析模型,语义理解模型来辅助解析。

2、数据清洗与标准化处理

提升文本质量和一致性,使向量表示更准确,从而增强检索相关性和LLM回答质量;同时消除噪声和不规则格式,确保系统能正确理解和处理文档内容。

包括:

▪去除特殊字符、标签、乱码、重复内容。

▪文本标准化,例如 时间、单位标准化(如“今天” → “2025-07-17”)。

▪其他处理

数据的清洗和标准化过程可以使用一些工具或NLTK、spaCy等NLP工具进行处理。

例如:

< p >ROMA框架< /p >
处理: 
"ROMA框架"

今天的室外温度为35°C,天气晴朗。
处理:
"2025-07-17 的室外温度为35°C,天气晴朗"

3、元数据提取

关于数据的数据,用于描述和提供有关数据的附加信息。

文档来源:文档的出处,例如URL、文件名、数据库记录等。

创建时间:文档的创建或更新时间。

作者信息:文档的作者或编辑者。

文档类型:文档的类型,如新闻文章、学术论文、博客等。

...



元数据在RAG中也非常重要,不仅提供了额外的上下文信息,还能提升检索质量:

1. 检索增强

▪精准过滤:按时间、作者、主题等缩小搜索范围

▪相关性提升:结合向量相似度和元数据特征提高检索准确性

2. 上下文丰富

▪来源标注:提供文档来源、作者、发布日期等信息

▪文档关系:展示文档间的层级或引用关系



常见的元数据提取方式:

▪正则/HTML/... 等解析工具,提取标题、作者、日期等

▪自然语言处理: 使用NLP技术(如命名实体识别、关键词提取)从文档内容中提取元数据,如人名、地名、组织名、关键词等

机器学习模型: 训练机器学习模型来自动提取元数据

▪通过调用外部API(如Google Scholar API、Wikipedia API)获取文档的元数据

▪...

例如:

complete_metadata_chunk1 = {
    'file_path': '/mydocs/roma_intro.md',
    'file_name': 'roma_intro.md',
    'chunk_id': 0,
    'section_title': '# 什么是 ROMA?',
    'subsection_title': '',
    'section_type': 'section',
    'chunking_strategy': 3,
    'content_type': 'product_description',
    'main_entity': 'ROMA',
    'language': 'zh-CN',
    'creation_date': '2025-07-02',  # 从文件系统获取
    'word_count': 42  # 计算得出,
    'topics': ['ROMA', '前端框架', '跨平台开发'],
    'entities': {
        'products': ['ROMA', 'Jue语言'], # 实体识别
        'platforms': ['iOS', 'Android', 'Web']
    },
}

2、内容分块(Chunking)

在RAG架构中,分块既是核心,也是挑战,它直接影响检索精度、生成质量,需要在检索精度、语境完整性和计算性能之间取得平衡。

wKgZPGjZEC6ABU4EAALWukTI-9k023.png

内容分块将长文档切分成小块,可以解决向量模型的token长度限制,使RAG更精确定位相关信息,提升检索精度和计算效率。

autobots 功能分块:

wKgZO2jZEC-AbY7NAALm7qAZTmE964.png

实际RAG框架中按照文档的特性选择合适的分块策略进行分块.

常见的分块策略

1. 按大小分块

按固定字符数进行分块,实现简单但可能切断语义单元。

优点:实现简单且计算开销小,块大小均匀便于管理。

缺点:可能切断语义单元,如句子或段落被分到不同块中。

例如:

第一段:# ROMA框架介绍ROMA是一个全自主研发的前端开发框架,基于自定义DSL(Jue语言)。
一份代码,可在iOS、Android、Harmony

第二段:、Web三端运行的跨平台解决方案。ROMA框架的中文名为罗码。

句子被截断,"一份代码,可在iOS、Android、Harmony" 和 "、Web三端运行的跨平台解决方案" 被分到不同块,影响理解。

2. 按段落分块

以段落为基本单位进行分块,保持段落完整性,但段落长度可能差异很大。

优点:尊重文档自然结构,保留完整语义单元。

缺点:段落长度差异大,可能导致块大小不均衡。

例如

第一段:# ROMA框架介绍ROMA是一个全自主研发的前端开发框架,基于自定义DSL(Jue语言)。
一份代码,可在iOS、Android、Harmony、Web三端运行的跨平台解决方案。ROMA框架的中文名为罗码。

第二段:# 核心特性1. 跨平台:一套代码运行于多端2. 高性能:接近原生的性能表现3. 可扩展:丰富的插件系统

第一段包含标题和多行内容,而其他段落相对较短,可能导致检索不均衡。

3. 按语义分块

基于文本语义相似度进行动态分块,保持语义连贯性,但计算开销大。

说明:基于文本语义相似度动态调整分块边界。

优点:保持语义连贯性,能识别内容主题边界。

示例

第一段:# ROMA框架介绍ROMA是一个全自主研发的前端开发框架,基于自定义DSL(Jue语言)。
一份代码,可在iOS、Android、Harmony、Web四端运行的跨平台解决方案。

第二段:ROMA框架的中文名为罗码。
## 核心特性1. 跨平台:一套代码运行于多端

使用依赖模型质量,相同文本在不同运行中可能产生不同分块结果。

分块策略总结:

wKgZO2jZEC-Adzx6AAENqNakzIk961.png

优化方式

混合分块策略

结合多种分块方法的优点,如先按段落分块,再根据块大小调整,做到既保持语义完整性,又能控制块大小均匀

优化重叠区域

根据内容特性动态调整块之间的重叠区域大小,关键信息出现在多个块中,提高检索召回率

常用的分块工具

LangChain框架:提供多种分块策略,包括RecursiveCharacterTextSplitter、MarkdownTextSplitter等

NLTK:用于基于自然语言句子的分块

spaCy:提供语言学感知的文本分割



3、向量化(Embedding)

将高维文本数据压缩到低维空间,便于处理和存储。将文本转换为计算机可以理解的数值,使得计算机能够理解和处理语义信息,从而在海量数据文本中实现快速、高效的相似度计算和检索。

简单理解:通过一组数字来代表文本内容的“本质”。

例如,"ROMA是一个跨平台解决方案..."这句话可能被转换为一个384维的向量:

[块1] 什么是ROMA?
ROMA是一个全自主研发的前端开发框架,基于自定义DSL(Jue语言)...

[
  {
    "chunk_id": "doc1_chunk1",
    "text": "# 什么是 ROMA?nROMA 是一个全自主研发的前端开发基于自定义DSL(Jue语言),一份代码,可在iOS、Android、Harmony、Web端运行的跨平台解决方案。",
    "vector": [0.041, -0.018, 0.063, ..., 0.027],
    "metadata": {
      "source": "roma_introduction.md",
      "position": 0,
      "title": "ROMA框架介绍"
    }
  },
  // 更多文档块...
]

常用的Embedding模型

模型名称 开发者 维度 特点
all-minilm-l6-v2 Hugging Face 384 高效推理,多任务支持,易于部署,适合资源受限环境
Text-embedding-ada-002 OpenAI 1536 性能优秀,但可能在国内使用不太方便。
BERT embedding Google 768 (base) 1024 (large) 广泛用于各种自然语言处理任务。
BGE (Baidu’s General Embedding) 百度 768 在HuggingFace的MTEB上排名前2,表现非常出色。



4、向量数据库入库

将生成的向量数据和元数据进行存储,同时创建索引结构来支持快速相似性搜索。

常用的向量数据库包括:

数据库 复杂度 核心优势 主要局限 适用场景
ChromaDB 轻量易用, Python集成 仅支持小规模数据 原型开发、小型项目
FAISS 十亿级向量检索, 高性能 需自行实现特殊化 学术研究、大规模检索
Milvus 分布式扩展, 多数据类型支持 部署复杂, 资源消耗大 企业级生产环境
Pinecone 全托管, 自动扩缩容 成本高, 数据在第三方云 无运维团队/SaaS应用
Elasticsearch 全文搜索强大,生态系统丰富 向量搜索为后加功能,性能较专用解决方案差 日志分析、全文搜索、通用数据存储

2.2 问答阶段

1、查询预处理

` 意图识别:使用分类模型区分问题类型(事实查询、建议、闲聊等)。

问题预处理:问题内容清洗和标准化,过程与前面数据预处理类似。

查询增强: 使用知识库或LLM生成同义词(如“动态化” → “Roma”),上下文补全可以结合历史会话总结(例如用户之前问过“Roma是什么”)。



2、数据检索(召回)

1、向量化

使用与入库前数据向量化相同的模型,将处理后的问题内容向量化。

例子:

问题: "ROMA是什么?"

处理后
{
    "vector": [0.052, -0.021, 0.075, ..., 0.033],
    "top_k": 3,
    "score_threshold": 0.8,
    "filter": {"doc_type": "技术文档"}
}

2、检索

相似度检索:查询向量与所存储的向量最相似(通过余弦相似度匹配)的前 top_k 个文档块。

关键词检索:倒排索引的传统方法,检索包含"Roma"、"优势"等精确关键词的文档。

混合检索: 合并上面多种检索结果,效果最优。

例如:检索"ROMA是什么?"

wKgZPGjZEDCAGlC3AAQKeDWOw04663.png

3、重排序(Reranking)

初步检索在精度和语义理解上的不足,通过更精细的上下文分析提升结果相关性。它能更好处理同义词替换、一词多义等语义细微差异,使最终结果准确。

原理:使用模型对每个检索结果计算相关性分数。

归一化:重排序模型原始输出分数没有固定的范围,它可能是任意实数,将结果归一化处理,将分数映射到 [0, 1] 范围内,使其更容易与向量相似度分数进行比较。

例如:

wKgZO2jZEDGALEU-AADQvd_ULCI264.png

常用的重排序模型:

wKgZPGjZEDKAf58oAAKGhnJcCUA764.png



3、信息整合

格式化检索的结果,构建提示词模板,同时将搜索的内容截断或摘要长文本以适应LLM上下文窗口token。

提示词优化:

1. 限定回答范围

2. 要求标注来源

3. 设置拒绝回答规则

4. ...

例如:

prompt 模板:

你是一名ROMA框架专家,请基于以下上下文回答:

参考信息:
[文档1] 什么是 ROMA?
ROMA 是一个全自主研发的前端开发基于自定义DSL(Jue语言),一份代码,可在iOS、Android、Harmony、Web四端运行的跨平台解决方案。
ROMA 框架的中文名为罗码。
[文档2] Roma介绍?
[Roma介绍](docs/guide/guide/introduction.md)
文档地址: https://roma-design.jd.com/docs/guide/guide/introduction.html

要求:
1. 分步骤说明,含代码示例
2. 标注来源文档版本
3. 如果参考信息中没有相关内容,请直接说明无法回答,不要编造信息

请基于以下参考信息回答用户的问题。如果参考信息中没有相关内容,请直接说明无法回答,不要编造信息。


用户问题: ROMA是什么?

回答: {answer}

4、LLM生成

向LLM(如GPT-4、Claude)发送提示,获取生成结果。

autobots示例:

wKgZO2jZEDOAL7HtAAKSJ2DfE54710.png

以上,实现了最简单的RAG流程。实际的RAG过程会比上述麻烦更多,包括图片、表格等多模态内容的处理,更复杂的文本解析和预处理过程,文档格式的兼容,结构化与非结构化数据的兼容等等。



最后RAG各阶段优化方式:

wKgZPGjZEDaASAIvABwnkgo9q6U998.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3994

    浏览量

    67839
  • 大模型
    +关注

    关注

    2

    文章

    3462

    浏览量

    4997
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    TaD+RAG-缓解大模型“幻觉”的组合新疗法

    TaD:任务感知解码技术(Task-aware Decoding,简称TaD),京东联合清华大学针对大语言模型幻觉问题提出的项技术,成果收录于IJCAI2024。 RAG:检索增强生成技术
    的头像 发表于 07-16 15:01 1.3w次阅读
    TaD+<b class='flag-5'>RAG</b>-缓解大<b class='flag-5'>模型</b>“幻觉”的组合新疗法

    名单公布!【书籍评测活动NO.52】基于大模型RAG应用开发与优化

    外挂。 用个例子帮助理解RAG的概念: 如果把大模型比喻成个经过大量知识与技能训练的优秀学生,把大模型响应的
    发表于 12-04 10:50

    【「基于大模型RAG应用开发与优化」阅读体验】+大模型微调技术解读

    今天学习<基于大模型RAG应用开发与优化>这本书。大模型微调是深度学习领域中的项关键技术,它指的是在已经预训练好的大型深度学习模型
    发表于 01-14 16:51

    【「基于大模型RAG应用开发与优化」阅读体验】+Embedding技术解读

    今天学习大模型RAG 检索增强生成技术Embedding,即嵌入,是种将离散数据(如文字、图像、音频等)转换为连续的密集向量表示的技术。这些向量能够反映原始数据之间的关系,使得计算机能够更好地处
    发表于 01-17 19:53

    【「基于大模型RAG应用开发与优化」阅读体验】+第章初体验

    机制。 《基于大模型RAG应用开发与优化》第章以清晰的逻辑框架,帮助读者建立对大模型RAG的全局认知。通过剖析技术原理、优势与挑战
    发表于 02-07 10:42

    【「基于大模型RAG应用开发与优化」阅读体验】RAG基本概念

    随着大模型在25年初的进步发展,RAG应用已成为新的个趋势,很荣幸有机会试读这本<基于大模型
    发表于 02-08 00:22

    《AI Agent 应用与项目实战》阅读心得3——RAG架构与部署本地知识库

    分析模型在不同类型数据上的表现,来优化文本分割策略和检索参数,使系统在保持响应速度的同时,能够提供更准确的查询结果。 经过对第6-7章的深入学习,我对RAG技术在工程实践中的应用有了更系统的认识。这
    发表于 03-07 19:49

    搜索出生的百川智能大模型RAG爬坑之路总结

    今天对百川的RAG方法进行解读,百川智能具有深厚的搜索背景,来看看他们是怎么爬RAG的坑的吧~
    的头像 发表于 01-05 15:02 2542次阅读
    搜索出生的百川智能大<b class='flag-5'>模型</b><b class='flag-5'>RAG</b>爬坑之路总结

    阿里云推出企业级大模型RAG系统

    在国际AI大数据峰会上,阿里云重磅推出了企业级大模型检索增强生成(RAG)解决方案。这解决方案旨在为企业提供更强大、更智能的大模型应用工具,帮助企业更有效地利用大数据和人工智能技术。
    的头像 发表于 02-05 09:54 1819次阅读

    什么是RAGRAG学习和实践经验

    高级的RAG能很大程度优化原始RAG的问题,在索引、检索和生成上都有更多精细的优化,主要的优化点会集中在索引、向量模型优化、检索后处理等模块进行优化
    的头像 发表于 04-24 09:17 2778次阅读
    什么是<b class='flag-5'>RAG</b>,<b class='flag-5'>RAG</b>学习和<b class='flag-5'>实践</b>经验

    如何手撸个自有知识库的RAG系统

    用于自然语言处理任务,如文本生成、问答系统等。 我们通过下几个步骤来完成个基于京东云官网文档的RAG系统 数据收集 建立知识库 向量检索 提示词与模型 数据收集 数据的收集再整个
    的头像 发表于 06-17 14:59 1386次阅读

    使用OpenVINO和LlamaIndex构建Agentic-RAG系统

    解决大语言模型在知识时效性和专业性上的不足。但同时传统的 RAG 系统也有它的缺陷,例如灵活性较差,由于 RAG 会过分依赖于向量数据库的检索结果,导致其在解决些复杂问题的时候,只是
    的头像 发表于 10-12 09:59 1325次阅读
    使用OpenVINO和LlamaIndex构建Agentic-<b class='flag-5'>RAG</b>系统

    Cloudera推出RAG Studio,助力企业快速部署聊天机器人

    企业在利用实时企业数据部署RAG聊天机器人方面迈出了重要步,且整个过程仅需几分钟。 RAG Studio是款无代码解决方案,它极大地简化
    的头像 发表于 12-12 11:06 1044次阅读

    RAG的概念及工作原理

    检索增强型生成(RAG)系统正在重塑我们处理AI驱动信息的方式。作为架构师,我们需要理解这些系统的基本原理,从而有效地发挥它们的潜力。 什么是RAG? 总体而言,RAG系统通过将大型语言模型
    的头像 发表于 12-17 13:41 3083次阅读
    <b class='flag-5'>RAG</b>的概念及工作原理

    借助浪潮信息元脑企智EPAI高效创建大模型RAG

    面对大量不断迭代的新知识,大模型必须“终身学习”才能满足实际应用的需求。RAG(Retrieval-augmented Generation,检索增强生成)让生成式大模型能够利用外部的知识源来增强
    的头像 发表于 12-19 14:32 1063次阅读
    借助浪潮信息元脑企智EPAI高效创建大<b class='flag-5'>模型</b><b class='flag-5'>RAG</b>