要使用 LlamaIndex 索引关系数据库中的文档,你需要从表中提取结构化数据,将其转换为基于文本的文档,并为基于 LLM 的查询构建索引。LlamaIndex 不直接与数据库交互,因此你首先需要查询数据库,将结果处理为兼容的格式,并使用 LlamaIndex 的工具创建和管理索引。这通常涉及使用 SQL 查询或 ORM(例如 SQLAlchemy)来获取数据,将行转换为文本或结构化文档,然后对其进行索引。
首先连接到你的数据库并查询所需的数据。例如,如果你有一个 users
表,其中包含 id
、name
和 bio
等列,你可以编写 SQL 查询来获取这些行。 使用 Python,你可以使用 psycopg2
(用于 PostgreSQL)或 sqlite3
(用于 SQLite)等库。 检索到数据后,将每一行转换为一个文本文档。 例如,一个具有 name: "Alice"
和 bio: "具有 5 年经验的软件工程师"
的行可以变成一个如下所示的文档:“姓名:Alice。 简介:具有 5 年经验的软件工程师。” LlamaIndex 的 SimpleDirectoryReader
或自定义文档类可以帮助构建此数据,确保每个文档都包含元数据,例如原始表或行 ID,以实现可追溯性。
接下来,使用 LlamaIndex 的索引管道。 例如,在将数据库行转换为文档对象后,初始化一个 VectorStoreIndex
以创建用于语义搜索的嵌入。 这是一个简化的代码片段
from llama_index import VectorStoreIndex, Document
from sqlalchemy import create_engine
engine = create_engine("sqlite:///mydb.db")
result = engine.execute("SELECT name, bio FROM users")
documents = [Document(text=f"Name: {row[0]}. Bio: {row[1]}") for row in result]
index = VectorStoreIndex.from_documents(documents)
这将创建一个索引,其中每个文档代表一个数据库行。 然后,你可以使用自然语言查询索引(例如,“查找具有软件工程经验的用户”),LlamaIndex 将根据语义相似性检索相关文档。
对于更复杂的数据库,请考虑连接表或预处理数据以创建有意义的文档。 例如,如果 projects
表通过外键链接到 users
,你可以编写一个 SQL 连接以将用户简介与其项目结合起来,创建如下所示的文档:“Alice 负责 Project X 和 Project Y。” 此外,通过跟踪时间戳或使用数据库触发器来刷新索引,从而处理增量更新。 像 LlamaIndex 的 SQLDatabase
连接器(llama-index-readers
包的一部分)之类的工具可以通过与 SQLAlchemy 集成来自动执行此操作,但通常需要自定义管道来进行细粒度控制。 始终包含表名和行 ID 等元数据,以保持索引文档和原始数据库记录之间的清晰链接。