Langchain 与 Elasticsearch:创新数据检索的融合实战

news2025/1/12 19:38:56

1、简介

在信息爆炸的时代,有效地检索和处理数据变得至关重要。Langchain 和 Elasticsearch 的结合,为我们提供了一个强大的工具,以更智能的方式进行数据检索和分析。

作为一名拥有多年 Elasticsearch 实战经验的技术博主,我将在本文中详细介绍这两种技术的整合应用。

2、LangChain 简介

Langchain是一个旨在简化自然语言处理任务的库。它允许开发者轻松地集成和使用各种 AI 模型,如 GPT-3,来处理复杂的语言任务。

3、Elasticsearch 简介

Elasticsearch 是一个高度可扩展的开源全文搜索和分析引擎。它允许用户快速、实时地进行和分析大量数据。

4、LangChain 与 Elasticsearch 的整合

结合 Langchain和 Elasticsearch,我们可以利用 AI 模型的强大语言处理能力,与 Elasticsearch 的高效数据检索功能,实现智能化的搜索解决方案。

d4d9526728c82dd5842f74d1a8a7e990.jpeg

4.1 案例1:Langchain 连接 Elasticsearch

以下是一个实际的代码示例,展示了如何使用 Langchain与 Elasticsearch 进行数据检索:

python
Copy code
import ssl
import openai
from elasticsearch import Elasticsearch
from langchain_community.vectorstores import ElasticsearchStore
from langchain_openai import OpenAIEmbeddings

from langchain.text_splitter import CharacterTextSplitter
from langchain_community.document_loaders import TextLoader

# 设置代理访问 API
os.environ["HTTP_PROXY"] = "http://127.0.0.1:33210"
os.environ["HTTPS_PROXY"] = "http://127.0.0.1:33210"
os.environ["ALL_PROXY"] = "socks5://127.0.0.1:33211"

# 加载文档
file_path = 'conf/state_of_the_union.txt'
encoding = 'utf-8'
loader = TextLoader(file_path, encoding=encoding)
documents = loader.load()

# 文档分割
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

# 连接 Elasticsearch
conn = Elasticsearch(
    "https://127.0.0.1:9200",
    ca_certs = "certs/http_ca.crt",
    basic_auth = ("elastic", "changeme"),
    verify_certs=False
)

# 创建索引并进行检索
embeddings = OpenAIEmbeddings()
db = ElasticsearchStore.from_documents(docs, embeddings, index_name="test_index", es_connection=conn)
db.client.indices.refresh(index="test_index")
query = "What did the president say about Ketanji Brown Jackson"
results = db.similarity_search(query)
print(results)

这段代码展示了如何加载、处理文档,并通过 Langchain 结合 Elasticsearch 进行智能检索。

执行结果:

ff10633bc6c6075f91de97360e97a0a8.png 133b34cd22bd65cb892f397f519f9c76.png

4.2 案例2:精细化处理

进一步,我们可以为文档添加更丰富的元数据,并利用这些元数据进行更精细化的搜索:

# 添加元数据
for i, doc in enumerate(docs):
    doc.metadata["date"] = f"{range(2010, 2020)[i % 10]}-01-01"
    doc.metadata["rating"] = range(1, 6)[i % 5]
    doc.metadata["author"] = ["John Doe", "Jane Doe"][i % 2]

# 再次连接 Elasticsearch
conn = Elasticsearch(
    "https://127.0.0.1:9200",
    ca_certs = "certs/http_ca.crt",
    basic_auth = ("elastic", "changeme"),
    verify_certs=False
)

# 创建带有元数据的索引
db = ElasticsearchStore.from_documents(docs, embeddings, index_name="test-metadata", es_connection=conn)

# 执行检索
query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)
print(docs[0].metadata)

# 应用过滤条件
docs = db.similarity_search(query, filter=[{"term": {"metadata.author.keyword": "John Doe"}}])
print(docs[0].metadata)

执行结果:

  • 1、写入 Elasticsearch 索引,效果图:

5f097f9e6a26372ea93172394cb09d45.png
  • 2、执行检索效果:

33141a20c022ef823fba83bdaf238b52.png

在这个案例中,我们通过添加元数据来增强文档的描述性,使得检索结果更加精确和有用。

5、问题解决

在实际应用中,我们可能会遇到各种问题,例如网络连接问题、配置错误或代码逻辑问题。

在这种情况下,确保你的环境设置正确,并且仔细检查代码中的每个步骤,以确保所有操作按预期进行。

6、总结

通过结合 Langchain 和 Elasticsearch,我们可以构建一个强大的数据检索系统,不仅能处理大量数据,还能以智能和高效的方式进行搜索和分析。

官网代码都不能跑起来,需要自己摸索好长时间!

这种技术的融合,为处理复杂的信息检索任务提供了新的可能。

希望这篇博客能够帮助读者更好地理解 Langchain和 Elasticsearch 如何结合,以及如何在实际项目中应用这些技术。这种整合为数据检索和自然语言处理的未来发展开辟了新的道路。

7、参考资料

Langchain 官方文档:

https://python.langchain.com/docs/integrations/vectorstores/elasticsearch

推荐阅读

  1. 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  2. 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单

  3. 如何系统的学习 Elasticsearch ?

  4. 2023,做点事

ef6b8511df4438a1d6a3164aefb1b7de.jpeg

更短时间更快习得更多干货!

和全球 近2000+ Elastic 爱好者一起精进!

efe0b677e6e15e830b52c6f4f3e8ba1c.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1385894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

D1380/D1381串行计时芯片,2.0V~5.5V 工作电流: 2V时 与TTL 兼容,采用DIP8、SOP8封装

D1380/D1381是一个带秒、分、时、日、日期、月、年的串行时钟保持芯片,每个月多少天以及闰年能自动调节, D1380/D1381低功耗工作方式, D1380/D1381用若干寄存器存储对应信息,一个32.768kHz 的晶振校准时钟,为了使用最小弓|脚,D1380/D1381使用…

操作系统复习 九-十二 章

操作系统复习 九-十二 章 文章目录 操作系统复习 九-十二 章第九章 单处理器调度调度的概念调度的时机、切换与过程进程调度方式调度的基本准则进程的挂起态与七状态模型典型的调度算法 第十一章 I/O管理和磁盘调度I/O 设备I/O控制方式I/O子系统的层次结构IO子系统概述IO调度概…

各种排序算法学习笔记

Docshttps://r0dhfl3ujy9.feishu.cn/docx/XFlEdnqv9oCEoVx7ok8cpc4knnf?fromfrom_copylink如果你认为有错误,欢迎指出!

大数据开发之Hive(查询、分区表和分桶表、函数)

第 6 章:查询 6.1 基本语法及执行顺序 1、查询语句语法 select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [ORDER BY col_list] [CLUSTER BY col_list| [DISTRIBUTE BY col_list] [SORT BY col_list]] [LIMIT n…

RK3568驱动指南|驱动基础进阶篇-进阶2 让驱动快一点被加载实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

【每日一题】删除排序链表中的重复元素 II

文章目录 Tag题目来源解题思路方法一:遍历链表 写在最后 Tag 【遍历链表】【链表】【2024-01-15】 题目来源 82. 删除排序链表中的重复元素 II 解题思路 几乎所有链表的题目都可以先将链表转成数组,再对数组执行操作,最后将数组还原回链表…

手写Springboot核心流程

目录 Springboot启动流程 核心代码 验证效果 Springboot启动流程 创建Spring容器, 扫描并启动容器选择Tomcat/Jetty创建DispatchServlet, 与spring容器绑定将DispatchServlet添加到Tomcat启动Tomcat 核心代码 1. 首先, 创建两个module 2. maven依赖 springboot模块依赖 &l…

网络安全|GitHub 已成为恶意软件传播的严重污染源

Recorded Future 凸显了全球合法平台威胁的上升。 根据 Recorded Future最近 的一份报告,开发者平台GitHub最近已成为黑客用来托管和传播恶意软件的流行工具。 该平台为攻击者提供了将其行为伪装成合法网络流量的能力,这使得跟踪和确定攻击者的身份变得…

【漏洞复现】Sentinel Dashboard默认弱口令漏洞

Nx01 产品简介 Sentinel Dashboard是一个轻量级的开源控制台,提供机器发现以及健康情况管理、监控、规则管理和推送的功能。它还提供了详细的被保护资源的实际访问统计情况,以及为不同服务配置的限流规则。 Nx02 漏洞描述 Sentinel Dashboard存在默认弱…

当前页面一键回关

CSDN博客关注页面当前页面一键回关所有fans代码 f12打开控制台,输入以下代码 // 获取所有的button元素,根据它们的属性进行筛选 var buttons document.querySelectorAll("button[data-v-0947769e][data-ref^li_][data-id][classattention-btn]&qu…

11.云原生分布式数据库之TIDB

云原生专栏大纲 文章目录 为什么使用TIDB后端视角运维视角基础架构视角 TiDB Operator 简介软件版本要求部署tidbTIDB工具helm常用命令TIDB学习推荐资料 为什么使用TIDB 从后端视角、运维视角和基础架构视角来看,使用 TiDB 作为数据库系统可以获得分布式架构、高可…

肯尼斯·里科《C和指针》第6章 指针(3)

肯尼斯里科《C和指针》第6章 指针(1)-CSDN博客 肯尼斯里科《C和指针》第6章 指针(2)-CSDN博客 前置知识:左值右值 为了理解有些操作符存在的限制,必须理解左值(L-value)和右值(R-value)之间的区别。这两个…

LLM之LangChain(二)| LangChain中的Agent

在本文中,我们将讨论LangChain中的Agent及其各种类型。但在深入研究Agent之前,让我们先了解一下什么是LangChain和Agent。 一、什么是LangChain? LangChain是一种功能强大的自动化工具,可用于各种任务,它提供了可用于…

卸载Notepad++!事实已证明,它更牛逼……

本文系统全面的介绍了 Sublime Text,旨在成为最优秀的 Sublime Text 中文教程。 前言 Sublime Text 是一款跨平台代码编辑器(Code Editor),从最初的 Sublime Text 1.0,到现在的 Sublime Text 3.0,Sublime …

突破界限:首个国产DeepSeek MoE的高效表现

前言 在人工智能技术的快速发展过程中,国产首个开源MoE(Mixture of Experts)大模型——DeepSeek MoE的推出,不仅标志着中国在全球AI领域的重大突破,而且在计算效率和模型性能上展现了显著的优势。这款160亿参数的模型…

医疗器械生物学评价系列标准

医疗器械生物学评价系列标准(GB/T 16886/ISO 10993)是保障医疗器械安全的基础标准,内容涵盖医疗器械生物学评价基本指导原则、各项生物学试验方法、样品制备方法、理化表征方法等,是医疗器械生物学试验、评价、技术审批的重要依据,是医疗器械…

计算机图形学作业:Cohen-Sutherland和Liang-Barsky 裁剪算法

参考书籍和资料: Liang-Barsky参考下面视频14.2.1 [14.2.1]--讲解经典的梁友栋-巴斯基算法。_哔哩哔哩_bilibili Cohen-Sutherland参考孔令德的计算机图形学实验及课程设计(第二版),实验五直线段的裁剪 题目如下: …

R语言【文章复现】——集成式地绘制高分辨率的多样性分布图,对方法的检验和优化,以及处理思路的思考

参考文献 本文对一篇 2022 年发表在 New Phytologist 的绘图方法文章中的技术路线进行复现。 An integrated high-resolution mapping shows congruent biodiversity patterns of Fagales and Pinales Summary 文中,作者针对在全球尺度上绘制物种分布图提出了一种全新的方法…

大白菜U盘安装系统-戴尔电脑

1. 把U盘插入电脑,启动盘去大白菜官网找,镜像可以去微软官网下,想要专业版的网上找资源。 2. 重启电脑,等出现log之后狂按F12,进入BOSS模式。 3. 选择UEFI...也就是下面白色的,按下回车。 4. 选第一个 5.…

数据结构_C++语言描述_高教出版社

contents 前言一、绪论1.1 数据分析结构存储算法计算1.1.1 逻辑结构1.1.2 存储结构1.1.3 算法实现 1.2 数据类型1.3 算法方法 二、线性表2.1 线性表的逻辑结构2.2 线性表的存储结构2.2.1 顺序存储结构2.2.2 链式存储结构 2.3 线性表的操作算法2.3.1 顺序表的操作算法2.3.2 链表…