Message 类
Message 类是一个基于 Pydantic 的数据模型,用于封装 LLM(大语言模型)对话中的每一条消息。以下是该类的详细作用说明:
1. 核心定位
Message 是 violet_agents 项目中消息系统的统一数据结构,它既作为内部 Agent 之间传递消息的载体,也作为与 OpenAI 兼容 API 交互的桥梁。
2. 字段设计
| 字段 | 类型 | 作用 |
|---|---|---|
role | MessageRole("system", "user", "assistant", "tool") | 标识消息的发起角色 |
content | str | 消息的正文内容 |
tool_call_id | Optional[str] | 工具调用的唯一 ID,用于将工具返回结果与对应的调用请求关联起来 |
tool_calls | Optional[list[Dict]] | 记录 Assistant 发起的工具调用请求列表 |
timestamp | datetime | 消息创建的时间戳,自动填充当前时间 |
metadata | Optional[Dict] | 可扩展的元数据字段,用于携带额外的上下文信息 |
name | Optional[str] | 消息发送者的名称(如工具名、Agent 名等) |
reasoning_content | Optional[str] | 适配 DeepSeek 的思考链内容,记录 Agent 的内部推理过程,辅助调试和日志分析 |
3. 关键方法
to_openai_dict():将Message对象序列化为 OpenAI API 兼容的字典格式,排除timestamp和metadata等内部字段,避免向 API 发送多余数据。from_chat_completion_message()(静态方法):将 OpenAI SDK 返回的ChatCompletionMessage对象反向转换为项目内部的Message对象,实现外部 API 响应到内部模型的平滑映射。
4. 设计亮点
双格式兼容:
tool_calls字段同时支持原生 Python 字典和 OpenAI SDK 类型,通过_tool_calls_to_dict()在初始化时统一规范化。时间戳自动化:构造时自动填充
datetime.now(),无需手动传入。序列化灵活:
to_openai_dict()通过exclude_none=True自动移除值为None的字段,保证输出的简洁性。DeepSeek 适配:
reasoning_content字段专门用于存储 DeepSeek 模型的推理过程(chain-of-thought),这对 Agent 调试和可解释性非常有价值。
总结:Message 类本质上是一个消息协议层,它规范了项目内部消息的格式,同时提供了与 OpenAI 兼容 API 的双向转换能力,是 violet_agents 框架中 Agent 间通信和 LLM 交互的基础数据结构。