
一、AI 的不懂装懂——幻觉从哪来1.1 AI 的知识不是活的老师说大模型知道的知识取决于训练时给它的数据集。如果你问它最近发生的事情或者你企业内部私有的文档LLM 是不知道的。但问题在于——LLM 不会说我不知道。它会基于自己有限的训练知识强行编一个听起来合理的答案。这就是所谓的幻觉Hallucination。你问它2024 年巴黎奥运会中国队拿了多少金牌 如果它的训练数据截止到 2023 年它不知道。但它不会说我不知道它会说中国队获得了 38 枚金牌……——这就是编的。1.2 解决幻觉的三种方案老师说如何解决大模型的幻觉想一下。方案成本说明微调Fine-tune高大公司、专业领域用需要算力和数据RAG检索增强生成低先查知识库再回答重新训练非常高几乎没人为了新知识重训大模型RAG 是性价比最高的方案。二、RAG 不是魔法是先查后答2.1 RAG 是什么老师说RAGRetrieval检索— Augmented增强— Generation生成。用户提问 ↓ 【Retrieval 检索】去知识库里找相关的文档片段 ↓ 【Augmented 增强】把找出来的内容加到 Prompt 里 ↓ 【Generation 生成】LLM 根据增强后的上下文回答问题核心思想在给 LLM 发 Prompt 之前先去查一下知识库把相关文档作为背景知识塞进去再让 LLM 回答。2.2 为什么不用关键词搜索老师说关键词搜索——文本匹配不太行。向量Vector语义查询就可以。举个例子关键词用 LIKE 搜索用向量搜索光光只匹配含光光的段落即使搜朋友也能找到光光相关的段足球比赛只匹配含足球比赛的段落搜运动也能找到足球相关内容向量搜索找的是意思关键词搜索找的是字。2.3 向量的数学魔法老师画了一个很直观的例子水果向量[0.9, 0.3] 苹果向量[0.9, 0.5] ← 和水果很近 香蕉向量[0.9, 0.1] ← 和水果也比较近 石头向量[0.1, 0.9] ← 和水果很远每个词都可以表示为一个多维向量。语义相近的词在向量空间中的夹角就小余弦相似度高。语义无关的词夹角就大。所以 RAG 一般用**嵌入模型Embedding Model**来做语义搜索比关键词搜索精准得多。三、LangChain 实现 RAG一个完整的故事3.1 准备知识库文档看index.mjs老师用了一个光光和东东的小故事const documents [ new Document({ pageContent: 光光是一个活泼开朗的小男孩他有一双明亮的大眼睛总是带着灿烂的笑容。 光光最喜欢的事情就是和朋友们一起玩耍他特别擅长踢足球……, metadata: { chapter: 1, character: 光光, type: 角色介绍, mood: 活泼 }, }), new Document({ pageContent: 东东是光光最好的朋友他是一个安静而聪明的男孩。 东东喜欢读书和画画他的画总是充满了想象力……, metadata: { chapter: 2, character: 东东, type: 角色介绍, mood: 温馨 }, }), // ……一共 7 个片段 ];Document是 LangChain 中 Embedding 的最小单元字段作用比喻pageContent要向量化的文本内容一段话metadata附加信息不参与向量化标签章节、角色、类型3.2 把文档向量化存入内存向量库const embeddings new OpenAIEmbeddings({ model: process.env.EMDEDDING_MODEL_NAME, }); const vectorStore await MemoryVectorStore .fromDocuments(documents, embeddings); console.log(向量库创建成功共 ${vectorStore.memoryVectors.length} 条文档已向量化);MemoryVectorStore是 LangChain 提供的内存向量存储。把文档通过 Embedding 模型转成向量存到内存里。老师说简单就放内存复杂就放向量数据库如 PostgreSQL pgvector。3.3 创建检索器const retriever vectorStore.asRetriever({ k: 3 // 返回最相似的 3 条 });检索器Retriever是一个标准入口知识库 → 文档 → Document → Embedding → MemoryVectorStore → Retriever3.4 查询并获取相关文档const question 东东和光光是怎么成为朋友的; const docs await retriever.invoke(question); const scoredResults await vectorStore.similaritySearchWithScore(question, 3);输出的结果包含相似度评分[文档 1] 相似度: 0.9234 内容: 东东是光光最好的朋友他是一个安静而聪明的男孩... 元数据章节2, 角色东东, 类型角色介绍 [文档 2] 相似度: 0.8876 内容: 有一天学校要举办一场足球比赛... 元数据章节3, 角色光光和东东, 类型友情情节 [文档 3] 相似度: 0.7543 内容: 接下来的日子里光光每天放学后都会教东东踢足球... 元数据章节4, 角色光光和东东, 类型友情情节相似度越接近 1说明和问题越相关。3.5 增强 Prompt生成回答const context docs .map((doc, i) [片段${i}]\n ${doc.pageContent}) .join(\n\n-----\n\n); const prompt 你是一个讲友情故事的老师。 基于以下故事片段回答问题用温暖生动的语言。 故事片段: ${context} 问题${question} 老师的回答:; const response await model.invoke(prompt);检索到的文档片段被塞进了 Prompt 的故事片段部分LLM 基于这个增强后的上下文来回答问题。四、RAG 的完整流程回顾用户提问东东和光光是怎么成为朋友的 ↓ 1. 检索Retrieval 把问题转成向量 → 在向量库中搜索 → 找到最相似的 3 个片段 ↓ 2. 增强Augmented 把 3 个片段组装成 Prompt 的故事片段部分 ↓ 3. 生成Generation LLM 基于故事片段 问题生成回答 ↓ 输出 东东和光光是从幼儿园就认识的好朋友…… 光光邀请东东一起参加足球比赛虽然东东不会踢 但光光耐心地教他他们的友谊因此更加深厚了……如果没有 RAGLLM 只能基于自己的训练知识回答。但如果这个故事不在训练数据里LLM 就会编。有了 RAGLLM 先查知识库基于真实的内容回答——幻觉就大大减少了。五、RAG 在实际项目中的架构老师说RAG 要实现语义查询需要基于向量来做把文档向量化存储到向量数据库查询的时候也把 Prompt 向量化去数据库中做相似度检索可以找到语义相近的文本块。生产环境的 RAG 架构原始文档PDF、Word、网页等 ↓ 文本提取 分片 文本片段 ↓ Embedding 模型 向量 ↓ 存储 向量数据库PostgreSQLpgvector、Pinecone、Weaviate ↓ 创建 检索器Retriever ↓ 查询 用户问题 → 向量化 → 相似度检索 → 相关片段 → 增强 Prompt → LLM 生成组件作用我们用的什么文档分片把长文档切成有语义的段落手动切分 7 个片段Embedding 模型把文本转成向量OpenAIEmbeddings向量存储存向量支持相似度搜索MemoryVectorStore检索器标准入口输入问题输出文档vectorStore.asRetriever()六、总结RAG 是 LLM 的外挂知识库概念说明LLM 幻觉LLM 不懂也不会说不知道会强行编答案RAGRetrieval Augmented Generation检索增强生成检索从知识库中找到和问题相关的文档片段增强把片段加入 Prompt 上下文生成LLM 基于增强后的上下文回答向量搜索用 Embedding 找语义相似的文本DocumentLangChain 中 Embedding 的最小单元MemoryVectorStore内存向量存储轻量级方案检索器retriever.invoke(question)标准入口RAG 的核心思想不要让你的 AI 空口白牙地编答案先给它查资料查到了再回答。写在最后今天最大的收获是彻底理解了 RAG 的原理。以前觉得AI 会编答案是个玄学问题现在知道了——LLM 不是故意骗你它是真的不知道但它不好意思说不知道。RAG 就是给 LLM 配了一个秘书遇到不懂的先去查资料查到了再开口。下次面试官问你RAG 的工作原理是什么怎么用 LangChain 实现你可以淡定地说RAG 是 Retrieval Augmented Generation 的缩写。核心思想是在给 LLM 发 Prompt 之前先到知识库中检索相关文档。流程分三步①检索——把用户问题通过 Embedding 模型转成向量在向量库中做相似度搜索找到最相关的 N 个文档片段②增强——把检索到的片段作为上下文加入 Prompt③生成——LLM 基于增强后的 Prompt 回答问题。在 LangChain 中通过Document对象定义知识片段MemoryVectorStore.fromDocuments()创建向量库vectorStore.asRetriever(k)创建检索器调用retriever.invoke(question)检索相关文档。这种方式有效解决了 LLM 的幻觉问题让 AI 基于真实知识回答而不是凭空编造。学习资源推荐如果你想更深入地学习大模型以下是一些非常有价值的学习资源这些资源将帮助你从不同角度学习大模型提升你的实践能力。一、全套AGI大模型学习路线AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取二、640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取三、AI大模型经典PDF籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取四、AI大模型商业化落地方案作为普通人入局大模型时代需要持续学习和实践不断提高自己的技能和认知水平同时也需要有责任感和伦理意识为人工智能的健康发展贡献力量。