本文介绍了RAG(检索增强生成)技术在大模型开发中的应用,包括RAG的概念、工作流程和相关技术。通过为AI面试助手添加知识问答功能的实战案例,详细讲解了如何使用Spring AI框架实现基于本地知识库和云知识库服务的两种RAG方式。文章强调了RAG技术能解决大模型知识时效性限制和幻觉问题,让AI能够基于特定知识库提供更准确、个性化的回答。

一、AI知识问答需求分析

AI知识问答应用场景

随着 AI 技术的快速发展,越来越多的公司开始利用 AI 重构传统业务,打造全新的用户⁠体验和商业价值。其中,AI 知识问答是一个典型应用场景,广泛运用到教育、电商、咨询等行业,比如:

  • 教育场景:AI 针对学生的薄弱环节提供个性化辅导
  • 电商场景:AI 根据用户肤质推荐适合的护肤方案
  • 法律咨询:AI 能解答法律疑问,节省律师时间
  • 金融场景:AI 为客户提供个性化理财建议
  • 医疗场景:AI 辅助医生进行初步诊断咨询

说白了,就是让 AI 利用特定行业的知识来服务客户,实现降本增效。其中⁠,知识的来源可能来源于网络,也可能是自己公司私有的数据,从而让 AI 提供更精准的服务。

AI 面试助手应用的潜在需求

对于我们的AI 面试助手,同样可以利用 AI 知识问答满足很多⁠需求。如果自己想不到需求的话,我们可以利用 AI 来挖掘一些需求

本项目的具体需求

其实上述需求的实现方式几乎是一致的,所以我们项目将挑选其中一个实现,重点实现 定制化个人针对面试 功能,让 AI 面试助手不仅能回答用户的面试问题和模拟面试,还能推荐自己出品的相关课程和服务,帮用户解决就业和面试难题的同时,实现一波变现。

如何让 AI 获取知识?

在实现这个需求前,我们需要思考一个关键问题:面试知识从哪里获取呢?

首先 AI 原本就拥有一些通用的知识,对于不会的知识,还可以利用互联网搜索。但是这些都是从网络获取的、公开的知识。对于企业来说,数据是命脉,也是自己独特的价值,⁠随着业务的发展,企业肯定会积累一波自己的知识库,比如往期用户的咨询和成功案例、以及自家的课程,如果让 AI 能够利用这些知识库进行问答,效果可能会更好,而且更加个性化。

如果不给 AI 提供特定领域的知识库,AI 可⁠能会面临这些问题:

  1. 知识有限:AI 不知道你的最新课程和内容
  2. 编故事:当 AI 不知道答案时,它可能会 “自圆其说” 编造内容
  3. 无法个性化:不了解你的特色服务和回答风格
  4. 不会推销:不知道该在什么时候推荐你的付费课程和服务

那么如何让 AI 利用自己的知识库进行问答呢?⁠这就需要用到 AI 主流的技术 —— RAG。

二、RAG 概念

什么是 RAG?

RAG(Retrieval-Augmented Generation,检索增强生⁠成)是一种结合信息检索技术和 AI 内容生成的混合架构,可以解决大模型的知识时效性限制和幻觉问题。

简单来说,RAG 就像给 AI 配了一个 “小抄本”,让 AI 回⁠答问题前先查一查特定的知识库来获取知识,确保回答是基于真实资料而不是凭空想象。

从技术角度看,RAG 在大语言模型生成回答之前,会先从外部知识库中检索相关信⁠息,然后将这些检索到的内容作为额外上下文提供给模型,引导其生成更准确、更相关的回答。

通过 RAG 技术改造后,AI 就能:

  • 准确回答关于特定内容的问题
  • 在合适的时机推荐相关课程和服务
  • 用特定的语气和用户交流
  • 提供更新、更准确的建议

可以简单了解下 RAG 和传统 AI 模型的区别:

特性 传统大语言模型 RAG增强模型
知识时效性 受训练数据截止日期限制 可接入最新知识库
领域专业性 泛化知识‌,专业深度有限 可接入专业领域知识
响应准‍确性 可能产生 “幻觉” 基于检索的事⁠实依据
可控性 依赖原始训练 可通过知‍识库定制输出
资源消耗 较高(需要大模型参‍数) 模型可更小,结合外部知识

RAG 工作流程

RAG 技术实现主要包含以下 4 个核心步骤,⁠让我们分步来学习:

  • 文档收集和切割
  • 向量转换和存储
  • 文档过滤和检索
  • 查询增强和关联
1、文档收集和切割

文档收集:从各种来源(网页、PDF、数据库等)收集原始文档

文档预处理:清洗、标准化文本格式

文档切割:将长文档分割成适当大小的片段(俗称 ⁠chunks)

  • 基于固定大小(如 512 个 token)
  • 基于语义边界(如段落、章节)
  • 基于递归分割策略(如递归字符 n-gram 切割)
2、向量转换和存储

向量转换:使用 Embedding 模型将文本⁠块转换为高维向量表示,可以捕获到文本的语义特征

向量存储:将生成的向量和对应文本存入向量数据库⁠,支持高效的相似性搜索

3、文档过滤和检索

查询处理:将用户问题也转换为向量表示

过滤机制:基于元数据、关键词或自定义规则进行过滤

相似度搜索:在向量数据库中查找与问题向量最相似⁠的文档块,常用的相似度搜索算法有余弦相似度、欧氏距离等

上下文组装:将检索到的多个文档块组装成连贯上下文

4、查询增强和关联

提示词组装:将检索到的相关文档与用户问题组合成增强提示

上下文融合:大模型基于增强提示生成回答

源引用:在回答中添加信息来源引用

后处理:格式化、摘要或其他处理以优化最终输出

完整工作流程

分别理解上述 4 个步骤后,我们可以将它们组合⁠起来,形成完整的 RAG 检索增强生成工作流程:

上述工作流程中涉及了很多技术名词,让我们分别进行解释。

RAG 相关技术

Embedding 和 Embedding 模型

Embedding 嵌入是将高维离散数据(如文字、图片)转换为低维连续向量的⁠过程。这些向量能在数学空间中表示原始数据的语义特征,使计算机能够理解数据间的相似性。

Embedding 模型是执行这种转换算法的机器学习模型,如 Word2Vec(文本)、ResNet(图像)等。不同的 Emb⁠edding 模型产生的向量表示和维度数不同,一般维度越高表达能力更强,可以捕获更丰富的语义信息和更细微的差别,但同样占用更多存储空间。

举个例子,“程序员” 和 “后端开发” 的 Embedding 向⁠量在空间中较接近,而 “程序员” 和 “演员” 则相距较远,反映了语义关系。

向量数据库

向量数据库是专门存储和检索向量数据的数据库系统。通⁠过高效索引算法实现快速相似性搜索,支持 K 近邻查询等操作。

注意,并不是只有向量数据库才能存储向量数据,只⁠不过与传统数据库不同,向量数据库优化了高维向量的存储和检索。

AI 的流行带火了一波向量数据库和向量存储,比如 Milvus、Pinecone 等。此外,一些传统数据库⁠也可以通过安装插件实现向量存储和检索,比如 PGVector、Redis Stack 的 RediSearch 等。

用一张图来了解向量数据库的分类:

召回

召回是信息检索中的第一阶段,目标是从大规模数据集中快速筛选出可能相关的候选项子集。强调速度和广度,而非精确度。

举个例子,我们要从搜索引擎查询 “程序员模拟面试社区” 时,召回阶段会从数十亿网⁠页中快速筛选出数千个含有 “面试”、“社区”、“程序员” 等相关内容的页面,为后续粗略排序和精细排序提供候选集。

精排和 Rank 模型

精排(精确排序)是搜索 / 推荐系统的最后阶段,使用计算复杂⁠度更高的算法,考虑更多特征和业务规则,对少量候选项进行更复杂、精细的排序。

比如,短视频推荐先通过召回获取数万个可能相关视频,再通过粗排缩减至数百条,最后精⁠排阶段会考虑用户最近的互动、视频热度、内容多样性等复杂因素,确定最终展示的 10 个视频及顺序。

Rank 模型(排序模型)负责对召回阶段筛选出⁠的候选集进行精确排序,考虑多种特征评估相关性。

现代 Rank 模型通常基于深度学习,如 BERT、LambdaMART 等,综合考虑查询与候选项的⁠相关性、用户历史行为等因素。举个例子,电商推荐系统会根据商品特征、用户偏好、点击率等给每个候选商品打分并排序。

混合检索策略

混合检索策略结合多种检索方法的优势,提高搜索⁠效果。常见组合包括关键词检索、语义检索、知识图谱等。

比如在 AI 大模型开发平台 Dify 中,就为用户提供了 “基于全文检索的关键⁠词搜索 + 基于向量检索的语义检索” 的混合检索策略,用户还可以自己设置不同检索方式的权重。

了解了 RAG 概念后,我们来学习如何利用编程开发实现 RAG。想要在程序中让 AI 使用知识库,首先建议利用一个 AI 开发⁠框架,比如 Spring AI;然后可以通过 2 种模式进行开发 —— 基于本地知识库或云知识库服务实现 RAG。下面分别讲解这 2 种模式。

RAG 实战:Spring AI + 本地知识库

Spring AI 框架为我们实现 RAG 提供了全流程的支持,参考 Spring AI 和 Spring AI Alibaba 的官方文档。

由于是第一个 RAG 程序,我们参考标准的 RAG 开发⁠步骤并进行一定的简化,来实现基于本地知识库的 AI 知识问答应用。

标准的 RAG 开发步骤:

  1. 文档收集和切割
  2. 向量转换和存储
  3. 切片过滤和检索
  4. 查询增强和关联

简化后的 RAG 开发步骤:

  1. 文档准备
  2. 文档读取
  3. 向量转换和存储
  4. 查询增强

1、文档准备

首先准备用于给 AI 知识库提供知识的文档,推⁠荐 Markdown 格式,尽量结构化。

大家在学习 RAG 的过程中,可以利用 ⁠AI 来生成文档

2、文档读取

首先,我们要对自己准备好的知识库文档进行处理,然后保存到向量数据库中。这个过程俗称 ETL(抽取、转换、加载),Spring AI 提供了对 ETL 的支持,参考 官方文档。

ETL 的 3 大核心组件,按照顺序执行:

  • DocumentReader:读取文档,得到文档列表
  • DocumentTransformer:转换文档,得到处理后的文档列表
  • DocumentWriter:将文档列表保存到存储中(可以是向量数据库,也可以是其他存储)

刚开始学习 RAG,我们不需要关注太多 ETL 的细节、也不用对文档进行特殊处理,下面⁠我们就先用 Spring AI 读取准备好的 Markdown 文档,为写入到向量数据库做准备。

1)引入依赖

Spring AI 提供了很多种 Docume⁠ntReaders,用于加载不同类型的文件。

我们可以使用 MarkdownDocumentReader 来读取 Markdown 文档。需要先引入依赖,可以在 Maven 中央仓库 找到(官方都没有提)。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-markdown-document-reader</artifactId>
    <version>1.0.0-M6</version>
</dependency>

2)在根目录下新建 rag 包,编写文档加载器类 InterviewAppDocumentLoader,负责读取所有 Markdown 文档并转换为 Document 列表。代码如下:

@Component
@Slf4j
publicclass AppDocumentReader {
    privatefinal ResourcePatternResolver resourcePatternResolver;

    AppDocumentReader(ResourcePatternResolver resourcePatternResolver) {
        this.resourcePatternResolver = resourcePatternResolver;
    }

    List<Document> loadMarkdown() {
        List<Document> documents = new ArrayList<>();
        try {
            Resource[] resources = resourcePatternResolver.getResources("classpath*:markdown/*.md");
            for (Resource resource : resources) {
                String filename = resource.getFilename();
                MarkdownDocumentReaderConfig config = MarkdownDocumentReaderConfig.builder()
                        .withHorizontalRuleCreateDocument(true)
                        .withIncludeCodeBlock(false)
                        .withIncludeBlockquote(false)
                        .withAdditionalMetadata("filename", "code.md")
                        .build();
                MarkdownDocumentReader markdownDocumentReader = new MarkdownDocumentReader(resource, config);
                documents.addAll(markdownDocumentReader.get());
            }
        } catch (IOException e) {
            log.error("Failed to load markdown", e);
        }
        return documents;
    }
}

上述代码中,我们通过 MarkdownDocumentReaderConfig 文档加载配置来指定读取文档的细节,比如是否读取代码块、引用⁠块等。特别需要注意的是,我们还指定了额外的元信息配置,提取文档的文件名(fileName)作为文档的元信息,可以便于后续知识库实现更精确的检索。

3、向量转换和存储

为了实现方便,我们先使用 Spring AI 内置的、基⁠于内存读写的向量数据库 SimpleVectorStore 来保存文档。

SimpleVectorStore 实现了 VectorStore 接口,而 V⁠ectorStore 接口集成了 DocumentWriter,所以具备文档写入能力。如图:

在 rag 包下新建 InterviewAppVectorStoreConfig 类,实现初始化向量数据库并且保存文档的方法。代码如下:

@Configuration
publicclass InterviewAppVectorStoreConfig {

    @Resource
    private InterviewAppDocumentLoader interviewAppDocumentLoader;
    
    @Bean
    VectorStore interviewAppVectorStore(EmbeddingModel dashscopeEmbeddingModel) {
        SimpleVectorStore simpleVectorStore = SimpleVectorStore.builder(dashscopeEmbeddingModel)
                .build();
        // 加载文档
        List<Document> documents = interviewAppDocumentLoader.loadMarkdowns();
        simpleVectorStore.add(documents);
        return simpleVectorStore;
    }
}

4、查询增强

Spring AI 通过 Advisor 特性提供了开箱即用的 RAG 功能。主要是 QuestionAnswerAdv⁠isor 问答拦截器和 RetrievalAugmentationAdvisor 检索增强拦截器,前者更简单易用、后者更灵活强大。

查询增强的原理其实很简单。向量数据库存储着 AI 模型本身不知道的数据,当用户问题发送给 AI 模型时,QuestionAnswerAd⁠visor 会查询向量数据库,获取与用户问题相关的文档。然后从向量数据库返回的响应会被附加到用户文本中,为 AI 模型提供上下文,帮助其生成回答。

查看 QuestionAnswerAdvisor ⁠源码,可以看到让 AI 基于知识库进行问答的 Prompt:

根据 官方文档,需要先引入依赖:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-advisors-vector-store</artifactId>
</dependency>

此处我们就选用更简单易用的 QuestionAnswerAdvisor 问答拦截器,在 InterviewApp 中新增和 RAG 知识库进行对话的方法。代码如下:

@Resource
private VectorStore AppVectorStore;

publicString doChatWithRag(String message, String chatId) {
    ChatResponse chatResponse = chatClient
            .prompt()
            .user(message)
            .advisors(spec -> spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)
                    .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10))
            // 开启日志,便于观察效果
            // .advisors()
            // 应用知识库问答
            .advisors(new QuestionAnswerAdvisor(AppVectorStore))
            .call()
            .chatResponse();
    String content = chatResponse.getResult().getOutput().getText();
    log.info("content: {}", content);
    return content;
}

测试

编写单元测试代码,故意提问一个文档内有回答的问题:⁠

@Test
void doChatWithRag() {
    String chatId = UUID.randomUUID().toString();
    String message = "java是什么?";
    String answer =  InterviewApp.doChatWithRag(message, chatId);
    Assertions.assertNotNull(answer);
}

查看响应结果,AI 的回复成功包含了知识库里的内容:

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

在这里插入图片描述

为什么要学习大模型?

我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。

在这里插入图片描述

在这里插入图片描述

大模型入门到实战全套学习大礼包

1、大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

img


2、大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。

在这里插入图片描述

3、AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

img

4、大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

img

5、大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

img

适用人群

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

Logo

更多推荐