微信扫码
添加专属顾问
我要投稿
▉
吴恩达老师提出的 4 种 Agent 设计策略,以帮助 LLM 达到更好的效果,估计大家最近都已经看过了。
这 4 种策略是 Reflection(让 LLM 反思输出的结果并反馈修改)、Tool use(使用工具)、Planning(使用工作流拆解任务步骤)、Multi-agent collaboration(多 Agent 协作)。想要了解更详细的可查看特工这篇。
实际上,在通过 Agent 工具制作 bot 的时候,已经运用了当中工具和工作流两种策略。而目前还没有什么 Agent 工具能比较方便有效地实现多 Agent 协作,所以这篇我主要实测如何简单地给 bot 加上反思这一步,强化它的输出效果。
▌
在实测之前,分享一些吴恩达老师所提及的论文中,我个人关注的要点。主要来自 SELF-REFINE: Iterative Refinement with Self-Feedback.
1. 几种不同的反思方式,越具体效果越好。
无反馈迭代:只进行二次迭代,但不提供具体反馈内容。
通用型反馈(generic feedback):例如“提高代码效率”这种一般性准则。
特定、可操作的反馈(specific, actionable feedback):能够精确地帮助发现问题,并提供明确改进方向的反馈。例如“避免在for循环中重复计算”。
2. 自我反思比单纯让 LLM 一次性输出多个结果再进行比较更好。(This shows the importance of refinement according to feedback over the alternative of just generating multiple initial outputs.)
3. 自我反思的一个关键挑战是能否提出准确反馈。以及这种方式在强大的模型上表现出色,但在较弱的模型上可能需要额外的改进或调整才能实现类似的效果。
▌测试 takeaway
非一般性结论,就这次测试的单个 bot 来说:
对于可以凭借简单常识进行反馈的流程,单次反思提升的效果就可以比较好。但是我并没有特别感觉到 GPT 3.5 + GPT 3.5 > GPT 4. ?如果是更为复杂的反思,其效果要结合大模型能力、反馈规则来看。这个过程同样也是不断迭代的。
*欢迎大家分享自己的 bot 实测效果。
▉ 门修斯 pro 版
我以之前测试过输出不够稳定的门修斯 pro 版为例。这个 bot 比之前在这篇中提到的更复杂,它需要根据用户设定的环境,识别用户输入并实现以下主要功能:
▉ 强化意图识别
我在意图识别的节点后加上一个反思节点,并将规则、用户输入和上一轮输出结果传递给它:
# 角色你是一个评估者。你能基于用户设置的母语{{mother_language}},根据用户的输入{{input}},识别用户输入的是单词/词组,还是完整句子;识别输入的语言是不是母语;如果输入了多个句子,则每个句子是哪种语言等等。你的技能是根据规则、上一轮的输入评判上一轮的输出是否正确,给出理由,如果不正确则给出正确的输出。Let's think step by step.
GPT 3.5
GPT 3.5 的反思逻辑让我哭笑不得,它只判断了上一步的意图结果跟返回的instruction值能否对上,却没有考虑上一步的意图结果可能本身就是错的。也就是上文说的,反思的一个关键挑战是能否提出准确反馈。
GPT 3.5 + GPT3.5 的效果是根本不知所云?
换成 4 正常了。考虑到意图识别并不复杂,而且需要尽可能缩短执行时间,这一步的组合最好就是第一次回答使用 3.5,而反思使用 4。
GPT 4
在不断的测试中,我发现了新的问题,LLM 总是不能判断出我输入了 2 种语言文本的情况。可能是因为分类的情况比较多,每次它识别出第一个句子的语言后,就给出了结论。
对于这种情况,我在反思节点的 prompt 中加了一句“尤其注意判断{{instruction}}值为4的情况”,问题完美解决。
接下来又有一个新的问题,当我输入一个日语句子的时候,也会判定为包含了 2 种语言。即使我告诉它“请注意日语这门语言会使用中文汉字”,也没辙。
这时候我意识到原先的 prompt 写得不够清楚,对 bot 来说,一个日语句子确实属于“文本中包含 2 种语言”这种情况,但事实上它可以判断出来这是一个日文句子。
所以我把对应的 prompt 改成了, “如果用户输入的{{input}}有多个句子,且每个句子使用的语言不一样,返回{{instruction}}值为4”。完美解决。
这时候我开始想,是不是因为我原先的 prompt 写得有歧义,所以导致意图识别失败,其实不需要反思节点也可以?
但是,在进行了新一轮的暴力测试之后,我发现,在为整个流程增加 6-8s 响应时间的基础上,反思节点确实完美解决了意图识别的问题。
更改 prompt 之后的 GPT 4 依然有可能犯错
▉ 强化回复
在bot 能够进入正确的对应流程后,我又给每一个回复节点加上了反思节点。反思节点使用的是上文说的特定、可操作的反馈,并要求它根据反馈修改上一步的结果。
## 技能- 你会评估一下几个方面:1. 判断{{comprehension}}是否包含了翻译、原文赏析和译文解释的完整板块,不完整则需要补充;2. 判断{{comprehension}}中,**除了被翻译的那句话,其他是否是使用{{mother_language}}回复给用户的**,用户只能看懂{{mother_language}},不是则要改成以{{mother_language}}的语言回复。3. 对{{input}}的来源指出是否正确,不正确则需要改正;4. 对{{input}}的原文赏析是否完整,不完整则需要补充;5. 对将{{input}}翻译成{{target_language}}的译文是否准确,不准确则需要修改。
第一次测试,回复节点和下一步的反思节点都使用 GPT 4。
一个比较明显的提升是,回复终于可以完全按照用户设置的 {main_language} 执行了。
其次是确实在某些例子中,它纠正了一些回答。比如在下文翻译名句“生存还是毁灭,这是一个问题”的时候,第一次回答中它将“一个”翻译成了德语定冠词“die”,反思节点中纠正为“eine”。
但是对一些更为明显的错误回复, 反思节点并不能完全生效,也就是因为无法给出更高质量的反馈。比如中文古诗词的出处,这个时候能配合一下插件的使用会更好。对于更专业的翻译,它还需要知识库的支持。
另外我也测试了回复使用 GPT 3.5, 反思使用 GPT 4 的效果。结果有时候因为上一步输出不稳定,导致反思节点被误导。
当然,使用了这么多个 GPT 4 节点的代价就是响应时间很长,基本都要在1分半钟以上,也许导致 workflow 调用超时。
就在我写下更复杂的译文准确性评估的具体准则,并准备进一步测试更好的反馈时,今天的 test run 超额度了。那就先写这么多。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-02-01
2025-01-01
2024-08-13
2024-04-25
2025-02-04
2024-07-25
2024-06-13
2024-04-26
2024-09-23
2024-04-12
2025-02-24
2025-02-23
2025-02-23
2025-02-23
2025-02-23
2025-02-22
2025-02-22
2025-02-22