節前,我們星球組織了一場算法崗技術&面試討論會,邀請了一些互聯網大廠朋友、參加社招和校招面試的同學.
針對算法崗技術趨勢、大模型落地項目經驗分享、新手如何入門算法崗、該如何準備、面試常考點分享等熱門話題進行了深入的討論。
匯總合集:《大模型實戰寶典》(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 中,您可以在不需要單獨的向量存儲的情況下執行高效的語義搜索,從而確保數據一致性并簡化應用程序架構。
通常過程包括:
- 將您的數據加載到 MongoDB Atlas 集群中。
- 使用預訓練模型(如 OpenAI 的 text-embedding-ada-002)為您的數據生成向量嵌入。
- 將嵌入與您的數據一起存儲在 MongoDB 中。
- 在嵌入字段上創建 Atlas 向量搜索索引。
- 使用 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 包,包括 langchain
、langchain-mongodb
和 langchain-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,我搭建了一個本地知識庫問答系統
-
用通俗易懂的方式講解:面試字節大模型算法崗(實習)
-
用通俗易懂的方式講解:大模型算法崗(含實習)最走心的總結
-
用通俗易懂的方式講解:大模型微調方法匯總