利用ElasticsearchEmbeddingsCache高效管理嵌入存储

105 阅读2分钟

引言

在现代应用中,尤其是涉及自然语言处理和机器学习的项目中,嵌入的存储和检索是不可或缺的。ElasticsearchEmbeddingsCache 提供了一种将Elasticsearch用作高效的嵌入存储和检索的方案。在本文中,我们将深入探讨这种实现,并展示如何在项目中集成和使用它以提高性能。

主要内容

什么是ElasticsearchEmbeddingsCache?

ElasticsearchEmbeddingsCache 是一个 ByteStore 实现,它利用Elasticsearch实例来存储和检索嵌入。这种方案适合于需要高效读写和检索大量嵌入数据的场景。

环境配置

要使用 ElasticsearchEmbeddingsCache,首先需要一个Elasticsearch集群。您可以在本地搭建一套环境,也可以创建一个Elastic账户以使用云服务。

安装

首先,您需要安装 langchain_elasticsearch 包:

%pip install -qU langchain_elasticsearch

实例化

以下是一个使用本地运行的Elasticsearch实例的配置示例:

from langchain_elasticsearch import ElasticsearchEmbeddingsCache

# 通过API代理服务提高访问稳定性
kv_store = ElasticsearchEmbeddingsCache(
    es_url="https://localhost:9200",  # 使用API代理服务提高访问稳定性
    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和mget方法

您可以使用 mset 方法将数据存储在键下:

kv_store.mset(
    [
        ["key1", b"value1"],
        ["key2", b"value2"],
    ]
)

使用 mget 方法检索数据:

retrieved_data = kv_store.mget(
    [
        "key1",
        "key2",
    ]
)
print(retrieved_data)  # 输出: [b'value1', b'value2']

嵌入缓存的应用

ElasticsearchEmbeddingsCache 可以用作文档摄取中的持久缓存。在默认情况下,缓存的向量不可搜索。您可以通过子类化并重写方法,定制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集群配置适当以防止性能瓶颈。

总结和进一步学习资源

ElasticsearchEmbeddingsCache 是一种高效的嵌入存储解决方案,特别适合需要快速检索能力项目。通过子类化和重写方法,您可以实现自定义的向量搜索。要深入了解所有功能和配置,请参阅API参考

参考资料

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