1. 什么是 AI Agent?
Agent 翻译为中文叫代理/智能体,智能体是指具有自主决策能力和自我学习能力的计算机程序或机器人。智能体可以通过感知环境、分析信息、制定决策并执行行动来完成任务。智能体通常包括感知模块、决策模块和执行模块,其中感知模块用于获取环境信息,决策模块用于分析信息并做出决策,执行模块用于执行决策并完成任务。
- 感知模块:根据当前环境把能用到的转换为提示,以及获取更多记忆。决策模块:根据场景和历史信息,决定下一步做什么。执行模块:根据现有的工具和动作,去执行决策。
2. AI + 任何行业 = Agent 可能吗?
"AI + 任何行业 = Agent" 这句话的意思是将人工智能(AI)技术应用到任何行业领域中,可以创造出一个智能代理(Agent)。智能代理是一种能够执行特定任务或服务的软件程序,它能够自主地或在人类的指导下进行操作。以下是一些例子来解释这个概念:
- AI + 医疗行业:智能代理可以分析病人的医疗记录,提供诊断建议,或帮助医生进行远程病人监护。AI + 金融行业:智能代理可以分析市场数据,提供投资建议,或自动化交易流程。AI + 制造业:在制造过程中,智能代理可以监控生产线,预测设备故障,优化生产效率。AI + 零售业:智能代理可以提供个性化的购物建议,管理库存,甚至自动化客户服务。AI + 教育行业:智能代理可以根据学生的学习进度和表现,提供个性化的学习资源和辅导。AI + 交通行业:智能代理可以优化交通流量,预测交通拥堵,甚至控制自动驾驶车辆。
通过将 AI 技术与不同行业的专业知识和需求相结合,可以创造出能够提高效率、降低成本、增强用户体验的智能代理。这些智能代理可以是独立的软件程序,也可以是集成到现有系统中的智能组件。
写作也是如此,上面这段话,只是我让 Kimi 简单的解释一下:AI + 任何行业 = Agent,至于上述的例子目前哪些可行,哪些不太可行,需要既懂业务场景又懂 AI 应用的专业人才去思考落地方案,本文的目标就是简单的入门一下 AutoGen
这个框架。
2. 简单实现一个绘制今年特斯拉和英伟达股票趋势的 Agent 见证一下它的魔力。
首先,我们需要安装一下 AutoGen 这个库,在提前安装好Python环境的前提下
,最简单的安装 AutoGen 的方式是从 pip 安装: pip install pyautogen
。其他安装方式参考:https://microsoft.github.io/autogen/docs/installation/
既然是玩耍 AI Agent 的,那必然需要一个 LLM(大语言模型),LLM 是 Agent 的核心,当前 Agent 对自身角色定位,当前场景感知,工具的正确选择,下一步行动方向,和 LLM 密不可分,所以 LLM 的智慧程度,可以在一定程度上决定 Agent 的下限在哪里。大家可以自行找一个遵循 OpenAI 规范的大模型公司即可,这里就不推荐具体的平台了(避免广告嫌疑)。
在我们开始写 Agent 之前,思考一下,作为一个程序员,如果是我们想要实现一个这样的需求,我们一般是如何思考的呢?
- 寻找知名股票网站,抓包分析,获取对应的数据(不太正规的方式),还不如直接问大模型是否有好用的关于股票的第三方库,或者股票平台是否有开放平台提供调用方式。学习第三方库的 API,测试其是否可以正常使用,不能用就继续搜索查找,直到找到为止,最后实在找不到只能抓包分析,自己实现了。然后安装绘图相关的第三方库,查看绘图相关的 API,对第二步获取到的数据处理为满足绘图 API 的数据,最后对数据进行绘制,然后保存到本地。
上面的思考流程理论上是可以解决当前的需求,但是如果想要实现上述的流程,可能我们会遇到各种的问题,环境问题(比如:缺少依赖了,安装依赖,版本不对了,切换版本
),第三方库 API 使用问题,然后我们再通过各种途径或者历史经验一步一步的去解决问题
。
最近用 AutoGen 使用下来,发现 Agent 的执行流程是比较符合上述的解决问题的途径,暂不多说,简单的使用 AutoGen 写个代码去跑一下,毕竟 Talk is cheap, show you code。
AutoGen 里执行代码的环境有两种,一种是直接在当前 Python 环境执行,一种是使用 Docker 容器去执行。我比较倾向于 Docker 容器去执行。
下面是使用 Docker 容器
执行的代码,注意把 llm_config 里的信息替换为自己的 LLM 相关信息。
import osimport autogenfrom autogen import AssistantAgent, UserProxyAgentllm_config = {"model": "xxx", "api_key": "yyy", "base_url": "zzz", }with autogen.coding.DockerCommandLineCodeExecutor(work_dir="deepseek-coding") as code_executor: assistant = AssistantAgent("assistant", llm_config=llm_config) user_proxy = UserProxyAgent( "user_proxy", code_execution_config={"executor": code_executor}, ) # Start the chat user_proxy.initiate_chat( assistant, message="绘制NVDA和TESLA股价本年迄今变化图。将绘图保存到名为plot.png的文件中", )
下面的是把本地环境提供给大模型当做运行环境的代码:
import osimport autogenfrom autogen import AssistantAgent, UserProxyAgentllm_config = {"model": "xxx", "api_key": "yyy", "base_url": "zzz", }assistant = AssistantAgent("assistant", llm_config=llm_config)user_proxy = UserProxyAgent( "user_proxy", code_execution_config={"executor": autogen.coding.LocalCommandLineCodeExecutor(work_dir="coding_local")})# Start the chatuser_proxy.initiate_chat( assistant, message="绘制NVDA和TESLA股价本年迄今变化图。将绘图保存到名为plot.png的文件中",)
上述代码逻辑理解起来比较简单(AutoGen 写的真优雅),
- 初始化 Docker 环境作为代码执行器,在代码执行期间,你可以看到一个
autogen-code-exec-xx
的容器在运行根据 LLM 配置初始化助手 assistant,初始化用户代理 user_proxy 对象,和代码执行器绑定,赋予其代码执行的能力用户向助手提需求。代码开始执行后,我们可以查看日志,一步一步的分析这个 Agent 的执行流程。
助手表示很开心帮助你实现它,然后借助yfinance
获取股票数据和matplotlib
去画图。然后分分钟就把代码写出来了,真强啊,有种文档在心中,此刻我最强
的感觉。
最后还不忘温馨的告诉你,执行代码过程中如果有问题请告诉它,多么负责任的一位助理啊。
当你看到Provide feedback to assistant. Press enter to skip and use auto-reply, or type 'exit' to end the conversation:
的时候,你就是用户,它是在和你沟通,你可以直接回车确认,也可以告诉它一些信息,暂时先回车确认吧,让它自己思考。
然后用户一跑代码,发现你这也不行啊,生成的代码有问题,执行不起来啊,然后把报错又给了大模型 【像不像你平时直接问大模型,然后跑不起来时候的场景?
】
然后模型想了一下,然后又告诉你,孩子啊,你没有装依赖,肯定跑不起来啊,来这是装依赖的方式,如果还有啥问题,告诉我哈。
然后 user 执行了两个代码块,一个是按照依赖,一个是跑 Python 脚本,结果又报错了。
此时作者内心独白: 【这个user 缺少反思机制,这个错误上次已经遇到过了,但是这次出错了,不自己解决,还去问大模型,真的是不能举一反三,废了
】。
然后模型不厌其烦的回复你了,缺少另外一个包,你再安装一下子,试试看。
二话不说,直接回车,然后竟然跑成功了,如下图。
然后看下工作目录: 四个临时文件,其中又一个 png 的图片。
点开图片看下,可以看起止时间的值错了:
不着急,我们还没有终止会话,我们告诉一下模型,它的起止时间有问题,看看它会不会修复。
然后模型回答的代码就是修改过的了:
然后回车执行一下:
执行成功,看下图片:
找个股票网站对比一下,看看是不是瞎写,结果曲线还真一致,可惜股票没买特斯拉啊。。。。。
直呼牛牛牛。
3. 总结
上述案例仅是简单的介绍了一些AutoGen的入门级用法,简单的几行代码,就让大模型帮我们写好了一个简单的需求,而且还支持修改优化的那种,其实还有好多的知识没介绍到(还没学会),俺还需要继续学习下去,持续输出。