LlamaIndex 查询本地文件
在 上一篇文章 中,我们已经构建了本地的文件向量数据库,并对其进行了查询。但对于小型文件,或者仅执行一次的查询而言,这种方式又显得比较繁琐,因为它分为了两个步骤,且在本地生成了vector向量数据库。对于临时查询而言,这个文件夹就相当于“临时文件”了。本文延续上面的例子,只不过不在本地创建文件向量库,而是对文件进行直接查询。
在工作目录下,新建一个文件:txt_file_query.py,内容如下:
# 构建向量库 from dotenv import load_dotenv load_dotenv() # 选择embedding模型 from llama_index.core import Settings from llama_index.embeddings.openai import OpenAIEmbedding from llama_index.llms.openai import OpenAI Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-large") Settings.llm = OpenAI(model="gpt-4o") # 1. 加载 from llama_index.core import SimpleDirectoryReader documents = SimpleDirectoryReader(input_files=["./player.txt"]).load_data() # 2. 索引 from llama_index.core import VectorStoreIndex vector_index = VectorStoreIndex.from_documents(documents) # 3. 转换为查询引擎 query_engine = vector_index.as_query_engine() # 4. 查询 response = query_engine.query("ShadowBlade_007 注册了多久了?") # 5. 打印结果 print(response)
执行脚本,输出结果如下:
D:\codes\llamaindex\rag_txt> py .\txt_file_query.py ShadowBlade_007注册了1324天。
上面代码中,比较关键的一句是:vector_index.as_query_engine()
。query_engine是查询执行引擎,负责将自然语言查询转化为检索-生成流程,最终输出答案。它的工作,主要是两部分:
- 语义检索:将问题转化为向量,从vector_index中检索相似度最高的节点(默认similarity_top_k=2)
- 响应合成:将检索到的文本片段拼接为上下文,提交给LLM生成最终答案(本例中使用的是gpt-4o)
如何对检索的相似度进行调优,这个在后续的章节再说,这里仅跑通流程。
另一个核心对象是vector_index,它是向量存储索引对象,核心功能是将文档内容转化为可快速检索的向量结构,为后续语义搜索提供基础。它的工作,主要是下面三部分:
- 分块:原始文档被分割为多个节点(Node),默认使用SentenceSplitter,每个节点约1024字符(可自定义)
- 嵌入向量生成:通过OpenAIEmbedding模型将文本转化为向量(本例使用text-embedding-3-large)
- 向量存储:向量及元数据(如文件名、页码)存入向量数据库(如Chroma),本例未显式指定,默认使用内存存储
在这个例子中,未提现节点(Node)和相关的配置,全部采用了默认配置。因为LlamaIndex以及大语言开发,涌现了非常多的概念和配置,这些我们将在后续的文章中再行探讨。
感谢阅读,希望这篇文章能给你带来帮助!