上一篇我们介绍了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去完成,多么的和谐。接下来,我们看下执行细节
- user_proxy 将任务交给assistant, 图中“to assistant”讲的很清楚。assistant在接收到任务后,生成了相应的python代码,即下图的list_files函数,调用os模块返回了相应目录下的文件,最后调用此函数,并打印。这种assistant之间聊聊天,自动执行完事的感觉太爽了。亲,别再抱怨AutoGen API换来换去,这不还只是0.1.0版本吗?怎么的,您现在就想上天啊?个人感觉比LangChain强太多,是面向未来的….
- USING AUTO REPLY… user_proxy 自动执行,调用了assistant返回的代码。user_proxy 告诉assistant任务成功了,可以退出。 最后我们得到了执行的结果。
- 在反馈输入框中输入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的协同更拟人化。
参考资料
- AutoGen | AutoGen (microsoft.github.io)
- 五里墩茶社 关于AutoGen的视频,
最后,欢迎和我一样在学习LangChain和AutoGen。走向AI应用开发!!!!