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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…