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

2,403 阅读5分钟

上一篇我们介绍了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 还会自动的根据任务决定接下来的动作,比如执行某个函数等。

image.png

再来看个例子

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

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

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

image.png

  • 安装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里。

QQ图片20231114102554.png

  • 构建Agents
# 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 开始工作

QQ图片20231114110915.png

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

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

DEMO 步骤

  • 列出目录下的所有文件
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强太多,是面向未来的....

QQ图片20231114112210.png

  1. USING AUTO REPLY... user_proxy 自动执行,调用了assistant返回的代码。user_proxy 告诉assistant任务成功了,可以退出。 最后我们得到了执行的结果。

QQ图片20231114112927.png

  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应用开发!!!!