AutoGen允许创建多个AI代理(Agent),每个代理有自己的角色和能力。 代理之间可以相互对话、协作完成任务,就像一个虚拟团队。
代表人类用户,可执行代码和工具
AI助手,负责生成代码和方案
多个Agent的群聊协作
Agent之间自然对话,分工合作完成任务。
安全执行Python代码,自动调试和修正错误。
人类可随时介入,给出反馈和指导。
# 基础安装 pip install pyautogen # 或安装完整版(包含所有可选依赖) pip install "pyautogen[teachable,lmm,graph,websurfer]"
import autogen
# 配置LLM
config_list = [
{
"model": "gpt-4",
"api_key": "your-openai-key"
}
]
llm_config = {
"config_list": config_list,
"temperature": 0
}
# 创建助手Agent
assistant = autogen.AssistantAgent(
name="助手",
llm_config=llm_config,
system_message="你是一个有帮助的AI助手"
)
# 创建用户代理Agent(可执行代码)
user_proxy = autogen.UserProxyAgent(
name="用户",
human_input_mode="NEVER", # 完全自动
max_consecutive_auto_reply=10,
code_execution_config={
"work_dir": "coding",
"use_docker": False
}
)
# 开始对话
user_proxy.initiate_chat(
assistant,
message="计算斐波那契数列的第10项,并用Python实现"
)
多个专家Agent协作解决复杂问题
import autogen
# 创建多个专家Agent
researcher = autogen.AssistantAgent(
name="研究员",
system_message="你是一个研究专家,负责收集和分析信息",
llm_config=llm_config
)
coder = autogen.AssistantAgent(
name="程序员",
system_message="你是一个Python专家,负责编写代码",
llm_config=llm_config
)
reviewer = autogen.AssistantAgent(
name="审查员",
system_message="你负责审查代码质量和测试",
llm_config=llm_config
)
user_proxy = autogen.UserProxyAgent(
name="用户",
human_input_mode="TERMINATE",
code_execution_config={"work_dir": "coding"}
)
# 创建群聊
groupchat = autogen.GroupChat(
agents=[user_proxy, researcher, coder, reviewer],
messages=[],
max_round=12
)
# 群聊管理器
manager = autogen.GroupChatManager(
groupchat=groupchat,
llm_config=llm_config
)
# 发起任务
user_proxy.initiate_chat(
manager,
message="""开发一个数据分析工具:
1. 研究员:调研数据分析的最佳实践
2. 程序员:编写代码实现
3. 审查员:测试代码并提出改进建议"""
)
👤 用户:发起任务
🔍 研究员:分析需求,提供方案
💻 程序员:根据方案编写代码
✅ 审查员:审查代码,提出改进
🔄 程序员:根据反馈修改
👤 用户代理:执行最终代码
最简单的协作模式,一个提问一个回答
# 教师Agent
teacher = autogen.AssistantAgent(
name="老师",
system_message="你是一位耐心的编程老师,用简单的语言解释概念",
llm_config=llm_config
)
# 学生Agent
student = autogen.AssistantAgent(
name="学生",
system_message="你是一个好学的学生,主动提问并总结学到的知识",
llm_config=llm_config
)
# 开始对话(学生提问)
student.initiate_chat(
teacher,
message="请教我什么是递归,并举个例子",
max_turns=5
)
开发者提交代码,AI团队自动审查、测试、优化
import autogen
# 开发者Agent
developer = autogen.AssistantAgent(
name="开发者",
system_message="你负责编写代码解决问题",
llm_config=llm_config
)
# 代码审查Agent
reviewer = autogen.AssistantAgent(
name="审查员",
system_message="""你是资深代码审查专家,检查:
1. 代码质量和规范
2. 潜在bug和边界情况
3. 性能优化建议
4. 安全问题""",
llm_config=llm_config
)
# 测试Agent
tester = autogen.AssistantAgent(
name="测试员",
system_message="你负责编写测试用例,确保代码正确性",
llm_config=llm_config
)
# 执行Agent
executor = autogen.UserProxyAgent(
name="执行器",
human_input_mode="NEVER",
code_execution_config={"work_dir": "review"}
)
# 创建群聊
groupchat = autogen.GroupChat(
agents=[executor, developer, reviewer, tester],
messages=[],
max_round=20,
speaker_selection_method="round_robin" # 轮流发言
)
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)
# 发起代码审查
executor.initiate_chat(
manager,
message="请实现一个二分查找算法,要求完整的代码和测试"
)
✅ 实现效果:
多个专家Agent协作完成研究报告
# 搜索专家
searcher = autogen.AssistantAgent(
name="搜索专家",
system_message="你负责在网上搜索信息,提供可靠来源",
llm_config=llm_config
)
# 分析师
analyst = autogen.AssistantAgent(
name="分析师",
system_message="你负责分析数据,提取关键洞察",
llm_config=llm_config
)
# 撰写者
writer = autogen.AssistantAgent(
name="撰写者",
system_message="你负责将研究结果撰写成专业报告",
llm_config=llm_config
)
# 编辑
editor = autogen.AssistantAgent(
name="编辑",
system_message="你负责审核报告,确保逻辑清晰、语言流畅",
llm_config=llm_config
)
user_proxy = autogen.UserProxyAgent(
name="研究主管",
human_input_mode="TERMINATE"
)
# 群聊
groupchat = autogen.GroupChat(
agents=[user_proxy, searcher, analyst, writer, editor],
messages=[],
max_round=25
)
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)
# 研究任务
user_proxy.initiate_chat(
manager,
message="写一份关于'2024年AI发展趋势'的研究报告"
)
# 定义工具函数
def get_weather(city: str) -> str:
"""获取城市天气"""
return f"{city}今天晴天,25度"
def search_web(query: str) -> str:
"""搜索网络"""
return f"搜索结果:{query}"
# 注册函数到Agent
assistant = autogen.AssistantAgent(
name="助手",
llm_config={
**llm_config,
"functions": [
{
"name": "get_weather",
"description": "获取城市天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"}
}
}
}
]
}
)
user_proxy.register_function(
function_map={
"get_weather": get_weather,
"search_web": search_web
}
)
# 三种人类介入模式
user_proxy = autogen.UserProxyAgent(
name="用户",
# 模式1:从不介入(全自动)
human_input_mode="NEVER",
# 模式2:总是需要人类确认
# human_input_mode="ALWAYS",
# 模式3:遇到TERMINATE才询问(推荐)
# human_input_mode="TERMINATE",
max_consecutive_auto_reply=10
)
# 自定义终止条件
def is_termination_msg(msg):
return "TERMINATE" in msg.get("content", "")
user_proxy = autogen.UserProxyAgent(
name="用户",
is_termination_msg=is_termination_msg
)
Agent可以从对话中学习,记住用户偏好
from autogen.agentchat.contrib.teachable_agent import TeachableAgent
# 创建可学习的Agent
teachable_agent = TeachableAgent(
name="学习助手",
llm_config=llm_config,
teach_config={
"verbosity": 0,
"reset_db": False, # 保留学习的知识
"path_to_db_dir": "./teachable_db"
}
)
# Agent会记住这些信息
user_proxy.initiate_chat(
teachable_agent,
message="我喜欢用Python编程,记住这一点"
)
# 下次对话会用上之前学到的知识
user_proxy.initiate_chat(
teachable_agent,
message="帮我写个脚本" # 自动用Python
)
Agent可以发起子任务,委托给其他Agent
# 主管Agent可以调用专家Team
manager_agent.initiate_chat(
expert_team,
message="请数据团队分析这个数据集"
)
# 数据团队内部协作完成后返回结果给主管
自动编写、测试、调试代码,无需人工干预
从数据探索到可视化,全流程自动化
文献搜索、数据分析、报告撰写
AI教师和学生互动,个性化学习
多角度分析,集体决策
研究、撰写、编辑协作
安全措施:
AutoGen可以与主流工具结合: