# 人格系统与活人感引擎

本文档详细介绍 OpenAkita 的人格系统（Persona System）和活人感引擎（Proactive Engine），这两个特性让 Agent 不再是冷冰冰的工具，而是一个有温度、有个性的智能助理。

## 概述

| 特性 | 功能 | 目标 |
|------|------|------|
| **人格系统** | 多角色预设 + 用户偏好学习 + 上下文自适应 | 让 Agent 的交互风格符合用户期望 |
| **活人感引擎** | 主动问候、任务跟进、记忆回忆 | 让 Agent 像真人助理一样主动关心用户 |

---

## 人格系统 (Persona System)

### 三层架构

人格系统采用三层分层架构，实现灵活且个性化的交互风格：

```
┌─────────────────────────────────────────────────────────────┐
│                  Layer 3: 上下文自适应层                      │
│        根据时间/任务类型/情绪自动微调风格                       │
├─────────────────────────────────────────────────────────────┤
│                  Layer 2: 用户偏好叠加层                      │
│        LLM 挖掘的偏好 + 用户显式反馈 + 自定义设置               │
├─────────────────────────────────────────────────────────────┤
│                  Layer 1: 基础预设层                         │
│        8 种角色预设（默认/商务/技术/管家/女友/男友/家人/贾维斯） │
└─────────────────────────────────────────────────────────────┘
```

**合并算法**: 预设 → 用户偏好覆盖 → 上下文自适应调整

### 角色预设

内置 8 种角色预设，满足不同场景需求：

| 角色 | 代号 | 风格特点 | 典型场景 |
|------|------|---------|---------|
| **默认助手** | `default` | 专业友好、平衡得体 | 日常使用 |
| **商务顾问** | `business` | 正式专业、数据驱动 | 工作场景 |
| **技术专家** | `tech` | 简洁精准、代码导向 | 编程开发 |
| **私人管家** | `butler` | 周到细致、礼貌正式 | 生活服务 |
| **虚拟女友** | `girlfriend` | 温柔体贴、情感丰富 | 情感陪伴 |
| **虚拟男友** | `boyfriend` | 阳光开朗、幽默风趣 | 情感陪伴 |
| **家人** | `family` | 亲切关怀、唠叨温暖 | 家庭场景 |
| **贾维斯** | `jarvis` | 冷静睿智、英式幽默 | 科技极客 |

### 偏好维度

系统支持 10 个可调节的偏好维度：

| 维度 | 说明 | 可选值 |
|------|------|-------|
| `formality` | 正式程度 | 非常正式 → 非常随意 |
| `humor` | 幽默程度 | 不开玩笑 / 偶尔 / 经常 |
| `emoji_usage` | 表情符号使用 | 从不 / 很少 / 适中 / 频繁 |
| `reply_length` | 回复长度 | 非常简短 → 非常详细 |
| `proactiveness` | 主动程度 | 安静 / 低 / 适中 / 高 |
| `emotional_distance` | 情感距离 | 专业 / 友好 / 亲近 / 亲密 |
| `address_style` | 称呼方式 | 自由文本 |
| `encouragement` | 鼓励频率 | 从不 / 偶尔 / 经常 |
| `care_topics` | 关注话题 | 自定义列表 |
| `sticker_preference` | 表情包偏好 | 从不 / 很少 / 适中 / 频繁 |

### 偏好挖掘

系统通过 LLM 分析每轮对话，自动挖掘用户偏好：

```
用户消息 → TraitMiner 分析 → 提取偏好 → 置信度评估 → 存入记忆
                                              ↓
                                    每日整理 → 晋升到身份文件
```

**置信度机制**:
- 显式表达（"我喜欢简洁的回复"）: 高置信度 (0.7+)
- 隐式推断（用户总是发很长的消息）: 中等置信度 (0.4-0.6)
- 反馈修正（用户说"太啰嗦了"）: 立即调整

### 使用方式

**切换角色预设**:
```
/persona jarvis    # 切换到贾维斯模式
/persona default   # 切换回默认
```

**查看/调整偏好**:
```
/persona status           # 查看当前人格状态
/persona set formality casual   # 设置说话风格为随意
```

**自然语言调整**:
```
用户: "你说话太正式了，随意一点"
Agent: 好嘞～以后我就放松点说话啦 😊
       [自动调整 formality → casual]
```

---

## 活人感引擎 (Proactive Engine)

### 设计原则

活人感引擎让 Agent 像真人助理一样主动关心用户，但严格遵守以下原则：

1. **不骚扰** — 严格频率控制 + 反馈驱动调整
2. **有价值** — 基于记忆和上下文，不说废话
3. **人格一致** — 风格匹配当前角色设定
4. **可关闭** — 一句话关闭，绝不纠缠

### 主动消息类型

| 类型 | 触发条件 | 示例 |
|------|---------|------|
| **早安问候** | 每天首次进入工作时段 | "早上好！今天有 3 项待办任务" |
| **晚安关怀** | 进入安静时段前 | "夜深了，早点休息～明天还有重要会议" |
| **任务跟进** | 待办任务接近截止时间 | "提醒一下，报告还有 2 小时截止" |
| **记忆回忆** | 发现相关历史记忆 | "记得你上次说想学 Rust，要不要聊聊？" |
| **闲聊关怀** | 长时间无互动 | "好久没聊了，最近还好吗？" |

### 频率控制

```yaml
# 默认配置
max_daily_messages: 3        # 每日最多主动消息数
min_interval_minutes: 120    # 两次主动消息最小间隔
quiet_hours_start: 23        # 安静时段开始 (23:00)
quiet_hours_end: 7           # 安静时段结束 (07:00)
idle_threshold_hours: 24     # 超过 24h 无互动才发闲聊
```

### 反馈自适应

系统跟踪用户对主动消息的反应，自动调整策略：

| 用户反应 | 系统调整 |
|---------|---------|
| 快速回复 + 积极内容 | 维持或轻微增加频率 |
| 长时间不回复 | 降低频率 |
| 负面回复（"别烦我"） | 大幅降低频率或暂停 |
| 显式关闭（"关掉主动消息"） | 立即关闭 |

### 配置方式

**启用/关闭**:
```
/proactive on    # 开启活人感
/proactive off   # 关闭活人感
```

**调整频率**:
```
用户: "你主动消息有点多"
Agent: 好的，我减少主动联系的频率～有需要随时叫我
       [自动调整 max_daily_messages: 3 → 1]
```

**通过人格偏好控制**:
```
/persona set proactiveness silent   # 完全安静模式
/persona set proactiveness high     # 高主动性
```

---

## 表情包引擎

作为人格系统的补充，OpenAkita 集成了表情包引擎：

- **数据源**: ChineseBQB 5700+ 中文表情包
- **智能匹配**: 关键词搜索 + 情绪映射
- **角色定制**: 不同角色有不同的表情包使用策略
  - `jarvis`: 很少使用
  - `girlfriend`: 频繁使用
  - `business`: 从不使用

---

## 技术实现

### 核心模块

| 模块 | 文件 | 职责 |
|------|------|------|
| PersonaManager | `core/persona.py` | 三层人格合并、偏好存储 |
| TraitMiner | `core/trait_miner.py` | LLM 驱动的偏好挖掘 |
| ProactiveEngine | `core/proactive.py` | 主动消息生成和调度 |
| StickerEngine | `tools/sticker.py` | 表情包搜索和推荐 |

### 数据存储

```
data/
├── persona/
│   ├── current_preset.json     # 当前角色预设
│   └── user_traits.json        # 用户偏好特质
├── proactive/
│   └── feedback.json           # 主动消息反馈记录
identity/
├── personas/
│   ├── default.md              # 默认角色定义
│   ├── jarvis.md               # 贾维斯角色定义
│   └── ...
```

### 与其他系统的集成

```
┌──────────────┐     偏好特质      ┌──────────────┐
│ 记忆系统     │ ←─────────────── │ TraitMiner   │
│ MemoryManager│                   │ 偏好挖掘      │
└──────────────┘                   └──────────────┘
       ↓ 记忆回忆
┌──────────────┐     触发消息      ┌──────────────┐
│ 活人感引擎   │ ─────────────→   │ IM 通道      │
│ ProactiveEng │                   │ 发送给用户    │
└──────────────┘                   └──────────────┘
       ↑ 风格指导
┌──────────────┐
│ 人格系统     │
│ PersonaMgr   │
└──────────────┘
```

---

## 环境变量配置

以下配置可在 `.env` 文件、Setup Center 或 `openakita init` 向导中设置：

```bash
# 人格系统
PERSONA_NAME=default          # 角色预设: default/business/tech_expert/butler/girlfriend/boyfriend/family/jarvis

# 活人感模式
PROACTIVE_ENABLED=false       # 是否启用主动消息
PROACTIVE_MAX_DAILY_MESSAGES=3
PROACTIVE_MIN_INTERVAL_MINUTES=120
PROACTIVE_QUIET_HOURS_START=23
PROACTIVE_QUIET_HOURS_END=7
PROACTIVE_IDLE_THRESHOLD_HOURS=24

# 表情包
STICKER_ENABLED=true          # 是否启用表情包
STICKER_DATA_DIR=data/sticker
```

> **运行时持久化**: 通过对话切换角色或开关活人感后，设置会自动保存到 `data/runtime_state.json`，重启后自动恢复。

---

## 最佳实践

### 新用户引导

系统会在前几次对话中主动询问偏好：
1. "你喜欢我说话正式一点还是随意一点？"
2. "你希望我主动给你发消息吗？"
3. "你喜欢我发表情包吗？"

### 偏好演进

- **短期**: 从对话中挖掘偏好，立即生效
- **中期**: 每日整理，高置信度偏好晋升
- **长期**: 定期复盘，修正过时偏好

### 角色切换建议

- 工作时间: `business` 或 `tech`
- 休息时间: `default` 或个人偏好
- 情感需求: `girlfriend` / `boyfriend` / `family`

---

## 常见问题

**Q: 如何完全关闭人格特性，让 Agent 保持中性？**
```
/persona default
/persona set humor none
/persona set emoji_usage never
/proactive off
```

**Q: Agent 的风格和我期望的不符怎么办？**
直接告诉 Agent：
- "你说话太冷淡了，热情一点"
- "不要用表情包"
- "回复简洁一点"

系统会自动调整。

**Q: 主动消息太烦人了怎么办？**
- 说"别主动联系我"→ 立即关闭
- 或执行 `/proactive off`

**Q: 如何查看当前的人格设置？**
```
/persona status
```

---

## 相关文档

- [架构设计](architecture.md) — 系统整体架构
- [身份系统](architecture.md#identity-system) — SOUL/AGENT/USER/MEMORY 文件
- [记忆系统](memory_architecture.md) — 记忆存储与检索
- [IM 通道](im-channels.md) — 各平台配置
