
前面几篇文章我优化的方向一直是上下文的召回。毕竟召回的优化可能是面试中最常被提到的。但是随着我不断地对召回的优化现在召回的上下文基本都能包含我想要的内容。我发现生成侧的问题其实也挺大。就拿我们的评测指标来说。在最开始我让 Agent 制定的部分指标如下。“我喝咖啡会心悸有低咖啡因豆吗-- 亲目前店里没有专门的低咖啡因豆款对咖啡因敏感的客人建议优先选中深烘比如胭脂可可/葡萄柚调咖啡因含量相对浅烘略低或者向医生咨询减量建议。”上面这对QA在我4次来回的评估后发现始终达不到一个最优解。因为这段内容不属于商品的信息属于常识。强制遵守上下文在第一个版本中我要求LLM严格遵守上下文。当上下文没有相关信息的时候我要求返回“建议转人工”等话术。这就导致 answer_f1、 answer_llm_correctness 非常低faithfulness 很高宽松的上下文遵循策略在新版本中我又放宽了上下文遵循的要求。这又导致 faithfulness 升高了但是answer_f1、 answer_llm_correctness 非常的不稳定时高时低。简言之如果要求LLM严格遵守上下文那针对常识性问题就没法发挥它的泛化优势。可如果放宽LLM对上下文的遵循要求就可能导致出现幻觉或者部分关键信息缺失的情况。这里Agent给的的简单解法是加一个分类器通过LLM来区分商品和知识。针对商品相关的问题要求严格遵守上下文。针对知识类的问题要求可适当补充并加入“通常来说”这样的话术来表明这是一个经验而不是绝对正确的。但是这里有个问题。我这个场景非常简单可以用分类器。但是如果是混合了商品和知识的问题呢比如哪款豆子送给刚入门手冲的朋友做礼品比较好这就需要先召回所有的商品然后跟进刚入门手冲、送礼这两个场景进行推导。定制Prompt我想来想去没找到好的解决办法。只能先局部优化从Prompt入手。告诉模型在什么场景中要严格遵循上下文。然后补充了在有上下文时必须跟随上下文在上下文里没答案且属于常识的时候适当地给出建议。换句话说还是穷举场景。只不过是通过Prompt来做这个事儿。