- 👉👉👉本人承接各类AI相关应用开发项目(包括但不限于大模型微调、RAG、AI智能体、NLP、机器学习算法、运筹优化算法、数据分析EDA等) !!!
- 👉👉👉 有意愿请私信!!!
AutoGen 的 AgentChat 模块为我们提供了内置预设的智能体,它们在不同场景下能展现出各种能力。 但是,在现实应用中,我们经常需要更具个性化和定制化的智能体行为。 幸运的是 AutoGen 允许我们创建自定义智能体,以满足特定的需求。
本文将带你深入了解如何打造专属的自定义智能体,并通过示例代码,让你能够充分利用AutoGen的灵活性和可扩展性。
核心要点:继承 BaseChatAgent
在 AutoGen 中,所有智能体都继承自 BaseChatAgent 类。 因此,要创建一个自定义智能体,你需要继承这个基类并实现以下抽象方法和属性:
-
on_messages(): 这是定义智能体如何响应消息的核心方法。 你需要在此方法中编写智能体的核心逻辑,包括接收消息、处理信息、调用工具、生成回复等。它需要返回一个Response对象。
-
on_reset(): 此方法用于重置智能体的内部状态。 在对话开始或需要清除历史信息时,可以调用此方法。
-
produced_message_types: 这是一个属性,用于声明智能体可以生成的消息类型。 你需要在此指定你的智能体可能产生的 ChatMessage 类型。
除了上述必需的成员,你还可以选择性地实现 on_messages_stream() 方法来实现流式响应,如果未实现此方法,智能体将使用调用on_messages_stream() 该on_messages()方法的默认实现,并在响应中生成所有消息,从而提供更流畅的用户体验。
示例一:CountDownAgent (倒计时智能体)
首先,让我们创建一个简单的智能体,它可以从指定的数字倒数到零。
python">from typing import AsyncGenerator, List, Sequence
from autogen_agentchat.agents import BaseChatAgent
from autogen_agentchat.base import Response
from autogen_agentchat.messages import AgentEvent, ChatMessage, TextMessage
from autogen_core import CancellationTokenclass CountDownAgent(BaseChatAgent):def __init__(self, name: str, count: int = 3):super().__init__(name, "A simple agent that counts down.")self._count = count@propertydef produced_message_types(self) -> Sequence[type[ChatMessage]]:return (TextMessage,)async def on_messages(self, messages: Sequence[ChatMessage], cancellation_token: CancellationToken) -> Response:# 调用 on_messages_stream。response: Response | None = Noneasync for message in self.on_messages_stream(messages, cancellation_token):if isinstance(message, Response):response = messageassert response is not Nonereturn responseasync def on_messages_stream(self, messages: Sequence[ChatMessage], cancellation_token: CancellationToken) -> AsyncGenerator[Agen