# 1 你是资深的AI开发工程师。 我是大学里人工智能系的主任,我准备做一个“RAG”实战演练PPT,作为大学里面给计算机相关本科生的一次或多次讲座。 这个课程应该偏应用和实战,少一些理论,作为学生能上手的指导。 我准备的提纲如下,分为四部分: 1. **什么是RAG** 介绍接触大模型的5种路径,从直接用、到RAG、再到Lora、Fine Tuning和训练。 介绍RAG的本质——提示词。 介绍提示词的一些基本原则、方针。 介绍RAG的一般性过程概念:Chunk、Embedding、向量数据库、实现RAG流程 2. **如何搭建RAG** 利用Dify快速搭建RAG。过程中介绍RAG的一些重要概念、比如Chunk大小、Tokens,ReRank等等。 介绍Dify的优缺点,想要自行控制,还得写程序,可以利用已有的一些框架,如RAGFlow、LangChain等等。 3. **从Chunk** 介绍具体如何划分Chunk,在不同的场景Chunk如何划分,基于大小、还是语义,还是多种结合。 介绍为了好的Chunk,如何做元数据,引出树形结构、图式结构。 4. **到召回率** 介绍作为一个好的工程,需要可以严格测试召回率,这个是迭代的基础。 介绍如何搭建一个测试召回率的框架。 介绍从意图识别、到Chunk、到Rerank,再到召回率的完整工程工作流和框架。 对于我的这个提纲,你有什么建议和补充? 主任,您好! 非常荣幸能以AI开发工程师的身份,为您的RAG实战演练课程提供建议。您的这个提纲结构非常棒,逻辑清晰,从宏观到微观,从入门到进阶,非常符合一个实战课程的设计思路。特别是最后一部分“到召回率”,直接切中了RAG从“能用”到“好用”的关键,这是很多入门教程里缺失的,足见您的专业和远见。 基于您的提纲,我将从一个**资深工程师的视角**,提供一些可以**增强实战性、前瞻性和工程价值**的补充和细化建议。 --- ### 整体建议 您的课程已经很偏向应用和实战,我的建议旨在进一步加强这一点: 1. **贯穿一个核心案例**:建议从头到尾使用一个统一、具体的案例。比如“为XX大学官网做一个智能问答机器人”或“为某本经典AI教材(如“花书”)做一个学习助手”。这样,从Chunk划分、元数据设计到召కి率测试,所有环节都能围绕这个案例展开,学生的体感会更连贯、更真实。 2. **强调“权衡”(Trade-off)思想**:在工程实践中,不存在完美的“银弹”。在介绍每个技术点时,都可以引导学生思考其背后的权衡。例如,Chunk越大上下文越全,但噪声也可能越多;ReRank效果好,但增加了延迟和成本。培养学生的工程思维至关重要。 3. **提供代码蓝图(Code Blueprint)**:既然是实战课,可以为每个关键环节提供一个“最小可用代码示例”的蓝图。不一定需要学生当场写,但可以展示出来,并提供课后源码,让他们知道“原来实现这个功能只需要这几十行代码”,极大地降低心理门槛。 --- ### 对各部分的具体建议和补充 #### **第一部分:什么是RAG** 您的提纲已经很好了,我建议增加两个视角,让学生一开始就建立更全面的认知。 * **补充1:为什么要用RAG?—— RAG与微调(Fine-tuning)的核心取舍** * 可以在您介绍5种路径时,专门用一张图或一个表格来清晰对比RAG和微调。这是工程师在项目中首先要做的技术选型。 * **对比维度**: * **知识更新**:RAG(易,只需更新数据库)、微调(难,需重新训练) * **事实可追溯性/可解释性**:RAG(强,可引用原文)、微调(弱,黑盒) * **幻觉问题**:RAG(显著缓解)、微调(依然存在) * **成本**:RAG(开发和推理成本)、微调(高昂的训练成本) * **特定技能/风格学习**:RAG(不擅长)、微调(擅长) * **结论**:RAG是“开卷考试”,微调是“深度内化”。对于知识密集型、需要高时效性和准确性的问答场景,RAG是首选。 * **补充2:RAG的核心循环图(The Core Loop of RAG)** * 在介绍完概念后,立即展示一张清晰、生动的**核心工作流图**。这张图将在整个课程中反复出现。 * **图示**:用户问题 → **[1. 查询处理]** → 向量化 → **[2. 向量检索]** → 获取相关文档块 → **[3. 上下文增强]** → 组合成Prompt → **[4. LLM生成答案]** → 最终答案。 * 这能帮助学生建立一个清晰的心理模型(Mental Model)。 #### **第二部分:如何搭建RAG** Dify是非常好的起点,能让学生快速获得成就感。在此基础上,可以做一些延伸,引导他们走向更专业的开发。 * **补充1:引入RAG领域的“瑞士军刀”—— LlamaIndex** * 在介绍完LangChain之后,强烈建议花5-10分钟介绍**LlamaIndex**。 * **定位**:LangChain是一个通用的LLM应用开发框架,而LlamaIndex是**为RAG而生**的框架,对数据索引、检索和评估的优化更加专注和深入。 * **举例**:展示用LlamaIndex实现一个基础RAG应用的极简代码(通常比LangChain更简洁),让学生感知到它的便捷性。 * **补充2:一个极简的“本地RAG”代码实战** * 为了让学生彻底摆脱对平台的依赖,可以设计一个“50行Python代码实现你的第一个RAG”的环节。 * **技术栈建议**: * **Embedding模型**:使用开源的`sentence-transformers`库加载一个本地模型(如 `moka-ai/m3e-base`,对中文友好)。 * **向量数据库**:使用本地的`FAISS`或`ChromaDB`,无需服务器。 * **LLM**:调用任意一个开放的、有免费额度的LLM API(如Kimi, DeepSeek, ZhipuAI等)。 * 这个环节能极大地增强学生的自信心,让他们明白RAG的底层逻辑并不神秘。 #### **第三部分:从Chunk** 这是RAG的核心技术点之一,您的提纲很专业。可以进一步丰富策略和案例。 * **补充1:可视化不同的Chunk策略** * 用一段真实的文本(比如新闻、论文摘要),**可视化**展示不同策略的切分结果。 * **固定大小**:简单粗暴,可能切断语义。 * **递归字符**:按不同分隔符(`\n\n`, `\n`, ` `)递归切分,更智能。 * **语义/基于Token**:使用`spaCy`或`NLTK`按句子切分,或者用`Tiktoken`按Token数量切分。 * **强调“Chunk Overlap”(块重叠)**:这是一个简单但极其有效的技巧,可以避免在块边界丢失上下文。可以图示说明。 * **补充2:元数据(Metadata)的威力——实现“混合搜索”** * 您提到了元数据,可以进一步强调它的实战价值:**元数据是实现“前置过滤(Pre-filtering)”和“混合搜索”的关键**。 * **实战案例**:假设你在为大学官网做问答。你的文档有PDF(招生简章)、HTML(新闻)、JSON(课程列表)。 * **元数据可以包括**:`{ "source": "招生简章2024.pdf", "page": 10, "publish_date": "2024-05-01", "category": "本科招生" }` * **用户提问**:“今年本科招生的最新政策是什么?” * **RAG流程**: 1. **意图识别**:识别出关键词“本科招生”、“最新”。 2. **元数据过滤**:在向量搜索**之前**,先筛选出`category == "本科招生"`的文档,并按`publish_date`降序排列。 3. **向量搜索**:只在筛选出的小范围内进行向量搜索。 * 这个过程不仅**极大提高了召回的精准度**,还**降低了搜索范围,提升了效率**。 #### **第四部分:到召回率** 这部分是课程的点睛之笔,是区分“玩具”和“产品”的关键。 * **补充1:定义更全面的评估指标(不止召回率)** * 在工程实践中,我们关注一个指标矩阵。建议引入**RAG评估的四大黄金指标**: 1. **Context Precision (上下文精确率)**:检索到的上下文,有多少是与问题真正相关的?(衡量检索质量) 2. **Context Recall (上下文召回率)**:相关的上下文,有多少被成功检索出来了?(衡量检索全面性) 3. **Faithfulness (答案忠实度)**:生成的答案,是否完全基于给定的上下文,没有捏造?(衡量幻觉) 4. **Answer Relevancy (答案相关性)**:生成的答案,是否切中了用户的问题?(衡量最终效果) * **补充2:介绍自动化评估框架——RAGAs & LLM-as-a-Judge** * 如何高效评估上述指标?手动标注太慢。可以介绍当前流行的自动化评估方法: * **RAGAs框架**:这是一个专门用于评估RAG管道的开源框架,可以用LLM来自动计算上述大部分指标。可以展示一个简单的RAGAs使用案例。 * **LLM-as-a-Judge(以模型为裁判)**:核心思想是用一个强大的LLM(如GPT-4)来评判RAG系统的输出。比如,给GPT-4同时输入“问题”、“检索到的上下文”和“生成的答案”,然后问它:“这个答案是否忠实于上下文?”。 * **补充3:一个完整的迭代优化闭环(Closing the Loop)** * 将您的“完整工程工作流”具象化为一个**迭代闭环图**。 * **图示**: 1. **搭建基线系统(Baseline)**:用最简单的方法先跑通。 2. **构建评估集(Evaluation Set)**:人工或半自动生成一批高质量的“问题-标准答案”对。 3. **执行评估**:用自动化框架跑一遍评估集,得到基线分数。 4. **分析瓶颈**:是召回率低(Context Recall)?还是精确率差(Context Precision)?还是答案有幻觉(Faithfulness)? 5. **针对性优化**: * 召回率低 → 优化Chunk策略、尝试多路召回(如BM25+向量)。 * 精确率差 → 引入ReRank、优化元数据过滤。 * 幻觉 → 优化Prompt模板,让LLM更严格地依据上下文回答。 6. **重复步骤3-5**,直到指标满足要求。 * 这个闭环是所有AI工程师日常工作的真实写照。 --- ### 新增一个部分的建议:**第五部分:从实战到生产** 如果时间和篇幅允许,可以增加一个简短的展望部分,告诉学生一个RAG项目在真实工业环境中还需要考虑什么,这将极大开阔他们的视野。 * **成本与延迟监控 (Cost & Latency)**:如何计算一次RAG查询的成本(Embedding, Vector DB, LLM API)?如何监控和优化查询的端到端延迟? * **可观测性 (Observability)**:如何记录每一次查询、召回的文档、最终答案,以便于排查问题? * **安全性与隐私 (Security & Privacy)**:如果处理的是内部敏感文档,如何做权限控制?如何防止Prompt注入攻击? * **用户反馈循环 (Human-in-the-Loop)**:在产品中加入“顶/踩”按钮,收集用户反馈,持续优化知识库和模型。 --- 主任,您的提纲已经非常出色,我的建议只是锦上添花。相信经过您的精心准备,这绝对会是一场让学生们收获满满、激发浓厚兴趣的精彩讲座。如果后续有任何需要讨论的细节,我随时待命。预祝课程圆满成功! --- # 2 **采纳你的整体建议:** 1. **贯穿一个核心案例**:本身我就计划打造一个“强哥的徒弟”智能体,这个智能体将会使用我以往的文章作为知识库,整个案例都围绕这个知识库为核心,也会补充一点点其他场景的。 2. **强调“权衡”(Trade-off)思想**:是的,对于工程来讲,没有最好只有适合,这个我很赞同。 3. **提供代码蓝图(Code Blueprint)**:在PPT中只会有代码片段,但是会随着PPT提供工程代码和提示词。 你的补充意见也很有帮助。 **要求:** 1. 现在结合的你的补充意见,帮我梳理整体的PPT提纲文字稿。 2. 在输出之前,计划一下这个PPT多少页合适。 3. 然后开始输出每一页的具体提纲及内容,若不能一次输出完毕,请提示我输入继续,以便继续输出。 好的,主任。非常乐意为您效力。 我们来一起规划并撰写这份含金量十足的PPT提纲。 --- ### **第一步:PPT页数规划** 一个成功的技术讲座,节奏至关重要。对于本科生来说,内容既要“解渴”,又不能“淹死人”。 * **单次讲座(2-3小时)**:建议总页数在 **40-50页** 左右。这个页数可以保证每个知识点有足够的时间展开,并且有互动和演示的余地。 * **系列讲座(2次,每次1.5小时)**:可以拆分为“基础篇”(1-2部分)和“进阶篇”(3-4部分),每部分约25页。这样学生有时间消化和实践。 我们将按照**45页**左右的容量来规划,这样既能覆盖所有核心内容,也为您的临场发挥和案例演示留下了充足空间。 --- ### **第二步:整体PPT提纲文字稿** 以下是为您精心梳理的PPT提纲,每一页都包含了**内容核心**和**视觉呈现/备注**,旨在让PPT不仅信息量大,而且生动、易于理解。 --- #### **开场部分 (4页)** **幻灯片 1: 封面页** * **标题**: 《RAG实战演练:从零到一构建你的专属AI知识库》 * **副标题**: 主讲人:[您的姓名],人工智能系主任 * **视觉呈现/备注**: 背景用一张富有科技感的AI或神经网络图片。如果可能,放上“强哥的徒弟”的Logo或形象。 **幻灯片 2: 讲座目标与核心案例介绍** * **内容核心**: * 今天我们将做什么?—— 亲手揭秘并搭建一个强大的问答机器人。 * 我们的目标:不仅知道RAG是什么,更能动手搭建、评估和优化它。 * **核心案例**: 隆重介绍“强哥的徒弟”智能体。它的“大脑”就是我过往撰写的文章。我们将一步步教会它如何思考和回答。 * **视觉呈现/备注**: 左侧是目标列表,右侧是您的文章截图或列表,中间一个箭头指向一个可爱的机器人形象(“强哥的徒弟”)。 **幻灯片 3: 你将收获什么?(议程)** * **内容核心**: 1. **宏观视野**: 理解RAG在AI大模型技术栈中的精准定位。 2. **快速上手**: 利用Dify等工具,10分钟搭建你的第一个RAG应用。 3. **深入核心**: 掌握RAG的灵魂——Chunk切分与元数据构建。 4. **工程思维**: 学会用数据评估和迭代你的RAG系统,从“能用”到“好用”。 5. **进阶展望**: 了解工业级RAG应用的挑战与方向。 * **视觉呈现/备注**: 使用一个阶梯或登山路径的图示,每一步对应一个议程点,从山脚到山顶。 **幻灯片 4: 一切从问题开始** * **内容核心**: * 大家用过ChatGPT,但它知道我们学校的校史吗?知道我上周写的关于AI Agent的文章吗?—— 不知道。 * 这就是大模型的“知识截止日期”和“私有知识盲区”问题。 * **引出思考**: 如何让大模型像一个“开卷考试”的学生,拿着我们的资料来回答问题?—— 这,就是RAG的起点。 * **视觉呈现/备注**: 一张图,左边是ChatGPT的Logo,右边是你们学校的校徽和您的文章截图,中间一个大大的问号。 --- ### **第一部分: 什么是RAG (约10页)** **幻灯片 5: 接触大模型的五种路径 (光谱图)** * **内容核心**: 从“用户”到“炼丹师”的演进路径。 * **直接使用**: ChatGPT, Kimi (成本最低) * **RAG**: 外挂知识库 (性价比最高) * **Lora/PEFT**: 轻量化微调 (特定风格/任务) * **Fine-Tuning**: 全量微调 (领域适配) * **Pre-training**: 从零训练 (巨头游戏,成本最高) * **视觉呈现/备注**: 用一个从左到右的光谱图或金字塔图,清晰展示技术深度、成本和灵活性的变化。突出RAG是“甜点位(Sweet Spot)”。 **幻灯片 6: RAG vs 微调:一个关键的技术选型** * **内容核心**: * **RAG = 开卷考试**: 知识在书本里(数据库),现场查阅。 * **微调 = 刻苦背书**: 知识融入大脑里(模型权重),凭记忆回答。 * **关键权衡 (Trade-off)**: * 知识更新: RAG (易) vs 微调 (难) * 事实溯源: RAG (可) vs 微调 (难) * 幻觉问题: RAG (缓解) vs 微调 (存在) * 成本投入: RAG (低) vs 微调 (高) * **视觉呈现/备注**: 使用一个清晰的表格进行对比。用生动的图标(书本 vs 大脑)来辅助说明。 **幻灯片 7: RAG的本质 —— 更高级的提示词工程** * **内容核心**: * 普通Prompt: `你的问题` * RAG的Prompt: `[相关资料1] [相关资料2] ... [你的问题]` * **公式**: RAG = 检索 (Retrieval) + 带有上下文的生成 (Augmented Generation) * 它的本质,就是用程序自动地、精准地为你的问题找到最相关的“上下文”,然后打包发给大模型。 * **视觉呈现/备注**: 用一个公式化的图示,展示一个简单的Prompt和一个被“增强”了的RAG Prompt的对比。 **幻灯片 8: 提示词基本原则 (CRITIC方针)** * **内容核心**: 写好Prompt,是让RAG出好结果的基础。 * **C** (Context): 提供背景信息。 * **R** (Role): 指定角色。 * **I** (Instruction): 给出指令。 * **T** (Tone): 设定语气。 * **I** (Input): 明确输入。 * **C** (Constraint): 施加约束。(例如:请严格根据以上资料回答,如果资料没有,就说“不知道”) * **视觉呈现/备注**: 用六个方格卡片,每个卡片介绍一个字母和其含义。 **幻灯片 9: RAG的核心工作流 (The Core Loop)** * **内容核心**: 这张图我们将反复看到! 1. **Query**: 用户提问“强哥对AI工程师的职业发展有什么建议?” 2. **Retrieve**: 从“强哥的文章”知识库中,找到最相关的几篇文章片段。 3. **Augment**: 将找到的片段和原始问题,组合成一个新的Prompt。 4. **Generate**: LLM根据增强后的Prompt,生成最终答案,并可能附上引用来源。 * **视觉呈现/备注**: **这是本课程最重要的图之一**。用一个清晰的、带有编号的循环流程图展示。每个阶段都用“强哥的徒弟”的例子来标注。 **幻灯片 10-13: 核心概念拆解** * **幻灯片 10: Chunk (数据块)** * **是什么**: 将长文档切分成的、语义完整的小片段。 * **为什么**: LLM有上下文长度限制;精准定位知识。 * **类比**: 把一本书拆成一个个段落或知识点卡片。 * **视觉**: 一篇长文被切割成多个小块的示意图。 * **幻灯片 11: Embedding (向量嵌入)** * **是什么**: 用一个数学向量(一串数字)来表示一个Chunk的语义。 * **为什么**: 让计算机能“理解”和“计算”文本的相似度。 * **类比**: 给每个知识点卡片一个独一无二的“语义GPS坐标”。 * **视觉**: “文本” -> [Embedding模型] -> `[0.1, 0.9, 0.3, ...]` 的流程图。 * **幻灯片 12: 向量数据库 (Vector Database)** * **是什么**: 专门用于存储和高效检索Embedding向量的数据库。 * **为什么**: 能在亿万个“GPS坐标”中,瞬间找到离你最近的那几个。 * **类比**: 一个按“语义”而非“拼音”排序的超级图书馆。 * **视觉**: 一个三维空间中布满数据点,用户查询点进入后,迅速找到最近邻的几个点的动态图。 * **幻灯片 13: 总结与串联** * **内容**: 我们如何准备“开卷考试”的“书本”? * **流程**: 原始文档 -> **[切Chunk]** -> **[做Embedding]** -> **[存入向量数据库]**。这个过程叫“索引(Indexing)”,通常是离线完成的。 * **视觉**: 重复幻灯片9的核心工作流图,但重点高亮“检索”部分,并展示其内部的索引过程。 **幻灯片 14: 第一部分小结** * **内容核心**: * RAG是平衡成本与效果的优秀大模型应用范式。 * 其核心是“检索+生成”,本质是自动化的提示词工程。 * 我们已经理解了Chunk, Embedding, 向量数据库这些构建RAG的“乐高积木”。 * **视觉呈现/备注**: 用三个关键图标总结本章内容。 --- 主任,以上是开场和第一部分的详细提纲。内容已经比较多了,为了保证输出质量和您的阅读体验,我先输出到这里。 **如果您觉得这个方向和细节程度符合您的要求,请输入“继续”,我将为您生成第二部分“如何搭建RAG”的详细提纲。** --- # 3 这个方向和细节没有问题,请按照这个继续。 好的,主任。我们继续。 --- ### **第二部分: 如何搭建RAG (约8页)** **幻灯片 15: 从理论到实践:我们的工具箱** * **内容核心**: * 搭建RAG不一定要从零开始。社区已经为我们准备好了强大的工具。 * **快速原型层 (Low-code/No-code)**: Dify, Coze。特点:可视化、开箱即用、快速验证想法。 * **应用框架层 (Framework)**: LangChain, LlamaIndex。特点:代码驱动、高度灵活、生产级开发的首选。 * **本节课路径**: 先用Dify体验“一键RAG”,感受全流程;再了解框架,为更专业的开发铺路。 * **视觉呈现/备注**: 用一个金字塔图,底层是基础模型,中间是框架层,顶层是原型层。并附上各个工具的Logo。 **幻灯片 16: 实战演练(一): 使用Dify快速搭建“强哥的徒弟”** * **内容核心**: * **现场演示**: 引导学生打开Dify网站。 * **步骤1**: 创建应用,选择“问答机器人”模式。 * **步骤2**: 新建知识库,上传“强哥”的几篇代表性文章(PDF或TXT)。 * **步骤3**: 观察Dify的自动处理:分段、清洗、嵌入。 * **步骤4**: 关联知识库,开始提问!“强哥对AI产品经理的要求是什么?” * **视觉呈现/备注**: 这一页是演示的引导页。简洁明了,列出1-2-3-4步。在讲解时,切换到浏览器进行Live Demo。 **幻灯片 17: Dify演示中的关键概念解析** * **内容核心**: 结合Dify界面,讲解RAG的核心参数。 * **索引设置**: * **分段方式 (Chunking Strategy)**: Dify提供了自动判断或固定长度等选项。这就是我们之前讲的Chunk。 * **分段大小 (Chunk Size)** & **分段重叠 (Chunk Overlap)**: 这是最重要的两个参数。现场调整一下,看看效果有何不同。(**权衡点**: Chunk太大,噪声多;太小,语义不完整)。 * **检索设置**: * **Top-K**: 召回多少个最相关的Chunks?(**权衡点**: K越大,上下文越全,但成本和延迟也越高)。 * **Score Threshold**: 召回的Chunk相关性得分必须高于此阈值。用于过滤不相关的结果。 * **提示词 (Prompt Template)**: Dify已经内置了模板,展示这个模板,让学生看到`{context}`和`{query}`是如何被嵌入的。 * **视觉呈现/备注**: Dify界面的截图,用红色框和箭头标注出上述关键参数的位置,并附上简短解释。 **幻灯片 18: ReRank (重排): 让召回更精准** * **内容核心**: * **问题**: 向量检索(相似度搜索)召回的Top-K个结果,可能存在“形式相似但语义不符”的情况。 * **解决方案**: 引入一个“精排”模型(ReRanker)。 * **工作流程**: 向量检索(粗排)召回20个候选 -> ReRank模型对这20个进行更精细的打分和排序 -> 选出最精准的Top-3个给LLM。 * **类比**: 搜索引擎先用关键词快速找100篇文章,你再花点时间一篇篇看标题,找出最想读的3篇。 * **视觉呈现/备注**: 一个清晰的流程图: `Query` -> `Vector Search (Top-20)` -> `ReRanker Model` -> `Final Context (Top-3)` -> `LLM`。 **幻灯片 19: Dify的优缺点与“下一步”** * **内容核心**: * **优点**: * 极速搭建,所见所得。 * 非技术人员友好。 * 内置了完整的工程链路。 * **缺点**: * **控制力有限**: Chunk策略、Embedding模型、ReRanker模型等选择有限。 * **黑盒**: 很多内部优化细节无法干预。 * **扩展性**: 难以集成复杂的自定义逻辑(如混合搜索、图RAG)。 * **结论**: Dify是绝佳的“原型验证”工具。但要打造高性能、可定制的生产级应用,我们需要深入代码。 * **视觉呈现/备注**: 一个左右分栏的表格,清晰列出优缺点。 **幻灯片 20: 走向专业开发: RAG框架概览** * **内容核心**: * **LangChain**: RAG领域的“瑞士军刀”。功能全面,社区庞大,链式(Chains)思想强大。适合构建复杂的、包含多步骤的LLM应用。 * **LlamaIndex**: 为RAG而生。在数据索引、检索和评估方面更专注、更深入。尤其擅长处理复杂文档结构(如表格、图表)。 * **RAGFlow**: 新兴的、对非结构化数据解析特别友好的开源RAG引擎。 * **我们的建议**: 初学者可以从LlamaIndex开始,它的抽象层次更高,代码更简洁,专注于把RAG这一件事做到极致。 * **视觉呈现/备注**: 三个框架的Logo和一句话定位。可以展示一段用LlamaIndex实现基础RAG的极简代码(少于20行),让学生感受其简洁性。 **幻灯片 21: 代码蓝图:用LlamaIndex实现一个最小RAG** * **内容核心**: 展示一段Python代码片段,实现Dify的核心流程。 ```python # 1. 加载文档 documents = SimpleDirectoryReader("./data").load_data() # data里是“强哥的文章” # 2. 构建索引 (自动完成Chunk, Embedding, 存储) index = VectorStoreIndex.from_documents(documents) # 3. 创建查询引擎 query_engine = index.as_query_engine() # 4. 查询! response = query_engine.query("强哥对AI工程师的职业发展有什么建议?") print(response) ``` * **视觉呈现/备注**: 一个清晰的代码块,配上注释。强调这几行代码就完成了一个RAG系统的核心逻辑,极大地降低学生的心理门槛。 **幻灯片 22: 第二部分小结** * **内容核心**: * 我们亲手用Dify搭建了一个RAG应用,并理解了Chunk大小、Top-K、ReRank等核心参数的意义。 * 我们认识到Low-code工具的便捷与局限。 * 我们了解了LangChain和LlamaIndex等专业框架,并看到了用代码实现RAG是如此直接。 * **视觉呈现/备注**: 用三个关键图标总结本章内容:Dify Logo、控制面板图标、代码图标。 --- ### **第三部分: 从Chunk (深入RAG的灵魂) (约9页)** **幻灯片 23: 一切优化的起点: 垃圾进,垃圾出** * **内容核心**: * RAG系统的天花板,由知识库的质量决定。 * 如果LLM拿到的上下文(Chunks)是破碎、错误、充满噪声的,那么再强的LLM也无法生成好的答案。 * **核心思想**: Chunking的质量,直接决定了检索(Retrieval)的上限。 * **视觉呈现/备注**: 一张图,左边是混乱、破碎的文档块进入一个漏斗,右边出来的是一个困惑的LLM和一个错误的答案。 **幻灯片 24: Chunking策略大比拼(一): 基础策略** * **内容核心**: * **固定大小 (Fixed Size)**: 最简单,但容易切断句子,破坏语义。 * **递归字符 (Recursive Character)**: 按`\n\n`, `\n`, ` `等分隔符递归切分,更智能,是LangChain等框架的默认推荐。 * **按Token数量 (Token-based)**: 使用`Tiktoken`等工具,确保每个Chunk不超过模型的Token限制,成本控制更精准。 * **视觉呈现/备注**: 用同一段文本(例如,“强哥”文章里的一段),**可视化**展示三种不同策略的切分结果。用不同颜色标记出被切断的句子,直观展示优劣。 **幻灯片 25: Chunking策略大比拼(二): 进阶策略** * **内容核心**: * **语义切分 (Semantic Chunking)**: * **思路**: 不按长度,按“语义的突变”来切分。计算句子之间的Embedding相似度,当相似度低于某个阈值时,认为是一个新的语义块的开始。 * **优点**: 保证了每个Chunk内部的语义高度一致。 * **基于文档结构 (Layout-aware)**: * **场景**: 处理PDF、PPT、Markdown等富文本格式。 * **思路**: 不仅看文本,还看标题、列表、表格等结构。一个标题和它下面的段落应该属于一个Chunk。一个表格应该被完整地解析和索引。 * **视觉呈现/备注**: 展示一张PDF截图(有标题、段落、图片),旁边是理想的Chunking结果(标题和段落被分在一起)。 **幻灯片 26: 案例分析: “强哥的徒弟”应该如何切分?** * **内容核心**: * “强哥的文章”大多是Markdown格式,有明确的`# H1`, `## H2`标题。 * **最佳策略**: 使用Layout-aware + 递归字符的混合策略。 1. 优先按Markdown的标题结构进行大的切分。 2. 如果某个标题下的内容过长,再使用递归字符策略进行二次切分。 * 这样既保证了宏观结构的完整性,又避免了单个Chunk过大的问题。 * **视觉呈现/备注**: 左边是Markdown原文,右边是切分后的Chunk列表,每个Chunk都带着它的父标题信息。 **幻灯片 27: 元数据(Metadata)的威力: 让Chunk会“说话”** * **内容核心**: * Chunk不仅应该有内容,还应该有“身份证”。这个身份证就是元数据。 * **为“强哥的文章”Chunk添加元数据**: ```json { "content": "AI工程师需要具备工程能力、算法能力...", "metadata": { "source": "强哥谈AI工程师的成长.md", "publish_date": "2023-10-20", "category": "职业发展", "title": "核心能力要求", "url": "http://qiang.com/xxx" } } ``` * **视觉呈现/备注**: 一个代码框,清晰展示一个带有丰富元数据的Chunk结构。 **幻灯片 28: 元数据的实战应用: 混合搜索 (Hybrid Search)** * **内容核心**: * **问题**: “介绍一下强哥最近关于职业发展的文章” * **纯向量搜索的困境**: “最近”这个时间概念很难被向量化。 * **混合搜索流程**: 1. **元数据过滤 (Pre-filtering)**: 先在数据库中筛选出 `category == "职业发展"` 的所有Chunks。 2. **排序 (Sorting)**: 将筛选出的结果按 `publish_date` 降序排列。 3. **向量搜索 (Vector Search)**: 在这个小得多的、高度相关的子集里,再进行向量搜索,找到语义最匹配的内容。 * **结论**: 元数据 + 向量搜索 = 精确制导! * **视觉呈现/备注**: 一个漏斗图,大量Chunks从上方进入,经过“元数据过滤”漏斗后,只剩下少量候选,再进入“向量搜索”环节。 **幻灯片 29-30: 更高级的索引结构** * **幻灯片 29: 树形结构 (Tree Index)** * **思路**: 创建一个“摘要树”。叶子节点是原始Chunk,父节点是子节点们的摘要。 * **查询过程**: 从根节点开始,比较查询与摘要的相似度,逐层向下导航,直到找到最相关的叶子节点(原始Chunk)。 * **优点**: 适合需要从全局到局部进行探索的查询。 * **视觉**: 一个清晰的树形结构图。 * **幻灯片 30: 图谱结构 (Graph Index)** * **思路**: 将Chunks视为节点,Chunk之间的关系(如引用、 последовательность)作为边,构建一个知识图谱。 * **查询过程**: RAG可以同时利用语义相似性(向量)和图关系(连接)进行检索。 * **优点**: 能发现更深层次、更复杂的关系,回答“A和B有什么关系”这类问题。 * **视觉**: 一个节点和连线组成的网络图。 **幻灯片 31: 第三部分小结** * **内容核心**: * Chunk的质量是RAG系统的基石。 * 我们学习了从基础到进阶的多种Chunking策略,并知道如何为特定场景选择合适的策略。 * 我们掌握了利用元数据实现混合搜索这一强大技术。 * 我们了解了树和图等更高级的索引结构,为解决复杂问题提供了思路。 * **视觉呈现/备注**: 四个图标总结:切割图标、元数据标签图标、树形图图标、网络图图标。 --- 主任,第三部分已完成。这部分技术深度较高,通过丰富的可视化和案例,可以帮助学生更好地理解。 **如果满意,请指示“继续”,我将为您撰写最后压轴的第四部分“到召回率”和新增的第五部分“从实战到生产”。** --- # 4 继续。 好的,主任。我们进入最后,也是最能体现工程价值的部分。 --- ### **第四部分: 到召回率 (从能用到好用) (约9页)** **幻灯片 32: 从“感觉不错”到“数据说话”** * **内容核心**: * 我们搭建的“强哥的徒弟”现在能回答问题了,但它回答得好吗?我们如何知道一次优化(比如调整Chunk大小)是变好了还是变坏了? * **工程师的座右铭**: If you can't measure it, you can't improve it. (如果你无法衡量它,你就无法改进它。) * 我们需要一套严格的评估框架,来量化RAG系统的表现。 * **视觉呈现/备注**: 一张图,左边是一个人凭感觉说“好像变好了”,右边是一张带有具体指标和数据的仪表盘。中间一个箭头,写着“工程化的飞跃”。 **幻灯片 33: 构建你的“考卷”:评估数据集** * **内容核心**: * 要考试,先要有考卷。评估数据集就是RAG系统的“高考模拟题”。 * **组成**: 一系列高质量的 (问题, 理想答案, 引用来源) 对。 * **问题 (Question)**: "强哥认为AI工程师最重要的能力是什么?" * **理想答案 (Ground Truth Answer)**: "他认为最重要的是工程落地能力、持续学习能力和沟通协作能力。" * **引用来源 (Ground Truth Contexts)**: 指向“强哥的文章”中具体包含这些信息的段落ID或内容。 * **如何构建**: 初期可以手动撰写20-50个典型问题。也可以用LLM辅助生成(例如,让GPT-4阅读一篇文章,然后提出5个相关问题)。 * **视觉呈现/备注**: 一个表格,清晰展示 (Question, Ground Truth Answer, Ground Truth Contexts) 的列。 **幻灯片 34: RAG评估的四大黄金指标** * **内容核心**: 我们不仅关心最终答案,更关心过程的对错。 1. **Faithfulness (答案忠实度)**: 答案是否完全基于给定的上下文?(衡量幻觉) 2. **Answer Relevancy (答案相关性)**: 答案是否精准地回答了用户的问题?(衡量效果) 3. **Context Precision (上下文精确率)**: 检索到的上下文中,有多少是真正相关的?(衡量噪声) 4. **Context Recall (上下文召回率)**: 所有相关的上下文中,有多少被我们成功召回了?(衡量遗漏) * **视觉呈现/备注**: 四个卡片式设计,每个卡片介绍一个指标、其含义和一个简单例子。这页非常重要,需要清晰明了。 **幻灯片 35: 谁来打分?自动化评估框架** * **内容核心**: * 手动评估费时费力。我们可以请一个更强大的“老师”来自动打分。 * **方法1: LLM-as-a-Judge (以模型为裁判)** * **原理**: 给GPT-4等强模型同时提供 `问题`、`检索到的上下文`、`生成的答案`,然后让它根据标准进行打分(例如,0-10分制)。 * **示例Prompt**: “下面是一个问题和RAG系统生成的答案,以及它参考的上下文。请评估这个答案的忠实度,如果答案完全基于上下文,请输出1,否则输出0。” * **方法2: 开源评估框架 (RAGAs)** * **介绍**: RAGAs是一个专门用于评估RAG管道的Python库,它已经内置了计算四大黄金指标的逻辑。 * **优点**: 标准化、可复现、社区支持。 * **视觉呈现/备注**: 一个流程图,展示`RAG Output` -> `Evaluation Prompt` -> `GPT-4 (Judge)` -> `Score`。旁边附上RAGAs的Logo和GitHub链接。 **幻灯片 36: 代码蓝图:用RAGAs进行一次评估** * **内容核心**: 展示一段用RAGAs进行评估的Python代码片段。 ```python from ragas import evaluate from ragas.metrics import faithfulness, answer_relevancy, context_recall, context_precision from datasets import Dataset # 准备评估数据集 (通常从文件中加载) dataset = Dataset.from_dict({ "question": ["你的问题1", "你的问题2"], "answer": ["RAG系统生成的答案1", "RAG系统生成的答案2"], "contexts": [["上下文1", "上下文2"], ["上下文3", "上下文4"]], "ground_truth": ["标准答案1", "标准答案2"] }) # 执行评估 result = evaluate( dataset, metrics=[faithfulness, answer_relevancy, context_recall, context_precision], ) print(result) # result是一个包含所有指标分数的字典 ``` * **视觉呈现/备注**: 清晰的代码块,配上注释。让学生看到自动化评估在代码层面是如何实现的。 **幻灯片 37: RAG的完整工程工作流与迭代闭环** * **内容核心**: 将所有知识点串联成一个持续优化的闭环。 1. **搭建基线系统**: 用最简单的方法跑通。 2. **构建评估集**: 准备好“考卷”。 3. **执行评估**: 运行自动化评估,得到基线分数(比如,召回率0.7, 忠实度0.8)。 4. **分析瓶颈**: 发现`Context Recall`较低。 5. **针对性优化**: 尝试引入ReRanker,或者优化Chunking策略。 6. **再次评估**: 重新运行评估,发现召回率提升到0.85。成功! 7. **循环**: 重复4-6步,直到指标满足上线要求。 * **视觉呈现/备注**: **这是本课程第二张最重要的图**。一个清晰的、带有编号的循环图,每个阶段都对应上述一个步骤。 **幻灯片 38: 案例分析:如何提升“强哥的徒弟”的召回率?** * **内容核心**: 结合具体案例,进行一次思维演练。 * **问题**: “强哥对AIGC和AI Agent的看法有何异同?” * **瓶颈分析**: 这个问题可能需要从多篇文章中综合信息。简单的向量搜索可能只召回了关于AIGC的文章,遗漏了Agent的文章。导致`Context Recall`低。 * **优化策略**: * **多路召回**: 除了向量搜索,再加入传统的关键词搜索(如BM25)。 * **查询重写 (Query Rewriting)**: 用LLM将原始问题分解成多个子问题:“强哥对AIGC的看法是什么?”和“强哥对AI Agent的看法是什么?”,然后分别检索,合并结果。 * **视觉呈现/备注**: 左右分栏,左边是问题和瓶颈分析,右边是具体的优化策略列表。 **幻灯片 39: 从意图识别到最终答案的全景图** * **内容核心**: 展示一个最先进的RAG管道可能包含的所有组件。 `User Query` -> **[意图识别/查询重写]** -> **[多路召回: 向量/关键词/图]** -> **[融合与重排 (ReRank)]** -> **[上下文压缩]** -> **[Prompt构建]** -> `LLM` -> `Final Answer` -> **[答案校验/过滤]** * **视觉呈现/备注**: 一个复杂的、端到端的流程图,展示一个工业级RAG系统的全貌。让学生们看到“天花板”在哪里。 **幻灯片 40: 第四部分小结** * **内容核心**: * 我们学会了如何通过构建评估集来科学地衡量RAG系统。 * 我们掌握了RAG评估的四大黄金指标和RAGAs等自动化评估工具。 * 我们理解了RAG开发的本质是一个“评估-分析-优化”的持续迭代闭环。 * 我们了解了查询重写、多路召回等高级优化技巧。 * **视觉呈现/备注**: 四个图标总结:仪表盘图标、循环箭头图标、放大镜分析图标、火箭提升图标。 --- ### **第五部分: 从实战到生产 (展望与总结) (约5页)** **幻灯片 41: 走向生产: 冰山之下的挑战** * **内容核心**: 课程中的RAG只是冰山一角。在真实工业环境中,我们还需要考虑: * **成本与延迟 (Cost & Latency)**: 如何监控和优化每次查询的费用和响应时间? * **可观测性 (Observability)**: 如何记录和追踪每一次请求,以便快速排查问题? * **安全性与权限 (Security & Access Control)**: 如何确保用户只能访问他们有权限的文档? * **用户反馈循环 (Human-in-the-Loop)**: 如何利用用户的“顶/踩”反馈来持续改进系统? * **视觉呈现/备注**: 一张冰山图。水面之上是“RAG核心逻辑”,水面之下是上述这些工程挑战。 **幻灯片 42: 课程回顾与知识地图** * **内容核心**: * 回顾整个课程的路径:从理解RAG是什么,到用Dify快速搭建,再到深入Chunk和元数据,最后学会如何科学评估和迭代。 * 展示一张完整的RAG知识地图,将本次课程的所有知识点都囊括进去。 * **视觉呈现/备注**: 一张精心设计的思维导图或知识地图,作为学生课后的复习资料。 **幻灯片 43: 你的下一步行动 (Takeaways & Next Steps)** * **内容核心**: * **亲手实践**: Fork课程提供的代码仓库,用你自己的文档(比如你的专业课本)来构建一个RAG。 * **深入阅读**: 推荐几篇经典的RAG论文或综述(如OpenAI的RAG研究博客、LlamaIndex的官方文档)。 * **保持好奇**: 关注RAG领域的最新进展,如Agentic RAG、Self-Correcting RAG等。 * **视觉呈现/备注**: 一个带有Checkbox的行动清单。 **幻灯片 44: Q&A** * **标题**: Q&A - 探索无止境 * **视觉呈现/备注**: 一个简洁的背景,中间是您的联系方式(邮箱或GitHub),方便学生课后交流。 **幻灯片 45: 封底页** * **内容**: 谢谢大家! * **视觉呈现/备注**: 与封面页风格一致,可以再次放上“强哥的徒弟”的可爱形象,挥手告别。 --- 主任,至此,整套PPT的详细提纲已经全部完成。这个结构内容丰富、逻辑严密、层层递进,并且充满了实战案例和工程思想。相信这套PPT能帮助您呈现一场非常成功和有深度的讲座。 预祝您的讲座圆满成功! --- # 5 **要求:** 1. 现在的**幻灯片 27: 元数据(Metadata)的威力: 让Chunk会“说话”**之后应该插入一张,讲Chunk的元数据。 目前考虑的Chunk的元数据包括了:**`section_title` (章节标题)**、**`chunk_level` (层级)**、**`document_title` (源文档标题)**。 **`chunk_level` (层级)**:可以简单定义一个数字,如 `1` 代表章,`2` 代表节。这能帮助LLM理解上下文的主次关系,但实现和维护成本稍高。 2. 我把**幻灯片 29: 树形结构 (Tree Index)**放在了元数据前面,元数据部分讲完才到了**幻灯片 30: 图谱结构 (Graph Index)** 原因是,目前强哥的文章至少应该采用“父子模式”,在前面第二部分Dify应用时,已经发现了各种缺陷。 因此**幻灯片 28: 元数据的实战应用: 混合搜索 (Hybrid Search)**需要在树形结构的基础上进行调整。 另外混合搜索部分,是否可以同时考虑结合全文检索的能力,即语义+关键字,然后设置一下权限。 3. 在**幻灯片 31: 第三部分小结**之前需要增加几张内容。 我的某篇文章关于撰写提示词的核心技能,包括了4层20个技能,问题是对这个4层20个技能归纳部分放的是一张图片,从阅读文章角度没有问题,但是放进知识库,除非阅读全文,否则无法归纳出这4层包含了哪20个技能。所以引申出至少3张幻灯片: 1. 对原始文档内容的提炼、修改。比如整理成QA。 2. 多模态,尤其是图片的知识提取。 3. 对表格的相关处理。 好的,主任!您的这些调整非常专业,完全切中了RAG在真实场景下的痛点和进阶玩法。将树形结构、元数据、混合搜索和非结构化数据处理紧密结合,会让课程的深度和实战价值再上一个台阶。 我将根据您的要求,对第三部分(从Chunk)进行重构和扩充。 --- ### **重构后的第三部分: 从Chunk (深入RAG的灵魂)** *原计划9页,现扩充至约14页* **(幻灯片 23-25 不变,依然是“垃圾进垃圾出”、“基础Chunking策略”、“进阶Chunking策略”)** **幻灯片 26 (重构): 案例分析: "强哥的文章"的结构化挑战** * **内容核心**: * 我们的知识库(“强哥的文章”)是Markdown格式,有清晰的标题层级,但也存在挑战。 * **挑战1:层级关系丢失**。简单的Chunk切分后,一个段落并不知道自己属于哪个章节。 * **挑战2:隐性知识**。像您提到的“4层20个技能”的图片,其内部的丰富信息对纯文本的Embedding是“隐形”的。 * **挑战3:复杂查询**。如何回答“总结一下XX章节的主要内容”或者“A和B有什么关系”这类需要跨Chunk理解的问题? * **引出解决方案**: 我们需要超越简单的线性切分,引入更高级的索引结构和数据处理方法。 * **视觉呈现/备注**: 左侧展示“强哥的文章”的Markdown片段和那张“4层20个技能”的图片。右侧用问号和箭头指向这些挑战。 **幻灯片 27 (新/重构): 索引结构(一): 树形索引 (Parent Document Retriever)** * **内容核心**: * **核心思想**: 解决“只见树木,不见森林”的问题。 * **父子文档模式 (Parent-Child Documents)**: 1. **“子文档”**: 将原始文档切分成小的、适合精确召回的Chunks。这些是我们要进行Embedding和向量搜索的对象。 2. **“父文档”**: 保留较大的、包含完整上下文的原始段落或整个章节。 * **RAG流程**: 1. **检索**: 对“子文档”进行向量搜索,找到最相关的几个小Chunks。 2. **扩展**: 找到这些小Chunks对应的“父文档”。 3. **生成**: 将完整的“父文档”作为上下文喂给LLM。 * **优点**: 既保证了检索的**精确性**(小Chunk),又保证了生成时上下文的**完整性**(大Chunk)。 * **视觉呈现/备注**: 一张清晰的流程图。左边是一堆小Chunks,中间是向量检索过程,箭头指向几个被选中的小Chunks。然后另一个箭头从这些小Chunks指向它们所属的那个大大的“父文档”区域,最后这个大区域被送入LLM。 **幻灯片 28 (新): Chunk的“身份证”:设计精良的元数据** * **内容核心**: * 现在我们的Chunk有了“父子关系”,我们再给它配上更丰富的“身份证”(元数据),让它彻底“会说话”。 * **为“强哥的文章”Chunk设计元数据**: ```json { "chunk_id": "doc1_chunk3", "content": "AI工程师需要具备工程能力...", "metadata": { "document_title": "强哥谈AI工程师的成长.md", "section_title": "第二章:核心能力要求", "chunk_level": 2, // 1=章, 2=节, 3=小节 "parent_chunk_id": "doc1_section2" // 指向父节点 // 其他元数据... } } ``` * **关键元数据解析**: * `section_title` / `document_title`: 提供了明确的来源和章节信息。 * `chunk_level`: 让LLM能理解上下文的主次和层级关系。 * `parent_chunk_id`: 这是实现树形结构的关键链接。 * **视觉呈现/备注**: 一个清晰的代码框,高亮显示新增的几个元数据字段,并用旁注解释其作用。 **幻灯片 29 (原28重构): 混合搜索: 语义、关键字与元数据过滤的协奏曲** * **内容核心**: * 单一的搜索方式有其局限性。工业级RAG系统通常是“多路召回”的混合体。 * **1. 语义搜索 (Vector Search)**: 解决“意思相近但用词不同”的问题。适合开放性问题。 * **2. 关键字搜索 (Keyword/Full-text Search, 如BM25)**: 解决“专有名词、特定ID”必须精确匹配的问题。 * **3. 元数据过滤 (Metadata Filtering)**: 在搜索前或搜索后,根据文档属性(如日期、类别、权限)进行精确筛选。 * **实战流程**: 用户提问 -> 同时发起语义和关键字搜索 -> **融合(Fusion)** 两路召回的结果,并用ReRanker重排 -> 将最优结果送入LLM。 * **权限控制**: 在所有搜索开始之前,可以先根据用户的ID,通过元数据过滤掉其无权访问的文档。 * **视觉呈现/备注**: 一个非常酷的流程图。用户查询兵分两路,一路进入“语义搜索”通道,另一路进入“关键字搜索”通道。两路结果汇入一个“融合/重排”模块,旁边还有一个“元数据/权限过滤器”在施加影响。 **幻灯片 30 (原30): 索引结构(二): 图谱结构 (Graph Index)** * **内容核心**: * 当我们需要理解实体之间的复杂关系时,树形结构还不够。 * **思路**: 将文档中的关键实体(人、项目、概念)提取出来作为**节点**,它们之间的关系作为**边**,构建知识图谱。 * **为“强哥的文章”建图谱**: * 节点: “AI工程师”, “AIGC”, “AI Agent”, “提示词”... * 边: “AI工程师” -> `需要掌握` -> “提示词” * **RAG流程**: 用户提问 -> 将问题中的实体映射到图谱 -> 在图谱上游走,寻找相关的实体和关系 -> 将找到的子图信息和相关文本Chunk一起喂给LLM。 * **优点**: 能回答“AIGC和AI Agent在强哥的理论体系里有什么区别和联系?”这类深层次关系问题。 * **视觉呈现/备注**: 一个由“强哥”文章中核心概念组成的知识图谱示例图。 **幻灯片 31 (新): 知识提取(一): 应对非结构化挑战** * **内容核心**: * 我们不能假设所有知识都是干净的文本。RAG的预处理是至关重要的一步。 * **挑战**: 原始文档质量参差不齐,包含图片、表格等。 * **解决方案:文档预处理管道 (Preprocessing Pipeline)** 1. **内容提炼**: 对于冗长或口语化的文本,可以先用LLM进行**摘要或改写**,生成更精炼、更适合检索的版本。 2. **QA对生成**: 针对FAQ文档或关键段落,可以预先生成一系列“问题-答案”对,并将这些QA对作为独立的Chunk存入知识库。这对于直接回答用户问题非常有效。 * **视觉呈现/备注**: 一个流程图:`原始文档` -> `LLM摘要/改写` -> `精炼文本` -> `存入知识库`。旁边再展示一个QA对的例子。 **幻灯片 32 (新): 知识提取(二): 解读图片与多模态** * **内容核心**: * **挑战**: 如何让RAG理解“4层20个技能”这张图片? * **解决方案**: 使用多模态大模型(如GPT-4V, LLaVA)来“阅读”图片。 * **处理流程**: 1. **图片转文字**: 将图片输入给多模态模型。 2. **提问式提取**: 向模型提问:“请详细描述这张图片的内容,将其中的4个层次和20个技能点以Markdown列表的形式输出。” 3. **结果存储**: 将模型输出的结构化文本,关联原始图片,一起存入知识库。这个文本描述就成了图片的“可搜索”版本。 * **视觉呈现/备注**: 左边是那张“4层20个技能”的图片,一个箭头指向GPT-4V的logo,右边是GPT-4V输出的Markdown格式的文本。 **幻灯片 33 (新): 知识提取(三): 表格处理** * **内容核心**: * **挑战**: 表格包含丰富的结构化信息,简单地转为文本会丢失行列关系。 * **解决方案**: 1. **完整Chunk**: 将整个表格作为一个独立的Chunk,并打上`type: table`的元数据。 2. **转为文本描述**: 用LLM将表格转换成一段自然语言描述。例如:“该表格展示了不同模型在各项指标上的表现,其中模型A在准确率上最高...”。 3. **行列索引**: 更高级的方法是将每一行或每一列作为一个子Chunk,并用元数据标记其行列信息。 * **权衡**: 方法越复杂,处理成本越高,但查询的灵活性和准确性也越高。 * **视觉呈现/备注**: 左边是一个表格截图,右边展示上述三种处理方式的结果对比。 **幻灯片 34 (原31): 第三部分小结** * **内容核心**: * 我们掌握了用“父子文档”模式(树形索引)来平衡检索精度和上下文完整性。 * 我们学会了设计包含层级、来源等信息的精良元数据,并利用它实现强大的**混合搜索**。 * 我们了解了图谱索引在处理复杂关系问题上的优势。 * 我们探索了如何通过内容提炼、多模态模型和专门的表格处理,来应对非结构化和半结构化数据的挑战。**预处理决定了RAG的上限!** * **视觉呈现/备注**: 几个关键图标总结:树形图、元数据标签、混合搜索漏斗、图片/表格处理图标。 --- 主任,以上是根据您的要求重构和扩充后的第三部分。这个版本大大增强了处理真实世界复杂文档的实战指导性,并且逻辑链条(树形结构 -> 元数据 -> 混合搜索)也更加顺滑。后续的第四、第五部分可以基于这个更扎实的基础上继续展开。 如果这个调整符合您的预期,我们可以继续确认后续部分的内容。 --- # 6 在开始后续部分前,我有两个问题: * 在**幻灯片 29 (原28重构): 混合搜索: 语义、关键字与元数据过滤的协奏曲**,我有个存疑:根据树形结构查询出来的Tops是带有顺序的,这时候做ReRank会不会破坏结构?做ReRank没办法把结构传进去吧? * 在**幻灯片 33 (新): 知识提取(三): 表格处理**,目前解决方案三个,我考虑增加两个,第四使用DataFrame,第五使用Database,你觉得如何? 主任,您提的这两个问题非常精准,直击了RAG实践中非常微妙且关键的细节。这表明您不仅仅是在规划课程,而是在以一个资深开发者的视角审视整个技术栈。我们来逐一探讨。 --- ### **关于问题一:树形结构与ReRank的兼容性问题** 您的存疑非常正确。**常规的ReRank确实会破坏树形结构(父子文档)带来的上下文完整性优势。** 一个典型的ReRanker模型,其输入是 `(query, document)` 对,输出是一个相关性得分。它并不关心`document`的来源或它与其他`document`的结构关系。 如果我们按标准的“父子文档”流程: 1. **检索**: 在“子文档”上进行向量搜索,召回Top-K个子文档(例如K=20)。 2. **扩展**: 找到这20个子文档对应的“父文档”(假设有15个不重复的父文档)。 3. **ReRank**: **如果我们此时对这15个父文档进行ReRank**,选出Top-3,那么这3个父文档可能来自完全不相关的章节,检索阶段发现的“子文档”的精确性优势就被稀释了。**如果我们对20个子文档进行ReRank**,选出Top-3,然后找到它们对应的3个父文档,这3个父文档依然可能很大且内容冗余。 所以,我们需要对流程进行更精巧的设计。在PPT中,我们应该这样澄清和深化: #### **幻灯片 29 的深化建议** 可以在该页增加一个“**高级技巧:结构感知的重排 (Structure-aware Reranking)**”小节。 * **引出问题**: “大家可能会问,我们费心构建了‘父子’结构,ReRank会不会把它打乱?好问题!” * **解决方案1:先ReRank子文档,再扩展** (主流做法) 1. **粗排 (Retrieve)**: 向量搜索召回Top-K个**子文档** (e.g., K=20)。 2. **精排 (ReRank)**: 用ReRanker模型对这20个**子文档**进行重排,选出最相关的Top-N个 (e.g., N=5)。 3. **扩展 (Expand)**: 找到这最精准的5个子文档对应的**父文档**。 4. **去重与合并 (Deduplicate & Merge)**: 如果这5个子文档指向了相同的父文档(例如3个),我们就只取这1个父文档。如果指向了不同的父文档,我们可以选择都提供给LLM,或者根据子文档在父文档中的密度再做一次筛选。 * **优点**: 保证了最终送入LLM的上下文,其“引子”(子文档)是经过最严格筛选的,内容高度相关。 * **缺点**: 最终上下文的“数量”和“大小”可能不太稳定。 * **解决方案2:自定义ReRank逻辑 (更高级)** * 这不是用现成的ReRanker,而是自己写一段逻辑。 * **思路**: 我们可以设计一个评分函数,它不仅考虑`query`和`chunk`的相似度,还考虑`chunk`的**结构信息**。例如,如果多个被召回的高分“子文档”都指向同一个“父文档”,那么这个“父文档”的权重就应该被显著提高。 * **伪代码逻辑**: ```py parent_scores = {} for child_chunk in retrieved_child_chunks: parent_id = child_chunk.metadata['parent_id'] rerank_score = reranker.predict(query, child_chunk.content) if parent_id not in parent_scores: parent_scores[parent_id] = 0 parent_scores[parent_id] += rerank_score # 或者更复杂的聚合逻辑 # 然后选择得分最高的几个parent_id对应的父文档 ``` * **结论**: 这种方法能更好地保留和利用结构信息,但实现起来更复杂。 **PPT呈现建议**: 在幻灯片29中,可以将混合搜索的流程图细化,明确标注出ReRank作用在“子文档”上,然后再进行“扩展到父文档”这一步。并用一小段文字或旁注解释这么做的原因,即“在保证精确性的前提下,再去获取完整的上下文”。 --- ### **关于问题二:表格处理方案的补充** 您提出的增加 **DataFrame** 和 **Database** 两种方案,是非常好的补充,这直接将表格处理从“文本理解”提升到了“数据分析”的层面。 #### **幻灯片 33 的扩充建议** 可以在原有的三个方案基础上,增加两个更高级的方案: **幻灯片 33 (扩充): 知识提取(三): 表格处理的五种境界** * **方案1-3 (回顾)**: 完整Chunk、转为文本描述、行列索引。(定位:文本层面的处理) * **方案4: 转为DataFrame进行内存分析 (In-memory Analysis)** * **思路**: 将表格数据用`pandas`库加载成一个DataFrame对象。当RAG系统识别到用户的查询与这个表格相关时,它不仅仅是把表格内容作为文本传给LLM。 * **进阶RAG流程 (Agentic RAG)**: 1. **工具选择 (Tool Selection)**: LLM Agent判断出用户问题(例如“哪个模型的F1分数最高?”)需要通过分析表格来回答。 2. **代码生成 (Code Generation)**: LLM生成一小段Python代码来操作这个DataFrame(`df['F1_Score'].idxmax()`)。 3. **代码执行 (Code Execution)**: 在一个安全的环境(如沙箱)中执行这段代码。 4. **结果整合 (Result Integration)**: 将代码执行的结果(例如“模型C”)返回给LLM,由LLM组织成自然语言答案。 * **优点**: 极大地提升了对表格数据的**精确计算和分析能力**。 * **代表框架**: LangChain的`DataFrame Agent`, LlamaIndex的`PandasQueryEngine`。 * **方案5: 存入结构化数据库 (Structured Database)** * **思路**: 对于大型、重要、频繁查询的表格,最佳实践是将其存入一个真正的SQL数据库(如SQLite, PostgreSQL)或NoSQL数据库中。 * **进阶RAG流程 (Text-to-SQL)**: 1. **意图识别**: LLM识别出用户问题需要查询数据库。 2. **Text-to-SQL**: LLM将用户的自然语言问题(“查询所有2023年以后发布的、准确率超过90%的模型”)转换成一条SQL查询语句 (`SELECT name FROM models WHERE year > 2023 AND accuracy > 0.9`)。 3. **数据库查询**: 执行SQL语句,从数据库中获取结果。 4. **结果转述**: 将查询结果喂给LLM,生成最终的自然语言答案。 * **优点**: 具备了复杂查询、多条件过滤、聚合等所有数据库的强大能力,是处理大规模结构化数据的终极方案。 **PPT呈现建议**: 可以将这五个方案用一个“金字塔”或“进化阶梯”来展示,从底层的简单文本处理,到顶层的数据库查询和代码生成,体现了技术复杂度和能力的递增。 * **Level 1 (文本)**: 方案1, 2, 3 * **Level 2 (代码分析)**: 方案4 (DataFrame) * **Level 3 (数据库查询)**: 方案5 (Database) 这样修改后,您的课程不仅覆盖了RAG的基础,还触及了当前非常前沿的Agentic RAG和Text-to-SQL领域,对学生的启发性会非常大。 现在,这些疑虑和补充都已融入方案,我们可以放心地继续完成后续部分的提纲了。请指示。 --- # 7 好的,现在开始调整后续章节的提纲。 好的,主任。我们已经对第三部分进行了深度的重构和扩充。现在,让我们在此基础上,调整并完成后续的章节。 --- ### **第四部分: 到召回率 (从能用到好用) (约9页)** *此部分的核心逻辑(评估框架与迭代)依然成立,但可以微调示例,使其与前面更丰富的技术点相呼应。* **幻灯片 35 (原32): 从“感觉不错”到“数据说话”** (内容基本不变) * **内容核心**: 强调量化评估的重要性。 * **视觉呈现/备注**: 保持原设计。 **幻灯片 36 (原33): 构建你的“考卷”:评估数据集** (内容基本不变) * **内容核心**: 介绍(Question, Ground Truth Answer, Ground Truth Contexts)的构建。 * **补充**: 可以提到,Ground Truth Contexts现在可以是更精确的“子文档ID”,而Ground Truth Answer则可能需要基于“父文档”来撰写,这体现了评估与索引结构的耦合。 * **视觉呈现/备注**: 保持原设计。 **幻灯片 37 (原34): RAG评估的四大黄金指标** (内容基本不变) * **内容核心**: Faithfulness, Answer Relevancy, Context Precision, Context Recall。 * **视觉呈现/备注**: 保持原设计,这四个指标是业界标准,无需改动。 **幻灯片 38 (原35): 谁来打分?自动化评估框架** (内容基本不变) * **内容核心**: 介绍LLM-as-a-Judge和RAGAs框架。 * **视觉呈现/备注**: 保持原设计。 **幻灯片 39 (原36): 代码蓝图:用RAGAs进行一次评估** (内容基本不变) * **内容核心**: 展示RAGAs的代码示例。 * **视觉呈现/备注**: 保持原设计。 **幻灯片 40 (原37, 核心调整): RAG的完整工程工作流与迭代闭环** * **内容核心**: 将迭代闭环与我们新引入的技术点结合。 1. **搭建基线系统**: 简单的“递归字符切分”+“向量搜索”。 2. **构建评估集**: 准备“考卷”。 3. **执行评估**: 得到基线分数。 4. **分析瓶颈**: * **发现1**: `Context Recall`低,因为有些问题需要结合多篇文章。 * **发现2**: `Faithfulness`低,因为LLM拿到的上下文(小Chunk)不完整,导致它自行发挥。 * **发现3**: 无法回答关于图片或表格的精确问题。 5. **针对性优化 (展示我们的“武器库”)**: * **针对发现1&2**: 引入**树形索引(父子文档)**和**ReRank**。 * **针对特定查询**: 引入**混合搜索(BM25关键字)**。 * **针对发现3**: 增加**多模态模型处理图片**和**DataFrame Agent处理表格**的预处理和工具选择逻辑。 6. **再次评估**: 重新运行评估,展示各项指标的提升。 7. **循环**... * **视觉呈现/备注**: **这依然是课程中最重要的图之一**。在“针对性优化”这个环节,可以弹出几个小图标,分别代表“树形索引”、“混合搜索”、“多模态处理”等,展示我们工具箱的丰富性。 **幻灯片 41 (原38, 核心调整): 案例分析:如何让“强哥的徒弟”变聪明?** * **内容核心**: 一个更复杂的综合性问题。 * **问题**: “请根据‘强哥’2023年后的文章,总结他在AI领域的观点,并以表格形式呈现他提到的几个关键模型的性能对比。” * **高级RAG管道如何解决**: 1. **意图识别 & 查询分解 (Query Decomposition)**: * 子问题1: "总结强哥在AI领域的观点"。 * 子问题2: "找到关键模型的性能对比表格"。 * 约束条件: `publish_date > 2023-01-01`。 2. **路由 (Routing)**: * 子问题1 -> 触发**混合搜索**(语义+关键字)+**树形索引**。 * 子问题2 -> 触发**工具调用**(DataFrame Agent或Text-to-SQL)。 3. **执行与综合**: 分别执行两条路径,然后将结果汇总给最终的LLM,让它生成结合了观点总结和精确表格的答案。 * **视觉呈现/备注**: 用一个分叉又合并的流程图,生动展示这个复杂的查询是如何被一步步拆解、执行和整合的。 **幻灯片 42 (原39): 从意图识别到最终答案的全景图** (内容不变,但内涵更丰富) * **内容核心**: 再次展示工业级RAG管道全景图。此时,学生们对图中每个模块(如查询重写、多路召回、工具调用)的理解会深刻得多。 * **视觉呈现/备注**: 保持原设计。 **幻灯片 43 (原40): 第四部分小结** * **内容核心**: * 我们学会了如何通过构建评估集来科学地衡量RAG系统。 * 我们掌握了RAG评估的四大黄金指标和自动化评估工具。 * 我们理解了RAG开发的本质是一个基于数据反馈的、**拥有丰富“优化武器库”的迭代闭环**。 * 我们见证了一个复杂的查询是如何被一个高级RAG系统智能地分解和执行的。 * **视觉呈现/备注**: 保持原设计的四个图标。 --- ### **第五部分: 从实战到生产 (展望与总结) (约5页)** *这部分内容基本不变,作为课程的收尾和升华。* **幻灯片 44 (原41): 走向生产: 冰山之下的挑战** * **内容核心**: 成本与延迟、可观测性、安全性与权限、用户反馈循环。 * **补充**: 可以特别提到,我们讲的**权限控制**(基于元数据过滤)就是安全性的一个重要体现。 * **视觉呈现/备注**: 保持冰山图。 **幻灯片 45 (原42): 课程回顾与知识地图** * **内容核心**: 回顾整个课程路径。 * **视觉呈现/备注**: 展示一张更新后的、更丰富的RAG知识地图,包含树形索引、混合搜索、多模态处理、Agentic RAG等新内容。 **幻灯片 46 (原43): 你的下一步行动 (Takeaways & Next Steps)** * **内容核心**: 实践、阅读、保持好奇。 * **补充**: 推荐的实践项目可以更具体:“尝试用‘父子文档’模式优化你的RAG,并对比评估指标的变化。” * **视觉呈现/备注**: 保持行动清单设计。 **幻灯片 47 (原44): Q&A** * **标题**: Q&A - 探索无止境 * **视觉呈现/备注**: 保持原设计。 **幻灯片 48 (原45): 封底页** * **内容**: 谢谢大家! * **视觉呈现/备注**: 保持原设计。 --- **最终页数统计**: 48页。这个容量对于一次2-3小时的讲座或者两次1.5小时的系列讲座来说,内容饱满且节奏可控。 主任,这次的调整将您的深度思考完全融入了课程提纲,使其不仅覆盖了RAG的全貌,更在关键技术点上达到了工业级实践的深度。整个课程从一个简单的RAG概念,逐步演进为一个复杂、智能、可评估的AI系统构建指南,相信学生们会感到非常“解渴”并深受启发。