code/chapter15/Helloagents-AI-Town/AFFINITY_SYSTEM_GUIDE.md
赛博小镇的NPC现在拥有了好感度系统,能够根据与玩家的对话内容自动调整好感度,并影响后续对话的风格和态度!
初始好感度: 50 (友好)
第一次对话:
玩家: "你好,很高兴认识你!"
张三: "你好!我也很高兴认识你。"
📈 好感度: 50 -> 55 (友好问候)
第二次对话:
玩家: "你的代码写得真棒!"
张三: "谢谢!我最近在研究新技术,你对这个感兴趣吗?"
📈 好感度: 55 -> 63 (赞美工作) → 关系等级提升: 友好 -> 亲密
第三次对话:
玩家: "能教教我吗?"
张三: "当然可以!我很乐意分享。你想从哪里开始?"
📈 好感度: 63 -> 69 (请教学习)
当前好感度: 69 (亲密)
批评对话:
玩家: "你这个代码写得太烂了!"
张三: "抱歉,我会改进的..."
📉 好感度: 69 -> 61 (批评工作) → 关系等级降低: 亲密 -> 友好
好感度: 30 (熟悉)
玩家: "你好,最近怎么样?"
李四: "还行吧。" (简短回答)
好感度: 70 (亲密)
玩家: "你好,最近怎么样?"
李四: "挺好的!最近在做一个很有意思的项目,你要不要听听?" (热情详细)
好感度: 90 (挚友)
玩家: "你好,最近怎么样?"
李四: "哈哈,老朋友!最近忙得不行,但很充实。对了,上次你问的那个问题,我找到答案了!" (亲切主动)
RelationshipManager
├── affinity_scores: Dict[str, Dict[str, float]] # NPC好感度存储
├── analyzer_agent: SimpleAgent # 情感分析Agent
├── get_affinity(npc_name, player_id) # 获取好感度
├── analyze_and_update_affinity(...) # 分析并更新好感度
├── get_affinity_level(affinity) # 获取关系等级
└── get_affinity_modifier(affinity) # 获取对话风格修饰词
1. 玩家发送消息
↓
2. NPC生成回复
↓
3. 情感分析Agent分析对话
├── 分析玩家态度
├── 评估对话内容
├── 判断情感倾向
└── 计算好感度变化量
↓
4. 更新好感度
├── 当前好感度 + 变化量
├── 限制在0-100范围
└── 检查等级变化
↓
5. 保存到记忆系统
└── 记录好感度和情感信息
| 对话类型 | 变化量 | 示例 |
|---|---|---|
| 赞美、感谢、请教 | +3 到 +8 | "你真棒!" "谢谢你!" "能教教我吗?" |
| 友好问候、正常交流 | +1 到 +3 | "你好!" "最近怎么样?" |
| 普通闲聊、中性话题 | 0 | "今天天气不错" |
| 批评、质疑、不耐烦 | -3 到 -8 | "这个不太好" "真的吗?" |
| 侮辱、攻击、恶意 | -8 到 -15 | "你太烂了!" |
GET /npcs/张三/affinity?player_id=player
响应:
{
"npc_name": "张三",
"player_id": "player",
"affinity": 65.0,
"level": "亲密",
"modifier": "友好热情,愿意多聊,会主动关心对方"
}
GET /affinities?player_id=player
响应:
{
"player_id": "player",
"affinities": {
"张三": {
"affinity": 65.0,
"level": "亲密",
"modifier": "友好热情,愿意多聊,会主动关心对方"
},
"李四": {
"affinity": 50.0,
"level": "友好",
"modifier": "礼貌友善,正常交流,保持专业"
},
"王五": {
"affinity": 72.0,
"level": "亲密",
"modifier": "友好热情,愿意多聊,会主动关心对方"
}
}
}
PUT /npcs/张三/affinity?affinity=80&player_id=player
响应:
{
"message": "已设置张三对玩家的好感度",
"npc_name": "张三",
"player_id": "player",
"affinity": 80.0,
"level": "挚友",
"modifier": "非常热情友好,像老朋友一样亲切,愿意分享私人话题"
}
cd backend
python test_affinity.py
测试内容:
cd backend
python main.py
访问API文档: http://localhost:8000/docs
测试好感度接口:
情感分析Agent使用精心设计的提示词来分析对话:
【分析维度】
1. 玩家态度: 友好/中立/不友好
2. 对话内容: 积极/中立/消极
3. 互动质量: 深入/一般/敷衍
4. 情感倾向: 赞美/批评/中性
【输出格式】
{
"should_change": true/false,
"change_amount": -15到+10之间的整数,
"reason": "简短说明原因",
"sentiment": "positive/neutral/negative"
}
如果想调整好感度变化的敏感度,可以修改 relationship_manager.py 中的提示词:
LLM情感分析
好感度系统设计
系统集成
用户体验设计
# 在agents.py的chat方法中
📈 张三对玩家的好感度: 50.0 -> 55.0 (友好问候)
🎉 关系等级提升: 友好 -> 亲密
# 在relationship_manager.py中添加调试输出
print(f"情感分析结果: {analysis}")
# 使用test_affinity.py测试不同类型的对话
friendly_messages = ["你好!", "你真棒!", "能教教我吗?"]
critical_messages = ["这个不好", "你太烂了"]
neutral_messages = ["今天天气不错", "嗯"]
可能原因:
解决方法:
解决方法:
relationship_manager.py 中的变化量范围set_npc_affinity 手动设置初始值可能原因:
解决方法:
✅ NPC好感度系统已成功集成到赛博小镇!
核心特性:
教学价值:
下一步:
作者: HelloAgents团队
日期: 2024-01-15
版本: v1.0