【RAG】【vector_stores033】Elasticsearch自动检索

张开发
2026/6/14 6:04:50 15 分钟阅读
【RAG】【vector_stores033】Elasticsearch自动检索
案例目标本案例展示了如何使用Elasticsearch向量存储与LlamaIndex实现自动检索功能。自动检索是一种高级检索技术它可以根据自然语言查询自动推断出适当的元数据过滤条件和查询字符串。通过本案例您将学习到如何使用Elasticsearch作为向量存储后端如何定义向量存储的元数据信息如何使用VectorIndexAutoRetriever实现自动检索如何让LLM自动推断元数据过滤条件如何结合语义搜索和元数据过滤实现更精确的检索自动检索根据自然语言查询自动推断元数据过滤条件向量存储使用Elasticsearch作为向量存储后端元数据过滤支持多种元数据类型的过滤条件语义搜索结合语义搜索和元数据过滤提高检索精度技术栈与核心依赖本案例使用以下技术栈和依赖LlamaIndexElasticsearchOpenAIPython核心依赖包llama-index-vector-stores-elasticsearch llama-index openai关键组件ElasticsearchStore: 连接Elasticsearch向量存储VectorIndexAutoRetriever: 实现自动检索功能VectorStoreInfo: 定义向量存储和元数据信息MetadataInfo: 描述元数据字段信息环境配置1. 安装必要的依赖包pip install llama-index-vector-stores-elasticsearch pip install llama-index2. 配置OpenAI API密钥import os import getpass os.environ[OPENAI_API_KEY] getpass.getpass(OpenAI API Key:) import openai openai.api_key os.environ[OPENAI_API_KEY]3. 导入必要的依赖import logging import sys logging.basicConfig(streamsys.stdout, levellogging.INFO) logging.getLogger().addHandler(logging.StreamHandler(streamsys.stdout)) from llama_index.core import VectorStoreIndex, StorageContext from llama_index.vector_stores.elasticsearch import ElasticsearchStore from llama_index.core.schema import TextNode from llama_index.core.retrievers import VectorIndexAutoRetriever from llama_index.core.vector_stores import MetadataInfo, VectorStoreInfo4. 启动Elasticsearch服务确保Elasticsearch服务在本地运行默认地址为 http://localhost:9200案例实现1. 定义示例数据# 定义带有元数据的文本节点 nodes [ TextNode( text( A bunch of scientists bring back dinosaurs and mayhem breaks loose ), metadata{year: 1993, rating: 7.7, genre: science fiction}, ), TextNode( text( Leo DiCaprio gets lost in a dream within a dream within a dream within a ... ), metadata{ year: 2010, director: Christopher Nolan, rating: 8.2, }, ), TextNode( text( A psychologist / detective gets lost in a series of dreams within dreams within dreams and Inception reused the idea ), metadata{year: 2006, director: Satoshi Kon, rating: 8.6}, ), TextNode( text( A bunch of normal-sized women are supremely wholesome and some men pine after them ), metadata{year: 2019, director: Greta Gerwig, rating: 8.3}, ), TextNode( textToys come alive and have a blast doing so, metadata{year: 1995, genre: animated}, ), ]2. 构建Elasticsearch向量索引# 创建Elasticsearch向量存储 vector_store ElasticsearchStore( index_nameauto_retriever_movies, es_urlhttp://localhost:9200 ) storage_context StorageContext.from_defaults(vector_storevector_store) # 创建向量索引 index VectorStoreIndex(nodes, storage_contextstorage_context)3. 定义VectorIndexAutoRetriever# 定义向量存储信息 vector_store_info VectorStoreInfo( content_infoBrief summary of a movie, metadata_info[ MetadataInfo( namegenre, descriptionThe genre of the movie, typestring or list[string], ), MetadataInfo( nameyear, descriptionThe year the movie was released, typeinteger, ), MetadataInfo( namedirector, descriptionThe name of the movie director, typestring, ), MetadataInfo( namerating, descriptionA 1-10 rating for the movie, typefloat, ), ], ) # 创建自动检索器 retriever VectorIndexAutoRetriever( index, vector_store_infovector_store_info )4. 执行自动检索查询# 查询1查找Christopher Nolan在2020年前导演的电影 results retriever.retrieve( What are 2 movies by Christopher Nolan were made before 2020? ) print(results)# 查询2查找Andrei Tarkovsky导演的科幻电影 results retriever.retrieve(Has Andrei Tarkovsky directed any science fiction movies) print(results)案例效果本案例展示了Elasticsearch自动检索的强大功能实现了以下效果自动元数据过滤系统能够根据自然语言查询自动推断出适当的元数据过滤条件语义搜索增强结合语义搜索和元数据过滤提高检索的精确度灵活查询处理可以处理各种复杂的查询场景包括多条件组合查询智能查询理解系统能够理解查询意图并自动选择最合适的检索策略关键观察对于What are 2 movies by Christopher Nolan were made before 2020?查询系统自动推断出directorChristopher Nolan和year2020的过滤条件对于Has Andrei Tarkovsky directed any science fiction movies?查询系统自动推断出directorAndrei Tarkovsky和genrescience fiction的过滤条件系统不仅应用了元数据过滤还使用了语义搜索确保检索结果的语义相关性输出示例 INFO:llama_index.indices.vector_store.retrievers.auto_retriever.auto_retriever:Using query str: science fiction Using query str: science fiction INFO:llama_index.indices.vector_store.retrievers.auto_retriever.auto_retriever:Using filters: {director: Andrei Tarkovsky} Using filters: {director: Andrei Tarkovsky} INFO:llama_index.indices.vector_store.retrievers.auto_retriever.auto_retriever:Using top_k: 2 Using top_k: 2案例实现思路本案例的实现思路如下环境准备安装必要的依赖包配置OpenAI API密钥启动Elasticsearch服务数据准备创建带有文本和元数据的TextNode对象向量存储创建使用ElasticsearchStore创建向量存储并将数据加载到Elasticsearch向量存储信息定义使用VectorStoreInfo和MetadataInfo定义向量存储和元数据信息自动检索器创建使用VectorIndexAutoRetriever创建自动检索器查询执行使用自然语言查询系统自动推断元数据过滤条件和查询字符串技术要点VectorIndexAutoRetriever是LlamaIndex提供的自动检索器它使用LLM自动推断查询参数VectorStoreInfo描述了向量存储的内容和元数据字段信息MetadataInfo定义了每个元数据字段的名称、描述和类型系统根据自然语言查询自动生成查询字符串和元数据过滤条件检索结果结合了语义搜索和元数据过滤提高了检索的精确度扩展建议基于本案例可以考虑以下扩展方向更多元数据类型扩展支持更多的元数据类型如日期、地理位置等复杂过滤条件实现更复杂的过滤条件如范围查询、模糊匹配等多语言支持扩展支持多语言查询和文档自定义提示模板自定义自动检索的提示模板提高特定领域的检索效果性能优化优化大规模数据下的检索性能可视化界面开发可视化界面方便用户使用自动检索功能结果排序优化实现更智能的结果排序算法多向量存储支持支持同时查询多个向量存储总结本案例详细介绍了如何使用Elasticsearch向量存储和LlamaIndex的VectorIndexAutoRetriever实现自动检索功能。通过定义向量存储信息和元数据信息系统能够根据自然语言查询自动推断出适当的元数据过滤条件和查询字符串。自动检索技术结合了语义搜索和元数据过滤的优点能够实现更精确、更智能的检索。它特别适合于需要处理复杂查询场景的应用如电影推荐、文档检索、知识问答等。通过本案例的学习您应该掌握了如何使用VectorIndexAutoRetriever实现自动检索以及如何定义向量存储和元数据信息。这些知识将帮助您构建更智能、更高效的检索应用。

更多文章