利用 MongoDB Atlas 進行大模型語義搜索和RAG

節前,我們星球組織了一場算法崗技術&面試討論會,邀請了一些互聯網大廠朋友、參加社招和校招面試的同學.

針對算法崗技術趨勢、大模型落地項目經驗分享、新手如何入門算法崗、該如何準備、面試常考點分享等熱門話題進行了深入的討論。

匯總合集:《大模型實戰寶典》(2024版)正式發布!

喜歡本文記得收藏、關注、點贊,文末可參與技術交流


你知道嗎?MongoDB Atlas 現在提供了強大的向量搜索功能。現在你可以對數據進行語義搜索,并為大型語言模型(LLM)應用實現檢索增強生成(RAG)。

通過將 Atlas 向量搜索與 LangChain、LlamaIndex 和客戶端庫等流行框架集成,你可以輕松構建高級自然語言處理(NLP)解決方案。

本文將探討如何利用 MongoDB Atlas 向量搜索進行語義搜索和 RAG。

學習目標

  • 理解向量搜索的概念及其在自然語言處理和信息檢索中的應用。
  • 學習如何將 MongoDB Atlas Vector Search 與 LangChain 框架集成,以構建檢索增強生成(RAG)應用。
  • 掌握構建 RAG 鏈的能力,結合向量搜索檢索、提示模板和大型語言模型(LLM)生成上下文感知的響應。
  • 了解使用 MongoDB Atlas Vector Search 作為向量存儲的好處,包括效率、一致性、可擴展性和簡易性。
  • 探索 LangChain 的靈活性和可擴展性,學習有關檢索過程、LLM 提供者等的自定義選項。

什么是向量搜索?

向量搜索,也稱為語義搜索,是一種超越傳統基于關鍵詞搜索的技術。它利用機器學習模型將文本、音頻或圖像等數據轉換為稱為嵌入的高維向量表示。這些嵌入捕捉數據的語義意義,使您能夠根據向量空間中的接近度找到相似的內容,即使具體的詞語不匹配。

向量搜索的核心優勢在于它能夠理解查詢背后的意圖和上下文,使其在搜索引擎、推薦系統和語言模型等各種應用中非常有用。

集成 MongoDB Atlas 向量搜索

MongoDB Atlas 是一種完全托管的云數據庫服務,現在原生支持向量搜索。通過將向量嵌入與您的數據一起存儲在 MongoDB 中,您可以在不需要單獨的向量存儲的情況下執行高效的語義搜索,從而確保數據一致性并簡化應用程序架構。

通常過程包括:

  1. 將您的數據加載到 MongoDB Atlas 集群中。
  2. 使用預訓練模型(如 OpenAI 的 text-embedding-ada-002)為您的數據生成向量嵌入。
  3. 將嵌入與您的數據一起存儲在 MongoDB 中。
  4. 在嵌入字段上創建 Atlas 向量搜索索引。
  5. 使用 Atlas 強大的 $vectorSearch 聚合管道階段運行向量搜索查詢。

前提條件: 要將 Atlas 向量搜索與 LangChain 集成,您需要一個運行 MongoDB 6.0.11、7.0.2 或更高版本的 Atlas 集群,一個 OpenAI API 密鑰(或替代的 LLM 提供商),以及一個運行項目的 Python 環境。

LangChain 集成

LangChain 是一個用 Python 編寫的開源框架,旨在簡化由大型語言模型(LLM)驅動的應用程序的開發。它提供了模塊化和可擴展的架構,使開發者可以通過組合稱為“鏈”的可重用組件來構建復雜的工作流。

LangChain 的一個關鍵特性是其對檢索增強生成(RAG)的支持,這是一種將 LLM 的強大功能與外部數據源相結合的技術。通過將 MongoDB Atlas 向量搜索與 LangChain 集成,開發者可以利用 MongoDB 作為高性能的向量數據庫,實現高效的語義搜索和 RAG 實現。

這種集成允許開發者:

  • 使用 LangChain 的模塊化架構輕松構建和管理復雜的 NLP 應用。
  • 通過 Atlas 向量搜索實現高效的語義搜索,利用向量嵌入來增強 LLM 的生成能力。
  • 在構建 RAG 應用時,結合向量搜索、提示模板和 LLM,以生成上下文感知的響應。

集成過程通常包括以下步驟:

第一步:設置環境

安裝所需的 Python 包,包括 langchainlangchain-mongodblangchain-openai
定義環境變量,例如 OpenAI API 密鑰和 Atlas 集群連接字符串。

import os
import getpass
from langchain_mongodb import MongoDBAtlasVectorSearch
from langchain_openai import OpenAIEmbeddings, ChatOpenAIos.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
ATLAS_CONNECTION_STRING = getpass.getpass("MongoDB Atlas SRV Connection String:")

第二步:使用 Atlas 作為向量存儲

使用提供的連接字符串連接到 Atlas 集群。
將數據加載到 Atlas 中,可以直接插入文檔或使用 LangChain 的內置數據加載器加載各種文件格式(如 PDF、CSV、JSON)。
使用 LangChain 的文本拆分器將數據拆分成較小的塊或文檔。
使用 MongoDBAtlasVectorSearch 類實例化 Atlas 作為向量存儲,指定集合和索引名稱。
使用預訓練模型(如 OpenAI 的 text-embedding-ada-002)為數據生成向量嵌入。

from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter# 從 PDF 加載數據
loader = PyPDFLoader("https://example.com/document.pdf")
data = loader.load()# 將數據拆分成文檔
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=20)
docs = text_splitter.split_documents(data)

第三步:創建 Atlas 向量搜索索引

定義 Atlas 向量搜索索引架構,指定向量字段(例如 “embedding”)和任何附加的過濾字段。
使用 Atlas UI 或 MongoDB Atlas Search API 在 Atlas 集合上創建索引。

# 實例化 Atlas 作為向量存儲
from pymongo import MongoClientclient = MongoClient(ATLAS_CONNECTION_STRING)
atlas_collection = client["langchain_db"]["documents"]
vector_search = MongoDBAtlasVectorSearch.from_documents(documents=docs,embedding=OpenAIEmbeddings(),collection=atlas_collection,index_name="vector_index"
)

第四步:運行向量搜索查詢

使用 LangChain 的 MongoDBAtlasVectorSearch.as_retriever 方法將 Atlas 向量搜索實例化為語義搜索的檢索器。
執行各種類型的向量搜索查詢,例如基本語義搜索、帶相關性評分的搜索或帶元數據過濾的搜索。

query = "MongoDB Atlas security"
results = vector_search.similarity_search(query)

第五步:實現 RAG

定義一個提示模板,指示 LLM 使用檢索到的文檔作為生成響應的上下文。
通過結合 Atlas 向量搜索檢索器、提示模板和 LLM(如 OpenAI 的 ChatGPT)構建 RAG 鏈。
使用查詢提示 RAG 鏈,它將從 Atlas 中檢索相關文檔,將它們傳遞給 LLM,并生成上下文感知的響應。

from langchain.prompts import PromptTemplate
from langchain.chains import RetrievalQA# 定義提示模板
template = """Use the following context to answer the question:
Context: {context}
Question: {question}"""
prompt = PromptTemplate(template=template, input_variables=["context", "question"])# 創建 RAG 鏈
rag = RetrievalQA.from_chain_type(llm=ChatOpenAI(),chain_type="stuff",retriever=vector_search.as_retriever(),prompt=prompt)# 提問
query = "How can I secure my MongoDB Atlas cluster?"
result = rag({"query": query})
print(result['result'])

LangChain 提供了高度的靈活性和可擴展性,允許開發者根據具體需求自定義與 Atlas 向量搜索的集成。例如,您可以通過調整檢索文檔的數量、相關性評分閾值或用于排名的相似性度量來優化檢索過程。

雖然這種集成主要關注 MongoDB Atlas 向量搜索,LangChain 還支持各種向量數據庫和搜索引擎,包括 Chroma、Weaviate 和 Pinecone 等。此外,LangChain 支持多種 LLM 提供商,如 OpenAI、Anthropic、Cohere 等,使您可以輕松利用不同的語言模型進行 RAG 實現。

通過結合 LangChain 的模塊化架構和 MongoDB Atlas 向量搜索的高效語義搜索功能,開發者可以構建復雜的自然語言處理應用,這些應用能夠理解上下文、檢索相關信息并生成有信息的響應,同時利用 MongoDB 文檔數據庫的可擴展性和一致性。

LlamaIndex 集成

LlamaIndex 是另一個開源框架,旨在簡化自定義數據源與 LLM 的集成。它提供了加載和準備向量嵌入的工具,支持 RAG 實現。通過將 Atlas 向量搜索與 LlamaIndex 集成,您可以使用 MongoDB 作為向量存儲,檢索語義相似的文檔以增強 LLM 的知識。

該過程包括設置 Atlas 集群,將數據加載到 LlamaIndex 索引中,并使用 MongoDBAtlasVectorSearch 向量存儲將向量嵌入存儲在 MongoDB 中。然后,您可以使用 LlamaIndex 的 VectorIndexRetriever 運行語義搜索,并利用查詢引擎根據檢索到的文檔生成上下文感知的響應。

客戶端庫集成

除了流行的框架之外,您還可以使用 MongoDB 的官方客戶端庫將 Atlas 向量搜索直接集成到您的應用程序中。這種方法包括為您的數據生成向量嵌入(例如,使用 OpenAI API),將它們存儲在 MongoDB 中,創建向量搜索索引,并從應用程序代碼中運行 $vectorSearch 查詢。

例如,使用 Node.js 客戶端庫,您可以設置一個 Atlas 觸發器,使用 OpenAI API 自動為新文檔生成嵌入。然后,它可以創建一個向量搜索索引,并使用 $vectorSearch 聚合管道階段執行語義搜索。

使用 MongoDB 進行向量搜索的好處

集成向量搜索功能與 MongoDB Atlas 提供了幾個關鍵好處:

效率:通過將向量與數據一起存儲,您避免了在應用程序數據庫和單獨的向量存儲之間進行同步的需要。這提高了性能并簡化了架構。

一致性:將嵌入與原始數據一起存儲,確保即使向量生成過程隨時間變化,向量也始終與正確的數據關聯。

可擴展性:MongoDB Atlas 提供水平和垂直可擴展性,使您能夠無縫處理高要求的向量搜索工作負載。

簡易性:使用單個數據庫存儲數據和向量嵌入,減少了應用程序的復雜性和潛在的故障點。

托管服務:MongoDB Atlas 是一種完全托管的云數據庫服務,因此它減輕了操作負擔,使您能夠專注于構建應用程序。

向量搜索和 RAG 的應用場景

向量搜索和 RAG 在各個行業和領域都有廣泛的應用,包括:

智能搜索引擎:提供更相關和上下文感知的搜索結果,即使用戶的查詢含糊不清或不精確。

客戶支持:構建能夠理解自然語言查詢并利用相關知識庫提供準確、上下文感知響應的聊天機器人和虛擬助手。

電子商務和推薦系統:通過理解用戶偏好和查找語義相似的商品來改進產品推薦。

內容分析:在大數據集中識別相似內容,這有助于完成如剽竊檢測、內容重復刪除和主題聚類等任務。

生物醫學研究:通過基于語義相似性查找相關的科學文獻和數據,加速藥物發現和醫學研究。

結論

MongoDB Atlas 向量搜索為構建能夠理解上下文和意圖的高級 NLP 應用程序開辟了令人興奮的可能性。通過與 LangChain 和 LlamaIndex 等流行框架集成,或利用客戶端庫,您可以輕松實現語義搜索和 RAG 功能。試試看,解鎖應用程序中智能和相關性的新層次!

技術交流群

前沿技術資訊、算法交流、求職內推、算法競賽、面試交流(校招、社招、實習)等、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企開發者互動交流~

我們建了算法崗技術與面試交流群, 想要獲取最新面試題、了解最新面試動態的、需要源碼&資料、提升技術的同學,可以直接加微信號:mlc2040。加的時候備注一下:研究方向 +學校/公司+CSDN,即可。然后就可以拉你進群了。

方式①、微信搜索公眾號:機器學習社區,后臺回復:加群
方式②、添加微信號:mlc2040,備注:技術交流

用通俗易懂方式講解系列

  • 《大模型面試寶典》(2024版) 正式發布!

  • 《大模型實戰寶典》(2024版)正式發布!

  • 用通俗易懂的方式講解:自然語言處理初學者指南(附1000頁的PPT講解)

  • 用通俗易懂的方式講解:1.6萬字全面掌握 BERT

  • 用通俗易懂的方式講解:NLP 這樣學習才是正確路線

  • 用通俗易懂的方式講解:28張圖全解深度學習知識!

  • 用通俗易懂的方式講解:不用再找了,這就是 NLP 方向最全面試題庫

  • 用通俗易懂的方式講解:實體關系抽取入門教程

  • 用通俗易懂的方式講解:靈魂 20 問幫你徹底搞定Transformer

  • 用通俗易懂的方式講解:圖解 Transformer 架構

  • 用通俗易懂的方式講解:大模型算法面經指南(附答案)

  • 用通俗易懂的方式講解:十分鐘部署清華 ChatGLM-6B,實測效果超預期

  • 用通俗易懂的方式講解:內容講解+代碼案例,輕松掌握大模型應用框架 LangChain

  • 用通俗易懂的方式講解:如何用大語言模型構建一個知識問答系統

  • 用通俗易懂的方式講解:最全的大模型 RAG 技術概覽

  • 用通俗易懂的方式講解:利用 LangChain 和 Neo4j 向量索引,構建一個RAG應用程序

  • 用通俗易懂的方式講解:使用 Neo4j 和 LangChain 集成非結構化知識圖增強 QA

  • 用通俗易懂的方式講解:面了 5 家知名企業的NLP算法崗(大模型方向),被考倒了。。。。。

  • 用通俗易懂的方式講解:NLP 算法實習崗,對我后續找工作太重要了!。

  • 用通俗易懂的方式講解:理想汽車大模型算法工程師面試,被問的瑟瑟發抖。。。。

  • 用通俗易懂的方式講解:基于 Langchain-Chatchat,我搭建了一個本地知識庫問答系統

  • 用通俗易懂的方式講解:面試字節大模型算法崗(實習)

  • 用通俗易懂的方式講解:大模型算法崗(含實習)最走心的總結

  • 用通俗易懂的方式講解:大模型微調方法匯總

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13805.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13805.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13805.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于英飛凌BGT60LTR11AIP E6327芯片具低功耗的脈沖多普勒操作模式常用于汽車應用的雷達上

芯片特征: 60 GHz收發器MMIC,帶一個發射器和一個接收器單元封裝天線(AIP)(6.73.30.56 mm3)低功耗的脈沖多普勒操作模式自主模式用于運動和運動方向的集成檢測器運動檢測信號的直接輸出目標檢測范圍的15個可配置閾值檢測…

Android14之Binder調試(二百一十一)

簡介: CSDN博客專家,專注Android/Linux系統,分享多mic語音方案、音視頻、編解碼等技術,與大家一起成長! 優質專欄:Audio工程師進階系列【原創干貨持續更新中……】🚀 優質專欄:多媒…

前端面試題日常練-day21 【面試題】

題目 希望這些選擇題能夠幫助您進行前端面試的準備,答案在文末。 AJAX 是什么的縮寫? a) Asynchronous JavaScript and XMLb) Asynchronous JavaScript and XHTMLc) Asynchronous Java and XMLd) Asynchronous Java and XHTML使用 AJAX 可以實現以下哪…

2024年5月20日優雅草蜻蜓API大數據服務中心v2.0.4更新

v2.0.4更新 v2.0.4更新 2024年5月20日優雅草蜻蜓API大數據服務中心v2.0.4更新-增加ai繪畫接口增加淘寶聯想詞接口底部增加聯系方式 更新日志 底部增加聯系方式 增加ai繪畫接口 增加淘寶聯想詞接口 增加用戶中心充值提示 用戶中心內頁顏色改版完成 截圖 部分具體更新接口信…

神經網絡優化器-從SGD到AdamW

優化器準則 凸優化基本概念 先定義凸集,集合中的兩個點連接的線還在集合里面,就是凸集,用數學語言來表示就是:對于集合中的任意兩個元素x,y以及任意實數 λ ∈ ( 0 , 1 ) \lambda \in (0,1) λ∈(0,1),有…

【NLP】詞性標注

詞 詞是自然語言處理的基本單位,自動詞法分析就是利用計算機對詞的形態進行分析,判斷詞的結構和類別。 詞性(Part of Speech)是詞匯最重要的特性,鏈接詞匯和句法 詞的分類 屈折語:形態分析 分析語&#…

k8s 1.24.x之后如果rest 訪問apiserver

1.由于 在 1.24 (還是 1.20 不清楚了)之后,下面這兩個apiserver的配置已經被棄用 了,簡單的說就是想不安全的訪問k8s是不可能了,所以只能走安全的訪問方式也就是 https://xx:6443了,所以需要證書。 - --ins…

Git系列:git rm 的高級使用技巧

💝💝💝歡迎蒞臨我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:「stormsha的主頁」…

【go項目01_學習記錄15】

重構MVC 1 Article 模型1.1 首先創建 Article 模型文件1.2 接下來創建獲取文章的方法1.3 新增 types.StringToUint64()函數1.4 修改控制器的調用1.5 重構 route 包1.6 通過 SetRoute 來傳參對象變量1.7 新增方法:1.8 控制器將 Int64ToString 改為 Uint64ToString1.9…

【數據結構】棧和隊列的相互實現

歡迎瀏覽高耳機的博客 希望我們彼此都有更好的收獲 感謝三連支持! 1.用棧實現隊列 當隊列中進入這些元素時,相應的棧1中元素出棧順序與出隊列相反,因此我們可以使用兩個棧來使元素的出棧順序相同; 通過將棧1元素出棧,再…

Databend 倒排索引的設計與實現

倒排索引是一種用于全文搜索的數據結構。它的主要功能是將文檔中的單詞作為索引項,映射到包含該單詞的文檔列表。通過倒排索引,可以快速準確地定位到與查詢詞相匹配的文檔列表,從而大幅提高查詢性能。倒排索引在搜索引擎、數據庫和信息檢索系…

matlab實現繪制煙花代碼

下面是一個簡化的示例,它使用MATLAB的繪圖功能來模擬煙花爆炸的視覺效果。請注意,這個示例是概念性的,并且可能需要根據您的具體需求進行調整。 % 初始化參數 num_fireworks 5; % 煙花數量 num_particles_per_firework 200; % 每個煙花…

前端 CSS 經典:3D 漸變輪播圖

前言&#xff1a;無論什么樣式的輪播圖&#xff0c;核心 JS 實現原理都差不多。所以小伙伴們&#xff0c;還是需要了解一下核心 JS 實驗原理的。 效果圖&#xff1a; 實現代碼&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta chars…

MySQL —— 復合查詢

一、基本的查詢回顧練習 前面兩章節整理了許多關于查詢用到的語句和關鍵字&#xff0c;以及MySQL的內置函數&#xff0c;我們先用一些簡單的查詢練習去回顧之前的知識 1. 前提準備 同樣是前面用到的用于測試的表格和數據&#xff0c;一張學生表和三張關于雇員信息表 雇員信息…

優化數據查詢性能:StarRocks 與 Apache Iceberg 的強強聯合

Apache Iceberg 是一種開源的表格格式&#xff0c;專為在數據湖中存儲大規模分析數據而設計。它與多種大數據生態系統組件高度兼容&#xff0c;相較于傳統的 Hive 表格格式&#xff0c;Iceberg 在設計上提供了更高的性能和更好的可擴展性。它支持 ACID 事務、Schema 演化、數據…

leetcode-設計LRU緩存結構-112

題目要求 思路 雙鏈表哈希表 代碼實現 struct Node{int key, val;Node* next;Node* pre;Node(int _key, int _val): key(_key), val(_val), next(nullptr), pre(nullptr){} };class Solution { public: unordered_map<int, Node*> hash; Node* head; Node* tail; int …

普源DHO924示波器OFFSET設置

一、簡介 示波器是電子工程師常用的測量工具之一&#xff0c;能夠直觀地顯示電路信號的波形和參數。普源DHO924是一款優秀的數字示波器&#xff0c;具有優異的性能和易用性。其中OFFSET功能可以幫助用戶調整信號的垂直位置&#xff0c;使波形更清晰易讀。本文將詳細介紹DHO924…

專注于運動控制芯片、運動控制產品研發、生產與銷售為一體的技術型芯片代理商、方案商——青牛科技

深圳市青牛科技實業有限公司,是專注于運 動控制芯片、運動控制產品研發、生產與銷售為一體的技術型 芯片代理商、方案商。現今代理了國產品牌GLOBALCHIP&#xff0c;芯谷&#xff0c;矽普&#xff0c;TOPPOWER等品牌。其中代理品牌TOPPOWER為電源模塊&#xff0c;他們公司通過了…

cherry-pick的強大之處在于哪里

git cherry-pick 的強大之處在于它提供了一種靈活的方式來應用特定的提交到不同的分支上&#xff0c;而無需合并整個分支或拉取其他不需要的提交。以下是 git cherry-pick 的幾個主要優點和強大之處&#xff1a; 選擇性應用提交&#xff1a;你可以挑選一個或多個特定的提交&…

聲音轉文本(免費工具)

聲音轉文本&#xff1a;解鎖語音技術的無限可能 在當今這個數字化時代&#xff0c;信息的傳遞方式正以前所未有的速度進化。從手動輸入到觸控操作&#xff0c;再到如今的語音交互&#xff0c;技術的發展讓溝通變得更加自然與高效。聲音轉文本&#xff08;Speech-to-Text, STT&…