趋近智
代理之间的高效通信,特别是那些由大型语言模型驱动的代理,不仅依赖于所选择的传输协议,更主要取决于所交换信息的内容和结构。LLM可能擅长理解自然语言,但在多代理系统中,通信中的模糊性可能导致连锁错误、处理效率低下以及目标无法达成。设计消息结构能够增强LLM代理理解的清晰度、效率和可靠性,相关方法将被阐述。
当代理通信时,特别是当LLM参与解释或生成消息时,有几项原则指导其信息设计:
清晰性和明确性:每条消息必须有一个清晰、单一的解读。对于LLM代理,这意味着构建消息时,意图和数据易于分辨。避免口语化表达或可能被误解的语言,除非系统专门设计用于处理此类带有语境的交互。推荐使用明确的命令和定义良好的数据字段。
简洁性:LLM具有输入令牌限制,处理大量文本会增加延迟和成本。消息应在传递所有必要信息的同时尽可能简洁。这通常涉及使用代码、标识符或结构化数据,而不是冗长的自然语言来表达每一条信息。
完整性:尽管简洁性很重要,但消息必须包含接收代理执行任务或做出决策所需的所有信息。数据缺失可能导致后续请求,增加通信开销或产生错误操作。在简洁性和完整性之间找到恰当的平衡是消息设计的一个重要方面。
上下文 (context)完整性:代理,尤其是LLM,通常在一个更大的对话或任务语境中运作。消息应携带标识符(例如,session_id、task_id、thread_id),以便接收者将当前消息置于正在进行的交互中。这有助于LLM保持连贯性并访问相关记忆或历史数据。
可操作性:消息应清晰地指示对接收者的期望。是信息请求、执行操作的指令、通知,还是对先前查询的回复?明确定义消息意图有助于接收代理将消息路由到正确的内部逻辑或LLM提示。
虽然可以使用纯文本,但由于其易于解析且具有模式强制能力,结构化数据格式通常更受青睐用于代理间通信。
**JSON(JavaScript对象表示法)**是一个普遍的选择,因为它易于人类阅读、机器解析和在各种编程语言中的广泛支持。它特别适合基于LLM的系统,因为可以有效提示LLM生成和解释JSON结构化文本。
请看这个用于向LLM代理分配任务的JSON消息示例:
{
"message_id": "msg_f4a12c",
"timestamp": "2024-08-15T14:22:05Z",
"sender_agent_id": "orchestrator_main",
"recipient_agent_id": "data_analysis_agent_03",
"conversation_id": "conv_77b_alpha",
"task_id": "task_901_beta",
"intent": "PERFORM_DATA_ANALYSIS",
"payload": {
"data_source_uri": "s3://company-data-lake/raw_sales/2024_q2.csv",
"analysis_type": "trend_identification",
"parameters": {
"time_period": "quarterly",
"comparison_metric": "YoY_growth"
},
"output_requirements": "Generate a concise summary (max 200 words) and a list of important percentage changes. Return as JSON.",
"priority": 1
},
"metadata": {
"reply_to_topic": "results_data_analysis_agent_03"
}
}
在此结构中:
message_id、timestamp、sender_agent_id、recipient_agent_id):提供必要的路由和追踪信息。conversation_id、task_id):将消息与更广范围的工作流程关联。PERFORM_DATA_ANALYSIS):清晰地阐明消息的目的。这可以是一个预定义意图集中的字符串。output_requirements 如何向LLM代理提供具体指令。结构化的 parameters 使代理易于提取所需内容。reply_to_topic、priority):可以指导响应的路由或任务执行顺序。其他格式:
下表展示了一个良好结构的代理间消息中常见的组成部分。
| 组成部分组 | 典型要素与目的 |
|---|---|
| 信封/头部 | 消息ID、发送者ID、接收者ID、时间戳。 确保路由、唯一性和可审计性。 |
| 意图说明 | 一个清晰的动词或标准化代码,定义消息的目的。(例如,查询数据库、执行功能、通知事件) 指导代理的内部处理。 |
| 上下文标识符 | 任务ID、会话ID、对话ID、线程ID。 将消息与正在进行的处理或历史关联起来。 |
| 负载/主体 | 主要数据或指令。通常是结构化的(例如,JSON对象)。 可能包含用于操作的具体参数 (parameter)或用于LLM处理的自然语言。 提供代理的“内容”和“方式”。 |
| 响应/错误处理 | 状态码、错误消息、回复的关联ID。 促进双向通信。 |
良好结构的代理间消息的组成部分。这些方面的清晰性对于LLM代理的有效协作非常重要。
无论选择何种格式,为消息定义模式都是一项强烈推荐的做法。模式正式描述了消息的结构:预期包含哪些字段、它们的数据类型以及它们是强制性还是可选的。
使用模式的益处:
当LLM代理是接收方时,负载设计需要特别注意:
"instruction": "为非技术受众总结以下文本。""requested_output_format": "json_array_of_strings"。除了语法结构之外,语义一致性对于可靠的多代理系统很重要。这意味着代理应该对消息中使用的术语和构想有共同的理解。例如,如果一个代理发送一条带有 status: "completed" 的消息,所有其他代理都应该以相同的方式理解“已完成”。
在复杂系统中,这可能涉及:
通过精心构建代理之间交换的信息,您可以奠定坚实的基础,进行更复杂的交互,如共享认知、协商和协作解决问题,这些将在后续章节中审视。清晰、明确和可操作的消息是构建有效多代理LLM系统的依据。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造