一个实现可靠结构化输出的廉价技巧:将验证错误反馈给重试

Reddit r/LocalLLaMA 工具

摘要

一种实用技术,通过将验证错误反馈到重试提示中,改进语言模型的结构化输出生成,使模型能够自我修正而非盲目重试。该方法以模型易理解的方式描述错误,并提供先前输出供其编辑。

如果你从 LLM 生成结构化输出并针对 schema 进行验证,你清楚失败模式:通常正常,偶尔出现字段缺失或无法解析的响应。常规修复手段是重试,但简单重试使用的是相同提示和相同温度,相当于只是重新掷骰。对我而言,更有效的方法是让重试具有自我修正能力:当验证失败时,将验证错误和模型先前输出的内容放回下一个提示中,要求它修复具体问题。这样是编辑而非重新生成。 python except ValidationError as e: attempts += 1 error_message = f""" 上次响应因以下错误验证失败: <error>{format_error_for_llm(e)}</error> 修复错误并返回修正后的数据: <data>{serialize(response).decode()}</data> """ response = None # 下一轮循环会将 error_message 追加到提示中 两个细节很重要:向模型描述错误,而不是写日志(例如「字段 X 必须为整数,你传入了字符串」),并且把模型自己的先前输出作为待修正内容交给它。权衡:失败时会多一次调用且提示更长(设定尝试上限);只有当错误输出足够可解析以回传时才有效;如果你还在不同提供商之间切换,不要把切换算作一次尝试。 这来自我构建的一个 RAG 平台。其他人是如何处理这个问题的?通过受限解码/语法,还是类似这样的反馈循环?
查看原文

相似文章

当LLM奖励设计失败:稀疏结构化强化学习的诊断驱动细化

arXiv cs.LG

本文将LLM生成的奖励塑形视为稀疏结构化强化学习中的调试问题,识别出奖励泛滥和语义误解等失败模式。作者提出诊断驱动的迭代细化,与一次性生成相比,取得了显著的成功率提升(例如,DoorKey-8×8从2.3%提升至97.6%)。

Pigeonholing:不良提示导致模型崩溃并犯错

arXiv cs.CL

本文介绍了“Pigeonholing”这一现象,即不良提示导致大语言模型崩溃并重复错误,造成38-40%的性能下降。跨越10个任务和10个模型的实验表明,随着对话轮次增加,问题恶化,并提出了结合合成错误的RLVR作为缓解措施。