问题验证
- 我已经在文档和Discord上寻找答案。
问题
嘿,
我正在尝试在网页上创建RAG应用程序。我正在使用UnstructuredElementNodeParser解析我的文档。
由于调用base_nodes, node_mappings = node_parser.get_base_nodes_and_mappings(raw_nodes)
,我得到了基本节点和节点Map。
我正在使用向量索引来存储基本节点,但是如何存储节点Map?我应该如何从索引中检索它们并将它们传递给RecursiveRetriever以进行检索?
5条答案
按热度按时间e3bfsja21#
你好@harshsavasil!我是一个机器人,可以帮助你解决任何问题或疑问。让我们一起看看如何解决这个问题。
要持久化节点Map并从索引中检索它们以在
RecursiveRetriever
中使用,您可以使用SimpleObjectNodeMapping
类提供的persist
和from_persist_dir
方法。持久化节点Map
要持久化节点Map,请在您的
SimpleObjectNodeMapping
示例上调用persist
方法:从索引中检索节点Map
要从索引中检索节点Map,请使用
from_persist_dir
类方法:在
RecursiveRetriever
中使用一旦您检索到了
SimpleObjectNodeMapping
,就可以使用它来创建一个ObjectRetriever
,然后将其用于RecursiveRetriever
:示例代码
这将允许您持久化和检索节点Map,并在
RecursiveRetriever
中使用它们。SimpleObjectNodeMapping
类处理索引和对象节点Map的持久性,确保在需要时可以重建具有相同Map的索引 1(https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/objects/base.py)2(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/llama_index/legacy/objects/base.py)3(https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/objects/base_node_mapping.py)4(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/llama_index/legacy/objects/base_node_mapping.py)。9ceoxa922#
我们能否将这些节点Map存储在数据库中,以便更好地存储和高效检索?
ne5o7dgx3#
是的,你可以将节点Map存储在数据库中以获得更好的存储和高效的检索。你可以通过将节点及其关系序列化为适合数据库存储的格式(如JSON),然后使用数据库客户端将这些记录插入到你的数据库中来实现这一点。
以下是如何将节点序列化并存储在SQLite数据库中的示例:
在这个例子中:
UnstructuredElementNodeParser
。store_nodes_in_db
,它接受一个节点列表和一个数据库路径作为参数。TextNode
来演示如何使用这个函数。这种方法可以适应其他类型的数据库(例如,PostgreSQL,MongoDB)通过使用适当的数据库客户端和查询语法 1(https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/node_parser/relational/unstructured_element.py) 。
pbossiut4#
@dosu 我如何从数据库中检索这些节点以供RAG使用?
wrrgggsh5#
从数据库中检索节点以进行检索增强生成(RAG),您可以创建一个自定义检索器,该检索器从数据库中获取节点并将它们转换为
NodeWithScore
对象。以下是使用SQLite实现此目标的示例:逐步指南
sqlite3
的库连接到您的SQLite数据库并获取所需的数据。BaseRetriever
类以创建从SQLite数据库获取数据的自定义检索器。NodeWithScore
对象,然后可以使用RecursiveRetriever
。示例实现
与
RecursiveRetriever
集成要将其与
RecursiveRetriever
集成,您将创建一个检索器字典并将其传递给RecursiveRetriever
:此设置允许
RecursiveRetriever
使用SQLiteRetriever
从SQLite数据库中获取节点并递归地探索从节点到其他检索器或查询引擎的链接 1(https://github.com/run-llama/llama_index/blob/main/llama-index-packs/llama-index-packs-ragatouille-retriever/llama_index/packs/ragatouille_retriever/base.py)2(https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/retrievers/recursive_retriever.py)3(https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/indices/struct_store/sql_retriever.py)。