625 lines
18 KiB
Markdown
625 lines
18 KiB
Markdown
|
|
# Phase 5:高级特性(Advanced Features)
|
|||
|
|
|
|||
|
|
日期:2026-04-03
|
|||
|
|
状态:规划中
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 阶段目标
|
|||
|
|
|
|||
|
|
Phase 5 包含一系列**高级特性**,在完成 Phase 1-4 后根据实际需求选择性实施。
|
|||
|
|
|
|||
|
|
这些特性不直接影响核心功能,但可以显著提升系统的**可用性、安全性和可扩展性**。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 特性清单
|
|||
|
|
|
|||
|
|
### 2.1 Full Sandbox 隔离
|
|||
|
|
|
|||
|
|
**目标**:实现完整的Docker级隔离
|
|||
|
|
|
|||
|
|
**Phase 4已做**:Worktree隔离
|
|||
|
|
|
|||
|
|
**Phase 5补充**:
|
|||
|
|
- 完整的容器生命周期管理
|
|||
|
|
- 资源限制(CPU/内存/网络)
|
|||
|
|
- 文件系统配额
|
|||
|
|
- 安全策略配置
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
class FullSandbox:
|
|||
|
|
"""完整沙箱隔离"""
|
|||
|
|
|
|||
|
|
async def execute(
|
|||
|
|
self,
|
|||
|
|
task: Task,
|
|||
|
|
config: SandboxConfig
|
|||
|
|
) -> TaskResult:
|
|||
|
|
"""
|
|||
|
|
在完整沙箱中执行
|
|||
|
|
|
|||
|
|
特点:
|
|||
|
|
- 完全隔离的网络
|
|||
|
|
- 资源限制
|
|||
|
|
- 持久化存储(可选)
|
|||
|
|
- 安全策略
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
# 1. 创建容器
|
|||
|
|
container = await self.client.containers.run(
|
|||
|
|
image=config.image,
|
|||
|
|
detach=True,
|
|||
|
|
mem_limit=config.memory_limit,
|
|||
|
|
cpu_period=config.cpu_period,
|
|||
|
|
network_mode="isolated", # 完全隔离网络
|
|||
|
|
volumes=config.volumes,
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
# 2. 执行任务
|
|||
|
|
result = await self._execute_in_container(container, task)
|
|||
|
|
return result
|
|||
|
|
|
|||
|
|
finally:
|
|||
|
|
# 3. 清理
|
|||
|
|
await container.remove(force=True)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.2 Persistence 层
|
|||
|
|
|
|||
|
|
**目标**:将Event/Message持久化到数据库
|
|||
|
|
|
|||
|
|
**Phase 1-3已做**:内存trace
|
|||
|
|
|
|||
|
|
**Phase 5补充**:
|
|||
|
|
- Event持久化存储
|
|||
|
|
- Message持久化存储
|
|||
|
|
- 支持历史查询
|
|||
|
|
- 数据导出/归档
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
class EventPersistence:
|
|||
|
|
"""事件持久化"""
|
|||
|
|
|
|||
|
|
async def save_event(self, event: Event):
|
|||
|
|
"""保存事件到数据库"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
async def query_events(
|
|||
|
|
self,
|
|||
|
|
conversation_id: str,
|
|||
|
|
event_types: list[str] | None = None,
|
|||
|
|
start_time: datetime | None = None,
|
|||
|
|
end_time: datetime | None = None,
|
|||
|
|
limit: int = 100
|
|||
|
|
) -> list[Event]:
|
|||
|
|
"""查询历史事件"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
class MessagePersistence:
|
|||
|
|
"""消息持久化"""
|
|||
|
|
|
|||
|
|
async def save_message(self, message: AgentMessage):
|
|||
|
|
"""保存消息到数据库"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
async def get_thread_history(
|
|||
|
|
self,
|
|||
|
|
thread_id: str,
|
|||
|
|
limit: int = 100
|
|||
|
|
) -> list[AgentMessage]:
|
|||
|
|
"""获取线程历史"""
|
|||
|
|
...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.3 Multi-turn Memory
|
|||
|
|
|
|||
|
|
**目标**:支持跨会话的长期记忆
|
|||
|
|
|
|||
|
|
**当前**:每个会话独立memory
|
|||
|
|
|
|||
|
|
**Phase 5补充**:
|
|||
|
|
- 重要信息提取
|
|||
|
|
- 跨会话上下文复用
|
|||
|
|
- 知识更新机制
|
|||
|
|
- 遗忘策略
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
class MultiTurnMemory:
|
|||
|
|
"""跨会话记忆"""
|
|||
|
|
|
|||
|
|
def extract_important_info(
|
|||
|
|
self,
|
|||
|
|
conversation_summary: str,
|
|||
|
|
user_profile: UserProfile
|
|||
|
|
) -> list[MemoryEntry]:
|
|||
|
|
"""从对话中提取重要信息"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
async def get_relevant_context(
|
|||
|
|
self,
|
|||
|
|
current_request: str,
|
|||
|
|
user_id: str
|
|||
|
|
) -> list[MemoryEntry]:
|
|||
|
|
"""获取与当前请求相关的记忆"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
def update_memory(
|
|||
|
|
self,
|
|||
|
|
user_id: str,
|
|||
|
|
new_info: MemoryEntry
|
|||
|
|
):
|
|||
|
|
"""更新记忆"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
def decay_old_memories(self, user_id: str):
|
|||
|
|
"""遗忘旧记忆"""
|
|||
|
|
...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.4 Cost Monitoring
|
|||
|
|
|
|||
|
|
**目标**:实时监控Token成本
|
|||
|
|
|
|||
|
|
**Phase 3已有**:Budget模型
|
|||
|
|
|
|||
|
|
**Phase 5补充**:
|
|||
|
|
- 实时Token计数
|
|||
|
|
- 成本估算
|
|||
|
|
- 告警机制
|
|||
|
|
- 使用报告
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
class CostMonitor:
|
|||
|
|
"""成本监控"""
|
|||
|
|
|
|||
|
|
async def track_usage(
|
|||
|
|
self,
|
|||
|
|
conversation_id: str,
|
|||
|
|
model: str,
|
|||
|
|
input_tokens: int,
|
|||
|
|
output_tokens: int
|
|||
|
|
):
|
|||
|
|
"""跟踪使用量"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
async def estimate_cost(
|
|||
|
|
self,
|
|||
|
|
conversation_id: str
|
|||
|
|
) -> CostEstimate:
|
|||
|
|
"""估算当前会话成本"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
async def check_budget(
|
|||
|
|
self,
|
|||
|
|
user_id: str,
|
|||
|
|
expected_tokens: int
|
|||
|
|
) -> bool:
|
|||
|
|
"""检查预算是否足够"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
async def send_alert(
|
|||
|
|
self,
|
|||
|
|
user_id: str,
|
|||
|
|
threshold: float
|
|||
|
|
):
|
|||
|
|
"""发送告警"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
# 使用示例
|
|||
|
|
@dataclass
|
|||
|
|
class CostEstimate:
|
|||
|
|
total_tokens: int
|
|||
|
|
estimated_cost: float
|
|||
|
|
breakdown: dict[str, int] # per-model
|
|||
|
|
threshold_percent: float # 相对于用户限额
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.5 Advanced UI
|
|||
|
|
|
|||
|
|
**目标**:完整的前端协作面板
|
|||
|
|
|
|||
|
|
**Phase 4已有**:API
|
|||
|
|
|
|||
|
|
**Phase 5补充**:
|
|||
|
|
- 实时协作拓扑图
|
|||
|
|
- Agent对话界面
|
|||
|
|
- 任务看板
|
|||
|
|
- 成本仪表盘
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌────────────────────────────────────────────────────────────────────┐
|
|||
|
|
│ Jarvis 协作面板 │
|
|||
|
|
├────────────────────────────────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ ┌─────────────┐ ┌─────────────────────────────────────────────┐ │
|
|||
|
|
│ │ 拓扑图 │ │ 当前会话 │ │
|
|||
|
|
│ │ │ │ │ │
|
|||
|
|
│ │ [Master] │ │ User: 帮我分析这个项目... │ │
|
|||
|
|
│ │ │ │ │ │ │
|
|||
|
|
│ │ [Coord] │ │ [Coordinator]: 拆分为3个子任务 │ │
|
|||
|
|
│ │ ┌─┴─┐ │ │ - Task 1: 检索相关知识 │ │
|
|||
|
|
│ │ │ │ │ │ - Task 2: 执行分析 │ │
|
|||
|
|
│ │ [W1] [W2] │ │ - Task 3: 汇总报告 │ │
|
|||
|
|
│ │ │ │ │ │
|
|||
|
|
│ │ 点击查看详情 │ │ [Worker-1]: 正在检索... │ │
|
|||
|
|
│ └─────────────┘ └─────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ ┌─────────────┐ ┌─────────────────────────────────────────────┐ │
|
|||
|
|
│ │ 任务列表 │ │ 成本监控 │ │
|
|||
|
|
│ │ │ │ │ │
|
|||
|
|
│ │ ☑ Task 1 │ │ Token: 12,345 / 50,000 │ │
|
|||
|
|
│ │ ◐ Task 2 │ │ 成本: $0.23 / $5.00 │ │
|
|||
|
|
│ │ ○ Task 3 │ │ [████████████████░░░░░] 24% │ │
|
|||
|
|
│ └─────────────┘ └─────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
└────────────────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.6 Plugin System
|
|||
|
|
|
|||
|
|
**目标**:支持第三方插件扩展
|
|||
|
|
|
|||
|
|
**设计参考**:Claude Code CLI的插件系统
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
class PluginSystem:
|
|||
|
|
"""插件系统"""
|
|||
|
|
|
|||
|
|
async def load_plugin(self, plugin_path: str) -> Plugin:
|
|||
|
|
"""加载插件"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
async def execute_plugin(
|
|||
|
|
self,
|
|||
|
|
plugin_id: str,
|
|||
|
|
context: dict
|
|||
|
|
) -> Any:
|
|||
|
|
"""执行插件"""
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
@dataclass
|
|||
|
|
class Plugin:
|
|||
|
|
"""插件定义"""
|
|||
|
|
plugin_id: str
|
|||
|
|
name: str
|
|||
|
|
version: str
|
|||
|
|
capabilities: list[str] # 提供的工具/能力
|
|||
|
|
hooks: list[str] # 生命周期钩子
|
|||
|
|
|
|||
|
|
async def execute(self, context: dict) -> Any:
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
@dataclass
|
|||
|
|
class PluginManifest:
|
|||
|
|
"""插件清单"""
|
|||
|
|
tools: list[ToolManifest]
|
|||
|
|
commands: list[CommandManifest]
|
|||
|
|
hooks: list[str]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.7 TagMemo — 仿生记忆系统
|
|||
|
|
|
|||
|
|
**目标**:实现基于遗忘曲线的智能记忆系统
|
|||
|
|
|
|||
|
|
**设计参考**:VCPToolBox的TagMemo V6/V7 RAG系统
|
|||
|
|
|
|||
|
|
**核心概念**:
|
|||
|
|
|
|||
|
|
1. **LIF神经元模型** — 脉冲传播机制
|
|||
|
|
- 记忆不是静态存储,而是动态激活
|
|||
|
|
- 重要记忆获得更高的激活频率
|
|||
|
|
|
|||
|
|
2. **Core Tags vs Normal Tags** — 核心记忆
|
|||
|
|
- Core Tags:获得1.2-1.4x权重加成
|
|||
|
|
- 核心记忆有虚拟召回能力
|
|||
|
|
|
|||
|
|
3. **遗忘曲线** — 不是无限存储
|
|||
|
|
- 模拟生物遗忘,不是简单删除
|
|||
|
|
- 基于重要性动态计算衰减率
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
class MemoryImportance(str, Enum):
|
|||
|
|
"""记忆重要性等级"""
|
|||
|
|
CORE = "core" # 核心记忆,1.2-1.4x权重
|
|||
|
|
HIGH = "high" # 高重要性
|
|||
|
|
MEDIUM = "medium" # 中等重要性
|
|||
|
|
LOW = "low" # 低重要性,会自然遗忘
|
|||
|
|
|
|||
|
|
@dataclass
|
|||
|
|
class TagMemoEntry:
|
|||
|
|
"""TagMemo记忆条目"""
|
|||
|
|
entry_id: str
|
|||
|
|
content: str
|
|||
|
|
|
|||
|
|
# VCPToolBox借鉴
|
|||
|
|
importance: MemoryImportance = MemoryImportance.MEDIUM
|
|||
|
|
decay_rate: float = 0.1 # 遗忘率
|
|||
|
|
last_activated: datetime = field(default_factory=datetime.now)
|
|||
|
|
activation_count: int = 0 # 激活次数
|
|||
|
|
|
|||
|
|
# EPA模块(可选)
|
|||
|
|
logic_depth: int = 0 # 逻辑深度
|
|||
|
|
resonance_score: float = 0.0 # 共振分数
|
|||
|
|
|
|||
|
|
class TagMemoMemory:
|
|||
|
|
"""
|
|||
|
|
仿生记忆系统
|
|||
|
|
|
|||
|
|
特点:
|
|||
|
|
- 遗忘曲线模拟
|
|||
|
|
- 重要性权重
|
|||
|
|
- 动态激活
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
async def add_memory(
|
|||
|
|
self,
|
|||
|
|
content: str,
|
|||
|
|
importance: MemoryImportance = MemoryImportance.MEDIUM,
|
|||
|
|
tags: list[str] | None = None
|
|||
|
|
) -> TagMemoEntry:
|
|||
|
|
"""添加记忆"""
|
|||
|
|
entry = TagMemoEntry(
|
|||
|
|
entry_id=generate_id(),
|
|||
|
|
content=content,
|
|||
|
|
importance=importance,
|
|||
|
|
decay_rate=self._calculate_decay_rate(importance),
|
|||
|
|
tags=tags or []
|
|||
|
|
)
|
|||
|
|
await self._storage.save(entry)
|
|||
|
|
return entry
|
|||
|
|
|
|||
|
|
def should_retain(self, entry: TagMemoEntry, days_elapsed: int) -> bool:
|
|||
|
|
"""
|
|||
|
|
判断记忆是否应该保留
|
|||
|
|
|
|||
|
|
基于动态Beta公式:
|
|||
|
|
β = σ(L·log(1+R) - S·noise_penalty)
|
|||
|
|
"""
|
|||
|
|
if entry.importance == MemoryImportance.CORE:
|
|||
|
|
return True # 核心记忆永远保留
|
|||
|
|
|
|||
|
|
# 遗忘概率 = 基础衰减 × 时间 × 噪声惩罚
|
|||
|
|
retention_prob = math.exp(
|
|||
|
|
-entry.decay_rate * days_elapsed * self._noise_factor
|
|||
|
|
)
|
|||
|
|
return random.random() < retention_prob
|
|||
|
|
|
|||
|
|
async def get_relevant_memories(
|
|||
|
|
self,
|
|||
|
|
query: str,
|
|||
|
|
limit: int = 5
|
|||
|
|
) -> list[TagMemoEntry]:
|
|||
|
|
"""获取相关记忆(带权重)"""
|
|||
|
|
candidates = await self._vector_search(query, limit=limit * 2)
|
|||
|
|
|
|||
|
|
# 按重要性权重排序
|
|||
|
|
weighted = []
|
|||
|
|
for entry in candidates:
|
|||
|
|
weight = self._calculate_weight(entry)
|
|||
|
|
weighted.append((entry, weight))
|
|||
|
|
|
|||
|
|
weighted.sort(key=lambda x: x[1], reverse=True)
|
|||
|
|
return [e for e, _ in weighted[:limit]]
|
|||
|
|
|
|||
|
|
def _calculate_weight(self, entry: TagMemoEntry) -> float:
|
|||
|
|
"""计算记忆权重"""
|
|||
|
|
base = 1.0
|
|||
|
|
|
|||
|
|
# 重要性权重
|
|||
|
|
if entry.importance == MemoryImportance.CORE:
|
|||
|
|
base *= 1.3
|
|||
|
|
elif entry.importance == MemoryImportance.HIGH:
|
|||
|
|
base *= 1.1
|
|||
|
|
|
|||
|
|
# 激活频率奖励
|
|||
|
|
base *= (1 + math.log(1 + entry.activation_count))
|
|||
|
|
|
|||
|
|
# 时间衰减
|
|||
|
|
days = (datetime.now() - entry.last_activated).days
|
|||
|
|
base *= math.exp(-0.01 * days)
|
|||
|
|
|
|||
|
|
return base
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.8 AgentDream — 仿生梦境系统
|
|||
|
|
|
|||
|
|
**目标**:AI在"睡眠"时自动整理和巩固记忆
|
|||
|
|
|
|||
|
|
**设计参考**:VCPToolBox的AgentDream bijective morphic system
|
|||
|
|
|
|||
|
|
**三层时间记忆涟漪**:
|
|||
|
|
|
|||
|
|
| 时间层 | 范围 | 特点 |
|
|||
|
|
|--------|------|------|
|
|||
|
|
| 短期记忆 | 0-7天 | 高频共振,快速激活 |
|
|||
|
|
| 中期记忆 | 7-90天 | 弱共振,需要触发 |
|
|||
|
|
| 长期记忆 | >90天 | 遗忘边界,需要特殊唤醒 |
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
class DreamLayer(str, Enum):
|
|||
|
|
"""梦境记忆层"""
|
|||
|
|
SHORT_TERM = "short_term" # 0-7天
|
|||
|
|
MID_TERM = "mid_term" # 7-90天
|
|||
|
|
LONG_TERM = "long_term" # >90天
|
|||
|
|
|
|||
|
|
@dataclass
|
|||
|
|
class DreamMemory:
|
|||
|
|
"""梦境记忆结构"""
|
|||
|
|
layer: DreamLayer
|
|||
|
|
resonance_bridges: list[str] = field(default_factory=list) # 共振桥接
|
|||
|
|
consolidation_level: float = 0.0 # 巩固程度 0-1
|
|||
|
|
|
|||
|
|
class AgentDreamEngine:
|
|||
|
|
"""
|
|||
|
|
仿生梦境引擎
|
|||
|
|
|
|||
|
|
功能:
|
|||
|
|
- 定时触发记忆整理
|
|||
|
|
- 跨层共振发现
|
|||
|
|
- 遗忘边界管理
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
async def dream(self, user_id: str) -> DreamReport:
|
|||
|
|
"""
|
|||
|
|
执行梦境整理
|
|||
|
|
|
|||
|
|
流程:
|
|||
|
|
1. 获取近期记忆(0-7天)
|
|||
|
|
2. 与中期记忆建立共振桥
|
|||
|
|
3. 评估哪些记忆应该升级/遗忘
|
|||
|
|
4. 生成梦境叙事报告
|
|||
|
|
"""
|
|||
|
|
short_term = await self._get_memories(
|
|||
|
|
user_id,
|
|||
|
|
layer=DreamLayer.SHORT_TERM
|
|||
|
|
)
|
|||
|
|
mid_term = await self._get_memories(
|
|||
|
|
user_id,
|
|||
|
|
layer=DreamLayer.MID_TERM
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 发现共振
|
|||
|
|
bridges = await self._discover_resonance_bridges(
|
|||
|
|
short_term, mid_term
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 评估记忆
|
|||
|
|
to_promote = [] # 升级到中期
|
|||
|
|
to_forget = [] # 标记遗忘
|
|||
|
|
to_consolidate = [] # 巩固
|
|||
|
|
|
|||
|
|
for memory in short_term:
|
|||
|
|
if memory.activation_count > 10:
|
|||
|
|
to_promote.append(memory)
|
|||
|
|
elif memory.activation_count < 2:
|
|||
|
|
to_forget.append(memory)
|
|||
|
|
else:
|
|||
|
|
to_consolidate.append(memory)
|
|||
|
|
|
|||
|
|
# 执行整理
|
|||
|
|
await self._promote_memories(to_promote)
|
|||
|
|
await self._apply_forgetting(to_forget)
|
|||
|
|
await self._consolidate(to_consolidate, bridges)
|
|||
|
|
|
|||
|
|
# 生成梦境报告
|
|||
|
|
return await self._generate_dream_narrative(
|
|||
|
|
promoted=to_promote,
|
|||
|
|
forgotten=to_forget,
|
|||
|
|
bridges=bridges
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
async def _discover_resonance_bridges(
|
|||
|
|
self,
|
|||
|
|
short_term: list[TagMemoEntry],
|
|||
|
|
mid_term: list[TagMemoEntry]
|
|||
|
|
) -> list[tuple[TagMemoEntry, TagMemoEntry, float]]:
|
|||
|
|
"""发现跨层共振桥接"""
|
|||
|
|
bridges = []
|
|||
|
|
|
|||
|
|
for s in short_term:
|
|||
|
|
for m in mid_term:
|
|||
|
|
similarity = await self._calculate_resonance(s, m)
|
|||
|
|
if similarity > 0.7:
|
|||
|
|
bridges.append((s, m, similarity))
|
|||
|
|
|
|||
|
|
return bridges
|
|||
|
|
|
|||
|
|
async def _generate_dream_narrative(
|
|||
|
|
self,
|
|||
|
|
promoted: list,
|
|||
|
|
forgotten: list,
|
|||
|
|
bridges: list
|
|||
|
|
) -> DreamReport:
|
|||
|
|
"""生成第一人称梦境叙事"""
|
|||
|
|
narrative = f"""
|
|||
|
|
【梦境记录】
|
|||
|
|
|
|||
|
|
今夜整理了{len(promoted)}段重要记忆,它们已经被巩固:
|
|||
|
|
{', '.join(m.content for m in promoted[:3])}
|
|||
|
|
|
|||
|
|
发现了{len(bridges)}条记忆共振:
|
|||
|
|
{self._describe_bridges(bridges)}
|
|||
|
|
|
|||
|
|
{len(forgotten)}段记忆正在消散...
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
return DreamReport(
|
|||
|
|
narrative=narrative,
|
|||
|
|
promoted_count=len(promoted),
|
|||
|
|
forgotten_count=len(forgotten),
|
|||
|
|
bridges_count=len(bridges)
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**触发机制**:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 定时任务:每天凌晨3点执行梦境整理
|
|||
|
|
@scheduler.scheduled(cron="0 3 * * *")
|
|||
|
|
async def scheduled_agent_dream():
|
|||
|
|
"""AI睡眠时整理记忆"""
|
|||
|
|
for user_id in await get_active_users():
|
|||
|
|
try:
|
|||
|
|
report = await agent_dream_engine.dream(user_id)
|
|||
|
|
logger.info(f"Dream complete for {user_id}: {report.summary}")
|
|||
|
|
except Exception as e:
|
|||
|
|
logger.error(f"Dream failed for {user_id}: {e}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 实施优先级
|
|||
|
|
|
|||
|
|
| 特性 | 优先级 | 依赖 | 建议实施时机 |
|
|||
|
|
|------|--------|------|--------------|
|
|||
|
|
| Cost Monitoring | 🔴 高 | Phase 3 | 正式上线前 |
|
|||
|
|
| TagMemo | 🟡 中 | Phase 2 | 用户反馈需要更好记忆时 |
|
|||
|
|
| AgentDream | 🟢 低 | Phase 5+TagMemo | 凌晨调度资源时 |
|
|||
|
|
| Persistence | 🟡 中 | Phase 1-3 | 有审计需求时 |
|
|||
|
|
| Multi-turn Memory | 🟡 中 | Phase 1-2 | 用户反馈需要时 |
|
|||
|
|
| Advanced UI | 🟡 中 | Phase 4 | 有前端资源时 |
|
|||
|
|
| Full Sandbox | 🟢 低 | Phase 4 | 有安全需求时 |
|
|||
|
|
| Plugin System | 🟢 低 | Phase 1 | 有社区需求时 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 风险点
|
|||
|
|
|
|||
|
|
| 风险 | 缓解措施 |
|
|||
|
|
|------|----------|
|
|||
|
|
| 功能蔓延 | 严格控制每个特性的scope |
|
|||
|
|
| 性能影响 | Persistence要考虑异步和索引优化 |
|
|||
|
|
| 成本增加 | Full Sandbox资源限制要明确 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 验收标准
|
|||
|
|
|
|||
|
|
| 特性 | 验收标准 |
|
|||
|
|
|------|----------|
|
|||
|
|
| Cost Monitoring | 能实时显示Token使用量和估算成本 |
|
|||
|
|
| Persistence | 事件和消息可持久化存储和查询 |
|
|||
|
|
| Multi-turn Memory | 跨会话可复用关键信息 |
|
|||
|
|
| Advanced UI | 有可用的前端协作面板 |
|
|||
|
|
| Full Sandbox | 容器隔离完整,资源限制生效 |
|
|||
|
|
| Plugin System | 插件可加载和执行 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. 本阶段完成后预期结果
|
|||
|
|
|
|||
|
|
完成后,Jarvis 将具备:
|
|||
|
|
|
|||
|
|
- ✅ 完整的成本监控能力
|
|||
|
|
- ✅ 仿生记忆系统(TagMemo)
|
|||
|
|
- ✅ AI梦境整理(AgentDream)
|
|||
|
|
- ✅ 历史数据持久化
|
|||
|
|
- ✅ 跨会话的智能记忆
|
|||
|
|
- ✅ 完整的协作可视化UI
|
|||
|
|
- ✅ 高级隔离执行环境
|
|||
|
|
- ✅ 可扩展的插件系统
|
|||
|
|
|
|||
|
|
**Phase 5 为可选特性,根据实际需求选择性实施。**
|