llama_index [Bug]:

kqhtkvqz  于 2个月前  发布在  其他
关注(0)|答案(1)|浏览(35)

Bug描述

RetrieverQueryEngine在传递自定义混合检索器时无法处理response_synthesizer对象,出现以下错误信息:
合成器对象没有'metadata'属性
其中合成器可以是CompactAndRefine、Refine等。

版本

版本:0.10.22

重现步骤

def get_retriever_query_engine_for_cache():

    cache_bm25_retriever = get_BM25_retriever_for_cache()

    cache_vector_retriever = index_storage.index_cache().as_retriever(similarity_top_k=2)

    hybrid_retriever = HybridRetriever(cache_vector_retriever, cache_bm25_retriever)

    reranker = LLMRerank(
            choice_batch_size=20,
            top_n=2,
        )
    response_synthesizer = get_response_synthesizer(structured_answer_filtering=True)

    return RetrieverQueryEngine(
        retriever=hybrid_retriever, 
        response_synthesizer=get_response_synthesizer(response_synthesizer),
        node_postprocessors=[reranker,SimilarityPostprocessor(similarity_cutoff=SIMILARITY_CUTOFF_CACHE_CUSTOM_HYBRID)],
        )

自定义混合检索器:

class HybridRetriever(BaseRetriever):
    def __init__(self, vector_retriever, bm25_retriever):
        self.vector_retriever = vector_retriever
        self.bm25_retriever = bm25_retriever
        super().__init__()

    def _retrieve(self, query, **kwargs):
        bm25_nodes = self.bm25_retriever.retrieve(query, **kwargs)
        vector_nodes = self.vector_retriever.retrieve(query, **kwargs)

        # combine the two lists of nodes
        all_nodes = []
        node_ids = set()
        for n in bm25_nodes + vector_nodes:
            if n.node.node_id not in node_ids:
                all_nodes.append(n)
                node_ids.add(n.node.node_id)
        return all_nodes

相关日志/回溯

  • 无响应*
3df52oht

3df52oht1#

你好!我在这里协助你解决遇到的问题。让我们一起解决你遇到的bug。
要解决在使用自定义混合检索器和response_synthesizer对象(如CompactAndRefineRefine)时出现的synthesizer object has no attribute 'metadata'错误,你需要确保RetrieverQueryEngineresponse_synthesizer正确设置并使用。
以下是如何设置和使用RetrieverQueryEngineRefine类的示例:
确保RetrieverQueryEngine示例化时使用了必要的参数,并且Refine类已正确定义以处理响应。这样的设置应该有助于解决synthesizer object has no attribute 'metadata'错误。
此外,RetrieverQueryEngine类有一个使用response_synthesizer生成响应的方法synthesize。请确保response_synthesizer正确初始化并传递给RetrieverQueryEngine:
这个方法应用于从检索到的节点合成响应。请确保在自定义的response_synthesizer中正确定义所有必要的属性和方法,以避免属性错误1(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/tests/response_synthesizers/test_refine.py)2(https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/query_engine/retriever_query_engine.py)3(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/llama_index/legacy/query_engine/retriever_query_engine.py)。

  • 要继续与Dosu交谈,请提及@dosu。*

相关问题