我正在开发一个涉及 llama_index 库的项目,其中我使用查询引擎的实例来检索对查询的响应。响应是 Response 类的一个实例,预计包含一个源节点列表,每个源节点代表一个对响应做出贡献的源文档。
我编写了一个函数,可以从响应中提取源文档的唯一文件名。然而,该函数始终仅返回一个文件名,即使响应明显源自多个源文档也是如此。这是我的功能:
def answer(vectorIndex, question):
storage_context = StorageContext.from_defaults(persist_dir='./storage')
vIndex = load_index_from_storage(storage_context)
query_engine = vIndex.as_query_engine()
query_response = query_engine.query(question)
filenames = set()
for source_node in query_response.source_nodes:
filenames.add(source_node.node.extra_info["file_name"])
filenames = list(filenames)
return {"answer": query_response.response, "filenames": filenames}
我不确定问题是否在于我如何提取文件名,或者是否与底层查询引擎有关。当检查 query_response.source_nodes 时,它似乎只包含一个源节点(但多次)。
任何人都可以提供一些关于我可能做错的事情的见解,或者提供一些关于如何调试此问题的建议吗?我想返回所有有助于回复的独特源文档。
你有解决这个问题的方法吗?