逐步掌握最佳Ai Agents框架-AutoGen 二

上一篇我们介绍了AutoGen中最基本的两个概念,Agent 和 Chat。如果您是第一次看到AutoGen这个词句,建议您返回我的逐步掌握最佳Ai Agents框架-AutoGen 一 - 掘金 (juejin.cn)文章,再继续本文的阅读。如果您也是和我一样,在学习了LangChain或开发了一些基于大模型的应用后,被AutoGen的多代理和自动chat功能所吸引,那欢迎大家点个赞,或分享给感兴趣的同学。

Agents回顾

  AutoGen在Multi-agent Conversation Framework中设计了AssiantAgent、UserProxyAgent、GroupChatManager三个Agent, 并由ConversableAgent统一管理。

  其中,AssiantAgent是助理,负责生成代码,执行任务等。UserProxyAgent是我们的代理,负责接受用户输入和指定,并将工作交给AssiantAgent来完成,user_proxy 还会自动的根据任务决定接下来的动作,比如执行某个函数等。

再来看个例子

  我在最近的AIGC学习中,一直在白嫖Google的colab, 如果还没有用过的同学,建议去看看python notebook的用法,和体验下colab。这里就假设大家和一样打开了colab...

  • 首先新建一个新的note book,命名为proxy_agent.ipynb

  大家也可以点击我的colab,输入自己的api_key, 运行看效果 proxy_agent.ipynb - Colaboratory (google.com)

  • 安装autogen 并引入成功

  在图中的安装代码,有些小知识。   首先,package~=0.1.0表示安装package的版本应该是0.1.0或者0.1.x中的任何一个更高的版本,但不包括0.2.0

  其次,-q--quiet 的简写,表示安静模式,即在安装过程中减少输出,只显示错误和警告。

  最后, -U--upgrade 的简写,表示如果已经安装了包,那么将其升级到最新版本。

  • 配置API endpoint

  endpoint是API的一个重要组成部分,它定义了API的具体功能和如何访问这些功能。比如我们使用什么大模型,以及api-key等。我这里只有gpt-3.5的key, 大家如果有gpt-4等,可以加在config_list里。

  • 构建Agents
python 复制代码
# create a assistantAgent named assistant
assistant = autogen.AssistantAgent(
    name="assistant", 
    llm_config=llm_config
)
#create a proxyAgent named user_proxy
user_proxy = autogen.UserProxyAgent(
    name="user_proxy",
    human_input_mode="TERMINATE",  #用户输入模式是从命令行
    max_consecutive_auto_reply=10, # 代理Agent会代替用户做执行,这里配置最大的连续自动proxy次数是 10
    # `lambda`关键字在Python中用于创建匿名函数,也就是没有名字的函数。这个函数接受一个参数`x`,然后返回一个布尔值。检查`x`的"content"字段的值是否以"TERMINATE"结束
    is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
    # 工作目录设置为当前目录,不使用docker, 如果使用docker,agent就会在一个相对隔离的环境里运行
    code_execution_config={"work_dir":".", "use_docker":"False"},
    # 这个有点意思,感觉是我们在向代理agent授权。
    system_message="Reply TERMINATE if the task has been solved at full satisfaction.Otherwise, reply CONTINUE, or the reason why the task is not solved yet."
)

建议大家仔细看看user_proxy的注释, 再往下走....

  • 查看sample_data 目录并让user_proxy 开始工作

  在上一步的code_execution_config配置中,我们把工作目录配置为当前目录。在colab这个云AI"虚拟机"中,当前目录下默认有一个sample_data,目录下有一些csv的数据文件等。

  接下来,我们就是要让user_proxy 接受我们打印sample_data目录下文件的命令,并交由assistant来执行。user_proxy 检查任务完成情况,反馈给我们或继续问询assistant。有点意思,有了user_proxy, 包租公可以第天去找阿丽了....

DEMO 步骤

  • 列出目录下的所有文件
python 复制代码
user_proxy.initiate_chat(
    assistant,
    message="""
    List all the files in the sample_data folder
    """
)

  代理agent 收到我们的任务message,以chat 的方式将任务交给助理agent去完成,多么的和谐。接下来,我们看下执行细节

  1. user_proxy 将任务交给assistant, 图中"to assistant"讲的很清楚。assistant在接收到任务后,生成了相应的python代码,即下图的list_files函数,调用os模块返回了相应目录下的文件,最后调用此函数,并打印。这种assistant之间聊聊天,自动执行完事的感觉太爽了。亲,别再抱怨AutoGen API换来换去,这不还只是0.1.0版本吗?怎么的,您现在就想上天啊?个人感觉比LangChain强太多,是面向未来的....
  1. USING AUTO REPLY... user_proxy 自动执行,调用了assistant返回的代码。user_proxy 告诉assistant任务成功了,可以退出。 最后我们得到了执行的结果。
  1. 在反馈输入框中输入exit 退出对话

总结

  本结中,我们再次将assistant 和 proxy 两个agent 结合,完成了一个文件列表的例子。笔者在最近的学习和实践中有以下感觉:

  • 对prompt工程的理解越来越深刻

  当我们在原来的工作流中,刻意停下来,加入prompt 设计的时候,prompt就开始在发挥威力。就好像后端在需求,要先花时间设计数据库一样。我们现在做AI应用,将以前的很多功能交给prompt设计很重要,你会像我一样惊叹的发现,以前的大部份功能不需要再coding,prompt 一下交给大模型就能解决。目前,我学习中的很多后端功能,确实通过prompt,少写了很多代码。注意,是不怎么需要写代码,而不是copilot 帮我们生成代码,有点类似低代码,或无代码。

  • AutoGen是框架

  prompt + LLM 仍然是语义化或NPL化解决任务的方式,大模型可以换,目前我用的比较多的是OpenAI。AutoGen或LangChain是框架,帮我们将AI工作流快速,简单构建了起来。AutoGen比LangChain更先进的地方在于,它吸收了LangChain里Agent的概念,同时更自动,chat方式让agents的协同更拟人化。

参考资料

最后,欢迎和我一样在学习LangChain和AutoGen。走向AI应用开发!!!!

相关推荐
墨风如雪7 小时前
WorkBuddy零基础教程进阶篇
aigc
ServBay13 小时前
AI Gateway 是什么?为什么每个平台都在做
后端·aigc·ai编程
悟空码字13 小时前
别再手搓CRUD了,用飞算JavaAI的“工程流水线“,助力高效开发
aigc·openai·ai编程
阿新聊ai16 小时前
死磕claude code-Skill 不触发、乱触发、跑挂了:一份评测与调优指南
openai·ai编程
草帽lufei16 小时前
低成本AI靠谱执行长任务:便宜模型+多AI协作+定时器自动化实战
aigc·ai编程
卡卡罗特AI19 小时前
ChatGPT取消5小时限额,Codex终于可以疯狂造起来了!Anthropic最严厉的父亲来了!
chatgpt·openai·ai编程
武子康19 小时前
OpenAI 把 Codex 接进 Claude Code:Coding Agent 从单兵工具进入协作系统
人工智能·openai·claude
leeyi20 小时前
Callback 系统:Eino 的“事件总线“(第52篇-E38)
aigc·agent·ai编程
武子康20 小时前
GPT-5.6 Sol、Terra、Luna 怎么选?我的素材库项目为什么最终使用 Sol + Medium
人工智能·chatgpt·openai
三声三视20 小时前
Agent 的 JSON Mode 我弃了——三个项目全翻车,改用 function calling 做结构化输出后稳了
人工智能·ai·aigc·ai编程