# AIP (Affective Interaction Programming)
**情感交互编程——基于情绪数据模型的AI决策与生成式用户交互系统**
[](https://opensource.org/licenses/MIT)
[](https://www.rust-lang.org/)
---
## 概述
AIP是一个将**用户情绪作为AI决策者直接优化目标**的创新框架。与传统推荐系统不同,AIP不推荐内容,而是**生成交互逻辑本身**——将用户特质与实时行为情绪信号映射到参数化的交互机制,包括节奏、强度与反馈动态。
### 核心理念
> 交互参数不仅仅是内容的传递机制,它们是**强大的情感工具**。AIP将用户情绪从"评价指标"转变为"可编程设计变量"。
---
## 核心组件
### EDM (Emotion Data Model) - 情绪数据模型
从触屏动力学、按键熵与犹豫模式等行为信号推断用户的实时情绪状态。
**输入**:15维行为特征(10秒窗口)
| 0 | 点击频率 | 唤醒↑ |
| 1 | 滑动速度 | 唤醒↑ |
| 2 | 多点触控比例 | 唤醒↑ |
| 3 | 设备倾斜标准差 | 唤醒↑ |
| 4 | 重试延迟 | 效价↓ |
| 5 | 暂停时长 | 效价↓ |
| 6 | 犹豫时间 | 效价↓ |
| 7 | 路径效率 | 掌控↑ |
| 8 | 取消率 | 掌控↓ |
| 9 | 完成率 | 掌控↑ |
| 10 | 平均压力 | 唤醒↑ |
| 11 | 压力标准差 | 唤醒↑ |
| 12 | 动作精度 | 掌控↑ |
| 13 | 平均反应时间 | 效价↓ |
| 14 | 反应时间标准差 | 效价↓ |
**输出**:三维情绪状态
```rust
pub struct EmotionState {
pub valence: f32, // 效价 [0, 1]
pub arousal: f32, // 唤醒 [0, 1]
pub dominance: f32, // 掌控感 [0, 1]
}
```
**模型架构**:
```
输入 (15维特征 × 5步历史)
↓
1D卷积 (滤波器=32, 核=3)
↓
SE模块 (通道注意力)
↓
双向LSTM (64)
↓
自注意力层
↓
MLP (64→32→3)
↓
Sigmoid → [效价, 唤醒, 掌控感] ∈ [0,1]
```
**性能目标**:
| 效价 | ≥ 0.55 | ≤ 0.18 |
| 唤醒 | ≥ 0.60 | ≤ 0.16 |
| 掌控感 | ≥ 0.50 | ≤ 0.20 |
---
### Director - 交互策略网络
基于用户特质、环境状态和实时情绪向量,输出连续的交互参数以优化复合奖励。
**状态空间 (23维)**:
| 用户特质 | 8 | 年龄组、性别、自我报告风格、反应时间百分位等 |
| 环境状态 | 6 | 关卡、进度、资源、时间等 |
| 实时情绪 | 3 | 效价、唤醒、掌控感 |
| 情绪统计 | 6 | 过去30秒的均值和标准差 |
**动作空间 (7维连续)**:
| intensity_factor | [0.5, 2.0] | 事件频率/密度的乘数 |
| feedback_intensity | [0.3, 1.5] | 触觉/视觉反馈的强度 |
| pace_speed | [0.6, 1.8] | 交互进程的速度 |
| reward_scarcity | [0.0, 1.0] | 稀有奖励的概率 |
| env_arousal | [0.3, 1.0] | 背景刺激水平 |
| rhythm_modulation | [0.8, 1.5] | 音频反馈的节奏/步调 |
| challenge_curve | [-1.0, 1.0] | 难度进展的陡峭程度 |
**奖励函数**:
```
R = 0.4 · R_progress + 0.4 · R_emotion + 0.2 · R_retention
```
**训练算法**:PPO (Proximal Policy Optimization)
| 学习率 | 3e-4 |
| 裁剪系数 | 0.2 |
| GAE λ | 0.95 |
| 熵系数 | 0.01 |
| 小批量大小 | 64 |
---
## 项目结构
```
aip/
├── Cargo.toml
├── src/
│ ├── lib.rs
│ ├── edm/ # EDM模块
│ │ ├── core.rs # 核心接口定义
│ │ ├── features.rs # 特征工程
│ │ └── roguelite/ # Roguelite游戏实现
│ │ ├── core.rs # 推理实现
│ │ └── training.rs # 训练实现
│ ├── director/ # Director模块
│ │ ├── core.rs # 核心接口定义
│ │ └── roguelite/ # Roguelite游戏实现
│ │ ├── core.rs # 推理实现
│ │ └── training.rs # 训练实现
│ ├── ffi/ # FFI接口
│ └── utils/ # 工具函数
├── tests/ # 测试文件
├── docs/ # 文档
│ ├── core.md # 核心技术架构
│ ├── roguelite.md # Roguelite游戏方案
│ └── training_schemes.md # 训练标记方案
└── papers/ # 论文
└── 001.md # 第一部分论文
```
---
## Cargo Features
| `edm` | EDM核心接口 | - |
| `edm_roguelite` | EDM Roguelite推理 | `edm` |
| `edm_roguelite_training` | EDM Roguelite训练 | `edm_roguelite` |
| `director` | Director核心接口 | - |
| `director_roguelite` | Director Roguelite推理 | `director`, `edm_roguelite` |
| `director_roguelite_training` | Director Roguelite训练 | `director_roguelite` |
---
## 快速开始
### 安装
```toml
[dependencies]
aip = { version = "0.1.0", features = ["edm_roguelite", "director_roguelite"] }
```
### 基础用法
```rust
use aip::edm::{EmotionDataModel, EmotionState};
use aip::director::{InteractionStrategy, InteractionState, InteractionParams};
// EDM推理
let edm = RogueliteEdm::load("models/edm_v1.safetensors")?;
let features = compute_behavior_features(&events);
let emotion = edm.infer(&features)?;
// Director决策
let director = RogueliteDirector::load("models/director_v1.safetensors")?;
let state = InteractionState {
user_traits,
env_state,
emotion,
emotion_stats,
};
let params = director.decide(&state)?;
// 应用交互参数
apply_intensity_factor(params.intensity_factor);
apply_feedback_intensity(params.feedback_intensity);
```
### 构建命令
```bash
# 基础编译
cargo build
# 完整编译 (所有features)
cargo build --all-features
# 全部测试
cargo test --all-features
# 文档生成
cargo doc --open
# 代码格式化
cargo fmt
# 静态检查
cargo clippy --all-features
```
---
## 应用场景:Roguelite游戏
AIP在Roguelite游戏环境中进行验证,游戏特点:
- **2D俯视像素风格**:4x像素放大,像素对齐渲染
- **生成式地牢**:程序化生成,Delaunay三角剖分 + MST连接
- **移动端控制**:虚拟摇杆 + 技能按钮,自动锁定
- **实时情绪采集**:15维行为特征,10秒窗口
### 游戏控制方案
```
┌─────────────────────────────────────────────────────────────────────┐
│ ┌─────────┐ ┌─────────────────┐│
│ │ HP: ████│ │ Level: 1-3 ││
│ │ MP: ██ │ │ Score: 12,450 ││
│ └─────────┘ └─────────────────┘│
│ │
│ ┌─────────────────────┐ │
│ │ 游戏画面区域 │ │
│ │ (玩家 + 敌人) │ │
│ └─────────────────────┘ │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────┐ ┌─────┐ │
│ │ 技能1 │ │ 技能2 │ │ 技能3 │ │道具1│ │道具2│ │
│ └─────────┘ └─────────┘ └─────────┘ └─────┘ └─────┘ │
│ │
│ ┌───────────────┐ │
│ │ 虚拟摇杆 │ (左手控制移动) │
│ └───────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
```
### AIP参数对游戏的影响
| intensity_factor | 敌人生成速率、伤害倍率 |
| feedback_intensity | 屏幕震动、音效音量 |
| pace_speed | 游戏节奏、事件触发频率 |
| reward_scarcity | 稀有道具掉落率 |
| env_arousal | 环境特效密度、背景音乐强度 |
| rhythm_modulation | 音乐节奏、心跳音效 |
| challenge_curve | 难度曲线斜率 |
---
## 训练方案
### 冷启动策略
```
新用户 ──→ 用户画像采集 ──→ 群体匹配 ──→ 初始策略分配
│ │ │
↓ ↓ ↓
静态特质 相似用户群 预训练模型
(8维) 聚类中心 参数迁移
校准期 ──→ 行为数据采集 ──→ 在线学习 ──→ 个性化模型
(2分钟) (10秒窗口) (增量更新) (用户专属)
```
### 实时训练架构
```
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 客户端 │ │ 边缘节点 │ │ 云端服务器 │
│ (游戏端) │───→│ (推理+缓存) │───→│ (训练中心) │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
↓ ↓ ↓
行为数据采集 增量推理更新 批量模型训练
特征计算 轨迹缓存 全局模型更新
本地推理 快速响应 模型分发
```
### 标记方案
| 纯人工SAM | 高 | 0.90 | 金标准、小规模验证 |
| LLM批量标注 | 低 | 0.70-0.80 | 大规模历史数据 |
| LLM+人工复核 | 中 | 0.85 | 生产环境推荐 |
| 隐式行为推断 | 极低 | 0.60-0.70 | 实时补充标注 |
---
## 性能指标
| EDM推理延迟 | < 5ms |
| Director推理延迟 | < 5ms |
| EDM Pearson r (效价) | ≥ 0.55 |
| Director平均奖励 | ≥ 0.7 |
| 模型更新成功率 | ≥ 99% |
| 情绪稳定性方差 | ≤ 0.1 |
---
## 研究成果
### 初步仿真结果
1. **情绪预测准确性**:EDM与用户自我报告的效价/唤醒/掌控感达到交叉验证 Pearson r > 0.55
2. **策略自发特化**:不同用户群体收敛到性质迥异的交互风格
3. **消融实验**:移除情绪项会导致情绪波动性增加,而留存率并未提升
### 用户群体特化示例
| 探索型 | 低唤醒偏好,慢节奏 | intensity=0.73, pace=0.85 |
| 战斗型 | 高唤醒偏好,快节奏 | intensity=1.42, pace=1.35 |
| 社交型 | 中等唤醒,高反馈 | feedback=1.2, rhythm=1.1 |
| 挑战型 | 高掌控感,陡峭曲线 | challenge=0.8, scarcity=0.7 |
---
## 依赖库
- **Candle**: 模型推理和训练
- **ndarray**: 数值计算
- **serde**: 序列化/反序列化
---
## 文档
- [核心技术架构](docs/core.md)
- [Roguelite游戏方案](docs/roguelite.md)
- [训练标记方案](docs/training_schemes.md)
- [FFI接口指南](FFI_GUIDE.md)
- [性能报告](PERFORMANCE_REPORT.md)
- [论文:情感交互编程](papers/001.md)
---
## 参考文献
1. Barthet et al. (2024). Closing the Affective Loop via Experience-Driven Reinforcement Learning Designers.
2. Yannakakis & Togelius (2011). Experience-driven procedural content generation.
3. Mehrabian & Russell (1974). An approach to environmental psychology.
4. Schulman et al. (2017). Proximal policy optimization algorithms.
---
## 许可证
MIT License
---
## 联系方式
**张海龙**
Email: hailongz@qq.com