d7f0c45164
新增业务中立的 function-calling harness 与公共提示词协议 统一画布 Agent 工具路由约束和待确认控制语义 保留失败前输出并事务化收口 memory、deadline 与取消状态 迁移画布 Agent 和 API 编排并同步架构文档与项目记忆
58 lines
1.7 KiB
Rust
58 lines
1.7 KiB
Rust
//! Agent 对话记忆的最小公共抽象。
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
pub trait AgentMemoryBuffer<Message>: Send + Sync {
|
|
fn get_memory(&self) -> &[Message];
|
|
fn append_message(&mut self, message: Message);
|
|
}
|
|
|
|
pub trait AgentMemory<Message>: AgentMemoryBuffer<Message> {
|
|
/// 创建与当前 memory 行为等价、但写入彼此隔离的本轮事务副本。
|
|
fn begin_staged(&self) -> Box<dyn StagedAgentMemory<Message>>;
|
|
}
|
|
|
|
pub trait StagedAgentMemory<Message>: AgentMemoryBuffer<Message> {
|
|
/// 显式提交本轮事务,并返回下一轮继续使用的 committed memory。
|
|
///
|
|
/// 持久化实现应在这里发布 staged 写入;直接 drop staged transaction 表示回滚。
|
|
fn commit(self: Box<Self>) -> Box<dyn AgentMemory<Message>>;
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct VecMemory<Message> {
|
|
messages: Vec<Message>,
|
|
}
|
|
|
|
impl<Message> VecMemory<Message> {
|
|
pub fn new(messages: Vec<Message>) -> Self {
|
|
Self { messages }
|
|
}
|
|
|
|
pub fn into_inner(self) -> Vec<Message> {
|
|
self.messages
|
|
}
|
|
}
|
|
|
|
impl<Message: Send + Sync> AgentMemoryBuffer<Message> for VecMemory<Message> {
|
|
fn get_memory(&self) -> &[Message] {
|
|
&self.messages
|
|
}
|
|
|
|
fn append_message(&mut self, message: Message) {
|
|
self.messages.push(message);
|
|
}
|
|
}
|
|
|
|
impl<Message: Clone + Send + Sync + 'static> AgentMemory<Message> for VecMemory<Message> {
|
|
fn begin_staged(&self) -> Box<dyn StagedAgentMemory<Message>> {
|
|
Box::new(self.clone())
|
|
}
|
|
}
|
|
|
|
impl<Message: Clone + Send + Sync + 'static> StagedAgentMemory<Message> for VecMemory<Message> {
|
|
fn commit(self: Box<Self>) -> Box<dyn AgentMemory<Message>> {
|
|
self
|
|
}
|
|
}
|