使用Llama Index时,response_mode设为NO_TEXT为何返回None?
Llama Index 查询未返回带评分源节点JSON的解决方法
问题原因:
ResponseMode.NO_TEXT模式仅返回检索到的源节点集合,不会自动封装成包含查询响应的JSON结构,且默认结果对象并非JSON格式。修正步骤:
- 若需要生成查询响应文本,将
response_mode改为ResponseMode.DEFAULT(或COMPACT等其他生成文本的模式);若仅需源节点数据,可保留NO_TEXT模式。 - 从查询结果中提取带评分的源节点,手动构造目标JSON结构。
- 若需要生成查询响应文本,将
示例代码:
from llama_index.core.response_synthesizers import ResponseMode # 初始化查询引擎(根据需求选择response_mode) engine = RetrieverQueryEngine.from_args( retriever, service_context, # 如需生成回答文本用DEFAULT;仅需源节点用NO_TEXT response_mode=ResponseMode.DEFAULT ) res = engine.query('about price comment') # 构造包含响应和带评分源节点的JSON对象 result_json = { "query_response": res.response, # 若用NO_TEXT,此处为空字符串 "source_nodes": [ { "node_text": node.node.get_content(), "score": node.score, "metadata": node.node.metadata } for node in res.source_nodes ] } # 输出或使用目标JSON对象 print(result_json)关键说明:
res.source_nodes中的每个元素都是NodeWithScore对象,直接包含score属性和对应的节点数据。- 若坚持使用
NO_TEXT模式,res.response会是空字符串,此时JSON中可仅保留source_nodes部分。
内容的提问来源于stack exchange,提问作者bai you
相关产品推荐
相关产品推荐

