2.4 层间接口设计
2.4.1 统一的消息格式
消息的通用结构
from typing import Optional, Any, Literal
from datetime import datetime
from enum import Enum
import uuid
class MessageRole(str, Enum):
"""消息的角色"""
USER = "user"
ASSISTANT = "assistant"
TOOL = "tool"
SYSTEM = "system"
class MessageType(str, Enum):
"""消息的类型"""
TEXT = "text"
TOOL_CALL = "tool_call"
TOOL_RESULT = "tool_result"
FUNCTION_CALL = "function_call"
EVENT = "event"
class Message:
"""通用消息基类"""
def __init__(
self,
role: MessageRole,
type: MessageType,
content: str,
message_id: str = None,
parent_id: Optional[str] = None,
metadata: dict = None,
timestamp: datetime = None
):
self.message_id = message_id or str(uuid.uuid4())
self.role = role
self.type = type
self.content = content
self.parent_id = parent_id
self.metadata = metadata or {}
self.timestamp = timestamp or datetime.now()
def to_dict(self) -> dict:
"""转换为字典,便于序列化"""
return {
"message_id": self.message_id,
"role": self.role.value,
"type": self.type.value,
"content": self.content,
"parent_id": self.parent_id,
"metadata": self.metadata,
"timestamp": self.timestamp.isoformat()
}
@classmethod
def from_dict(cls, data: dict) -> "Message":
"""从字典反序列化"""
return cls(
role=MessageRole(data["role"]),
type=MessageType(data["type"]),
content=data["content"],
message_id=data.get("message_id"),
parent_id=data.get("parent_id"),
metadata=data.get("metadata", {}),
timestamp=datetime.fromisoformat(data["timestamp"])
)工具调用消息
工具结果消息
2.4.2 工具调用协议
调用请求的标准格式
调用响应的标准格式
2.4.3 事件流规范
事件的通用结构
事件订阅系统
事件驱动的架构示例
2.4.4 三大参考系统的接口对比
OpenAI Codex的接口设计
Claude Code的接口设计
OpenClaw的接口设计
帧类型
负载
2.4.5 版本控制和向后兼容性
2.4.6 总结
最后更新于
