基于 AutoGen 框架构建 AI Agent 实现自动化编程任务
1. 什么是 AI Agent?
Agent(智能体)是指具有自主决策能力和自我学习能力的计算机程序或机器人。智能体可以通过感知环境、分析信息、制定决策并执行行动来完成任务。一个典型的智能体通常包括以下三个核心模块:
- 感知模块:负责根据当前环境状态提取可用信息,转换为提示词(Prompt),并获取必要的记忆上下文。
- 决策模块:基于场景信息和历史交互记录,分析当前状态并决定下一步的行动策略。
- 执行模块:利用现有的工具集和动作接口,实际执行决策结果,如调用 API、运行代码或操作文件。
在软件开发领域,AI Agent 能够理解自然语言需求,自主规划任务路径,编写代码,调试错误,最终交付可运行的软件组件。
2. AI + 行业应用场景
将人工智能技术应用于特定行业,可以创造出高度定制化的智能代理。以下是一些典型的应用方向:
- 医疗行业:智能代理分析病人病历,提供辅助诊断建议,或协助医生进行远程监护数据监控。
- 金融行业:自动分析市场实时数据,生成投资建议报告,或执行高频交易流程的自动化管理。
- 制造业:在生产线上部署智能体监控设备状态,预测潜在故障,优化生产排程与效率。
- 零售业:提供个性化商品推荐,管理库存水位,甚至通过对话机器人自动化处理客户服务请求。
- 教育行业:根据学生的学习进度和表现数据,动态调整并提供个性化的学习资源与辅导方案。
- 交通行业:优化城市交通流量分配,预测拥堵节点,辅助控制自动驾驶车辆的行驶路径。
通过将 AI 技术与垂直领域的专业知识相结合,智能代理能够显著提升效率、降低成本并增强用户体验。这些代理既可以是独立的软件系统,也可以作为智能组件集成到现有业务系统中。
本文的目标是介绍微软开源的 AutoGen 框架,帮助开发者快速入门 AI Agent 的开发与落地。
3. 快速实践:绘制股票趋势图
为了直观展示 AutoGen 的能力,我们将实现一个能够自主完成数据分析与可视化的 Agent。需求为:绘制今年特斯拉(TSLA)和英伟达(NVDA)的股票价格趋势图。
3.1 环境准备
首先,确保已安装 Python 环境。推荐使用 Python 3.8 及以上版本。安装 AutoGen 库的最简单方式是通过 pip:
pip install pyautogen
如果需要使用 Docker 容器隔离执行环境,请确保本地已安装 Docker Desktop 或 Docker Engine。
3.2 配置大语言模型 (LLM)
LLM 是 Agent 的核心大脑,决定了 Agent 的角色定位、场景感知及工具选择能力。你需要选择一个遵循 OpenAI 规范的模型服务。配置示例如下:
llm_config = {
"model": "gpt-4-turbo",
"api_key": "YOUR_API_KEY",
"base_url": "https://api.openai.com/v1"
}
注意:请将上述配置替换为你实际的模型名称、API Key 和基础 URL。支持多种兼容 OpenAI 协议的模型提供商。
3.3 代码实现
AutoGen 提供了两种代码执行环境:本地环境和 Docker 容器环境。出于安全性和隔离性考虑,推荐使用 Docker 容器。
方案 A:使用 Docker 容器执行
此方案会在后台启动一个临时容器运行代码,避免污染宿主环境。
import os
import autogen
from autogen import AssistantAgent, UserProxyAgent
# 配置 LLM
llm_config = {
"model": "gpt-4-turbo",
"api_key": "YOUR_API_KEY",
"base_url": "https://api.openai.com/v1"
}
# 初始化 Docker 代码执行器
with autogen.coding.DockerCommandLineCodeExecutor(work_dir="coding_docker") as code_executor:
# 创建助手 Agent
assistant = AssistantAgent(
name="assistant",
llm_config=llm_config,
system_message="You are a helpful AI assistant. You can write and execute Python code."
)
# 创建用户代理 Agent,绑定代码执行器
user_proxy = UserProxyAgent(
name="user_proxy",
code_execution_config={"executor": code_executor},
human_input_mode="NEVER"
)
# 发起对话
user_proxy.initiate_chat(
assistant,
message="绘制 NVDA 和 TSLA 股价本年迄今变化图。将绘图保存到名为 plot.png 的文件中。"
)
方案 B:使用本地环境执行
此方案直接在当前 Python 环境中运行代码,适合快速测试,但需注意依赖冲突风险。
import autogen
from autogen import AssistantAgent, UserProxyAgent
llm_config = {
"model": "gpt-4-turbo",
"api_key": "YOUR_API_KEY",
"base_url": "https://api.openai.com/v1"
}
assistant = AssistantAgent("assistant", llm_config=llm_config)
user_proxy = UserProxyAgent(
"user_proxy",
code_execution_config={"executor": autogen.coding.LocalCommandLineCodeExecutor(work_dir="coding_local")}
)
user_proxy.initiate_chat(
assistant,
message="绘制 NVDA 和 TSLA 股价本年迄今变化图。将绘图保存到名为 plot.png 的文件中。"
)
3.4 执行流程分析
当代码开始执行后,Agent 会经历以下典型流程:
- 任务理解:Assistant 解析用户指令,识别需要使用的库(如
yfinance获取数据,matplotlib绘图)。 - 代码生成:Assistant 编写完整的 Python 脚本。
- 代码执行:UserProxy 接收代码并在指定环境中运行。
- 错误反馈:如果执行报错(例如缺少依赖包),Agent 会捕获异常信息。
- 自我修正:Assistant 根据报错信息重新生成代码或添加安装命令(如
pip install yfinance)。 - 迭代优化:重复上述过程直到任务成功完成。
在实际运行中,你可能会遇到类似'缺少依赖'的错误。AutoGen 的设计允许 Agent 自动尝试修复这些问题,体现了其自主解决问题的能力。
4. 高级功能与最佳实践
4.1 多智能体协作
AutoGen 支持多智能体(Multi-Agent)模式。你可以定义多个具有不同角色的 Agent,例如一个负责写代码,一个负责审查代码,另一个负责运行测试。这种协作模式更接近真实的软件开发团队。
# 示例:创建两个不同的 Agent
engineer = AssistantAgent("engineer", llm_config=llm_config)
reviewer = AssistantAgent("reviewer", llm_config=llm_config)
# 设置它们之间的对话逻辑
engineer.register_reply(reviewer, reply_func=...)
4.2 安全性考量
在使用 AutoGen 执行代码时,安全性至关重要。建议始终在沙箱环境(如 Docker 容器)中运行生成的代码,防止恶意代码对宿主机造成损害。同时,限制 Agent 访问敏感网络资源或文件系统。
4.3 自定义工具
除了内置的代码执行能力,你还可以注册自定义工具函数供 Agent 调用。这允许 Agent 访问外部 API、查询数据库或操作特定业务逻辑。
@user_proxy.register_for_execution()
@assistant.register_for_llm(name="get_stock_price", description="Get stock price")
def get_stock_price(symbol: str) -> str:
# 实现获取股价的逻辑
return f"{symbol} current price is $100"
5. 常见问题排查
- 依赖缺失:Agent 可能会忘记安装某些库。确保在
requirements.txt中预置常用库,或让 Agent 自行安装。 - API 限流:频繁调用大模型 API 可能触发限流。建议在代码中添加重试机制或降低并发频率。
- 上下文长度:长对话可能导致 Token 超限。定期总结对话历史或使用更高效的模型。
6. 总结
AutoGen 是一个强大的框架,它简化了 AI Agent 的开发流程,使得开发者能够通过简单的配置让大模型自主完成复杂的编程任务。通过 Docker 隔离、多智能体协作以及自定义工具扩展,AutoGen 能够满足从简单脚本自动化到复杂系统开发的各种需求。随着大模型技术的进步,AI Agent 将在软件工程、数据分析及业务自动化等领域发挥越来越重要的作用。


