llama-index RelevancyEvaluator误判所有源节点通过,求解决方案
解决RelevancyEvaluator全量返回True的问题
针对你遇到的RelevancyEvaluator所有源节点都返回result.passing=True的问题,结合你使用的amazon/MistralLite和sentence-transformers/all-MiniLM-L6-v2,给你以下具体解决建议:
调高相似度阈值
all-MiniLM-L6-v2生成的嵌入相似度得分普遍偏高(通常在0.7以上),而RelevancyEvaluator默认的similarity_threshold可能低至0.5,导致大部分节点都能通过。显式设置更高的阈值,比如0.75或0.8:from llama_index.core.evaluation import RelevancyEvaluator evaluator = RelevancyEvaluator( llm=your_mistral_llm, similarity_threshold=0.75, embed_model=your_miniLM_embed_model )启用混合/LLM优先评估模式
仅依赖嵌入相似度的评估容易出现偏差,建议切换到混合模式(嵌入+LLM推理)或纯LLM推理模式,让MistralLite直接判断内容相关性:from llama_index.core.evaluation import RelevancyEvaluator, RelevancyEvaluatorMode # 混合模式 evaluator = RelevancyEvaluator( llm=your_mistral_llm, mode=RelevancyEvaluatorMode.HYBRID, similarity_threshold=0.7 ) # 纯LLM推理模式 evaluator = RelevancyEvaluator( llm=your_mistral_llm, mode=RelevancyEvaluatorMode.LLM )自定义适配MistralLite的评估Prompt
默认评估Prompt可能不符合MistralLite的指令习惯,导致模型输出模糊。自定义明确的Prompt,强制模型输出严格的判断结果:from llama_index.core.prompts import PromptTemplate custom_eval_prompt = PromptTemplate( "Query: {query}\n" "Source Content: {context}\n" "Task: Check if the source content has direct, useful information to answer the query. " "You must respond with ONLY 'Yes' or 'No'." ) evaluator = RelevancyEvaluator( llm=your_mistral_llm, eval_prompt=custom_eval_prompt )验证源节点内容完整性
先打印几个source_nodes的text字段,确认内容是完整的知识库片段,而非截断、乱码或无关的元数据——如果源节点内容本身有问题,评估结果自然不准确。排查LLM的调用配置
确保MistralLite的调用参数(如temperature)设置合理,建议把temperature设为0,避免模型输出随机性导致误判:from llama_index.llms.bedrock import Bedrock llm = Bedrock( model="amazon/MistralLite", temperature=0.0, max_tokens=256 )
内容的提问来源于stack exchange,提问作者cristi
相关产品推荐
相关产品推荐

