# 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 为可选特性，根据实际需求选择性实施。**
