PydanticAI 的多轮对话消息管理
PydanticAI 的多轮对话消息管理
学习目标
补充理解:
ModelRequest/ModelResponse统一消息类型系统- Part 模型(而非原始消息)的设计
- 多模态内容与消息序列化的实现
前置知识
- 记忆系统设计 — 通用记忆系统概念
1. 统一消息类型系统
PydanticAI 将所有消息统一为两种类型:
请求侧(ModelRequestPart)
SystemPromptPart # 开发者编写的系统提示UserPromptPart # 用户输入(文本或多模态)ToolReturnPart # 工具执行结果(success/failed/denied 三种 outcome)RetryPromptPart # 反馈给模型的重试提示(包含错误详情列表或字符串)响应侧(ModelResponsePart)
TextPart # 纯文本回复ThinkingPart # 模型思考/推理内容ToolCallPart # 函数工具调用NativeToolCallPart # 原生工具调用(提供商内置工具)FilePart # 文件/二进制响应CompactionPart # 对话历史压缩摘要与通用消息系统的差异:
- 通用 Agent 框架通常使用原始消息类型(如 OpenAI 的
system/user/assistant/tool角色) - PydanticAI 使用Part 序列——一个
ModelRequest可以包含多个 Part(系统提示 + 用户提示 + 工具结果) - Part 是更细粒度的——支持更灵活的消息组合(如动态指令作为单独的
InstructionPart)
2. 多模态内容
PydanticAI 支持多种多模态内容类型:
FileUrl (抽象) → ImageUrl, AudioUrl, DocumentUrl, VideoUrlBinaryContent → 内联二进制数据(data: bytes, media_type, base64, data_uri)UploadedFile → 提供商上传的文件引用(file_id, provider_name)每种类型都有对应的媒体类型枚举和格式枚举——确保类型安全。
3. 消息序列化
ModelMessagesTypeAdapter 使用 Pydantic TypeAdapter 实现完整的 JSON 序列化/反序列化:
ModelMessagesTypeAdapter.dump_json(messages) # → bytesModelMessagesTypeAdapter.validate_json(data) # → list[ModelMessage]关键点:消息携带 run_id 和 conversation_id——支持跨运行的消息追踪。多轮对话中,消息历史可以在不同 agent run 间传递。
4. CompactionPart
当对话上下文过长时,CompactionPart 用于压缩早期消息为摘要——类似于通用记忆系统中的上下文压缩策略。
5. Delta 流式类型
用于流式更新的增量类型:
TextPartDelta # content_delta — 追加的文本片段ThinkingPartDelta # content_delta, signature_delta — 思考增量ToolCallPartDelta # tool_name_delta, args_delta, tool_call_id — 工具调用增量这使得流式更新可以高效地传输增量而非完整快照。