说起这个话题,我最近真是被“超长推理”折磨得不轻。上个月接了个需求,让AI分析一份上百页的技术白皮书,然后输出一份竞品对比报告。我一开始天真地用了那种“请分析全文并给出结论”的prompt,结果模型跑出来一堆莫名其妙的东西——中间步骤跳来跳去,甚至凭空捏造了几个根本不存在的功能点。气得我差点摔键盘。
后来我研究了一下,发现症结在于:模型在处理超过7-8步的推理链时,注意力会像漏水的桶一样哗哗往下掉。单轮对话里塞太多步骤,它记不住前面算到哪了,自然容易“脑雾”和幻觉。这时候我才真正体会到,多轮对话式分解或许就是破解这个难题的最优解。
为什么单轮不行?比喻一下就懂了
想象一下,你让一个新来的实习生同时做三件事:先整理客户名单,再计算销售额,最后写一份总结报告。你一次性把三件事的指令都丢给他,他大概率会手忙脚乱,中间可能漏掉某个客户,或者把数字抄错。但如果让他先完成第一件事,你检查完再告诉他下一步,顺序来,出错率就低很多。
大模型也一样。我之前试过一个任务:从一份技术文档里提取功能点,然后对每个功能点生成测试用例,最后合并去重并排序。总共三步,但单prompt执行时,模型经常在第二步就忘了第一步的输出格式,或者第三步里凭空冒出来一些没见过的功能点。后来我把它拆成三轮对话,每一轮只做一件事,并且把上一轮的结果直接粘贴进下一轮的prompt里,准确率从65%直接跳到91%。
具体怎么拆?我的实战配方
先说核心原则:每一轮的上下文要短到模型能一口吞下,输出格式要固定到模型没法自由发挥。比如第一轮提取功能点,我就让模型输出一个JSON数组,每个功能点一句话。第二轮基于这个JSON数组生成测试用例,第三轮再合并去重。
这里有个大坑——中间结果太长。有一次第一轮提取出了50多个功能点,第二轮prompt直接把token撑爆了,模型读完就没余力写用例了。我的补救办法是:在第一轮末尾加一句“请将结果精简到最多10个最关键的功能点”,用摘要来压缩。效果很好,第二轮就顺畅多了。
串联的工具:Python脚本搞定
手动粘贴太累人,我写了个简单的Python脚本,用OpenAI API串联三轮。大致就是每轮调用一次chat completion,把上一轮的输出拼进下一轮的prompt里。代码不过几十行,但省了我大量时间。如果你也做类似的事,强烈建议搞个自动化流程。
迭代才是王道
你可能会问:到底拆成几步最合适?我试下来,超过4轮模型也会开始“疲”,所以如果任务超级长,我宁愿再搞一个外层循环——比如先拆成5个模块,每个模块再拆2-3轮。听起来麻烦,但每一轮都很轻量,模型不容易翻车。
最后说个心得:别指望一次成功。我每次写多轮对话的prompt,至少要跑5轮测试,看模型在哪一步开始“偷懒”或者“编数据”,然后针对性加约束。比如第二轮如果发现模型乱编测试场景,我就加一句“测试场景必须基于第一轮提取的功能点,不得新增”。效果立竿见影。
多轮对话式分解,说白了就是把一个巨型任务切成小块,让模型像人类打怪升级一样,一步步通关。虽然要多写几个prompt,但换来的是稳定性和可审计性,值了。

这招真的管用,省了不少调试时间。
把结果粘进prompt会不会超token?
听起来像把大任务拆成小任务玩游戏。
模型又跑出幻觉,真是气死我了。
我之前也用多轮拆分,卡在第二步时把JSON压缩到5条才顺利,省了好多手工。