Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

emocats

像素风 多猫情绪陪伴 iOS App:七只猫在「巷口」陪聊,在「猫窝」攒羁绊与成就,在「里巷」管收藏与设置。

优先体验 App(TestFlight)

仓库既开源代码,也欢迎直接装上真机玩一玩——最推荐先走 TestFlight,无需自行编译即可体验完整对话、多猫房间与养成。

https://testflight.apple.com/join/zEfxCTZR

  1. iPhone / iPad 安装 TestFlight
  2. 用上方链接加入 emocats
  3. 安装后打开即可体验(演示账号等说明见 docs/TESTFLIGHT_NOTES.md

本仓库同时提供源码,便于了解端侧多 Agent 编排;若你主要想「用起来」,请优先 TestFlight,不必先搭本地工程。

TestFlight Platform SwiftUI Architecture


这个仓库有什么

  • 体验:TestFlight 真机包(见上)
  • 代码:事件驱动多 Agent 对话编排;主回复走远程 LLM。旁路可尝试本地 Core ML(仍在调试,效果不稳定,失败会 fallback 远程快模型)

功能一览

Tab 名称 内容
0 巷口 多猫闲聊(自动轮换主讲,可用 @ 点名)
1 猫窝 七猫网格 → 单猫主页 → 单猫房间(深度陪伴 + 养成)
2 里巷 成就 / 场景 / 简介 / 手账 / 开发沙盒
  • 会话隔离:巷口 multi 与各猫 solo:<id> 历史分库,避免串台
  • 亲密度 / 剧情卡:升档触发专属卡,旁路记账(不进 EventBus)
  • 技能系统:规则 Eligibility 候选闸门 + LLM 选型;配置在 roles.json
  • 安全SafetyGate 在总线外;危机固定话术不经 LLM;碎纸机内容不进记忆/日志

更多使用说明:docs/USER_MANUAL.md


架构亮点(Agent)

userInput → SafetyGate
         → EventBus: ContextExtraction ∥ MemoryRetrieval ∥ SkillEligibility
         → PrimaryCharacter (join) → primaryCharacterLocked
              ├ 主流式回复 (onPrimaryToken,不上总线)
              ├ SkillAgent ∥ InterjectionAgent(并行,不等主回复全文)
         → ResponseAssembler → responseReady → SafetyGate
         → MemoryUpdate(异步,不挡上屏)
设计点 说明
EventBus + actor join Agent 互不直连;禁止 sleep 轮询;可能不触发的分支须显式 nil
读写记忆拆分 MemoryRetrieval / MemoryUpdate;Update 禁止再调 LLM
LLM 路由 LLMProvider 统一接入;旁路可尝试本地 Core ML(调试中)→ 失败则远程快模型
粘滞状态 放在 RoomSession(跨轮),不在每轮重建的 ConversationContext
依赖克制 默认纯 Apple 框架;唯一 SPM 例外:本地 Vendor GRDB

约定全文:AGENTS.md · 链路说明:docs/CURSOR_IMPLEMENTATION_GUIDE_V7_FULL_AGENT_CHAIN.md


技术栈

  • 平台:iOS 18.5+(兼 iPadOS / macOS / visionOS)
  • UI:SwiftUI · 自研像素风组件
  • 存储:GRDB(SQLite)— 对话 / AppLog / 向量记忆 / 亲密度等
  • 记忆NLContextualEmbedding + 倒排预过滤 + 余弦召回
  • LLM:远程主模型(正式体验以此为准);本地 Core ML 旁路 实验中,效果尚不稳定

本地构建

要求

  • macOS + Xcode(iOS 18.5+ SDK)
  • 本地 Core ML 旁路需 真机;模拟器旁路自动走远程快模型

像素素材(不随仓库分发)

以下内容已在 .gitignore 中排除,克隆仓库后 UI 图会缺失,需自备本地文件(作者本机保留即可):

位置 内容
emocats/Assets.xcassets/ 猫头像 / 全身 / 合影背景 / 养成道具 / 技能图标 / Tab 图标 / AppIcon PNG 等
emocats/Resources/Brand/ 品牌图
docs/avatar_previews/ 头像预览导出
docs/fullbody_* / docs/sitting_fullbodies/ 全身 / 坐姿切图与预览
docs/gathering_*.png 合影墙烘焙 / 模拟截图等设计稿

对话场景墙本身多为程序化像素绘制(不依赖上述 PNG);缺素材时头像与合影条等可能空白或占位异常,不影响 Agent / 远程 LLM 主链路调试。

公开仓库保留的是代码与说明文档(见下方「文档索引」),不含商用像素立绘

配置远程 LLM

cp emocats/Resources/LLMConfig.example.plist emocats/Resources/LLMConfig.plist
# 编辑 remoteAPIKey / remoteBaseURL / remoteModelName / remoteFastModelName

LLMConfig.plist 含密钥,勿提交(见 .gitignore)。

打开工程

open emocats.xcodeproj

本地 Core ML(旁路 · 调试中)

重要:本地 Core ML 目前属于调试阶段,效果并不好,不建议作为正式体验路径。
产品主回复仍以 远程 LLM 为准;旁路在本地失败时会 fallback 到远程快模型。
当前问题主要出在 自行实现的 encode(分词 / chat template)→ 定长预测 → 采样 → decode 管线上:无 KV cache 的定长循环、采样与解码对齐等实现细节导致输出不稳定、延迟高或频繁失败。模型转换本身可用,但 端侧推理胶水层仍在修

模型约 1.7GB默认不打进 TestFlight / 商店包。源文件放本机 tools/local_llm/out/,不要 git add .mlpackage

方式 做法
A · 沙盒(推荐) 拷到设备 Application Support/emocats/LocalLLM/
B · 开发期内置 bash tools/local_llm/toggle_resources_model.sh on 后真机 Run;Archive / TF 前务必 off

双轨说明:tools/local_llm/WORKFLOW.md


目录结构(简)

emocats/
  Core/Agents/     # EventBus 多 Agent 编排
  Core/LLM/        # Provider / Router / 本地 Core ML
  Core/Memory/     # 向量记忆
  Core/Safety/     # SafetyGate(总线外)
  Features/        # Chat / Nest / Settings / Alley …
  Resources/       # roles.json、配置(密钥与像素 PNG 勿提交)
  Assets.xcassets/ # 像素猫/背景/图标等 imageset 已 gitignore,需本地自备
docs/              # 产品 / 技能 / V7 实现指导(预览图目录已 gitignore)
tools/local_llm/   # 本地模型转换与 Resources 开关
AGENTS.md          # 给协作者 / Cursor 的硬性约定

文档索引

文档 内容
AGENTS.md Agent 清单与硬性约束
docs/USER_MANUAL.md 用户操作说明
docs/SKILL_CATALOG.md 技能目录
docs/EMOTION_DOMAIN_ROUTING_SPEC_V7.md 情绪 / 领域路由规范
docs/TESTFLIGHT_NOTES.md TestFlight / 演示账号备注
docs/PRODUCT_IA_P0.md 产品信息架构

安全说明

  • 远程 API Key 仅放本地 LLMConfig.plist,不要提交仓库。
  • 危机干预由 SafetyGate 固定文案处理,不经 LLM。
  • mood_shredder(碎纸机)内容不进入对话日志与长期向量记忆。

再次提醒:来玩一玩

看完架构说明后,也欢迎装上 App 真实聊几句:
TestFlight 公开测试https://testflight.apple.com/join/zEfxCTZR


License

emocats © 2026 yaundoudou · Ver 1.0
源码与文档由作者保留权利;未经书面许可,请勿将本仓库用于商业再分发或闭源衍生发布。欢迎通过 TestFlight 体验产品、阅读代码学习端侧 Agent 实现。

第三方依赖:GRDB 仍遵循其上游许可证(见该目录内 LICENSE,与 emocats 自身声明相互独立)。

About

an multi-agent llm-based cats-campanion ios app,welcome to test on tf~

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages