大模型应用开发教程07 | RAG 核心概念(检索增强生成)
理论部分在前面的内容里我们已经能把大模型“调用起来”也能通过 Prompt 让输出更可控、更结构化。但很快会遇到一个现实问题模型并不可靠地掌握我们业务里的最新知识并且在不确定时可能会“编一个看起来合理的答案”幻觉。RAGRetrieval-Augmented Generation检索增强生成就是为了解决这个问题而出现的一种应用模式。它的核心思想很简单先从我们自己的资料里检索出相关内容再把这些内容作为上下文喂给模型生成答案。把 RAG 拆开来看它通常由三段组成Index建库把文档切分chunk后向量化embedding并存储到向量索引/向量数据库里Retrieve检索用户提问后把问题向量化在向量库里找最相似的 Top-K 文档片段Generate生成把检索到的片段 用户问题一起交给模型让模型基于“证据”回答其中有两个关键概念Embedding向量表示把文本映射到高维向量空间使得“语义相近的文本向量更接近”相似度检索Vector Search用余弦相似度等指标衡量向量的接近程度从而找到与问题最相关的文档片段这一篇我们先把 RAG 的“检索”这一步用最小实现跑通不引入向量数据库只用一个微型知识库 embedding 余弦相似度直观看到“语义检索到底在做什么”。下一篇再把它升级为完整 RAG 应用向量库 检索增强生成。实践部分本案例做什么实现一个“极简向量检索”演示程序准备一个微型知识库4 条文本为每条文本生成 embedding 向量并缓存到内存输入查询问题把问题向量化计算查询向量与每条文档向量的余弦相似度找出相似度最高的那条文档作为检索结果并打印所有得分主要代码本篇使用项目脚本src/3.1_rag_embedding.pyimportosimportnumpyasnpfromdotenvimportload_dotenvfromopenaiimportOpenAI load_dotenv()clientOpenAI(api_keyos.getenv(ZHIPUAI_API_KEY),base_urlos.getenv(ZHIPUAI_BASE_URL))defget_embedding(text): 调用 Embedding API 将文本转换为向量 # 智谱的 embedding 模型名称通常为 embedding-2 或 embedding-3# 这里我们使用 embedding-2responseclient.embeddings.create(modelembedding-2,inputtext)returnresponse.data[0].embeddingdefcosine_similarity(v1,v2): 计算两个向量的余弦相似度 returnnp.dot(v1,v2)/(np.linalg.norm(v1)*np.linalg.norm(v2))defmain():print( 极简向量检索演示 )# 1. 模拟一个微型知识库documents[Python 是一种广泛使用的高级编程语言。,# ID: 0大熊猫是中国特有的珍稀动物主要以此竹子为食。,# ID: 1深度学习是机器学习的一个子集基于人工神经网络。,# ID: 2今天天气真不错适合出去玩。,# ID: 3]print(正在为知识库生成向量 (Embedding)...)# 实际项目中这步通常是预先做完存数据库的doc_vectors[]fordocindocuments:vecget_embedding(doc)doc_vectors.append(vec)print(f✅ 已处理:{doc[:10]}...)whileTrue:queryinput(\n请输入查询问题 (q退出): )ifqueryq:break# 2. 将用户问题向量化query_vecget_embedding(query)# 3. 计算相似度similarities[]fordoc_vecindoc_vectors:simcosine_similarity(query_vec,doc_vec)similarities.append(sim)# 4. 找出最相似的文档# np.argmax 返回最大值的索引best_idxnp.argmax(similarities)best_scoresimilarities[best_idx]print(f\n 检索结果 (相似度:{best_score:.4f}):)print(f文档内容:{documents[best_idx]})# 额外展示一下所有文档的得分方便理解print(\n--- 所有文档得分 ---)fori,scoreinenumerate(similarities):print(f文档{i}:{score:.4f}-{documents[i][:15]}...)if__name____main__:main()运行方式在项目根目录执行python3 src/3.1_rag_embedding.py运行结果示例我们可以输入一些“语义相关”的问题来观察检索效果例如“熊猫吃什么”“什么是深度学习”“Python 是干什么的”运行时会看到类似输出相似度分数每次可能略有波动 极简向量检索演示 正在为知识库生成向量 (Embedding)... ✅ 已处理: Python 是一种... ✅ 已处理: 大熊猫是中... ✅ 已处理: 深度学习是... ✅ 已处理: 今天天气真... 请输入查询问题 (q退出): 熊猫吃什么 检索结果 (相似度: 0.78xx): 文档内容: 大熊猫是中国特有的珍稀动物主要以此竹子为食。 --- 所有文档得分 --- 文档 0: 0.12xx - Python 是一种广泛... 文档 1: 0.78xx - 大熊猫是中国特有... 文档 2: 0.10xx - 深度学习是机器学... 文档 3: 0.05xx - 今天天气真不错...总结这一篇我们把 RAG 的核心流程讲清楚并用一个极简程序跑通了“向量化 相似度检索”的关键链路。通过这个实验我们能直观看到语义检索不是关键字匹配而是通过 embedding 向量在语义空间里寻找相近内容。

相关新闻

Java面试核心:从HashMap到Spring循环依赖的深度解析与实战指南

Java面试核心:从HashMap到Spring循环依赖的深度解析与实战指南

1. 项目概述:一份“活”的Java面试题库最近在整理自己的技术笔记,翻出来这些年面试别人和被别人面试时攒下的各种Java题目,零零总总竟然有200多道。这让我想起刚入行那会儿,面对面试官连珠炮似的提问,脑子里一片空白&a…

2026/10/20 7:40:43 阅读更多 →
MathCAD信号可视化:动态绘制正弦波并解析周期振幅频率

MathCAD信号可视化:动态绘制正弦波并解析周期振幅频率

1. 项目概述:用MathCAD让信号“看得见”如果你正在学习信号处理、电路分析或者自动控制,那么“周期”、“振幅”、“频率”这几个词一定让你又爱又恨。爱的是,它们是描述一个信号最核心、最本质的特征;恨的是,课本上那…

2026/10/21 2:47:26 阅读更多 →
JavaScript数组reduce方法:从基础求和到高级数据聚合的全面指南

JavaScript数组reduce方法:从基础求和到高级数据聚合的全面指南

1. 从“循环累加”到“函数式求和”的思维跃迁 在JavaScript的日常开发中,数组求和是一个再基础不过的操作。如果你去问一个刚入门的开发者如何对一个数字数组求和,十有八九会得到一个 for 循环或者 forEach 遍历的答案。这没错,简单直接…

2026/10/17 10:51:35 阅读更多 →

最新新闻

服务器磁盘管理实战:从选型、RAID到LVM与性能排障全解析

服务器磁盘管理实战:从选型、RAID到LVM与性能排障全解析

最近帮一个业务团队做新服务器选型与磁盘初始化配置时,发现很多开发同学对磁盘这块的知识还停留在“机械硬盘 vs 固态硬盘”的层面。真要落到服务器选型、多块硬盘怎么组合、RAID 怎么选、系统装完以后磁盘怎么规划、后续怎么扩容和排障,往往就缺乏一套完…

2026/10/21 2:49:01 阅读更多 →
RAG知识库问答实战:从原理、技术选型到工程落地优化

RAG知识库问答实战:从原理、技术选型到工程落地优化

1. RAG 到底解决了什么问题,为什么现在非学不可最近两年,大模型相关的技术方向非常多,微调、Agent、多模态、RAG……如果不深入去看,很容易被各种名词绕晕。尤其是 RAG(Retrieval-Augmented Generation,检索…

2026/10/21 2:49:01 阅读更多 →
RAG知识库问答实战:从原理到代码落地

RAG知识库问答实战:从原理到代码落地

前一阵子在做知识库问答项目时,发现网上 RAG 相关的教程虽然很多,但大部分要么只讲原理、不给可运行代码,要么代码能跑但不解释为什么这么设计。对刚接触大模型应用开发的同学来说,很容易卡在“原理看懂了,一动手就报错…

2026/10/21 2:49:01 阅读更多 →
RAG入门到实战:用LangChain+Chroma搭建知识库问答系统

RAG入门到实战:用LangChain+Chroma搭建知识库问答系统

先给结论:RAG 是目前搭建知识库问答最稳的基线方案。RAG 的全称是 Retrieval-Augmented Generation,检索增强生成。它解决的问题很直接:大模型不知道你的私有资料、内部文档、产品手册和业务数据,那就先把这些资料切块、向量化、存…

2026/10/21 2:49:01 阅读更多 →
火焰数据集YOLOv5训练实战:从标注文件到可推理模型

火焰数据集YOLOv5训练实战:从标注文件到可推理模型

简介:火焰数据集(含标注好的标签)面向从事目标检测的开发者与研究者,尤其适合使用 YOLOv5 训练火焰识别模型的场景,可用于火灾预警、视频监控等实际项目。资源包共 5260 个文件,包含 1853 张 jpg 图像、185…

2026/10/21 2:49:01 阅读更多 →
Quartz动态设置并发数量

Quartz动态设置并发数量

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 2:48:00 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →