上海服饰网站建设,装修推广网站哪个好,天津网站建设求职简历,智慧旅游网站建设方案RAG#xff08;Retrieval-Augmented Generation#xff0c;检索增强生成#xff09;是当前大模型应用中最常见、也最容易落地的一种架构。
简单来说#xff1a;在模型回答问题之前#xff0c;先从你的知识库中找出相关内容#xff0c;再把这些内容一并交给模型生成答案。…RAGRetrieval-Augmented Generation检索增强生成是当前大模型应用中最常见、也最容易落地的一种架构。简单来说在模型回答问题之前先从你的知识库中找出相关内容再把这些内容一并交给模型生成答案。这一篇将基于一个最小可用、但工程上完整的 RAG 流程从零梳理文档是如何被加载为 LangChain 能理解的Document文档是如何被切分向量是如何存储与检索的检索结果如何被压缩 / 重排序最终如何接入到 LLM 调用中1. RAG 检索整体流程一个最基本的 RAG 系统至少包含以下 5 个步骤原始文档↓ 加载Document↓ 切分Chunks↓ 向量化VectorStore↓ 检索Relevant Docs↓ 送给 LLMAnswer我们可以使用LangChain,将上面的步骤拆成一组可组合、可替换的组件,下面我们按这个顺序一步一步来。2. 文档加载器Document Loader文档加载器作用把各种格式的文件统一转成 Document 对象。Document是什么LangChain 中所有 RAG 的基础数据结构都是from langchain_core.documents import DocumentDocument( page_content正文内容, metadata{page: 1, source: xxx.pdf})page_content参与向量化和生成的文本metadata不参与 embedding但可用于过滤、追溯来源后面的切分、存储、检索本质上都是在操作List[Document]。常见文档加载器PDFPyPDFLoaderfrom langchain_community.document_loaders import PyPDFLoaderloader PyPDFLoader(example.pdf)# 按页加载docs loader.load()WordDocx2txtLoaderfrom langchain_community.document_loaders import Docx2txtLoaderloader Docx2txtLoader(example.docx)docs loader.load()MarkdownUnstructuredMarkdownLoaderfrom langchain_community.document_loaders import UnstructuredMarkdownLoaderloader UnstructuredMarkdownLoader(README.md)docs loader.load()TXT / 日志类文本TextLoaderfrom langchain_community.document_loaders import TextLoaderloader TextLoader(data.txt, encodingutf-8)docs loader.load()3. 文本切分器TextSplitter大模型并不适合直接吃整篇文档上下文长度有限向量召回精度会下降切分策略直接决定 RAG 的上限。CharacterTextSplitter基于固定字符长度切分简单、可控from langchain.text_splitter import CharacterTextSplittertext_splitter CharacterTextSplitter( separator\n\n, # 使用两个换行符作为分隔符 chunk_size1000, # 每个文本块的最大字符数 chunk_overlap200 # 相邻块之间的重叠字符数)split_docs text_splitter.split_documents(docs)适合结构简单、段落清晰的文本。RecursiveCharacterTextSplitter 推荐按设定的分隔符列表递归尝试切分文本直到每个块的大小不超过设定的 chunk_size并保留一定的 chunk_overlap 以减少上下文丢失。这种方式能最大限度保持段落、句子、单词的完整性非常适合长文本处理、向量化检索和 RAG 场景。from langchain.text_splitter import RecursiveCharacterTextSplittertext_splitter RecursiveCharacterTextSplitter( chunk_size500, # 每个文本块的最大字符数 chunk_overlap50, # 相邻块之间的重叠字符数 separators[\n\n, \n, 。, , ], # 递归尝试切分文本的标识 keep_separatorTrue # 支持保持分隔符)split_docs text_splitter.split_documents(docs)这是 RAG 中最常用的切分方式。其他切分方式TokenTextSplitter按 token 数切对齐模型上下文MarkdownHeaderTextSplitter按 Markdown 标题层级切HTMLHeaderTextSplitter按 HTML 结构切4. 文本向量化Embedding在前面的步骤中我们已经拿到了List[Document]但向量数据库并不能直接存文本它真正存的是使用向量模型向量化后的高维浮点数组。 这个过程就叫 Embedding向量化。Embedding 的作用把“文本的语义”映射成一个可以计算距离的向量。之后所有的检索都是在:“问题的向量和哪一段文档的向量最接近”使用 HuggingFace Embedding 运行本地向量模型以bge-base-zh为例中文效果很好from langchain_community.embeddings import HuggingFaceEmbeddingsdef get_embeddings(): return HuggingFaceEmbeddings( model_nameBAAI/bge-large-zh-v1.5, model_kwargs{device: cuda}, # 或 cpu encode_kwargs{normalize_embeddings: True} # 配合 cosine 相似度效果更稳定 )在使用 cosine 相似度时建议开启 normalize_embeddingsTrue可以让不同长度文本的向量分布更稳定。首次加载需要在HuggingFace中下载模型如果网络问题下载不下来可以使用阿里魔塔等镜像网站下载到本地然后将BAAI/改成本地路径通义千问 DashScope Embedding 云端模型from langchain_community.embeddings import DashScopeEmbeddingsdef get_embeddings(): return DashScopeEmbeddings( modeltext-embedding-v3, dashscope_api_keysk-xxx )5 向量数据库PGVector这里使用 PostgreSQL pgvector 作为示例。你可能注意到了一个细节我们从来没有手动调用embedding.embed()这是因为LangChain把embedding的调用隐藏在VectorStore内部了from langchain_postgres import PGVectorvectorstore PGVector( embeddingsget_embeddings(), # 使用定义好的嵌入模型进行向量检索和入库 collection_nameknowledge_base, connectionpostgresqlpsycopg://user:passwordhost:5432/db)# 写入向量库vectorstore.add_documents(split_docs)⚠️ 注意向量入库和向量检索必须使用完全相同的 Embedding 模型和参数否则即使文档存在也几乎无法被检索到。6 检索器Retrieverretriever vectorstore.as_retriever( search_typesimilarity, #按照分值取最高的 search_kwargs{ k: 20, #检索前20个相似的 filter: {tag: 主角} #ai或人工标注的标签 })results retriever.invoke(孙悟空是谁)常见的检索方式还有search_typemmr在相似度和多样性之间做平衡search_typesimilarity_score_threshold按阈值过滤常见filter写法# 等于{filter: {uuid: 123}}# 或{filter: {$or: [{type: 1}, {type: 2}]}}# 范围{filter: {year: {$gte: 2020, $lte: 2024}}}7 重排序与上下文压缩在 RAG 中最常见的一步是 向量相似度检索 把问题和文档都映射成向量然后找“最相似”的文本片段。但在真实工程中你很快就会发现一个问题 向量召回到的是“语义相似”的内容但不一定是“最相关、最可用”的内容。向量检索Embedding Search的本质是把文本映射到高维空间用余弦距离 / 内积衡量“语义接近程度”这意味着它擅长的是同义表达语义模糊匹配大概方向相近的内容但它 并不理解任务目标比如哪一段更适合回答“定义型问题” 哪一段是结论哪一段只是背景哪一段虽然语义相似但其实是反例 / 否定 / 无关描述举个例子问题“孙悟空是谁”向量检索可能会召回《西游记》的背景介绍关于“齐天大圣”称号的来历描述花果山的段落一段提到孙悟空名字但在讲别的角色的内容这些内容都“像”孙悟空但真正适合直接喂给 LLM 的可能只有其中 12 段。如果全部召回并喂给大模型又会因为噪音过大幻觉概率变高所以我们需要重排序Rerank拿到真正需要的内容它是「问题 × 文档」成对判断而不是各自向量化后比距离。Rerank 是精匹配不是近似匹配以 CrossEncoder / DashScopeRerank 为代表的 rerank 模型。他会把问题 文档片段拼在一起直接判断这段内容对回答这个问题有没有帮助这意味着它能识别这段是不是在“回答问题”还是只是“提到了关键词”是定义、结论还是铺垫背景是否存在否定、反转、条件限制所以一个成熟、稳定的检索流程通常是 使用向量召回快速找“可能相关的候选集”然后使用重排序从候选集中找top(N) “最有用的内容”HuggingFace CrossEncoder使用HuggingFace 本地模型进行重排序,这里我们使用bge-reranker-basefrom langchain_community.cross_encoders import HuggingFaceCrossEncoderfrom langchain.retrievers.document_compressors.cross_encoder_rerank import CrossEncoderRerankerreranker CrossEncoderReranker( modelHuggingFaceCrossEncoder(bge-reranker-base), top_n5)通义千问 Rerank也可以使用云端服务提供的重排序比如阿里的gte-rerank-v2from langchain_community.document_compressors.dashscope_rerank import DashScopeRerankreranker DashScopeRerank( modelgte-rerank-v2, dashscope_api_keysk-xxx, top_n5)ContextualCompressionRetriever把 召回 重排序 封装成一个整体from langchain.retrievers import ContextualCompressionRetrieverfrom langchain_core.runnables import RunnableLambdacompression_retriever ContextualCompressionRetriever( base_retrieverretriever, base_compressorreranker)results compression_retriever.invoke(孙悟空是谁)8 接入 LLM完成 RAGchain compression_retriever | prompt | llm | StrOutputParser()chain.invoke(孙悟空是谁)小结这一篇从真实工程路径出发梳理了一个完整的 LangChain RAG 流程文档加载多格式文本切分多策略向量存储与检索重排序与上下文压缩最终接入 LLM 生成答案理解这些之后,每一步都可以独立替换和优化后续无论是多知识库 RAGAgent RAG本质上都只是这些 Runnable 的不同组合形式。如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包✅ 从零到一的 AI 学习路径图✅ 大模型调优实战手册附医疗/金融等大厂真实案例✅ 百度/阿里专家闭门录播课✅ 大模型当下最新行业报告✅ 真实大厂面试真题✅ 2025 最新岗位需求图谱所有资料 ⚡️ 朋友们如果有需要《AI大模型入门进阶学习资源包》下方扫码获取~① 全套AI大模型应用开发视频教程包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点② 大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通③ 大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。④ AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。⑤ 大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。⑥ 大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。以上资料如何领取为什么大家都在学大模型最近科技巨头英特尔宣布裁员2万人传统岗位不断缩减但AI相关技术岗疯狂扩招有3-5年经验大厂薪资就能给到50K*20薪不出1年“有AI项目经验”将成为投递简历的门槛。风口之下与其像“温水煮青蛙”一样坐等被行业淘汰不如先人一步掌握AI大模型原理应用技术项目实操经验“顺风”翻盘这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。以上全套大模型资料如何领取