个网站做淘宝客推广可以吗,关于电子商务的论文,mvc网站开发之美,找网站做任务qq红包在上一篇文章中#xff0c;我们完成了文档的加载和分割#xff0c;但这只是第一步。想象一下#xff0c;你的知识库里有 10000 个文档片段#xff0c;当用户问如何优化数据库性能#xff1f;时#xff0c;系统如何在海量信息中快速找到最相关的内容#xff…在上一篇文章中我们完成了文档的加载和分割但这只是第一步。想象一下你的知识库里有 10000 个文档片段当用户问如何优化数据库性能时系统如何在海量信息中快速找到最相关的内容这就是检索的价值——它是连接问题和答案的桥梁。检索质量的好坏直接决定了 RAG 系统能否给出准确答案。一、概念速览在[《构建你的第一个知识库下》]中介绍了 Embedding 的基本概念将文本转换为高维向量让计算机理解语义相似度。我们也学习了向量数据库的基础用法。混合检索本文重点介绍混合检索Hybrid Search它结合了两种检索方式的优势检索方式原理优势劣势向量检索语义相似度计算理解同义词、上下文对精确关键词不敏感关键词检索BM25)词频统计精确匹配专业术语无法理解语义混合检索两者加权融合兼顾语义和精确性配置稍复杂示例用户搜索Python 爬虫 403 错误向量检索能找到网页爬取被拒绝的相关内容关键词检索则精确定位403 状态码的技术文档。二、实战Chroma 向量数据库配置Chroma 是轻量级向量数据库非常适合快速原型开发from langchain_community.vectorstores import Chroma from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.document_loaders import TextLoader import os # 加载文档延续上一篇的示例 loader TextLoader(enterprise_docs.txt, encodingutf-8) documents loader.load() # 文本分割 text_splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50, length_functionlen, ) chunks text_splitter.split_documents(documents) # 创建向量数据库 persist_directory ./chroma_db vectorstore Chroma.from_documents( documentschunks, embeddingembeddings, persist_directorypersist_directory, collection_nameenterprise_kb ) print(f✅ 已向量化 {len(chunks)} 个文档片段)配置要点persist_directory数据持久化目录重启后数据不丢失collection_name集合名称可创建多个知识库Chroma 会自动处理向量索引无需手动优化基础向量检索先看最简单的向量检索效果# 创建检索器 retriever_vector vectorstore.as_retriever( search_typesimilarity, # 相似度检索 search_kwargs{k: 3} # 返回前 3 个结果 ) # 测试查询 query 如何提升数据库查询速度 results retriever_vector.get_relevant_documents(query) print(f查询{query} ) for i, doc in enumerate(results, 1): print(f结果{i}{doc.page_content[:100]}...) print(f相关度评分{doc.metadata.get(score, N/A)} )实现混合检索混合检索结合向量检索和 BM25 关键词检索from langchain.retrievers import BM25Retriever, EnsembleRetriever # 准备文档内容BM25 需要原始文本 doc_texts [doc.page_content for doc in chunks] # 创建 BM25 检索器 retriever_bm25 BM25Retriever.from_texts( doc_texts, metadatas[doc.metadata for doc in chunks] ) retriever_bm25.k 3 # 返回前 3 个结果 # 创建混合检索器 ensemble_retriever EnsembleRetriever( retrievers[retriever_vector, retriever_bm25], weights[0.6, 0.4] # 向量检索权重 0.6BM25 权重 0.4 ) # 测试混合检索 query PostgreSQL 索引优化 results_hybrid ensemble_retriever.get_relevant_documents(query) print(f混合检索结果) for i, doc in enumerate(results_hybrid, 1): print(f{i}. {doc.page_content[:80]}...)完整代码示例from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import Chroma from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.retrievers import BM25Retriever, EnsembleRetriever from langchain_community.document_loaders import DirectoryLoader, TextLoader import os class EnterpriseKnowledgeBase: 企业知识库检索系统 def __init__(self, docs_path, persist_dir./chroma_db): self.docs_path docs_path self.persist_dir persist_dir self.embeddings None self.vectorstore None self.chunks None def load_documents(self): 加载文档 print( 正在加载文档。..) loader DirectoryLoader( self.docs_path, glob**/*.txt, loader_clsTextLoader, loader_kwargs{encoding: utf-8} ) documents loader.load() # 文本分割 text_splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50, separators[。, , , , ] ) self.chunks text_splitter.split_documents(documents) print(f✅ 已加载 {len(documents)} 个文档分割为 {len(self.chunks)} 个片段) def initialize_embeddings(self, model_nameall-MiniLM-L6-v2): 初始化 Embedding 模型 print(f 正在加载 Embedding 模型 {model_name}) self.embeddings HuggingFaceEmbeddings( model_namefsentence-transformers/{model_name}, model_kwargs{device: cpu}, encode_kwargs{normalize_embeddings: True} ) print(✅ Embedding 模型加载完成) def create_vectorstore(self): 创建向量数据库 print( 正在创建向量数据库。..) self.vectorstore Chroma.from_documents( documentsself.chunks, embeddingself.embeddings, persist_directoryself.persist_dir, collection_nameenterprise_kb ) print(✅ 向量数据库创建完成) def create_hybrid_retriever(self, vector_weight0.6, bm25_weight0.4, k3): 创建混合检索器 # 向量检索器 retriever_vector self.vectorstore.as_retriever( search_typesimilarity, search_kwargs{k: k} ) # BM25 检索器 doc_texts [doc.page_content for doc in self.chunks] retriever_bm25 BM25Retriever.from_texts( doc_texts, metadatas[doc.metadata for doc in self.chunks] ) retriever_bm25.k k # 混合检索器 ensemble_retriever EnsembleRetriever( retrievers[retriever_vector, retriever_bm25], weights[vector_weight, bm25_weight] ) print(f✅ 混合检索器创建完成向量{vector_weight}, BM25:{bm25_weight}) return ensemble_retriever def search(self, query, retriever, top_k3): 执行检索 results retriever.get_relevant_documents(query) return results[:top_k] def compare_retrievers(self, query): 对比不同检索器效果 # 向量检索 retriever_vector self.vectorstore.as_retriever( search_kwargs{k: 3} ) results_vector retriever_vector.get_relevant_documents(query) # BM25 检索 doc_texts [doc.page_content for doc in self.chunks] retriever_bm25 BM25Retriever.from_texts(doc_texts) retriever_bm25.k 3 results_bm25 retriever_bm25.get_relevant_documents(query) # 混合检索 retriever_hybrid self.create_hybrid_retriever() results_hybrid retriever_hybrid.get_relevant_documents(query) # 打印对比结果 print(f{*60}) print(f查询{query}) print(f{*60}) print( 向量检索结果) for i, doc in enumerate(results_vector, 1): print(f {i}. {doc.page_content[:60]}...) print( BM25 检索结果) for i, doc in enumerate(results_bm25, 1): print(f {i}. {doc.page_content[:60]}...) print( 混合检索结果) for i, doc in enumerate(results_hybrid, 1): print(f {i}. {doc.page_content[:60]}...) # 使用示例 if __name__ __main__: # 初始化知识库 kb EnterpriseKnowledgeBase(docs_path./docs) # 加载文档并创建向量库 kb.load_documents() kb.initialize_embeddings() kb.create_vectorstore() # 创建混合检索器 hybrid_retriever kb.create_hybrid_retriever( vector_weight0.6, bm25_weight0.4, k3 ) # 测试查询 test_queries [ 如何优化数据库查询性能, PostgreSQL B-tree 索引的原理, Python 内存泄漏如何排查 ] for query in test_queries: print(f 查询{query}) results kb.search(query, hybrid_retriever) for i, doc in enumerate(results, 1): print(f结果{i}) print(f 内容{doc.page_content[:100]}...) print(f 来源{doc.metadata.get(source, N/A)}) # 对比不同检索器 kb.compare_retrievers(PostgreSQL 索引优化最佳实践)三、总结通过本文的实战演练我们掌握了知识库检索的核心技术。混合检索是王道向量检索BM25 的组合能覆盖更多场景权重建议从 0.6:0.4 开始调优。持续优化建立测试查询集定期评估检索准确率根据业务场景调整策略。如何学习大模型 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%免费】