AutoGen 메시지
AutoGen 메시지 (Messages)
여러 에이전트가 오가며 대화를 주고받는 것을 상상해 보세요. 에이전트끼리, 그리고 오케스트레이터나 애플리케이션이 주고받는 그 정보 교환 자체가 바로 AutoGen AgentChat의 메시지(messages)예요. AgentChat은 목적별로 설계된 다양한 메시지 타입을 지원합니다.
Types of Messages
크게 보면 AgentChat의 메시지는 두 종류로 나눌 수 있어요: 에이전트-에이전트 메시지, 그리고 에이전트 내부의 이벤트와 메시지입니다.
Agent-Agent Messages
AgentChat은 에이전트 간 통신을 위한 많은 메시지 타입을 지원해요. 이들은 모두 기본 클래스 BaseChatMessage의 하위 클래스에 속합니다. 구체적인 하위 클래스는 TextMessage와 MultiModalMessage처럼 기본 텍스트와 멀티모달 통신을 다뤄요.
예를 들어 아래 코드는 문자열 콘텐츠와 문자열 source를 받는 텍스트 메시지를 만드는 방법이에요:
from autogen_agentchat.messages import TextMessage
text_message = TextMessage(content="Hello, world!", source="User")
비슷하게, 문자열 리스트나 Image 객체를 받는 멀티모달 메시지는 이렇게 만듭니다:
from io import BytesIO
import requests
from autogen_agentchat.messages import MultiModalMessage
from autogen_core import Image as AGImage
from PIL import Image
pil_image = Image.open(BytesIO(requests.get("https://picsum.photos/300/200").content))
img = AGImage(pil_image)
multi_modal_message = MultiModalMessage(
content=["Can you describe the content of this image?", img],
source="User",
)
우리가 만든 TextMessage와 MultiModalMessage는 에이전트의 on_messages 메서드로 에이전트에 직접 전달하거나, 팀의 run 메서드에 태스크로 줄 수 있어요. 메시지는 에이전트의 응답에도 사용됩니다. 이 내용은 Agents와 Teams에서 더 자세히 다뤄요.
Internal Events
AgentChat은 events라는 개념도 지원해요 — 에이전트 내부의 메시지입니다. 이 메시지들은 에이전트 자신의 내부에서 일어나는 동작에 대한 이벤트와 정보를 전달하는 데 쓰이고, 기본 클래스 BaseAgentEvent의 하위 클래스에 속합니다.
예를 들면 도구를 호출하라는 요청이 있었음을 나타내는 ToolCallRequestEvent, 그리고 도구 호출 결과를 담고 있는 ToolCallExecutionEvent가 있어요.
보통 이벤트는 에이전트 자신이 만들고, on_messages에서 반환된 Response의 inner_messages 필드에 담깁니다. 커스텀 에이전트를 만들면서 다른 엔티티(예: UI)에 전달하고 싶은 이벤트가 있다면, 이를 Response의 inner_messages 필드에 넣을 수 있어요. 예제는 Custom Agents에서 볼 수 있습니다.
AgentChat에서 지원하는 전체 메시지 세트는 autogen_agentchat.messages 모듈에서 확인할 수 있어요.
Custom Message Types
BaseChatMessage나 BaseAgentEvent를 상속해서 커스텀 메시지 타입을 만들 수 있어요. 이렇게 하면 애플리케이션에 맞는 자신만의 메시지 형식과 동작을 정의할 수 있습니다. 커스텀 에이전트를 쓸 때 커스텀 메시지 타입이 특히 유용해요.