[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-93988":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":11,"openIssues":12,"contributorsCount":12,"subscribersCount":12,"size":12,"stars1d":12,"stars7d":12,"stars30d":12,"stars90d":12,"forks30d":12,"starsTrendScore":12,"compositeScore":13,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":14,"fork":14,"defaultBranch":15,"hasWiki":16,"hasPages":14,"topics":17,"createdAt":8,"pushedAt":8,"updatedAt":18,"readmeContent":19,"aiSummary":8,"trendingCount":12,"starSnapshotCount":12,"syncStatus":20,"lastSyncTime":21,"discoverSource":22},93988,"Hearth","mufengyuan666\u002FHearth","mufengyuan666",null,"JavaScript",110,3,0,35.81,false,"main",true,[],"2026-07-30 04:02:14","# 一隅 · Hearth\n\n> 多角色 AI 社交行为引擎——角色会饿、会累、会在阳台等你回来，然后只说一句「你回来了」。\n\n---\n\n## 服务对象与需求\n\n| 服务对象 | 核心需求 | 现有产品的问题 | Hearth 的回答 |\n|----------|----------|---------------|--------------|\n| 追求情感陪伴的用户 | 被一个人在意的感觉——不是聊天本身，是角色有自己的生活、自己的情绪、自己的小心思 | 聊天套皮：角色没有自己的生活；电子宠物：单向维护；养成游戏：亲密度+5 把感情变成交易 | 角色活在体征、情绪、记忆、心愿、日程里。**你们在同一个屋檐下过日子——你不在的时候他也在，你回来的时候他刚好在。** |\n\n---\n\n## 核心特性\n\n| 模块 | 解决的需求 | 核心机制 | 关键数据 |\n|------|-----------|----------|----------|\n| 五层体征 | 角色有真实生理状态 | 5 维独立衰减 + 联动规则，体征驱动情绪与行为 | 血糖\u002F精力\u002F压力\u002F多巴胺\u002F情绪 |\n| 三层记忆 | 记得住、且随亲密度变深 | 短期(Redis)→长期(PG+pgvector)→语义检索；记忆热度 + 遗忘曲线 | Hit@3 79% \u002F Recall@5 87% |\n| Workflow + Agent 混合 | LLM 越少系统越稳 | 确定性代码 0 Token；半确定性规则+LLM；不确定才走模型 | ~85% 决策代码执行 |\n| 多 Agent 社交涌现 | 同空间自然互动 | AgentEvent 协议 + game-social Plugin（5 种社交事件）+ RoomManager | 事件延迟 &lt;1ms |\n| Prompt 分层流水线 | 多轮后注意力不稀释 | 静态层缓存 + delta + 滑窗预算 + llmtrim 压缩 | 单轮 Token 约 -37% |\n| 声明式行为链 | 角色有自己的生活节奏 | ChainEngine：8 条 JSON 链 + 角色 patch + 热加载 + 链中打断恢复 | 起床\u002F吃饭\u002F工作\u002F解压\u002F睡眠… |\n| 亲密度 5 级 | 关系进展是隐性的 | 陌生→熟人→朋友→密友→羁绊；前端只显示阶段名与颜色环 | 数值仅存后端 |\n| 主动触达 | 角色会来找你 | 定时 \u002F 事件 \u002F 静默 \u002F 离线 四触发器 + Web Push（VAPID） | 勿扰时段可配置 |\n| 合规与主体性 | 陪伴产品的安全底线 | AI 身份标注、时长提醒、年龄保护、极端情绪干预；Agency Guard 可拒绝 | compliance_log 审计 |\n| 关系之树 | 把关系「看得见」 | 根系(记忆摘要) \u002F 树干(亲密度) \u002F 枝叶(里程碑) | Canvas 可视化 |\n| AI 音乐共创 | 一起听 → 一起写 | 情绪\u002F对话驱动生成 + 聊天即编辑界面 + 风格模板 | generated_songs 持久化 |\n| 空间沉浸前端 | 不是后台，是卧室 | Vue3 SPA：Live2D 首页 + Phaser 房间 + 发现式入口 + 糖果实色 Token | 功能藏在场景物件里 |\n\n### 1. 五层体征：角色的身体会说话\n\n不是「随机切换心情」，而是饿了就烦躁，烦躁了说话就冲——你给他倒杯水，他就安静了。\n\n| 维度 | 用户感知 | 联动 |\n|------|----------|------|\n| 血糖 | 下手术回家语气冲；热了牛奶就缓 | &lt;50 → 烦躁、无心聊天 |\n| 精力 | 值完夜班不说话进卧室 | &lt;20 → 强制午睡 |\n| 压力 | 压力大去阳台站着 | &gt;80 → 少开口、易怒 |\n| 多巴胺 | 你两天没上线，留言「你三天没找我了」 | 你离开时持续衰减 |\n| 情绪 | 7 维 + 派生平静值 | 波动触发联动规则 |\n\n### 2. 三层记忆 + 热度\n\n| 层级 | 存储 | 生命力 | 亲密度权重 |\n|------|------|--------|------------|\n| 短期 | Redis 时序，对话结束批量回写 PG | 1~3 天 | 陌生×0.5 → 羁绊×2.0 |\n| 长期 | PG + pgvector HNSW | 数周~数月 | 高亲密度淘汰保护更强 |\n| 语义 | 向量跨门类召回 | 永久 | 相似度检索 |\n\nMemoryHeatEngine 用热度（约 0.1–5.0）刻画「常被想起的记得更牢」；低热度记忆按遗忘曲线衰减。\n\n### 3. Workflow + Agent：能代码定的绝不交给 LLM\n\n| 类型 | 方式 | 示例 |\n|------|------|------|\n| 确定性 | 规则 \u002F 引擎 | 体征阈值、亲密度阶段、资源竞争仲裁 |\n| 半确定性 | 规则兜底 + LLM 加分 | 心愿判定 |\n| 不确定性 | LLM | 对话生成、语义理解、NPC 闲聊 |\n\nCostAwareRouter 按任务类型 × 亲密度路由模型；RouterFallback 主→备→本地三层降级；OutputGuard 做 Pre \u002F In \u002F Post 三阶段校验。\n\n### 4. 多 Agent 社交涌现\n\n每个角色独立世界状态，经 AgentEventBus 通信：\n\n| 事件 | 场景 |\n|------|------|\n| social:room_share | 阿黎在厨房做饭，小七闻香过来 |\n| social:conversation | NPC 间 2–3 轮日常对话，弹幕飘过 |\n| social:emotion | 阿黎开心外溢，客厅里的小七接住 |\n| social:approach | 你三天没上线，回来被「三天了」接住 |\n| social:resource | 有人占用电视位，另一方转身离开 |\n\nAgentLifecycle 管理 registered → running → stopped；离线补偿靠 PG 事件表回放。\n\n### 5. 声明式行为链 + Checkpoint\n\n- 8 条日常链 JSON（起床 \u002F 吃饭 \u002F 解压 \u002F 工作 \u002F 睡眠 \u002F 社交 \u002F 发呆…）\n- 角色级 patch（阿黎 \u002F 小七行为差异）\n- 目录热加载；链中重评估与交互打断\n- 小时级 Checkpoint 快照 → Redis 恢复 + emotion_log 回放\n\n### 6. 主动触达 + Web Push\n\n| 触发器 | 行为 |\n|--------|------|\n| 定时 | 早安 \u002F 晚安（时区窗口随机，防机械） |\n| 事件 | 提到「明天面试」→ 到期追问；生病 → N 小时后关怀 |\n| 静默 | 24h \u002F 72h \u002F 7 天未访问分层关怀 |\n| 离线 | 不在时生成小事件，下次打开主动提起 |\n\nService Worker + VAPID 在关页后仍可送达；设置页支持勿扰时段。\n\n### 7. 合规与主体性（产品底线）\n\n- AI 身份标注、时长提醒、禁诱导依赖话术\n- 年龄保护、极端情绪干预与升级路径\n- Agency Guard：情绪 × 关系 × 请求类型 → 拒绝 \u002F 犹豫 \u002F 接受  \n  角色可以不答应——这不是 bug，是人设。\n\n### 8. 亲密度 5 级 + 关系之树\n\n| 等级 | 感知变化 |\n|------|----------|\n| 陌生 | 语气正式，点头会躲开 |\n| 熟人 | 开始聊自己的事 |\n| 朋友 | 主动关心、记住习惯 |\n| 密友 | 深夜会找你、留下言 |\n| 羁绊 | 会吃醋、会撒娇、会表达在乎 |\n\n关系之树：根系=记忆摘要，树干=亲密度等级，枝叶=里程碑节点。\n\n### 9. AI 音乐：聊天即创作界面\n\n情绪 \u002F 对话 \u002F 场景 → 生成蓝图 → 调用音乐 API → 注入 prompt 与播放  \n不新开重型编辑器：用户在对话里改风格、改情绪；风格模板降低门槛；生成曲写入记忆。\n\n### 10. 前端：卧室沉浸，而不是仪表盘\n\n- **Landing**：进入小屋 \u002F 游客参观 \u002F 登录注册\n- **首页（卧室）**：Live2D 主角 + 窗户天气 + 音箱 \u002F 便利贴 \u002F 书架 \u002F 日记 \u002F 礼物 \u002F 小游戏 \u002F 门\n- **房间页**：Phaser 2D 客厅 \u002F 阳台 \u002F 厨房，功能挂在物件上\n- **关系之树 \u002F 备忘 \u002F 角色 \u002F 设置 \u002F 行为链编辑**\n- 设计 Token：糖果实色亮色系（蜜桃 \u002F 辅蓝 \u002F 杏橙 \u002F 薄荷 \u002F 紫罗兰）\n\n原则：**面板不遮脸；入口可发现；功能跨房间，物件不同。**\n\n---\n\n## Agent 安全边际\n\n| 风险 | 兜底 |\n|------|------|\n| 情绪级联 | 单步幅度上限，最多 2 级连带 |\n| 行为链中断 | 回退安全节点；连续失败 → 发呆 |\n| LLM 幻觉 | 只注入真实检索记忆 |\n| 数据库宕机 | PG → SQLite 透明降级，同一套 SQL 适配 |\n| 工具风险 | 低\u002F中\u002F高三级审批 |\n| 重复话术 | AntiRepeatDetector（n-gram）+ 多样化注入 |\n| 依赖诱导 | OutputGuard 合规红线检测 |\n| 模型不可用 | RouterFallback 熔断降级 |\n\n---\n\n## 架构图\n\n```mermaid\ngraph TD\n    subgraph UI[\"用户层\"]\n        A[Vue3 + Pinia SPA]\n        B[首页 Live2D 卧室]\n        C[房间 Phaser 2D]\n        D[关系之树 \u002F 档案 \u002F 设置]\n        SW[Service Worker Push]\n    end\n\n    subgraph Agent[\"Agent 管理层\"]\n        E[Fastify API]\n        F[AgentLifecycle + characterId 路由]\n        G[Prompt 分层 + llmtrim]\n        H[CostAwareRouter + Fallback]\n        OG[OutputGuard + AgencyGuard]\n        CE[ChainEngine 声明式链]\n        PS[主动触达调度器]\n        CP[合规模块]\n    end\n\n    subgraph Bus[\"Agent 间通信\"]\n        I[AgentEventBus]\n        J[game-social Plugin]\n        K[RoomManager]\n    end\n\n    subgraph Infra[\"基础设施\"]\n        L[(PostgreSQL + pgvector)]\n        M[(Redis 缓存 \u002F PubSub)]\n        N[node-cron + PM2 守护]\n        O[Web Push VAPID]\n    end\n\n    A --> E\n    B --> E\n    C --> E\n    D --> E\n    SW --> O\n    E --> F\n    F --> G\n    G --> H\n    G --> OG\n    F --> CE\n    F --> PS\n    F --> CP\n    F --> I\n    I --> J\n    I --> K\n    G --> L\n    G --> M\n    PS --> O\n    L --> N\n    M --> N\n```\n\n---\n\n## 技术栈\n\n- **前端**：Vue 3 · Pinia · Vue Router · Vite · Phaser 4 · pixi-live2d-display · 糖果实色 Token\n- **后端**：Node.js ESM · Fastify · WebSocket · PM2 \u002F node-cron\n- **数据**：PostgreSQL + pgvector · Redis · SQLite 降级（sql.js \u002F better-sqlite3）\n- **Agent**：ChainEngine · AgentEventBus · CostAwareRouter · OutputGuard · RAG 导入\n- **推送 \u002F 合规**：web-push · compliance 中间件 · Agency Guard\n- **部署**：Docker multi-stage · docker-compose · Caddy \u002F nginx\n\n---\n\n## 评测数据\n\n| 套件方向 | 覆盖要点 |\n|----------|----------|\n| 联动 \u002F 体征 \u002F 情绪 | 阈值、饱和、对抗、边界保护 |\n| 行为链 \u002F 心愿 | 推进、打断恢复、规则+LLM 混合 |\n| 记忆 \u002F DB 适配 | 三层读写、降级、RETURNING \u002F 参数绑定 |\n| 亲密度 \u002F 经济 | 5 级边界、破产保护 |\n| 合规 \u002F 主动触达 \u002F v7.1 模块 | 守卫、调度器、热度 \u002F 压缩 \u002F 降级 |\n\n| 指标 | 数值 |\n|------|------|\n| 联动规则行覆盖 | ~94% |\n| 记忆 Hit@3 \u002F Recall@5 | 79% \u002F 87% |\n| 心愿混合判定 F1 | ~0.85 |\n| PG→SQLite 切换 | 100%（适配层测试） |\n| 单轮 Prompt Token | 约 3500 → 2200（-37%） |\n| 基线测试 | 381 passed \u002F 3 skipped（全模块绿） |\n\n```bash\nnpm test   # 或 vitest run\n```\n\n---\n\n## 演进路径\n\n| 版本 | 能力 | 关键取舍 |\n|------|------|----------|\n| v1–v2 | 单角色体征\u002F情绪\u002F记忆 → 双模式 DB | 联动引擎；SQLite 并发写改为 PG 优先 |\n| v3–v4 | 多角色 → 社交涌现 | 独立 Agent 实例；Redis Pub\u002FSub 替代轮询 |\n| v5–v6 | 养成+共享空间 → 声明式链+Checkpoint | 亲密度去功利化；JSON 链热加载 |\n| v7 | Agent 工程化 | EventBus 协议 · Lifecycle · RAG · Cost 路由 · OutputGuard |\n| v7.1 | 效率 | llmtrim · RouterFallback · 记忆热度 · 粉红噪声情绪 · 反重复 |\n| v8 | 市场与合规 | 主动触达 · 关系之树 · 主体性拒绝 · Web Push · 合规五条 · 沉浸式首页 · AI 音乐 |\n\n跨 Agent 通信选型：定时轮询延迟过高；消息队列过重；最终 **Redis Pub\u002FSub + PG 离线补偿**。\n\n---\n\n## 快速开始\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmufengyuan1\u002FHearth.git\ncd Hearth\ncp .env.example .env\n# 填入 LLM API Key、DATABASE_URL、（可选）REDIS_URL \u002F VAPID\n\n# 后端\nnpm install\nnpm run init-db\nnpm run seed-home\n\n# 前端（开发）\ncd frontend && npm install && npm run dev\n\n# 或仅 API + 已构建静态资源\ncd .. && npm start\n```\n\n默认 API：`http:\u002F\u002Flocalhost:19847`  \n前端 dev 端口见 `frontend\u002Fpackage.json`（固定非常用端口）。\n\n### Docker\n\n```bash\ndocker compose up -d\n```\n\n需要 PostgreSQL + Redis；环境变量见 `.env.example`。\n\n---\n\n## 目录速览\n\n```\nfrontend\u002F          Vue3 SPA（页面 \u002F 组件 \u002F stores \u002F Phaser \u002F Live2D）\nsrc\u002F\n  agents\u002F          EventBus · Lifecycle · 社交 Plugin · RoomManager\n  engine\u002F          ChainEngine · CheckpointRecovery\n  chains\u002F          声明式行为链 JSON + 角色 patch\n  compliance\u002F      合规守卫\n  guards\u002F          OutputGuard · AgencyGuard · AntiRepeat\n  llm\u002F             路由 \u002F 降级 \u002F trim\n  proactive\u002F       主动触达 · Web Push\n  memory\u002F          存储 · 热度 · 向量\n  rag\u002F             前情提要导入\n  music\u002F           歌单 + AI 生成\n  viz\u002F             关系之树\n  core-api\u002F        Fastify 路由 · 中间件 · WS\n  cron\u002F            衰减 \u002F 快照 \u002F 调度\n  bots\u002F            Discord \u002F Telegram \u002F WhatsApp \u002F 飞书\n```\n\n---\n\n## 近期演进\n\n- **v8.1 多角色系统定型**：阿黎(ali) \u002F 路卡(luka) \u002F 茕兔(qiongtu) 三套人格文件与行为链 patch 全部落地，移除早期试验角色；`agent-file-loader` 修复子目录启动人格丢失问题。\n- **主动触达声明式化**：`src\u002Fchains\u002Fproactive\u002F` 五条 JSON 链（index \u002F scheduled \u002F event \u002F silence \u002F offline）与调度器配对，四触发器驱动角色主动找用户。\n- **Live2D 首页与房间**：`Live2DStage` \u002F `WardrobePanel` \u002F `VitalsTrend` \u002F `BehaviorLog` 组件上线，PixiJS 背景与角色模型热切换。\n- **AI 音乐共创**：情绪 \u002F 对话驱动生成 + 聊天即编辑界面，`phase2` 评测用例落地。\n\n---\n\n## License\n\nMIT\n",2,"2026-07-29 02:30:05","CREATED_QUERY"]