引言
Elasticsearch是一个分布式、RESTful的搜索与分析引擎,能够执行矢量和词法搜索。它建立在Apache Lucene库之上,广泛用于全文搜索、日志和指标分析等领域。在本文中,我们将介绍如何使用LangChain与Elasticsearch进行向量存储的管理,从而增强对大型语言模型(LLM)的处理能力。
主要内容
如何安装与设置
首先,为了使用Elasticsearch的向量搜索功能,你需要安装langchain-elasticsearch包:
%pip install -qU langchain-elasticsearch
本地和云端的Elasticsearch实例
- Elastic Cloud:这是Elasticsearch的托管服务,提供了简单的管理界面和安全性。可以注册免费试用。
- 本地安装:可以使用官方的Elasticsearch Docker镜像来快速启动。以下是启动单节点Elasticsearch实例的命令(仅用于开发):
%docker run -p 9200:9200 -e "discovery.type=single-node" -e "xpack.security.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:8.12.1
创建与管理向量存储
借助LangChain,你可以轻松管理向量存储。下面是一些关键步骤:
初始化ElasticsearchStore
from langchain_elasticsearch import ElasticsearchStore
elastic_vector_search = ElasticsearchStore(
es_url="http://localhost:9200", # 使用API代理服务提高访问稳定性
index_name="langchain_index",
embedding=OpenAIEmbeddings(model="text-embedding-3-large"),
es_user="elastic",
es_password="changeme",
)
添加文档到向量存储
from langchain_core.documents import Document
from uuid import uuid4
documents = [
Document(page_content="Building an exciting new project with LangChain - come check it out!", metadata={"source": "tweet"}),
# 添加更多文档...
]
uuids = [str(uuid4()) for _ in range(len(documents))]
elastic_vector_search.add_documents(documents=documents, ids=uuids)
查询向量存储
使用相似度搜索功能来查询存储:
results = elastic_vector_search.similarity_search(
query="LangChain provides abstractions to make working with LLMs easy",
k=2,
filter=[{"term": {"metadata.source.keyword": "tweet"}}],
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
常见问题和解决方案
问题:当将文档索引到Elasticsearch时出现超时错误。
解决方案:可以调整chunk_size和max_chunk_bytes参数来减少超时错误。
elastic_vector_search.add_texts(
texts,
bulk_kwargs={"chunk_size": 50, "max_chunk_bytes": 200000000}
)
总结和进一步学习资源
Elasticsearch结合LangChain提供了强大的文本向量搜索能力,是构建检索增强型生成(Retrieval-Augmented Generation, RAG)应用的基础。通过掌握这些基础功能,你可以为LLM应用提供高效的语料查询支持。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---