原贴链接

我一直在工作中使用Autogen(我们在Langgraph出现之前就开始使用了),并且确实看到了它带来的巨大价值。特别是在实现像“反思”这样的双代理模式时。

虽然群聊的对话功能有时非常惊人,但我的代理有时会偏离轨道,完全偏离正轨。这时我开始研究使用代理工作流程(或状态机)来帮助使事情更加确定性。

再次强调,我知道Langgraph是基于状态机的想法构建的,我很快就会尝试它。但我想分享我使用Autogen的学习经验(以及简化示例),因为我认为这可能对一般使用AI代理的每个人都有帮助。

此外,这里有一个包含一些在AutoGen中创建自定义工作流程/状态机的示例代码的仓库:https://github.com/YourTechBud/ytb-practical-guide/tree/master/autogen-workflows

我的学习经验

  1. 代理的真正力量在于对话

状态机很有趣。将我们的AI工作流程建模为状态机非常容易。但代理的真正价值在于对话。让AI代理从对话历史中获取“上下文”至关重要。特别是多轮/聊天模型在这方面表现尤为出色。

示例:重新格式化/重构文档/笔记的简单任务。如果你的步骤之一是确定笔记中讨论的重要主题,后续的释义器将使用它作为重构的骨架。有助于强化文档结构。

其实并不那么重要去精心策划每个提示中的“完美”上下文。只要你的状态机是基于类似生活的对话建模的,你的代理就会弄清楚如何最好地使用聊天历史作为上下文。

  1. 有时接受不确定性是可以的

与其与模型斗争以找到“完美”的提示,不如让一个辅助或伴随代理帮助调整你的代理。事实是你的提示永远不会完美。输入的变化很可能会搞砸事情。有一个提供反馈提示给主要代理的反思代理,在各种输入条件下确实有助于对齐。以下是如何在Autogen中实现这一点 - https://microsoft.github.io/autogen/docs/tutorial/conversation-patterns/#two-agent-chat-and-chat-result

我很快会再发一篇文章,给出更多具体的例子。可能会使用Langgraph,因为它看起来非常令人兴奋。但是迁移啊!

  1. 为每个代理的响应添加注释

当使用不太健谈的模型如Qwen时,手动为代理的响应添加注释是有帮助的。例如,如果代理正在分析文档中涵盖的主题,手动添加前缀“文档中存在的主题:\n\n”将减少其他代理误解聊天消息的机会。你甚至可以更进一步,将其更像一个指令,以帮助强化所有未来响应的结构。

这对JSON也是如此。我已经放弃了让我的代理给我完美且干净的JSON响应的尝试。我让代理继续谈论它是如何得出结论的等等。这种唠叨是有用的,因为它为后续代理提供了上下文。后续的工具调用代理将足够聪明,能够从消息中提取JSON部分。

结论

我希望我能很好地传达我的学习经验。如果有任何问题或不同意我的任何观点,请告诉我。我在这里学习。

P.S. - 分享一个我在YouTube上制作的视频,介绍如何使用Autogen实现这样的代理工作流程/状态机!也希望你能看看。

讨论总结

本次讨论主要聚焦于使用Autogen框架实现AI代理的工作流程和状态机,作者分享了在实际应用中的经验和学习。重点强调了对话在代理工作中的核心作用,以及如何通过状态机来提高工作流程的确定性。此外,讨论还涉及了如何处理代理对话中的不确定性,通过注释代理响应来减少误解,以及在不同模型和领域中的应用案例。

主要观点

  1. 👍 对话是AI代理的核心能力
    • 支持理由:对话历史是AI代理获取上下文的关键,多轮对话模型特别擅长这一点。
    • 反对声音:无
  2. 🔥 不必追求完美的提示
    • 正方观点:通过辅助代理帮助主代理更好地对齐,可以处理各种输入条件。
    • 反方观点:无
  3. 💡 手动注释代理的响应
    • 解释:在使用较少对话的模型时,手动注释可以减少误解,特别是在分析文档主题时。
  4. 👀 放弃追求完美的JSON输出
    • 解释:允许代理自由表达,后续工具可以从中提取所需信息,提供更多上下文。
  5. 🚀 Agentic Workflows是一种设计模式
    • 解释:适用于通过对话解决问题的场景,但并非万能,有时直接使用OpenAI的SDK更有效。

金句与有趣评论

  1. “😂 Constraining LLMs reduces creativity. This is already understood by some providers, specially Anthropic.”
    • 亮点:指出了限制大型语言模型可能降低其创造力的问题,这是一个重要的见解。
  2. “🤔 Agentic Workflows 是一种设计模式,适用于通过对话解决问题的场景,但并非万能。”
    • 亮点:强调了Agentic Workflows的适用性和局限性,提供了全面的视角。
  3. “👀 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 实现代理工作流/状态机的讨论,为相关领域的从业者和爱好者提供了丰富的经验和思考方向。