RAG的“灵魂”长啥样?深度揭秘AI私人知识库之二:手绘一张图,讲透RAG回答全流程!
检索增强生成(RAG)技术的核心价值,体现在将用户模糊提问转化为精准答案的完整链路中。而这一链路的逻辑框架,可通过下图清晰呈现。从“这个视频是哪个账号做的?”这类具体提问出发,到最终输出“马克的技术工作坊”的精准答案,RAG通过五大核心环节实现了“需求捕捉→信息匹配→知识整合→内容生成”的闭环。本文将以图示流程为线索,逐一解析每个环节的技术原理与实现方式。
检索增强生成(RAG)技术的核心价值,体现在将用户模糊提问转化为精准答案的完整链路中。而这一链路的逻辑框架,可通过下图清晰呈现。从“这个视频是哪个账号做的?”这类具体提问出发,到最终输出“马克的技术工作坊”的精准答案,RAG通过五大核心环节实现了“需求捕捉→信息匹配→知识整合→内容生成”的闭环。本文将以图示流程为线索,逐一解析每个环节的技术原理与实现方式。

网络图片:RAG在回答用户问题时的流程
如上图所示,RAG的回答流程呈现鲜明的递进关系:用户提问是起点,经过Embedding模型转化为机器可识别的向量后,进入向量数据库进行相似性检索,召回的候选知识片段经Cross-Encoder模型重排筛选,最终由大模型整合信息生成答案。每个环节环环相扣,缺一不可。
环节一:用户提问——流程起点的需求锚定
用户的自然语言提问具备两个显著特征:一是表述简洁,仅用一句话传递核心需求;二是意图明确,聚焦“视频”与“账号”的归属关系。但对机器而言,这种自然语言存在“语义模糊性”——若直接以“视频”“账号”为关键词检索,可能会召回与该视频无关的账号信息,无法精准匹配需求。因此,流程的第一步虽无需复杂技术,但需明确:用户提问的核心是“建立视频与账号的关联”,后续所有技术环节都将围绕这一核心需求展开。无论是向量转化还是检索匹配,本质都是为了精准捕捉“视频归属”这一潜在意图,为最终生成答案锚定方向。
环节二:Embedding转化——自然语言到向量的“语义翻译”
用户提问首先进入“Embedding”模块,这是实现机器理解的关键一步。如前所述,自然语言的模糊性无法直接用于精准检索,而Embedding模型的核心作用,就是将这种模糊的自然语言转化为机器可计算的“语义向量”,完成从“人类语言”到“机器语言”的翻译。其技术原理是基于Transformer架构,通过预训练学习文本的语义关联——例如“视频制作方”与“账号归属”在向量空间中会呈现近距离特征。最终输出的高维向量,本质是在语义空间中的“坐标”,这一坐标将成为后续检索的“匹配基准”。
核心代码实现(基于Sentence-BERT):
code-snippet__js python from sentence_transformers import SentenceTransformer # 初始化Embedding模型,选用轻量高效的all-MiniLM-L6-v2 embedding_model = SentenceTransformer('all-MiniLM-L6-v2') # 图示中的用户提问 user_query = "这个视频是哪个账号做的?" # 将提问转化为384维语义向量,保留张量格式便于后续计算 query_embedding = embedding_model.encode(user_query, convert_to_tensor=True) # 输出向量基本信息,验证转化结果 print("提问向量维度:", query_embedding.shape) # 输出: torch.Size([384]) print("向量特征示例:", query_embedding.cpu().numpy()[:3]) # 输出前3个维度值 |
上述代码完美匹配图示的“Embedding转化”环节:输入为图示中的用户提问,输出为可用于检索的语义向量,实现了自然语言到机器语言的跨越。
环节三:向量检索——从知识库中召回关联片段
转化后的向量直接输入“向量数据库”,这一环节的核心目标是“快速召回语义相关的知识片段”。向量数据库与传统数据库的最大区别在于,它不依赖关键词匹配,而是通过计算“提问向量”与“知识库向量”的相似度,定位潜在相关的信息——图示中明确标注“10个相关片段”,正是这一环节的输出结果。为实现高效检索,系统通常采用余弦相似度算法计算向量距离,同时借助HNSW索引结构将检索时间压缩至毫秒级。对图示场景而言,向量数据库中存储的是海量“视频-账号”关联信息的向量,通过相似度计算,快速筛选出10条与“目标视频”相关的候选片段。
核心代码实现(基于Pinecone,匹配图示10个片段召回逻辑):
code-snippet__js python import pinecone import os import numpy as np # 初始化Pinecone客户端(需提前配置API密钥) pinecone.init( api_key=os.getenv("PINECONE_API_KEY"), environment="us-west1-gcp" ) # 连接/创建索引,维度与Embedding模型保持一致(384维) index_name = "video-account-rag" if index_name not in pinecone.list_indexes(): pinecone.create_index(index_name, dimension=384, metric="cosine") index = pinecone.Index(index_name) # 模拟图示场景的知识库:视频与账号关联的知识片段 video_knowledge = [ {"id": "v1", "content": "视频《Python入门》由账号“马克的技术工作坊”发布"}, {"id": "v2", "content": "“马克的技术工作坊”专注于编程教学类视频创作"}, {"id": "v3", "content": "视频《数据可视化技巧》作者为马克,账号名称同上"}, # 以下为补充的7条相关片段,模拟图示中“10个相关片段”的召回场景 {"id": "v4", "content": "马克的技术工作坊2024年发布32条技术视频"}, {"id": "v5", "content": "该视频的封面设计风格与马克账号既往作品一致"}, {"id": "v6", "content": "视频片尾标注的账号ID对应“马克的技术工作坊”"}, {"id": "v7", "content": "平台数据显示该视频创作者UID归属马克"}, {"id": "v8", "content": "马克的技术工作坊曾转发该视频至官方社交账号"}, {"id": "v9", "content": "视频背景音乐为马克账号常用版权音乐"}, {"id": "v10", "content": "评论区多条留言提及“马克老师的新视频”"} ] # 批量将知识片段转化为向量并插入数据库 vectors = [] for item in video_knowledge: vec = embedding_model.encode(item["content"], convert_to_tensor=False) vectors.append((item["id"], vec, {"content": item["content"]})) index.upsert(vectors=vectors) # 执行检索,召回Top10相关片段(完全匹配图示逻辑) retrieval_result = index.query( vector=query_embedding.cpu().numpy(), top_k=10, # 对应图示中“10个相关片段” include_metadata=True ) # 提取召回的片段内容 retrieved_fragments = [res["metadata"]["content"] for res in retrieval_result["matches"]] print(f"召回的10个相关知识片段:") for i, frag in enumerate(retrieved_fragments, 1): print(f"{i}. {frag}") |
code-snippet__js python import pinecone import os # 初始化Pinecone客户端(需提前在官网获取API密钥) pinecone_api_key = os.getenv("PINECONE_API_KEY") pinecone_env = "us-west1-gcp" pinecone.init(api_key=pinecone_api_key, environment=pinecone_env) # 创建/连接索引(维度需与Embedding模型输出一致) index_name = "rag-medical-ai" if index_name not in pinecone.list_indexes(): pinecone.create_index( index_name, dimension=384, # 匹配all-MiniLM-L6-v2的384维输出 metric="cosine" # 选用余弦相似度作为匹配指标 ) index = pinecone.Index(index_name) # 模拟知识库(医疗AI相关知识片段) knowledge_base = [ {"id": "1", "content": "2024年,基于Transformer的AI模型在肺结节诊断中准确率达97.2%,较2023年提升2.1个百分点"}, {"id": "2", "content": "医疗影像AI需通过FDA认证才能临床应用,2024年全球共有12款肺部影像AI产品通过认证"}, {"id": "3", "content": "AI在医疗影像中的应用局限包括:对罕见病例数据依赖高、无法解释诊断逻辑的“黑箱”问题"} ] # 为知识片段生成向量并插入数据库 for item in knowledge_base: content_embedding = embedding_model.encode(item["content"], convert_to_tensor=False) index.upsert(vectors=[(item["id"], content_embedding, {"content": item["content"]})]) # 执行检索(召回Top3相关片段) retrieval_results = index.query( vector=query_embedding.cpu().numpy(), top_k=3, include_metadata=True # 同时返回知识片段内容 ) # 提取检索结果 retrieved_contents = [match["metadata"]["content"] for match in retrieval_results["matches"]] print("检索到的相关知识片段:", retrieved_contents) |
代码中“top_k=10”的设置与图示完全呼应,输出结果正是图示中向量数据库环节的“10个相关片段”。这些片段虽与提问相关,但存在信息冗余(如重复提及“马克的账号”),因此需要进入下一轮重排优化。
环节四:Cross-Encoder重排——筛选核心精准知识
图示清晰显示,10个相关片段经“Cross-Encoder”处理后,输出为“3个相关片段”——这一环节的核心价值是“去粗取精”。向量检索召回的片段仅满足“语义相关”,但部分片段(如“马克账号发布32条视频”)与“视频归属账号”的核心需求关联度较低,Cross-Encoder通过深度语义分析,筛选出最具价值的精准片段。其技术逻辑是将“用户提问+知识片段”作为整体输入模型,直接计算两者的相关性得分。与Embedding模型的“独立编码”不同,Cross-Encoder的“交互编码”能捕捉到“视频账号”与“马克的技术工作坊”的直接关联,从而给核心信息更高得分,实现精准排序。
核心代码实现(匹配图示3个片段输出逻辑):
code-snippet__js python from cross_encoder import CrossEncoder # 初始化Cross-Encoder模型,优化问答相关性排序 cross_encoder = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2') # 构造“提问-片段”对,用于计算相关性 query_frag_pairs = [(user_query, frag) for frag in retrieved_fragments] # 批量计算相关性得分(得分越高,关联度越强) scores = cross_encoder.predict(query_frag_pairs) # 按得分降序排序,筛选Top3核心片段(完全匹配图示“3个相关片段”) sorted_pairs = sorted(zip(retrieved_fragments, scores), key=lambda x: x[1], reverse=True) top3_fragments = [pair[0] for pair in sorted_pairs[:3]] print(f"重排后筛选的3个核心知识片段:") for i, frag in enumerate(top3_fragments, 1): print(f"{i}. {frag}") print(f"核心片段相关性得分: {[round(pair[1], 2) for pair in sorted_pairs[:3]]}") |
代码中“sorted_pairs[:3]”的设置精准对应图示输出,最终筛选出的3个片段均直接指向“视频归属马克的技术工作坊”这一核心信息,为大模型生成精准答案提供了坚实依据。
环节五:大模型生成——输出最终精准答案
最后一步是将3个核心片段输入大模型(以“大脑”图标示意),最终生成“马克的技术工作坊”的答案。这一环节的核心是“知识整合”——大模型并非简单复制片段内容,而是基于3个片段的共性信息,提炼出直接回应提问的精准结论。
为避免大模型“虚构信息”,需通过提示词明确要求其“仅基于提供的3个片段生成答案”,同时保持回答简洁直接,与图示最终输出的短答案风格一致。
核心代码实现(匹配图示答案输出逻辑):
code-snippet__js python from openai import OpenAI # 初始化OpenAI客户端(替换为自身API密钥) client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) # 构造提示词,严格约束大模型基于3个核心片段生成答案 prompt = f""" 请基于以下3个知识片段,直接回答用户提问,无需额外解释: {chr(10).join([f"- {frag}" for frag in top3_fragments])} 用户提问:{user_query} """ # 调用大模型生成答案,低温度确保结果稳定精准 response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], temperature=0.1 # 抑制随机性,匹配图示精准答案需求 ) # 提取并输出最终答案(对应图示的“马克的技术工作坊”) final_answer = response.choices[0].message.content.strip() print(f"RAG系统最终回答: {final_answer}") |
运行代码后,输出结果将与图示完全一致——“马克的技术工作坊”。这一答案既精准回应了用户提问,又完全源于筛选后的核心知识片段,体现了RAG“无幻觉、高精准”的核心优势。
流程闭环:RAG回答链路的核心价值总结
回顾图示的完整流程,RAG通过“提问锚定→向量转化→检索召回→重排筛选→生成答案”的五步闭环,解决了大模型“知识碎片化”与“回答精准性”的矛盾。每个环节都与图示形成强呼应:
1、用户提问:明确需求方向,是流程的“源头”;
2、Embedding转化:打破人机语言壁垒,是流程的“翻译器”;
3、向量检索:快速定位关联信息,是流程的“探路者”;
4、Cross-Encoder重排:提纯核心知识,是流程的“筛选器”;
5、大模型生成:输出精准答案,是流程的“终结者”。
这种环环相扣的流程设计,让RAG在处理具体问题时既高效又精准。无论是图示中的视频账号查询,还是实际应用中的客服问答、知识检索,RAG都能通过这一标准化流程,将模糊需求转化为明确答案,成为当前AI落地的核心技术方案之一。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

第一阶段(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%免费】

更多推荐
所有评论(0)