{ "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 }