双线好感度系统 (Dual-Line Affection System)
一个为 AI 陪伴聊天设计的真实、可玩、通用的好感度系统。
 ](https://nodejs.org/) 
✨ 特性
- 🧠 真实情感: 双线系统(基础好感 + 情感动态)模拟真实人类情感变化
- 💭 情感记忆: AI 像人类一样记住重要瞬间,支持关键词触发和时间衰减
- 🎮 可玩性强: 保留完整攻略乐趣,支持循序渐进的情感发展
- 🌍 关系通用: 同一系统支持恋爱/师徒/母子/友情等所有关系类型
- 🚀 高性能: Token 消耗极低(~80-90/轮),比传统方案节省 80%+
- 🛠️ 开箱即用: MCP 服务器实现,5分钟快速集成
📖 核心理念
双线好感度
base_affection (基础好感): -100 ~ 100
└─ 关系的"地基" - 熟悉度、信任底线
└─ 变化慢(±0~±10)
└─ 示例: 陌生人=0, 青梅竹马=60, 家人=70
emotional_dynamics (情感动态): -50 ~ 50
└─ 好感的"温度计" - 情感波动
└─ 变化快(±1~±70)
└─ 正值=喜欢/开心, 负值=疏离/失望
display_value = base + dynamics
└─ 实际表现值,决定 AI 的行为为什么要双线?
解决"青梅竹马困境":
- 单线: 从60起步→没有攻略乐趣, 从0起步→不符合现实
- 双线: base=60(熟络) + dynamics=0(好感平淡) → 既真实又好玩!
情感记忆系统
key_memories (情感事件日志)
└─ 记录3-5个最重要的互动
└─ 自动衰减: 正面7%/天, 负面15%/天
└─ 残留效果持续影响 display_value
triggers (关键词触发器)
└─ 保留5-10个词语→情感映射
└─ 提到"樱花"→回想起心动瞬间 +5
└─ 提到"那个人"→想起吵架 -3
time_awareness (时间感知)
└─ 3天未见→想念感 +10~20
└─ 长期冷淡→疏离感 -5~-10变化合理性判断
AI 用常识判断变化幅度是否合理:
问自己三个问题:
1. 铺垫够吗? (之前有足够互动基础吗?)
2. 太突然吗? (这个变化会不会不真实?)
3. 符合性格吗? (我这个角色会这样快速动心吗?)
变化指南:
小幅 (±1~10): 日常互动,随时可以
中幅 (±11~20): 需要一定铺垫 (dynamics ≥10)
大幅 (±21~40): 需要特殊理由 (dynamics ≥15)
极端 (±41~50): 仅限极端事件 (一见钟情/背叛)效果: 既支持一见钟情、细水长流,也支持慢慢心寒、突然崩盘 - 真实且自然。
🚀 快速开始
1. 安装依赖
cd "Affection System/mcp-server"
npm install2. 配置 Claude Desktop
编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"affection-system": {
"command": "node",
"args": ["/Users/mac017/.claude/skills/Affection System/mcp-server/index.js"]
}
}
}重启 Claude Desktop。
3. 准备提示词
将 skill.md 内容添加到你的角色卡 System Prompt 中:
# 你的角色设定
[角色卡内容...]
---
# 好感度系统
[skill.md 完整内容]4. 开始对话!
首次对话时,AI 会自动推断初始好感度。
详细教程: 请查看 QUICKSTART.md
📁 文件说明
| 文件 | 说明 | Token消耗 |
|---|---|---|
| skill.md | AI 完整实现文档(主要文档) | ~1500 |
| prompt-template.md | 标准提示词模板 | ~800 |
| prompt-minimal.md | 极简提示词模板 | ~200 |
| QUICKSTART.md | 5分钟快速开始指南 | - |
| USAGE_EXAMPLE.md | 完整使用示例和后端集成 | - |
| mcp-server/ | MCP 服务器实现 | - |
推荐使用: skill.md(完整版,包含所有机制和案例)
🎯 典型场景演示
场景1: 青梅竹马 → 恋人
初始状态: base=60, dynamics=0 → display=60 (朋友)
↓ 日常打闹 +3
互动1: base=60, dynamics=3 → display=63
↓ 心动瞬间 +14
互动2: base=61, dynamics=17 → display=78 (暧昧)
↓ 3天后 +8 (想念) + 关键词触发 +5
互动3: base=61, dynamics=25 → display=94 (亲密)
↓ 告白 +16
互动4: base=66, dynamics=41 → display=107 (恋人)关键: 从朋友→恋人经历5次有效互动,既真实又有攻略乐趣!
场景2: 陌生人一见钟情
初始状态: base=0, dynamics=0 → display=0 (陌生)
↓ 英雄救美 (极端事件)
互动1: base=5, dynamics=35 → display=40 (心动)
↓ 第二次见面 (验证感情,不能继续飙升)
互动2: base=5, dynamics=38 → display=43
↓ 深度交流
互动3: base=8, dynamics=46 → display=54关键: 一见钟情允许发生,但后续需要"稳固关系",避免持续暴涨。
场景3: 热恋期吵架和好
热恋期: base=65, dynamics=40 → display=105 (甜蜜)
↓ 吵架 -12
吵架后: base=65, dynamics=28 → display=93 (冷淡)
↓ 和好 +10
复合: base=68, dynamics=38 → display=106 (更深厚)关键: base 托底保护,吵架时 dynamics 暴跌但不会变陌生人。
🛠️ MCP 工具 API
get_affection_state
获取角色的当前好感度状态,并生成用于注入 System Prompt 的文本。
const result = await mcp.get_affection_state({
user_id: "user123",
character_id: "青梅竹马-小樱"
});
// 返回:
{
state: { affection: {...}, memory: {...} },
time_effect: 8, // 时间产生的想念/冷淡效果
injection_text: "=== 好感度当前状态 ===\n..." // 直接注入到 System Prompt
}update_affection_state
根据 AI 输出的 JSON 更新好感度状态。
await mcp.update_affection_state({
user_id: "user123",
character_id: "青梅竹马-小樱",
update_data: {
base: 61,
dynamics: 25,
display: 86,
reason: "心动瞬间+14",
memory: {
new: { event: "樱花花瓣", impact: 14, kw: ["樱花", "温柔"] },
triggers: { "樱花": 5, "温柔": 4 }
},
time: "2025-12-25 15:00"
}
});其他工具
init_affection_state: 初始化新角色状态delete_affection_state: 删除角色状态(重置关系)list_affection_states: 列出用户的所有角色状态
完整 API 文档: 请查看 mcp-server/README.md
📊 性能数据
Token 消耗对比
| 方案 | 每轮消耗 | 10轮累积 | 节省 |
|---|---|---|---|
| 方案C (MCP) | ~80-90 | ~2900 | - |
| 方案A (历史) | ~130 | ~8000+ | 63% ↓ |
记忆系统开销
状态注入: ~50 tokens
- key_memories (3-5个): ~25 tokens
- triggers (5-10个): ~15 tokens
- 其他元数据: ~10 tokens
JSON 输出: ~30-40 tokens
总计: ~80-90 tokens/轮结论: 记忆系统仅增加 <5% 开销,但体验提升显著。
🌟 核心优势
1. 真实性
- ✅ 基础好感 + 情感动态双线设计,符合真实人类情感
- ✅ 情感记忆系统,像人类一样记住重要瞬间
- ✅ 时间感知,久别重逢会想念,长期冷淡会疏离
- ✅ 变化合理性判断,避免好感度突飞猛进
2. 可玩性
- ✅ 青梅竹马从"损友"到"恋人"完整攻略曲线
- ✅ 支持一见钟情但后续需验证感情
- ✅ 支持吵架和好,关系有波动但不会变陌生人
- ✅ 支持慢慢心寒,小事积累成导火索
3. 通用性
- ✅ 同一套系统支持所有关系类型(恋爱/师徒/母子/友情/敌对)
- ✅ 无需复杂的类型标签,AI 根据角色身份自然表达
- ✅ display=85: 恋人会脸红,师父会关怀,母亲会宠溺
4. 易用性
- ✅ MCP 服务器开箱即用,5分钟集成
- ✅ 状态自动管理(衰减、触发器、记忆)
- ✅ AI 自动推断初始值,无需手动配置
- ✅ 提供三种提示词模板,适配不同需求
🏗️ 架构设计
状态传递流程(方案C - 混合方案)
┌─────────────────────────────────────────────────┐
│ 状态存储(外部) │
│ mcp-server/states/{user_id}_{character_id}.json │
└───────────────┬─────────────────────────────────┘
│
↓ 读取状态
┌───────────────────────────────────────────────────┐
│ System Prompt 注入 │
│ - 角色卡 (~500 tokens) │
│ - skill.md (~1500 tokens) │
│ - 状态注入 (~50 tokens) │
└───────────────┬───────────────────────────────────┘
│
↓ Claude API
┌───────────────────────────────────────────────────┐
│ AI 处理对话 │
│ - 读取当前 base/dynamics/display │
│ - 检测关键词触发 │
│ - 计算时间效果 │
│ - 判断好感度变化 │
│ - 生成回应 + JSON │
└───────────────┬───────────────────────────────────┘
│
↓ 输出简化 JSON (~30-40 tokens)
┌───────────────────────────────────────────────────┐
│ 后端提取并更新 │
│ - 提取 JSON │
│ - 调用 MCP: update_affection_state │
│ - 自动处理记忆管理 │
│ - 自动计算衰减 │
└───────────────┬───────────────────────────────────┘
│
↓ 保存新状态
┌─────────────────────────────────────────────────┐
│ 状态存储(外部) │
└─────────────────────────────────────────────────┘优势:
- ✅ Token 消耗极低(每轮 ~80-90)
- ✅ 历史记录干净(只有对话内容)
- ✅ 长期保存(不受上下文窗口限制)
- ✅ 易于调试和监控
📚 文档导航
入门
- 🚀 QUICKSTART.md - 5分钟快速开始
- 📖 skill.md - AI 完整实现文档(主文档)
进阶
- 💡 USAGE_EXAMPLE.md - 详细使用示例和后端集成代码
- 🛠️ mcp-server/README.md - MCP 服务器技术文档
模板
- 📝 prompt-template.md - 标准提示词模板(~800 tokens)
- ⚡ prompt-minimal.md - 极简提示词模板(~200 tokens)
🤝 贡献
欢迎提交 Issue 和 Pull Request!
开发计划:
- [ ] 支持数据库存储(MySQL/PostgreSQL/MongoDB)
- [ ] 添加 Python MCP SDK 实现
- [ ] Web 管理界面
- [ ] 好感度可视化图表
- [ ] 多语言支持(英文/日文)
📄 License
MIT License - 详见 LICENSE 文件
🙏 致谢
感谢所有为这个项目提供反馈和建议的用户!
📧 联系
有问题或建议?欢迎通过 GitHub Issues 联系我们。
让 AI 像人类一样,拥有真实的情感和记忆。 ❤️
