autogen_agentchat.base._chat_agent 源代码
from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import Any, AsyncGenerator, Mapping, Sequence
from autogen_core import CancellationToken, ComponentBase
from pydantic import BaseModel
from ..messages import BaseAgentEvent, BaseChatMessage
from ._task import TaskRunner
[文档]
@dataclass(kw_only=True)
class Response:
"""调用 :meth:`ChatAgent.on_messages` 方法返回的响应。"""
chat_message: BaseChatMessage
"""由代理生成的聊天消息作为响应。"""
inner_messages: Sequence[BaseAgentEvent | BaseChatMessage] | None = None
"""代理生成的内部消息,可以是 :class:`BaseAgentEvent`
或 :class:`BaseChatMessage`。"""
[文档]
class ChatAgent(ABC, TaskRunner, ComponentBase[BaseModel]):
"""聊天代理的协议。"""
component_type = "agent"
@property
@abstractmethod
def name(self) -> str:
"""代理的名称。团队使用该名称来唯一标识
代理。在团队内它应该是唯一的。"""
...
@property
@abstractmethod
def description(self) -> str:
"""代理的描述。团队使用该描述来
决定使用哪些代理。该描述应
说明代理的能力以及如何与之交互。"""
...
@property
@abstractmethod
def produced_message_types(self) -> Sequence[type[BaseChatMessage]]:
"""代理在 :attr:`Response.chat_message` 字段中生成的消息类型。它们必须是 :class:`BaseChatMessage` 类型。"""
...
[文档]
@abstractmethod
async def on_messages(self, messages: Sequence[BaseChatMessage], cancellation_token: CancellationToken) -> Response:
"""处理传入消息并返回响应。"""
...
[文档]
@abstractmethod
def on_messages_stream(
self, messages: Sequence[BaseChatMessage], cancellation_token: CancellationToken
) -> AsyncGenerator[BaseAgentEvent | BaseChatMessage | Response, None]:
"""处理传入消息并返回内部消息流,最后一项是响应。"""
...
[文档]
@abstractmethod
async def on_reset(self, cancellation_token: CancellationToken) -> None:
"""将代理重置到初始化状态。"""
...
[文档]
@abstractmethod
async def on_pause(self, cancellation_token: CancellationToken) -> None:
"""当代理暂停时调用。调用此方法时,代理可能正在 :meth:`on_messages` 或
:meth:`on_messages_stream` 中运行。"""
...
[文档]
@abstractmethod
async def on_resume(self, cancellation_token: CancellationToken) -> None:
"""当代理恢复时调用。调用此方法时,代理可能正在 :meth:`on_messages` 或
:meth:`on_messages_stream` 中运行。"""
...
[文档]
@abstractmethod
async def save_state(self) -> Mapping[str, Any]:
"""保存代理状态以便后续恢复"""
...
[文档]
@abstractmethod
async def load_state(self, state: Mapping[str, Any]) -> None:
"""从保存的状态恢复代理"""
...
[文档]
@abstractmethod
async def close(self) -> None:
"""释放代理持有的所有资源"""
...