快速入门#

备注

安装说明请参见此处

在深入核心API之前,我们先从一个简单的示例开始:两个从10倒数到1的智能体。

我们首先定义智能体类及其各自处理消息的流程。 创建两个智能体类:ModifierCheckerModifier智能体修改给定的数字,Check智能体根据条件检查该值。 我们还创建了一个Message数据类,用于定义智能体之间传递的消息。

from dataclasses import dataclass
from typing import Callable

from autogen_core import DefaultTopicId, MessageContext, RoutedAgent, default_subscription, message_handler


@dataclass
class Message:
    content: int


@default_subscription
class Modifier(RoutedAgent):
    def __init__(self, modify_val: Callable[[int], int]) -> None:
        super().__init__("A modifier agent.")
        self._modify_val = modify_val

    @message_handler
    async def handle_message(self, message: Message, ctx: MessageContext) -> None:
        val = self._modify_val(message.content)
        print(f"{'-'*80}\nModifier:\nModified {message.content} to {val}")
        await self.publish_message(Message(content=val), DefaultTopicId())  # type: ignore


@default_subscription
class Checker(RoutedAgent):
    def __init__(self, run_until: Callable[[int], bool]) -> None:
        super().__init__("A checker agent.")
        self._run_until = run_until

    @message_handler
    async def handle_message(self, message: Message, ctx: MessageContext) -> None:
        if not self._run_until(message.content):
            print(f"{'-'*80}\nChecker:\n{message.content} passed the check, continue.")
            await self.publish_message(Message(content=message.content), DefaultTopicId())
        else:
            print(f"{'-'*80}\nChecker:\n{message.content} failed the check, stopping.")

你可能已经注意到,无论智能体逻辑是使用模型还是代码执行器, 都与消息传递方式完全解耦。这是核心思想:框架提供 通信基础设施,而智能体负责自己的逻辑。我们将这种通信基础设施称为智能体运行时

智能体运行时是本框架的核心概念。除了传递消息外, 它还管理智能体的生命周期。 因此智能体的创建由运行时处理。

以下代码展示如何使用 SingleThreadedAgentRuntime (一个本地嵌入式智能体运行时实现)来注册和运行智能体。

备注

如果使用VSCode或其他编辑器,请记得导入asyncio并用async def main() -> None:包裹代码,然后使用asyncio.run(main())函数运行代码。

from autogen_core import AgentId, SingleThreadedAgentRuntime

# 创建一个本地嵌入式运行时。
runtime = SingleThreadedAgentRuntime()

# 通过提供智能体类型、创建实例的工厂函数和订阅关系,
# 来注册modifier和checker智能体。
await Modifier.register(
    runtime,
    "modifier",
    # 将值减1
    lambda: Modifier(modify_val=lambda x: x - 1),
)

await Checker.register(
    runtime,
    "checker",
    # 运行直到值小于或等于1
    lambda: Checker(run_until=lambda x: x <= 1),
)

# 启动运行时并向检查器发送直接消息
runtime.start()
await runtime.send_message(Message(10), AgentId("checker", "default"))
await runtime.stop_when_idle()
--------------------------------------------------------------------------------
Checker:
10 passed the check, continue.
--------------------------------------------------------------------------------
Modifier:
Modified 10 to 9
--------------------------------------------------------------------------------
Checker:
9 passed the check, continue.
--------------------------------------------------------------------------------
Modifier:
Modified 9 to 8
--------------------------------------------------------------------------------
Checker:
8 passed the check, continue.
--------------------------------------------------------------------------------
Modifier:
Modified 8 to 7
--------------------------------------------------------------------------------
Checker:
7 passed the check, continue.
--------------------------------------------------------------------------------
Modifier:
Modified 7 to 6
--------------------------------------------------------------------------------
Checker:
6 passed the check, continue.
--------------------------------------------------------------------------------
Modifier:
Modified 6 to 5
--------------------------------------------------------------------------------
Checker:
5 passed the check, continue.
--------------------------------------------------------------------------------
Modifier:
Modified 5 to 4
--------------------------------------------------------------------------------
Checker:
4 passed the check, continue.
--------------------------------------------------------------------------------
Modifier:
Modified 4 to 3
--------------------------------------------------------------------------------
Checker:
3 passed the check, continue.
--------------------------------------------------------------------------------
Modifier:
Modified 3 to 2
--------------------------------------------------------------------------------
Checker:
2 passed the check, continue.
--------------------------------------------------------------------------------
Modifier:
Modified 2 to 1
--------------------------------------------------------------------------------
Checker:
1 failed the check, stopping.

从代理输出中可以看到,根据修改器和检查器条件的要求,值已成功从10递减到1

AutoGen还支持分布式代理运行时,可以托管运行在不同进程或机器上的代理,这些代理可以具有不同的身份、语言和依赖项。

要了解如何使用代理运行时、通信、消息处理和订阅功能,请继续阅读本快速入门之后的章节。