AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


简易 Reflection 实现,看看 Agent 强化效果如何
发布日期:2024-04-19 00:05:35 浏览次数: 2489


吴恩达老师提出的 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 比之前在这篇中提到的更复杂,它需要根据用户设定的环境,识别用户输入并实现以下主要功能:

1. 用户可设置交流语言{main_language}和希望学习的语言{target_language};
2. 将所有不是{main_language}的语言段落逐字翻译成{main_language},并提供详细的语法和词义解释;
3. 对{main_language}文本进行赏析,并翻译成{target_language}
4. 对给出两种语言的文本段落,前一种默认为原文,后一种为译文,进行译文准确性评估和分析;
5. 对单词提供详细解释和用法;
6. 除上述以外,提供任何关于语言和翻译相关问题的解答。
此前的问题
在之前的测试中,无论我是写了超长 prompt 并告诉它“Let's think step by step”,还是用 workflow 将任务拆解为先识别意图,再进入对应流程,bot 都无法准确回复,不时出现:
A. 意图识别错误
B. 无法用{main_language}与用户交流
C. 回复有误

GPT 4 识别出错,我输入了完整英文句子,它却认为我是要跟 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+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询