当前位置: 首页 > news >正文

少数民族网站建设苏州市建设局网站

少数民族网站建设,苏州市建设局网站,网站与微信内容建设与运维总结,网页在线设计软件想象一下#xff0c;你是一名侦探#xff0c;身处庞大的信息世界#xff0c;试图在堆积如山的数据中找到隐藏的一条重要线索#xff0c;这就是检索增强生成#xff08;RAG#xff09;发挥作用的地方#xff0c;它就像你在人工智能和语言模型世界中的可靠助手。但即使是最…       想象一下你是一名侦探身处庞大的信息世界试图在堆积如山的数据中找到隐藏的一条重要线索这就是检索增强生成RAG发挥作用的地方它就像你在人工智能和语言模型世界中的可靠助手。但即使是最好的助理也有其局限性因此让我们开始探索RAG的高级方法重点关注大规模文档检索中的精度和上下文。 一、基本RAG 想象一下有一本和地平线一样宽百科全书。基本的RAG试图将这些丰富的知识提炼成一个单一的“嵌入”——本质上是一个数字。但是当你在一个特定的主题上寻求智慧时比如神秘的百慕大三角基本的RAG的粗笔画会覆盖更多细节给你留下一幅不完整的画面。这种限制就像试图用一张只显示大陆的地图来寻找隐藏的宝藏而不是通往标有“X”的地点的复杂路径。 另一方面如果我们只拥有带有嵌入的单个页面我们可能会找出具体的事实但当它们交织在一起时我们就会失去它们所讲述的故事。如果没有叙事大型语言模型LLM很难找到一个能抓住我们探究的真正本质的答案。 基本RAG虽然是一个值得称赞的里程碑但没有做的更好。基本RAG只是一个基础需要跨越通用知识和精确见解之间的距离我们需要做更细致的优化工作。 二、路径的细化父子文档关系 我们不是对整个百科全书进行单一的总结而是为每一页子文档进行简洁的概述注意包含的章节父文档。该方法在我之前的LLM之RAG实战五| 高级RAG 01使用小块检索小块所属的大块喂给LLM可以提高RAG性能博客中有所介绍这里略过。 2.1 步骤1父子文档关系 想象一下你有一本又大又笨重的书——一本关于所有电器的用户手册。现在有人问了一个特定的问题“为什么我的洗衣机显示错误代码2”对于基本的RAG我们要么得到缺乏上下文的小块要么得到搜索不够准确的大块。然而高级RAG采用了更聪明的方法。 首先手册被分解成大块——这些是我们的“父”文档。每一节都涉及更大的信息。在这些部分中我们拆分了涵盖特定问题的“子”文档如洗衣机的错误代码。 现在来看看矢量化的魔力。每个子文档都通过嵌入模型进行处理该模型分析文本并将其转换为向量——一系列表示文本本质的数字。这就像为每一小段信息创建一个DNA图谱。 每个子文档的文本都被提取到一个向量中然后将其存储在向量存储中其父文档也存储在这个向量存储中——这也是一个通用数据库。这使我们不仅可以快速检索最相关的小信息还可以保留父文档提供的上下文。 2.2 步骤二问答 当关于洗衣机的问题出现时它就变成了一个“嵌入”——把它想象成一个独特的数字签名。然后使用矢量搜索将这些嵌入与类似的子文档进行匹配。如果它与“洗衣机”部分的子文档嵌入紧密对齐我们就找到了匹配项。 有了我们的矢量存储和准备当出现问题时我们可以迅速找到最相关的子文档。但是我们没有提供狭义的回应而是引入了母文档它提供了更多的背景和上下文。这个准备好的提示富含特定信息和广泛的上下文然后被输入到大型语言模型LLM中该模型生成精确的上下文感知答案。 如图所示这种先进的RAG过程确保LLM具有生成准确响应所需的所有上下文就像侦探拼凑线索来解开谜团一样。借助MongoDB矢量搜索的强大功能我们可以以超级计算机的速度和精度浏览这一过程确保每个问题都得到尽可能好的答案。 三、MongoDB矢量搜索高级RAG背后的动力 从父子关系和矢量化的复杂关系中走出来我们直接进入了MongoDB的矢量搜索领域该引擎为我们的高级RAG过程提供了动力。让我们深入研究一下MongoDB矢量搜索是如何将筛选堆积如山的数据这一艰巨任务转变为一个精简高效的过程的。 3.1 矢量搜索快速寻找答案 MongoDB中的矢量搜索就像在浩瀚的数据海洋中拥有一盏高功率探照灯。当我们的洗衣机爱好者询问那个令人讨厌的错误代码时矢量搜索不仅仅是梳理数据它还可以精确定位信息的确切位置这要归功于我们早些时候创建的独特的“数字签名”。最棒的部分它以惊人的速度做到了这一点使得搜索答案的速度就像翻阅一个组织良好的文件柜一样快。 3.2 结构与速度想结合 MongoDB的矢量搜索将结构和速度和谐地结合在一起。父文档和子文档的存储以及它们的矢量化本质使MongoDB能够快速识别最相关的数据片段而不会被不太相关的信息所困扰。这是一位一丝不苟的图书管理员和一位侦探大师的完美结合确保了没有遗漏任何线索每个答案都切中要害。 3.3 语境丰富性增加的层次 在这里事情变得更加有趣。一旦矢量搜索精确定位了相关的子文档它就不会止步于此。通过检索父文档它确保了上下文的丰富性不会丢失。这意味着我们的LLM不仅了解“什么”还了解“为什么”和“如何”提供了超出表面水平的答案。 3.4 MongoDB不仅仅是一个数据库 MongoDB不仅仅是一个存储数据的地方这是一个动态的生态系统支持先进的RAG过程的每一步。它可以轻松管理复杂的父文档和子文档网络并促进快速矢量搜索使高级RAG功能强大。使用MongoDB我们不仅仅是在寻找答案我们正在制定既能提供信息又能与上下文相关的回应。 3.5 结果知情、准确的回答 由于高级RAG和MongoDB矢量搜索之间的强大协作生成的响应不仅准确而且信息丰富。当我们的用户询问洗衣机上的错误代码时他们会收到一个既准确又充满有用上下文的回复类似于为他们量身定制的全面指南。 MongoDB矢量搜索是这一高级RAG过程的支柱提供了在复杂的数据检索环境中导航所需的速度和精度。在下一节中我们将探索这一过程的实际实施展示如何将先进的RAG系统应用到生活中为用户提供人工智能所能提供的最佳答案。请继续关注我们将理论转化为实践并充分发挥先进RAG的潜力。 四、用MongoDB矢量搜索实现高级RAG 将Advanced RAG与MongoDB Vector Search集成到我们的系统中首先是几个技术组件的和数据处理流程。下面看一下具体步骤 4.1 步骤1设置和初始化 我们通过设置环境和建立必要的联系来启动工作这包括加载环境变量初始化OpenAI和MongoDB客户端以及定义我们的数据库和集合名称。 import osfrom dotenv import load_dotenvfrom pymongo import MongoClientfrom langchain.embeddings import OpenAIEmbeddings# Load environment variables from .env fileload_dotenv(overrideTrue)# Set up MongoDB connection detailsOPENAI_API_KEY os.environ[OPENAI_API_KEY]MONGO_URI os.environ[MONGO_URI]DB_NAME pdfchatbotCOLLECTION_NAME advancedRAGParentChild# Initialize OpenAIEmbeddings with the API keyembeddings OpenAIEmbeddings(openai_api_keyOPENAI_API_KEY)# Connect to MongoDBclient MongoClient(MONGO_URI)db client[DB_NAME]collection db[COLLECTION_NAME] 4.2 步骤2数据加载和分块 接下来我们将重点处理作为数据源的PDF文档。文档被加载并拆分为“父”和“子”块以准备嵌入和向量化。 from langchain.document_loaders import PyPDFLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitter# Initialize the text splitters for parent and child documentsparent_splitter RecursiveCharacterTextSplitter(chunk_size2000)child_splitter RecursiveCharacterTextSplitter(chunk_size200)# Function to process PDF document and split it into chunksdef process_pdf(file): loader PyPDFLoader(file.name) docs loader.load() parent_docs parent_splitter.split_documents(docs) # Process parent documents for parent_doc in parent_docs: parent_doc_content parent_doc.page_content.replace(\n, ) parent_id collection.insert_one({ document_type: parent, content: parent_doc_content }).inserted_id # Process child documents child_docs child_splitter.split_documents([parent_doc]) for child_doc in child_docs: child_doc_content child_doc.page_content.replace(\n, ) child_embedding embeddings.embed_documents([child_doc_content])[0] collection.insert_one({ document_type: child, content: child_doc_content, embedding: child_embedding, parent_ref: parent_id }) return PDF processing complete 4.3 步骤3查询嵌入和矢量搜索 当提交查询时我们将其转换为嵌入并执行向量搜索以找到最相关的子文档链接回它们的父文档以获取上下文。 # Function to embed a query and perform a vector searchdef query_and_display(query): query_embedding embeddings.embed_documents([query])[0] # Retrieve relevant child documents based on query child_docs collection.aggregate([{ $vectorSearch: { index: vector_index, path: embedding, queryVector: query_embedding, numCandidates: 10 } }]) # Fetch corresponding parent documents for additional context parent_docs [collection.find_one({_id: doc[parent_ref]}) for doc in child_docs] return parent_docs, child_docs 4.4 步骤4通过上下文感知生成响应 在识别出相关文档后我们为LLM创建一个提示其中包括用户的查询和匹配文档中的内容。这确保了响应具有信息性和上下文相关性。 from langchain.llms import OpenAI# Initialize the OpenAI clientopenai_client OpenAI(api_keyOPENAI_API_KEY)# Function to generate a response from the LLMdef generate_response(query, parent_docs, child_docs): response_content .join([doc[content] for doc in parent_docs if doc]) chat_completion openai_client.chat.completions.create( messages[{role: user, content: query}], modelgpt-3.5-turbo ) return chat_completion.choices[0].message.content 4.5 第五步串联所有组件 最后我们将这些元素组合成一个连贯的界面用户可以在其中上传文档并提出问题。这是使用Gradio实现的它提供了一种用户友好的方式来与我们先进的RAG系统交互。 with gr.Blocks(css.gradio-container {background-color: AliceBlue}) as demo: gr.Markdown(Generative AI Chatbot - Upload your file and Ask questions)​ with gr.Tab(Upload PDF): with gr.Row(): pdf_input gr.File() pdf_output gr.Textbox() pdf_button gr.Button(Upload PDF)​ with gr.Tab(Ask question): question_input gr.Textbox(labelYour Question) answer_output gr.Textbox(labelLLM Response and Retrieved Documents, interactiveFalse) question_button gr.Button(Ask)​​ question_button.click(query_and_display, inputs[question_input], outputsanswer_output) pdf_button.click(process_pdf, inputspdf_input, outputspdf_output)​demo.launch() 4.6 步骤6在MongoDB Atlas上创建索引 { fields: [ { numDimensions: 1536, path: embedding, similarity: cosine, type: vector }, { path: document_type, type: filter } ]} 参考文献 [1] https://ai.gopubby.com/byebye-basic-rag-embracing-advanced-retrieval-with-mongodb-vector-search-47b550be2c59
http://www.pierceye.com/news/261710/

相关文章:

  • 网站建设公司的客户个人网站做哪些内容
  • 外贸公司网站推广怎么让公司建设网站
  • 网站开发语长沙网站建设商城
  • 手机刷网站排名软件建设银行网站怎么登录密码忘了怎么办
  • 利用海康威视做直播网站鞍山网站建设找金航
  • 做网站大概花多少钱商圈云分销软件下载
  • 万户网站制作网站跳转怎么做
  • 网站开发全程设计做网站推广的公司发展前景
  • 电商设计网站培训建设网站域名
  • 石家庄免费专业做网站网站建设投标书服务方案范本
  • 怀孕单子图片在线制作北京seo服务行者
  • 网站备案 子域名云南商城网站建设
  • 上传到服务器的网站打开是空白网站报备流程
  • 如何用ps做网站标识一个叫mit做app的网站
  • 网站免费网站免费主流网站模板
  • 湖州市交通建设管理局网站牌具做网站可以吗
  • 湖南鸿泰电力建设有限公司网站西安做小程序的公司
  • 学校资源网站建设方案聊城网站建设
  • windows 做网站服务器python做的网站漏洞
  • 培训网站推荐网站内容该怎么做
  • 精通网站建设电子档朵朵软件网站建设
  • 铜山区规划建设局网站网站开发的甘特图
  • 访问网站速度慢中国最新军事新闻直播
  • 商城网站的psd模板免费下载哪里可以上传自己的php网站
  • 珠宝网站策划书网页设计的毕业设计
  • 最经典最常用的网站推广方式什么做网站赚钱
  • 广州哪家做网站化妆品网站方案
  • cms开源网站管理系统北京网站建设策划解决方案
  • 洛阳做多屏合一网站最新款淘宝客源码整网站程序模板+后台带自动采集商品功能带文章
  • 宁国新站seo中国建筑网官网监理工程师网站