要使用 LlamaIndex 检索文档,您需要构建数据结构,创建索引,并使用自然语言或特定参数查询它。 LlamaIndex 通过将文档组织成可搜索的索引,简化了大型语言模型 (LLM) 与外部数据的连接。 这个过程通常包括三个步骤:加载数据,创建索引和查询它。 让我们用实际的例子来分解这个过程。
首先,使用数据连接器将文档加载到 LlamaIndex 中。 例如,您可以使用 SimpleDirectoryReader
从本地目录提取文件。 这支持 PDF、文本文件或 Markdown 等格式。 加载后,文档被解析为节点——带有元数据的较小文本块。 例如,一个 10 页的 PDF 可能会被分成 20 个节点,每个节点代表一个部分。 将文档拆分为节点,通过将结果缩小到相关部分来提高检索准确性。 您可以在此步骤中自定义块大小、重叠或元数据(例如,文档标题)。
接下来,创建适合您用例的索引。 VectorStoreIndex
是一种常见的选择,它将文本转换为数值嵌入(例如,使用 OpenAI 或 Hugging Face 模型)并存储它们以进行语义搜索。 要构建它,请将您的节点传递给 VectorStoreIndex.from_documents(nodes)
。 对于结构化数据,ListIndex
可能更好,它根据关键字匹配检索文档。 索引完成后,使用 QueryEngine
进行搜索。 例如,query_engine = index.as_query_engine()
允许您调用 query_engine.query("Find reports on Q3 sales")
。 LlamaIndex 通过比较查询的嵌入与节点嵌入来处理检索,返回最相关的结果。
最后,使用高级选项自定义检索。 您可以调整 similarity_top_k
等参数来控制返回多少个节点,或者使用混合搜索来组合基于语义和关键字的结果。 例如,VectorIndexRetriever(similarity_top_k=5)
获取前五个匹配项。 要按元数据进行过滤,请添加一个 node_filter
以排除不符合日期范围等标准的节点。 对于复杂的查询,使用 RouterQueryEngine
将问题定向到不同的索引(例如,将财务数据路由到专用索引)。 这些工具让您可以根据应用程序的需求平衡速度、准确性和特异性。