我一直在工作中使用Autogen(我们在Langgraph出现之前就开始使用了),并且确实看到了它带来的巨大价值。特别是在实现像“反思”这样的双代理模式时。
虽然群聊的对话功能有时非常惊人,但我的代理有时会偏离轨道,完全偏离正轨。这时我开始研究使用代理工作流程(或状态机)来帮助使事情更加确定性。
再次强调,我知道Langgraph是基于状态机的想法构建的,我很快就会尝试它。但我想分享我使用Autogen的学习经验(以及简化示例),因为我认为这可能对一般使用AI代理的每个人都有帮助。
此外,这里有一个包含一些在AutoGen中创建自定义工作流程/状态机的示例代码的仓库:https://github.com/YourTechBud/ytb-practical-guide/tree/master/autogen-workflows
我的学习经验
- 代理的真正力量在于对话
状态机很有趣。将我们的AI工作流程建模为状态机非常容易。但代理的真正价值在于对话。让AI代理从对话历史中获取“上下文”至关重要。特别是多轮/聊天模型在这方面表现尤为出色。
示例:重新格式化/重构文档/笔记的简单任务。如果你的步骤之一是确定笔记中讨论的重要主题,后续的释义器将使用它作为重构的骨架。有助于强化文档结构。
其实并不那么重要去精心策划每个提示中的“完美”上下文。只要你的状态机是基于类似生活的对话建模的,你的代理就会弄清楚如何最好地使用聊天历史作为上下文。
- 有时接受不确定性是可以的
与其与模型斗争以找到“完美”的提示,不如让一个辅助或伴随代理帮助调整你的代理。事实是你的提示永远不会完美。输入的变化很可能会搞砸事情。有一个提供反馈提示给主要代理的反思代理,在各种输入条件下确实有助于对齐。以下是如何在Autogen中实现这一点 - https://microsoft.github.io/autogen/docs/tutorial/conversation-patterns/#two-agent-chat-and-chat-result
我很快会再发一篇文章,给出更多具体的例子。可能会使用Langgraph,因为它看起来非常令人兴奋。但是迁移啊!
- 为每个代理的响应添加注释
当使用不太健谈的模型如Qwen时,手动为代理的响应添加注释是有帮助的。例如,如果代理正在分析文档中涵盖的主题,手动添加前缀“文档中存在的主题:\n\n”将减少其他代理误解聊天消息的机会。你甚至可以更进一步,将其更像一个指令,以帮助强化所有未来响应的结构。
这对JSON也是如此。我已经放弃了让我的代理给我完美且干净的JSON响应的尝试。我让代理继续谈论它是如何得出结论的等等。这种唠叨是有用的,因为它为后续代理提供了上下文。后续的工具调用代理将足够聪明,能够从消息中提取JSON部分。
结论
我希望我能很好地传达我的学习经验。如果有任何问题或不同意我的任何观点,请告诉我。我在这里学习。
P.S. - 分享一个我在YouTube上制作的视频,介绍如何使用Autogen实现这样的代理工作流程/状态机!也希望你能看看。
讨论总结
本次讨论主要聚焦于使用Autogen框架实现AI代理的工作流程和状态机,作者分享了在实际应用中的经验和学习。重点强调了对话在代理工作中的核心作用,以及如何通过状态机来提高工作流程的确定性。此外,讨论还涉及了如何处理代理对话中的不确定性,通过注释代理响应来减少误解,以及在不同模型和领域中的应用案例。
主要观点
- 👍 对话是AI代理的核心能力
- 支持理由:对话历史是AI代理获取上下文的关键,多轮对话模型特别擅长这一点。
- 反对声音:无
- 🔥 不必追求完美的提示
- 正方观点:通过辅助代理帮助主代理更好地对齐,可以处理各种输入条件。
- 反方观点:无
- 💡 手动注释代理的响应
- 解释:在使用较少对话的模型时,手动注释可以减少误解,特别是在分析文档主题时。
- 👀 放弃追求完美的JSON输出
- 解释:允许代理自由表达,后续工具可以从中提取所需信息,提供更多上下文。
- 🚀 Agentic Workflows是一种设计模式
- 解释:适用于通过对话解决问题的场景,但并非万能,有时直接使用OpenAI的SDK更有效。
金句与有趣评论
- “😂 Constraining LLMs reduces creativity. This is already understood by some providers, specially Anthropic.”
- 亮点:指出了限制大型语言模型可能降低其创造力的问题,这是一个重要的见解。
- “🤔 Agentic Workflows 是一种设计模式,适用于通过对话解决问题的场景,但并非万能。”
- 亮点:强调了Agentic Workflows的适用性和局限性,提供了全面的视角。
- “👀 I almost exclusively use 8B models (Llama3 mostly) for text translation and interpretation tasks.”
- 亮点:分享了在特定任务中使用8B模型的经验,为其他用户提供了参考。
情感分析
讨论的总体情感倾向积极,主要集中在分享经验和提供实用建议上。争议点较少,主要是在讨论不同模型和方法的适用性。可能的原因是参与者多为技术爱好者,对新工具和方法持开放态度。
趋势与预测
- 新兴话题:Agentic Workflows在网络安全和软件理解领域的应用可能会成为未来的研究热点。
- 潜在影响:优化AI代理的工作流程和对话管理将提高AI在实际应用中的效率和可靠性,对相关领域产生积极影响。
详细内容:
标题:关于使用 Autogen 和 Llama3 实现代理工作流/状态机的热门讨论
在 Reddit 上,一篇题为“Implementing Agentic Workflows / State Machines with Autogen+LLama3”的帖子引发了众多关注。该帖获得了大量点赞和众多评论,主要探讨了在工作中使用 Autogen 时的经验和见解,并分享了关于实现代理工作流和状态机的学习成果。
帖子中提到,虽然群聊的会话功能有时很出色,但代理可能会偏离轨道。于是作者开始研究使用代理工作流(或状态机)来使事情更具确定性。同时,作者还提供了一个包含在 AutoGen 中创建自定义工作流/状态机的示例代码的仓库链接。
在讨论焦点与观点分析方面,有人指出,代理的真正力量在于对话,让 AI 代理从对话历史中获取“上下文”至关重要。比如在重新格式化或重组文档/笔记的简单任务中,确定笔记中讨论的重要主题这一步骤,后续的改写器会将其用作重组的框架,有助于加强文档结构。
也有人认为,有时接受不确定性是可以的。不必为找到“完美”的提示而与模型抗争,而是让辅助代理帮助调整主代理。还有人提到,在使用像 Qwen 这样不太健谈的模型时,手动注释代理的响应是有帮助的。
例如,有用户分享道:“Constraining LLMs reduces creativity. This is already understood by some providers, specially Anthropic: 他们推荐使用获取重要输出,并让 llm 围绕这些标签随意编写文本。这样就能两全其美:结构化输出,同时在生成时在上下文窗口中提供相关文本。”
同时,有人提到在工作中开始使用基本的代理循环,但开始遇到限制。而作者表示在软件理解方面使用效果不错,但也指出代理并非万能的,所有功能也可以通过原始处理 OpenAI 的 sdk 来实现。
总的来说,这次关于使用 Autogen 和 Llama3 实现代理工作流/状态机的讨论,为相关领域的从业者和爱好者提供了丰富的经验和思考方向。
感谢您的耐心阅读!来选个表情,或者留个评论吧!