AutoGen笔记:01.从零开始构建第一个AI智能体

AutoGen笔记:01.从零开始构建第一个AI智能体

📅 2025-02-18 | 🖱️
🔖 agent, 🔖 aigc

AutoGen是什么? #

AutoGen是一个用于构建AI智能体和应用程序的框架。

AutoGen框架由以下几个部分组成:

基于AutoGen 0.4.x版本

  • Core
  • AgentChat
  • Extensions
  • Studio
  • Magentic-One CLI

Core #

AutoGen Core 是一个用于构建可扩展的多智能体AI系统的事件驱动编程框架。示例场景:

  • 用于业务流程的确定性和动态的智能体工作流程。
  • 多智能体协作研究。
  • 用于多语言应用程序的分布式智能体。

如果你正在构建工作流程或分布式智能体系统,请从这里开始。

AgentChat #

一个用于构建对话式单智能体和多智能体应用程序的编程框架。基于Core构建,需要Python 3.10或更高版本。

 1# pip install -U "autogen-agentchat" "autogen-ext[openai]"
 2import asyncio
 3from autogen_agentchat.agents import AssistantAgent
 4from autogen_ext.models.openai import OpenAIChatCompletionClient
 5
 6async def main() -> None:
 7    agent = AssistantAgent("assistant", OpenAIChatCompletionClient(model="gpt-4o"))
 8    print(await agent.run(task="Say 'Hello World!'"))
 9
10asyncio.run(main())

Extensions #

实现了Core和AgentChat组件的接口,这些接口与外部服务或其他库连接。可以找到并使用社区扩展,也可以创建自己的扩展。内置扩展的示例:

  • LangChainToolAdapter:用于使用 LangChain 工具。
  • OpenAIAssistantAgent:用于使用 Assistant API。
  • DockerCommandLineCodeExecutor:用于在Docker容器中运行模型生成的代码。
  • GrpcWorkerAgentRuntime:用于分布式智能体。

Studio #

AutoGen Studio是一个无需编写代码即可原型设计和管理智能体的应用程序。基于AgentChat构建。

1pip install -U autogenstudio
2autogenstudio ui --port 8080 --appdir ./myapp

Magentic-One CLI #

一个基于控制台的多智能体助手,用于处理基于网络和文件的任务。基于AgentChat构建。

1pip install -U magentic-one-cli
2m1 "Find flights from Seattle to Paris and format the result in a table"

使用AgentChat构建第一个AI智能体 #

在这个例子中,将使用AutoGen框架来创建一个基本的智能体。

安装依赖 #

1poetry add python-dotenv
2poetry add autogen-agentchat  
3poetry add "autogen-ext[openai]"

pyproject.toml

1...
2[tool.poetry.dependencies]
3python-dotenv = "^1.0.1"
4autogen-agentchat = "^0.4.1"
5autogen-ext[openai] = "^0.4.1"
6...

环境变量设置 #

将使用GitHub Models来访问LLM。

将使用的模型时gpt-4o-mini。也可以尝试将模型更改为GitHub模型市场上提供的其他模型,以查看不同的结果。

LLM API的地址和Token将以环境变量的形式被存储在.env文件中,并使用python-dotenv库来加载它们。

.env文件内容如下:

1OPENAI_API_KEY=sk-proj-...
2OPENAI_BASE_URL=https://api.openai.com/v1

加载环境变量的代码如下:

1from dotenv import load_dotenv
2
3load_dotenv()

创建模型客户端Client #

 1import asyncio
 2from autogen_ext.models.openai import OpenAIChatCompletionClient
 3from autogen_core.models import UserMessage
 4
 5client = OpenAIChatCompletionClient(model="gpt-4o-mini")
 6
 7
 8async def main():
 9    result = await client.create([UserMessage(content="你是谁?", source="user")])
10    print(result)
11
12
13asyncio.run(main())

运行结果:

1finish_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(系统消息)- 用于指导智能体行为的初始消息。明确智能体的角色,设定智能体的目标,定义智能体的行为准则,提供背景信息。
 1import asyncio
 2from autogen_ext.models.openai import OpenAIChatCompletionClient
 3from autogen_core.models import UserMessage
 4from autogen_agentchat.agents import AssistantAgent
 5
 6client = OpenAIChatCompletionClient(model="gpt-4o-mini")
 7
 8agent = AssistantAgent(
 9    name="assistant",
10    model_client=client,
11    tools=[],
12    system_message="你是一个搞怪的故事大王,负责给孩子们讲睡前故事。你的目标是让孩子们在美好的故事中入睡,拥有一个甜美的梦。",
13)

运行Agent #

下面将运行智能体。我们使用on_message方法来更新智能体的状态,使其包含新消息。

在本例中,我们使用来自用户的新消息“开始哄睡吧!”来更新状态。

可以更改消息内容,以查看大型语言模型如何做出不同的响应。

完整代码如下:

 1from dotenv import load_dotenv
 2load_dotenv()
 3
 4
 5import asyncio
 6from autogen_ext.models.openai import OpenAIChatCompletionClient
 7from autogen_agentchat.agents import AssistantAgent
 8from autogen_agentchat.messages import TextMessage
 9from autogen_core import CancellationToken
10
11client = OpenAIChatCompletionClient(model="gpt-4o-mini")
12
13agent = AssistantAgent(
14    name="assistant",
15    model_client=client,
16    tools=[],
17    system_message="你是一个搞怪的故事大王,负责给孩子们讲睡前故事。你的目标是让在美好的故事中入睡,拥有一个甜美的梦。",
18)
19
20
21async def main():
22    response = await agent.on_messages(
23        [TextMessage(content="开始哄睡吧!", source="user")],
24        cancellation_token=CancellationToken(),
25    )
26    print(response.inner_messages)
27    print(response.chat_message)
28
29
30asyncio.run(main())

执行结果:

1[]
2source='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()

参考 #

© 2025 青蛙小白 | 总访问量 | 总访客数