LangChain 構建向量數據庫和檢索器

LangChain 構建向量數據庫和檢索器實戰

隨著大語言模型(LLM)在各類 AI 應用中不斷普及,RAG(Retrieval-Augmented Generation,檢索增強生成)逐漸成為提升回答準確率與上下文關聯性的重要技術路徑。

一、什么是向量數據庫?

在自然語言處理中,文本、圖片、音頻等非結構化數據需要轉化為模型可理解的形式才能參與運算。向量化(Embedding)是把原始數據轉化為定長高維向量的過程,用于計算相似度。比如,“貓” 和 “寵物” 的向量距離很近,而與 “飛機” 的距離較遠。

向量數據庫就是用于存儲這類高維向量,并支持基于相似度的快速檢索。常見的向量庫包括:

  • FAISS(Facebook 開源)
  • Milvus(Zilliz 開源)
  • Weaviate(支持 GraphQL)
  • Chroma(輕量級本地數據庫)

LangChain 默認支持這些庫的適配封裝,其中 Chroma 是最適合快速上手與本地調試的。

二、LangChain 是什么?

LangChain 是一個用來構建基于語言模型應用的 Python 框架,它提供了統一接口、模塊封裝、鏈式組合能力,方便開發者快速構建 LLM+Embedding+Retrieval 的復雜工作流。

LangChain 的重要模塊包括:

  • LLM:大語言模型接口(如 OpenAI、ChatGLM、Tongyi)
  • Embeddings:文本向量化模型
  • VectorStore:向量數據庫封裝(Chroma、FAISS 等)
  • Retriever:檢索器組件
  • Chains:鏈式調用(支持流水線組合)

三、構建一個簡單的向量檢索系統

1. 環境準備

pip install langchain langchain-community chromadb

確保你還安裝了對應的 Embedding 模型(如通義 DashScope)和 LLM(如 Tongyi、OpenAI)。

本文使用的是阿里的通義千問模型

2. 加載依賴

import os
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.llms import Tongyi
from langchain_community.vectorstores import Chroma
from langchain_core.documents import Document

3. 初始化模型和數據

# 設置 API Key
os.environ["DASHSCOPE_API_KEY"] = "your-api-key"# 初始化 LLM 和 Embedding
llm = Tongyi()
embedding = DashScopeEmbeddings(model="text-embedding-v1")# 構造原始文檔
documents = [Document(page_content="貓是非常獨立的動物。", metadata={"source": "動物百科"}),Document(page_content="狗是忠誠的伙伴,經常陪伴人類。", metadata={"source": "動物百科"})
]

4. 構建向量數據庫

vector_store = Chroma.from_documents(documents, embedding=embedding)

這一步會自動把文本轉換成向量,并存入內存中的 Chroma 數據庫。

5. 相似度檢索

result = vector_store.similarity_search_with_score("寵物", k=1)for doc, score in result:print(f"內容:{doc.page_content},相似度得分:{score}")

輸出:
在這里插入圖片描述

6. 封裝為 Retriever(檢索器)組件

from langchain_core.runnables import RunnableLambdaretriever = RunnableLambda(vector_store.similarity_search_with_score).bind(k=1)# 批量查詢
print(retriever.batch(["貓", "忠誠的動物"]))

在這里插入圖片描述

四、與 RAG 構建結合

當你有了檢索器,就可以把它和 LLM 結合成 RetrievalQA 或 ConversationalRetrievalChain:

from langchain.chains import RetrievalQAqa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=vector_store.as_retriever())
response = qa_chain.invoke("貓有哪些特點?")
print(response)

在這里插入圖片描述

這段代碼背后自動做了:

  1. 語義檢索最相關文檔
  2. 把文檔與問題一起發給 LLM
  3. 生成最終回答

五、持久化與加載

1. 向量庫保存

vector_store = Chroma.from_documents(documents, embedding=embedding, persist_directory="./chroma_db")
vector_store.persist()

2. 向量庫讀取

vector_store = Chroma(persist_directory="./chroma_db", embedding_function=embedding)

六、非文本數據的處理

如果你需要處理圖像、音頻、視頻等非文本數據,常見做法包括:

  • 圖像 → OCR提取文字 或 圖像caption生成
  • 音頻 → ASR語音識別成文本
  • 視頻 → 拆幀+圖像識別 + 語音轉寫

一旦你將這些內容提取為結構化文本或描述,就可以用上述向量化 → 存儲 → 檢索 → 生成 的流程處理。

七、結語

LangChain + 向量數據庫是一種非常高效的知識管理與智能問答解決方案。通過向量化原始信息、構建數據庫、結合大模型檢索與生成能力,可以快速實現如“智能客服”、“文檔問答”、“知識庫”等實戰項目。

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

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

相關文章

基于 LangChain 實現通義千問 + Tavily 搜索 Agent 的簡單實踐

文章目錄 一、相關背景1.1 LangChain 簡介1.2 通義千問(Tongyi Qianwen)1.3 Tavily 實時搜索引擎1.4 架構總覽 二、環境配置設置 API 密鑰 三、 Tavily 搜索四、智能 Agent 示例:自動判斷是否調用 Tavily4.1 初始化 Agent4.2 提問兩個問題&am…

SegGPT: 在上下文中分割一切

摘要 我們提出了 SegGPT,一個在上下文中執行“分割一切”的通用模型。我們將各種分割任務統一為一個通用的上下文學習框架,通過將不同類型的分割數據轉換為相同的圖像格式來兼容這些差異。SegGPT 的訓練被建模為一個帶有隨機顏色映射的上下文著色問題。…

【網絡】Linux 內核優化實戰 - net.core.busy_read

目錄 核心功能工作原理與優勢配置方式1. 臨時配置(重啟失效)2. 永久配置(重啟生效) 與 net.core.busy_poll 的協同作用適用場景與注意事項適用場景:注意事項: 總結 net.core.busy_read 是 Linux 內核中與網…

alpine安裝及配置nodejs開發測試環境

在Alpine Linux上安裝和使用Node.js,打造開發和測試的環境。 apk倉庫打開社區的源。 先在命令行中使用命令apk search nodejs npm yarn對倉庫源進行搜索,,看看nodejs、yarn、npm的版本情況。 localhost:~# apk search nodejs npm yarn nod…

Apache Commons Pool中的GenericObjectPool詳解

GenericObjectPool 是 Apache Commons Pool 庫中的核心類,用于實現對象的池化管理,適用于數據庫連接、HTTP 客戶端、線程等昂貴資源的復用。以下從核心概念、工作原理、參數配置、使用場景及最佳實踐等方面詳細解析: ?? 一、核心概念與組成…

攻防世界CTF題目解析系列————(1)

題目來源:攻防世界wife_wife 打開題目之后,發現登錄界面,然后嘗試弱口令,sql二次注入,xss發現都沒有,然后看見下面go register(去注冊)按鈕 成功注冊(username和password隨便搞&…

楚存科技SD NAND貼片式T卡—高性能存儲解決方案、賦能AI智能硬件

楚存科技SD NAND貼片式T卡—高性能存儲解決方案、賦能AI智能硬件應用 在 AIoT 技術重構產業生態的時代浪潮中,智能硬件正從單一功能終端向數據樞紐演進 —— 智能家居設備日均產生 TB 級交互數據,工業物聯網傳感器需實時存儲生產參數,車載智…

Python[數據結構及算法 --- 查找]

一.順序查找&#xff08;無序表&#xff09;&#xff1a; def sequentialSearch(alist, item):pos 0found Falsewhile pos < len(alist) and not found:if alist[pos] item:found Trueelse:pos pos 1return foundtestlist [1, 2, 32, 8, 17, 19, 42, 13, 0] print(s…

Seata Saga模式實戰:Java微服務中的分布式事務管理

在分布式系統中&#xff0c;Saga模式是一種用于管理跨多個服務的事務的柔性事務解決方案。它通過將長事務拆分為多個本地事務&#xff08;每個事務對應一個服務的操作&#xff09;&#xff0c;并通過補償機制保證最終一致性。以下是Java中Saga模式的詳細介紹&#xff0c;包括實…

若依學習筆記1-validated

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 保證 Spring AOP 相關的依賴包 --><dependency><groupId>org.springframework.boot<…

Excel 如何處理更復雜的嵌套邏輯判斷?

處理復雜的嵌套邏輯判斷&#xff0c;是Excel進階路上必然會遇到的一道坎。當簡單的IF函數“套娃”變得冗長、難以閱讀和維護時&#xff0c;我們就需要更高級、更清晰的工具。 這里介紹三種從基礎到高級的處理方法&#xff1a; 傳統的 IF 函數嵌套 (經典&#xff0c;但容易混亂)…

使用Claude和MCP增強Selenium

1.配置MCP服務器打開Claude Desktop—>Settings—>Developer—>Edit Config{"mcpServers": {"selenium": {"command": "npx","args": ["-y", "angiejones/mcp-selenium"]}} }配置完成后重啟Cl…

數據倉庫錨點建模方法的前世今生

數據倉庫錨點建模方法&#xff08;Anchor Modeling&#xff09;作為一種面向復雜數據環境的創新方法論&#xff0c;其發展歷程與技術演進深刻反映了數據管理從結構化到動態化的轉型需求。以下從起源、發展、核心思想、技術演進及未來趨勢五個維度&#xff0c;系統梳理錨點建模的…

<三>Sping-AI alibaba 文生圖

環境和配置請看&#xff1c;二&#xff1e;Sping-AI alibaba 入門-記憶聊天及持久化 源代碼&#xff1a;https://github.com/springaialibaba/spring-ai-alibaba-examples/blob/main/spring-ai-alibaba-image-example/dashscope-image/src/main/java/com/alibaba/cloud/ai/exam…

vue組件和模板

好的&#xff0c;我們來詳細解釋一下在 Vue&#xff08;以及現代前端開發&#xff09;中兩個最核心的概念&#xff1a;組件 (Component) 和 模板 (Template)。 理解了它們&#xff0c;就等于掌握了現代 Web 應用開發的基石。 一個核心比喻&#xff1a;樂高積木 在開始前&…

python學習打卡:DAY 18 推斷聚類后簇的類型

浙大疏錦行 聚類后的分析&#xff1a;推斷簇的類型 知識點回顧&#xff1a; 推斷簇含義的2個思路&#xff1a;先選特征和后選特征通過可視化圖形借助ai定義簇的含義科研邏輯閉環:通過精度判斷特征工程價值 作業&#xff1a;參考示例代碼對心臟病數據集采取類似操作&#xff0c;…

Ubuntu for ARM 更換為阿里云鏡像源

1. 簡介 該鏡像適用于配置 ARM, PowerPC 等其他架構的 ubuntu系統&#xff0c;不適用 x86 &#xff01;&#xff01;&#xff01; 各種版本的Ubuntu for ARM下載地址&#xff1a;https://cdimage.ubuntu.com/releases 2. 配置方法 打開 sources.list 文件。 vim /etc/apt/s…

HTML與JavaScript:構建動態交互式Web頁面的基石

HTML與JavaScript&#xff1a;構建動態交互式Web頁面的基石 在現代Web開發中&#xff0c;HTML和JavaScript是不可或缺的兩位主角。HTML負責頁面的結構和內容&#xff0c;而JavaScript則賦予頁面生命&#xff0c;使其能夠響應用戶交互、動態更新內容&#xff0c;并與后端服務進…

Python數據分析基礎03:探索性數據分析

相關文章&#xff1a; 《python數據分析基礎02&#xff1a;數據可視化分析》 《Python數據分析基礎01&#xff1a;描述性統計分析》 探索性數據分析&#xff08;Exploratory Data Analysis, EDA&#xff09; 的深度解析&#xff0c;涵蓋核心目標、方法論框架、關鍵技術及可視…

D3 面試題100道之(41-60)

這里是D3的面試題,我們從第 41~60題 開始逐條解答。一共100道,陸續發布中。 ?? 面試題(第 41~60 題) 41. D3 中如何添加圖例? 圖例可以通過手動創建 SVG 元素或使用 D3 的輔助函數來實現。常見做法是結合 d3.scaleOrdinal() 和 .range() 創建顏色映射圖例。 示例: c…