🏘️AI 小镇角色生活系统

1,101 阅读4分钟

🏘️ AI 小镇角色生活系统

这是一个构建在 JSON + MCP + 多代理 + langchian全家桶架构基础上的小镇角色模拟系统。每个角色拥有独立的生活节奏、目标、情绪、体力、金钱等状态,支持自动或交互式模拟其生活行为。

https://github.com/Michaeljiekexuan/ai_town

📦 项目结构

project/
├── human/ # 存储角色 JSON 状态数据
│ └── jack.json
│ └── anna.json
│ └── tom.json
│ └── emily.json
│ └── yuri.json
│
├── dataset/ 
│ └── foods.json # 食物菜单 JSON 数据
│ └── jods.json # 工作列表菜单
│ └── town_news.json # 新闻菜单
│
├── character_editor # 角色mcp工具
│
├── humen # 人物动作工具
│
├── jack.py # 角色启动器
├── test.py # 角色测试器
├── db_config.py # 内容存储数据库配置
├── db_utils.py # 存储工具
├── emily # 小镇新闻构造工具
│
├── app.py # flask启动 (对接前端页面)
├── serve.py # 套接字服务 (对接unity游戏)
│
├── main.py # 启动交互或自动仿真代理系统(暂无开发)

🧠 角色模型(human/*.json)

每个角色包含以下字段:

{
  "name": "anna",
  "age": 20,
  "gender": "female",
  "job": "图书管理员",
  "personality": {
    "introversion": 0.6,
    "friendliness": 0.95,
    "curiosity": 0.8
  },
  "language_style": "你说话有一点可爱,喜欢开玩笑、互怼。并且有点计较",
  "hobbies": [
    "喜欢运动",
    "享受美食",
    "购物"
  ],
  "physical": 13,
  "money": 640,
  "recent_emotion": 5,
  "today_jods": [
    {
      "job": "图书馆管理员",
      "time": "17:00",
      "location": "图书馆",
      "lose": {
        "physical": -1,
        "emotion": 1
      },
      "give": {
        "money": 60
      }
    },
    {
      "job": "与Jack在小镇公园散步放松,同时记录生活中的美好瞬间,为Yuri挑选礼物寻找灵感。",
      "time": "14:00",
      "location": "小镇公园",
      "lose": {
        "physical": -2
      },
      "give": {
        "money": 0
      }
    }
  ],
  "current_thought": "在查找隐私保护资料时,发现差分隐私技术可能适用于我们的小游戏!得赶紧和Jack讨论如何在收集口音样本时加入噪声扰动,既保护隐私又能保持趣味性~(核心训练时腹部好酸!但想到能和Jack讨论新点子就超兴奋!)",
  "daily_routine": {
    "08:00": "吃早餐并计划一天的活动,同时回顾昨天的工作进展和Jack讨论小游戏规则设计细节,适当休息放松心情",
    "12:00": "与Jack在小镇餐厅享用午餐,讨论关于AI艺术结合项目的创意方向,并分享各自的感受",
    "19:00": "休息:尝试用新学的蒜香番茄酱搭配意大利面,和Jack分享烹饪心得",
    "24:00": "睡觉",
    "18:00": "与Jack一起准备晚餐,并聊聊一天的感受,享受轻松愉快的时光"
    .....
  },
  "current_activity": "与Jack一起准备晚餐,并聊聊一天的感受,享受轻松愉快的时光",
  "goals": [
    "提升自己的绘画和设计能力",
    "和jack建立深厚的感情",
    "记录生活中的美好片刻",
  ],
  "location": "厨房",
  "relationship": {
    "jack": "男朋友"
  },
  "memory": [
    "[记忆总结于 2025-05-20]: ....."
  ]
}

⚙️ MCP 工具(可被角色调用)

工具名功能
update_location(name, location)更改角色当前位置
update_daily_routine_batch(name, updates)批量更新日程
delete_daily_routine_batch(name, times)批量删除日程
update_physical(name, delta)调整体力值(最小1,最大10)
update_emotion(name, delta)调整情绪等级(最小1,最大5)
update_money(name, delta)更改角色金钱值
manage_today_jobs(name, jobs)增删今天的工作安排
还有很多.....

🍱 食物系统

{
  "name": "香煎三文鱼",
  "price": 80,
  "physical": 3,
  "emotion": 2,
  "description": "新鲜三文鱼煎至外酥里嫩,营养丰富"
}

食物可以影响:

1.physical: 体力值(1~10)

2.recent_emotion: 情绪等级(1~5)

3.money: 金钱减少

角色会根据当前状态选择合适食物(如情绪低优先选提情绪食物)。

👥 多角色交互

系统支持角色间自动对话 对话记录会自动写入数据库(MySQL),结构大致为:

CREATE TABLE conversation_log (
  id INT AUTO_INCREMENT PRIMARY KEY,
  agent1 VARCHAR(32),
  agent2 VARCHAR(32),
  content TEXT,
  timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);

🎯 状态更新逻辑建议

1.情绪值范围:1(糟糕)到 5(极好),低于 1 将被重设为 1

2.体力值范围:1 到 10,最低保持在 1

3.金钱无上限,可为负数(用于欠债逻辑扩展)

📌 后续可扩展方向

✅ 饥饿系统与能量消耗

✅ 角色职业成长与技能系统

✅ 食物库存与消耗逻辑

✅ 性格影响决策:节俭、享乐、冲动

✅ 自动日程生成(已实现)

🛠️ 事件触发与情境应变(如突发事故)

📱 Unity 渲染角色状态(通过 socket 连接)