在现代 AI 应用中,如何高效地存储和检索嵌入是一个关键问题。ElasticsearchEmbeddingsCache
为我们提供了一个利用 Elasticsearch 实现的高效解决方案。本文将深入解析其核心原理,并提供可直接运行的代码示例。
技术背景介绍
Elasticsearch 是一个分布式搜索和分析引擎,其强大的索引和检索能力使其成为存储和处理大量数据的理想选择。作为 ByteStore
的一个实现,ElasticsearchEmbeddingsCache
使用 Elasticsearch 实例来高效地存储和检索 AI 嵌入数据。
核心原理解析
ElasticsearchEmbeddingsCache
将嵌入数据存储在 Elasticsearch 中的文档内,其核心是利用 Elasticsearch 的索引和搜索能力来管理大量嵌入数据。虽然嵌入数据默认不会被搜索,但开发者可以通过自定义文档构建来实现搜索功能。
代码实现演示
下面的代码展示了如何在本地运行的 Elasticsearch 实例中设置 ElasticsearchEmbeddingsCache
:
from langchain_elasticsearch import ElasticsearchEmbeddingsCache
# 配置本地 Elasticsearch 实例
kv_store = ElasticsearchEmbeddingsCache(
es_url="https://localhost:9200", # 本地访问
index_name="llm-chat-cache",
metadata={"project": "my_chatgpt_project"}, # 项目元数据
namespace="my_chatgpt_project",
es_user="elastic", # 用户名(默认为 elastic)
es_password="<GENERATED PASSWORD>", # 安全密码
es_params={
"ca_certs": "~/http_ca.crt", # CA 证书路径
},
)
# 设置键值对
kv_store.mset(
[
["key1", b"value1"],
["key2", b"value2"],
]
)
# 获取键值对
result = kv_store.mget(
[
"key1",
"key2",
]
)
print(result) # [b'value1', b'value2']
# 删除键值对
kv_store.mdelete(
[
"key1",
"key2",
]
)
# 验证删除
result = kv_store.mget(
[
"key1",
"key2",
]
)
print(result) # [None, None]
应用场景分析
ElasticsearchEmbeddingsCache
特别适合在文档摄取过程中进行持久化缓存,用于减少重复计算。在 RAG(检索增强生成)任务中,可以有效地利用缓存来提高性能。
实践建议
- 安全性: 确保 Elasticsearch 实例的安全设置,包括启用 HTTPS 和访问控制。
- 性能优化: 通过自定义映射和文档构建,提升嵌入搜索能力。
- 资源管理: 根据数据量和访问频繁程度,合理配置 Elasticsearch 集群的节点数量和规格。
如果遇到问题欢迎在评论区交流。
—END—