AutoGen是什么?
AutoGen是一个用于构建AI智能体和应用程序的框架。
AutoGen框架由以下几个部分组成:
基于AutoGen 0.4.x版本
- Core
- AgentChat
- Extensions
- Studio
- Magentic-One CLI
Core
AutoGen Core 是一个用于构建可扩展的多智能体AI系统的事件驱动编程框架。示例场景:
- 用于业务流程的确定性和动态的智能体工作流程。
- 多智能体协作研究。
- 用于多语言应用程序的分布式智能体。
如果你正在构建工作流程或分布式智能体系统,请从这里开始。
AgentChat
一个用于构建对话式单智能体和多智能体应用程序的编程框架。基于Core构建,需要Python 3.10或更高版本。
# pip install -U "autogen-agentchat" "autogen-ext[openai]"
import asyncio
from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient
async def main() -> None:
agent = AssistantAgent("assistant", OpenAIChatCompletionClient(model="gpt-4o"))
print(await agent.run(task="Say 'Hello World!'"))
asyncio.run(main())Extensions
实现了Core和AgentChat组件的接口,这些接口与外部服务或其他库连接。可以找到并使用社区扩展,也可以创建自己的扩展。内置扩展的示例:
LangChainToolAdapter:用于使用 LangChain 工具。OpenAIAssistantAgent:用于使用 Assistant API。DockerCommandLineCodeExecutor:用于在Docker容器中运行模型生成的代码。GrpcWorkerAgentRuntime:用于分布式智能体。
Studio
AutoGen Studio是一个无需编写代码即可原型设计和管理智能体的应用程序。基于AgentChat构建。
pip install -U autogenstudio
autogenstudio ui --port 8080 --appdir ./myappMagentic-One CLI
一个基于控制台的多智能体助手,用于处理基于网络和文件的任务。基于AgentChat构建。
pip install -U magentic-one-cli
m1 "Find flights from Seattle to Paris and format the result in a table"使用AgentChat构建第一个AI智能体
在这个例子中,将使用AutoGen框架来创建一个基本的智能体。
安装依赖
poetry add python-dotenv
poetry add autogen-agentchat
poetry add "autogen-ext[openai]"pyproject.toml:
...
[tool.poetry.dependencies]
python-dotenv = "^1.0.1"
autogen-agentchat = "^0.4.1"
autogen-ext[openai] = "^0.4.1"
...环境变量设置
将使用GitHub Models来访问LLM。
将使用的模型时gpt-4o-mini。也可以尝试将模型更改为GitHub模型市场上提供的其他模型,以查看不同的结果。
LLM API的地址和Token将以环境变量的形式被存储在.env文件中,并使用python-dotenv库来加载它们。
.env文件内容如下:
OPENAI_API_KEY=sk-proj-...
OPENAI_BASE_URL=https://api.openai.com/v1加载环境变量的代码如下:
from dotenv import load_dotenv
load_dotenv()创建模型客户端Client
import asyncio
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_core.models import UserMessage
client = OpenAIChatCompletionClient(model="gpt-4o-mini")
async def main():
result = await client.create([UserMessage(content="你是谁?", source="user")])
print(result)
asyncio.run(main())运行结果:
finish_reason='stop' content='我是一个由人工智能驱动的聊天助手,旨在回答你的问题并提供帮助。你有什么想了解的吗?' usage=RequestUsage(prompt_tokens=11, completion_tokens=26) cached=False logprobs=None thought=None创建Agent
我们已经创建了client,并确认它可以工作正常。
现在让我们创建一个AssistantAgent。
每个智能体都可以被设置以下内容:
- name(名称)- 一个简短的名称,在多智能体流程中引用它时很有用。
- model_client(模型客户端)- 在前面步骤中创建的客户端client。
- tools(工具)- 智能体可以用来完成任务的可用工具。
- system_message(系统消息)- 用于指导智能体行为的初始消息。明确智能体的角色,设定智能体的目标,定义智能体的行为准则,提供背景信息。
import asyncio
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_core.models import UserMessage
from autogen_agentchat.agents import AssistantAgent
client = OpenAIChatCompletionClient(model="gpt-4o-mini")
agent = AssistantAgent(
name="assistant",
model_client=client,
tools=[],
system_message="你是一个搞怪的故事大王,负责给孩子们讲睡前故事。你的目标是让孩子们在美好的故事中入睡,拥有一个甜美的梦。",
)运行Agent
下面将运行智能体。我们使用on_message方法来更新智能体的状态,使其包含新消息。
在本例中,我们使用来自用户的新消息“开始哄睡吧!”来更新状态。
可以更改消息内容,以查看大型语言模型如何做出不同的响应。
完整代码如下:
from dotenv import load_dotenv
load_dotenv()
import asyncio
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.messages import TextMessage
from autogen_core import CancellationToken
client = OpenAIChatCompletionClient(model="gpt-4o-mini")
agent = AssistantAgent(
name="assistant",
model_client=client,
tools=[],
system_message="你是一个搞怪的故事大王,负责给孩子们讲睡前故事。你的目标是让在美好的故事中入睡,拥有一个甜美的梦。",
)
async def main():
response = await agent.on_messages(
[TextMessage(content="开始哄睡吧!", source="user")],
cancellation_token=CancellationToken(),
)
print(response.inner_messages)
print(response.chat_message)
asyncio.run(main())执行结果:
[]
source='assistant' models_usage=RequestUsage(prompt_tokens=56, completion_tokens=503) content='好的,小朋友,现在请你闭上眼睛,跟我一起进入一个神奇的梦境世界。\n\n从前有一个色彩斑斓的小镇,叫做梦幻镇。这个小镇的每个晚上,都会发生一件奇妙的事情——所有的玩具都会聚在一起举办派对!\n\n这天夜里,镇上的小熊泰迪已经迫不及待地准备好了一场大派对。他穿上了他的红色蝴蝶结,还给自己涂上了闪闪的星星图案。所有的玩具朋友们都来到了小熊泰迪的家,准备享受这个快乐的夜晚。\n\n小兔子莉莉带来了美味的胡萝卜蛋糕,小猴子皮皮则给大家表演了精彩的杂技,甚至还有小鸟贝贝在空中飞舞,唱着动听的歌曲。午夜钟声敲响时,泰迪提议玩一个有趣的游戏——“找丢失的彩虹”。\n\n“找丢失的彩虹”游戏的规则是,大家要在镇上的每个角落寻找隐藏的彩虹織物,找到最多的小玩具就能获得梦幻奖杯!于是,小朋友们跃跃欲试,开始了他们的寻找之旅。\n\n在寻找的过程中,小熊泰迪和他的朋友们遇到了许多有趣的事情。小狼鲁比找到了一个闪闪发光的蓝色石头,结果发现它是从星星掉下来的星星糖;而小猪桃桃则在草丛里发现了一只会说话的小青蛙,青蛙告诉他们:“彩虹就在你们的心里,只要你们快乐,就能看到彩虹!”\n\n最后,大家不仅找到了彩虹,收获了欢声笑语,还懂得了分享快乐的真谛。夜空中,闪烁着五光十色的星星,仿佛在为他们的勇气和友情喝彩。\n\n小朋友们,现在就是你们做美梦的时候了。希望你们的梦里也有小熊泰迪和他的玩具朋友们,记得要和他们一起找到你们心中的彩虹哦!晚安,做个好梦!✨🌈💤' type='TextMessage'CancellationToken用来作为异步编程发送取消信号,取消挂起的异步调用,这里并没有使用。如果使用应该可以通过某种方式(例如用户手动点击取消按钮)调用cancellation_token.cancel()。