{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 消息\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在AutoGen AgentChat中,_消息_用于促进与其他智能体、协调器和应用程序之间的通信与信息交换。AgentChat支持多种消息类型,每种类型都有其特定用途。\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 消息类型\n\n从高层次来看,AgentChat中的消息可分为两类:智能体间消息和智能体内部事件与消息。\n\n### 智能体间消息\nAgentChat支持多种用于智能体间通信的消息类型,它们都属于基类{py:class}`~autogen_agentchat.messages.BaseChatMessage`的子类。具体子类涵盖基础文本和多模态通信,例如{py:class}`~autogen_agentchat.messages.TextMessage`和{py:class}`~autogen_agentchat.messages.MultiModalMessage`。\n\n例如,以下代码片段展示了如何创建一个文本消息,它接受字符串内容和字符串来源:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from autogen_agentchat.messages import TextMessage\n",
"\n",
"text_message = TextMessage(content=\"Hello, world!\", source=\"User\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"类似地,以下代码片段展示了如何创建多模态消息,它接受\n字符串列表或{py:class}`~autogen_core.Image`对象:\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
""
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from io import BytesIO\n",
"\n",
"import requests\n",
"from autogen_agentchat.messages import MultiModalMessage\n",
"from autogen_core import Image as AGImage\n",
"from PIL import Image\n",
"\n",
"pil_image = Image.open(BytesIO(requests.get(\"https://picsum.photos/300/200\").content))\n",
"img = AGImage(pil_image)\n",
"multi_modal_message = MultiModalMessage(content=[\"Can you describe the content of this image?\", img], source=\"User\")\n",
"img"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们创建的{py:class}`~autogen_agentchat.messages.TextMessage`和{py:class}`~autogen_agentchat.messages.MultiModalMessage`可以直接通过{py:class}`~autogen_agentchat.base.ChatAgent.on_messages`方法传递给智能体,或作为任务交给团队的{py:meth}`~autogen_agentchat.teams.BaseGroupChat.run`方法。消息也用于智能体的响应中。我们将在[智能体](./agents.ipynb)和[团队](./teams.ipynb)章节中更详细地解释这些内容。\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 内部事件\n\nAgentChat 还支持 `events`(事件)的概念——这些是代理内部的消息。这些消息用于在代理内部传递事件和动作信息,它们属于基类 {py:class}`~autogen_agentchat.messages.BaseAgentEvent` 的子类。\n\n示例包括 {py:class}`~autogen_agentchat.messages.ToolCallRequestEvent`(表示发起了工具调用请求)和 {py:class}`~autogen_agentchat.messages.ToolCallExecutionEvent`(包含工具调用的执行结果)。\n\n通常,事件由代理自身创建,并包含在 {py:class}`~autogen_agentchat.base.ChatAgent.on_messages` 返回的 {py:class}`~autogen_agentchat.base.Response` 的 {py:attr}`~autogen_agentchat.base.Response.inner_messages` 字段中。如果您正在构建自定义代理,并需要向其他实体(例如用户界面)传递事件,可以将这些事件包含在 {py:class}`~autogen_agentchat.base.Response` 的 {py:attr}`~autogen_agentchat.base.Response.inner_messages` 字段中。我们将在[自定义代理](../custom-agents.ipynb)中展示相关示例。\n\n\n您可以在 {py:mod}`~autogen_agentchat.messages` 模块中查阅 AgentChat 支持的全部消息类型。\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 自定义消息类型\n\n您可以通过继承基类 {py:class}`~autogen_agentchat.messages.BaseChatMessage` 或 {py:class}`~autogen_agentchat.messages.BaseAgentEvent` 来创建自定义消息类型。这允许您根据应用程序需求定义自己的消息格式和行为。在编写自定义代理时,自定义消息类型非常有用。\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "agnext",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.9"
}
},
"nbformat": 4,
"nbformat_minor": 2
}