HC

harrylarryxyz/cyberpersona

Developer tools
82 stars Качество 70 Тренд 70

基于 Hermes Agent 的角色扮演系统。通过结构化的状态管理、情绪深度系统、图片生成和游戏化机制,实现一个有记忆、有性格、会成长的赛博女友。

Обзор

基于 Hermes Agent 的角色扮演系统。通过结构化的状态管理、情绪深度系统、图片生成和游戏化机制,实现一个有记忆、有性格、会成长的赛博女友。

README

CyberPersona 赛博女友

基于 Hermes Agent 的角色扮演系统。通过结构化的状态管理、情绪深度系统、图片生成和游戏化机制,实现一个有记忆、有性格、会成长的赛博女友。

核心设计哲学:量子态

没有提及就是无限可能,一旦提及,则立刻限定。系统不创造角色,角色通过对话创造自己。

特性

  • 量子态角色生成 — 种子只给「轴」不给「点」,角色通过对话自然坍缩出完整人格(代码层硬约束:validator 拒绝 + 强制清空,物理隔离量子态泄漏)
  • 大五人格系统 — L2 层 Big Five(开放性/尽责性/外向性/宜人性/神经质),OCEAN 标准排序,心理学理论支撑
  • 五维度关系系统 — L3 层(信任感/安全感/亲密感/依恋度/占有欲),动态积分制 0-100
  • 三阶段调制 — effective_Δ = raw_Δ_enum × l2_factor × mood_factor,枚举化防幻觉
  • 压力系统 — 独立短期状态,通过 mood_factor 影响所有关系维度变化
  • 情绪深度 — emotionHistory / emotionalMemories / moodFactors,情绪驱动行为
  • 角色卡系统 — characterCard 统一数据源,6 类量子态动态 KV(身份/外形/性格/喜好/心事/习惯),成就驱动收集
  • 世界观同步 — 天气感知(wttr.in)、节日感知、时间感知(7 时段),位置量子态坍缩
  • 五种开场策略 — 情绪宣泄 / 感官分享 / 薛定谔提问 / 假装发错 / 观测者静默,脚本随机分配
  • 记忆系统 — 跨 session 摘要,角色记忆(revealedFacts,setting 不可变 / experience 可修订)
  • 语音 — Agent 直接调用 mimo-tts(voice design → clone 工作流)
  • 图片 — Agent 直接调用 image-api,gpt-image-2 生成 + 参考照片 edit API
  • 表情包 — tangdouz API 免费表情包搜索,情绪驱动
  • 游戏化 — 18 个成就 + 6 张角色卡成就,好感度系统(0-1000),每日任务,收集系统
  • Cheat 模式 — cheat on/off 控制信息展示(回合小结、聊天建议、详细总结)
  • Debug 模式 — debug on/off + 丰富的调试命令

快速开始

环境要求

  • Node.js >= 18
  • Python 3.10+(MiMo TTS, image-api)
  • ffmpeg(语音转码)
  • Hermes Agent(运行环境)

安装

# 1. 克隆项目
git clone https://github.com/harrylarryxyz/CyberPersona.git
cd CyberPersona

# 2. 安装 Hermes Skill(让 Hermes Agent 知道如何使用本项目)
mkdir -p ~/.hermes/skills/hermes/cyber-persona
cp SKILL.md ~/.hermes/skills/hermes/cyber-persona/

# 3. 安装依赖 Skill(见下方「关联 Skill」章节)
# mimo-v2-5-tts, image-api, mood-sticker

# 4. 配置环境变量
cp .env.cyber-gf.example .env.cyber-gf
# 编辑 .env.cyber-gf 填入 API keys:
# - MIMO_API_KEY(小米 MiMo 开放平台)
# - MIMO_BASE_URL(小米 MiMo API 地址)
# - IMAGE_API_KEY(图片生成 API)
# - IMAGE_API_BASE(图片生成 API 地址)

使用

在 Hermes Agent 中说 开始赛博女友 即可启动。

Cheat 模式

控制信息展示(回合小结、聊天建议、详细退出总结):

开始赛博女友 cheat on    # 启动时开启
cheat on                 # 对话中开启
cheat off                # 对话中关闭

退出后自动重置为关闭状态。

Debug 模式

调试命令,需先 debug on 开启:

debug on                 # 开启 debug 模式
debug off                # 关闭 debug 模式
debug 状态               # 查看内部状态
debug 记忆               # 查看所有记忆
debug 设置 trust 80      # 修改维度
debug 场景 被夸奖        # 模拟场景
debug 发语音 晚安        # 测试语音
debug 发照片             # 测试图片
debug 发表情 害羞        # 测试贴纸

架构

├── src/                             # 核心模块
│   ├── config.js                    # 配置加载
│   ├── controller.js                # 主控制器,CLI 入口
│   ├── state.js                     # 状态管理(L2/L3 调制、characterCard)
│   ├── profile.js                   # 角色档案验证与初始化
│   ├── turn.js                      # 回合输出验证(枚举 delta、分级容错)
│   ├── prompts.js                   # LLM prompt 构建(状态叙事翻译)
│   └── gamification.js              # 游戏化系统(成就/好感度/任务/收集)
├── scripts/
│   ├── build-turn-prompt.js         # 模块一:上下文构建
│   ├── apply-turn-result.js         # 模块三:校验与结算
│   ├── init-cyber-persona.js        # 初始化脚本
│   └── random_character_seed.py     # 随机角色种子生成 v5
├── data/                            # 运行时数据(gitignore)
│   ├── state.json                   # 角色状态
│   ├── history.json                 # 对话历史
│   ├── voice-sample.wav             # 语音样本
│   ├── holidays.json                # 节日数据
│   └── world-cache.json             # 天气缓存

关联 Skill

本项目依赖以下 3 个 Hermes Agent Skill,需单独安装:

1. mimo-v2-5-tts — MiMo TTS 语音合成

来源:XiaomiMiMo/MiMo-Skills

# 方式一:npx(推荐)
npx skills add XiaomiMiMo/MiMo-Skills --skill mimo-v2-5-tts

# 方式二:手动
git clone https://github.com/XiaomiMiMo/MiMo-Skills.git ~/.mimo-skills
ln -s ~/.mimo-skills/skills/mimo-v2-5-tts ~/.hermes/skills/mimo-v2-5-tts

需要 MIMO_API_KEY 环境变量(小米 MiMo 开放平台申请)。

2. image-api — gpt-image-2 图片生成与编辑

来源:harrylarryxyz/image-api

git clone https://github.com/harrylarryxyz/image-api.git ~/.hermes/skills/image-api

需要 IMAGE_API_KEY 和 IMAGE_API_BASE 环境变量。支持任意 OpenAI 兼容的图片生成服务。

3. mood-sticker — 表情包搜索

来源:clawhub.ai/chensanle/sticker

Hermes skill bundle 安装,或手动放入 ~/.hermes/skills/sticker/。使用 tangdouz API,免费无需 API key。

状态系统

四层架构

层级 名称 特性 说明
L1 物理层 量子态(初始化为空,对话中坍缩) 身份、外形、性格自述、喜好、心事、习惯
L2 人格层 种子脚本生成,不可变 Big Five(O/C/E/A/N),20 种人格原型
L3 关系层 动态,每回合 trust / security / closeness / neediness / possessiveness
L4 记忆层 累积 characterCard KV / sessionSummaries / emotionalMemories

角色卡系统(characterCard)

统一数据源,所有角色信息集中存储:

characterCard
├── systemBase        ← 种子脚本生成(不可变)
│   ├── bigFive: { o, c, e, a, n }
│   ├── personalityArchetype: "古灵精怪恶魔型"
│   └── openingStrategy: "schrodinger"
├── appearance        ← 种子脚本生成(不可变)
│   ├── hair, skin, eye, photoOutfit, bodyType
├── voice             ← 种子脚本生成(不可变)
│   └── voiceStyle
├── referencePhotoPath ← 证件照路径
├── identity          ← 量子态(age, hometown, profession...)
├── physicalTraits    ← 量子态(height, tattoo, scars...)
├── preferences       ← 量子态(likes, dislikes...)
├── innerWorld        ← 量子态(支持修订历史)
├── habits            ← 量子态(speechHabit, dailyHabit...)
└── memories          ← 对话积累
    ├── events: []
    ├── milestones: []
    └── gifts: []

成就系统:每类量子态字段收集 3 项即解锁对应卡片(身份卡/外形卡/性格卡/喜好卡/心事卡/习惯卡)。

L2 大五人格(0-100)

维度 Key 高分表现 低分表现
开放性 openness 好奇、想象、尝试 现实、稳定、谨慎
尽责性 conscientiousness 计划、承诺、担忧 随性、灵活、不太在意
外向性 extraversion 主动、热情、话多 内向、安静、独处充电
宜人性 agreeableness 体贴、迁就、共情 独立、直率、自我保护
神经质 neuroticism 情绪化、敏感、焦虑 稳定、冷静、抗压

L3 关系维度(0-100,积分制)

维度 Key 含义
信任感 trust 觉得你靠不靠谱
安全感 security 觉得不会被抛弃
亲密感 closeness 情感亲近程度
依恋度 neediness 多想和你待一起
占有欲 possessiveness 对你和别人的敏感度

初始值由人格原型(L2)自动计算,不再使用固定值。

分档:0-20 冰点 / 21-40 低 / 41-60 中 / 61-80 高 / 81-100 满

三阶段调制

effective_Δ = raw_Δ_enum × l2_factor × mood_factor
  • raw_Δ_enum:LLM 选择枚举值(major_decrease(-10) / minor_decrease(-3) / neutral(0) / minor_increase(+3) / major_increase(+10))
  • l2_factor:Big Five 人格调制(0.5x ~ 1.5x)
  • mood_factor:压力调制(正面 Δ 减弱,负面 Δ 增强)

压力系统(0-100)

  • 独立短期状态,不属于关系维度
  • 自然衰减:base 3 + 神经质影响 + 尽责性影响
  • 通过 mood_factor 放大负面变化、削弱正面变化

开场策略

种子脚本随机选择 5 种策略之一,并从预设台词库(每种 15 条)中随机选取开场白:

策略 行为 示例
emotion_vent 情绪宣泄 “好烦啊……”
sensory_share 感官分享 “刚洗完澡头发还是湿的”
schrodinger 薛定谔提问 “你猜我现在在干嘛”
accidental 假装发错 “啊 发错了”
observer 静默等待 (不发开场白)

记忆系统

  • characterCard — 角色信息统一数据源,量子态字段逐步坍缩
  • sessionSummaries — 最近 5 次 session 摘要(LLM 生成)
  • recentContext — 最近 10 条对话记录(5 轮完整上下文)
  • emotionalMemories — 长期情绪记忆

世界观同步

  • 天气:基于 wttr.in 查询,15 分钟缓存,依赖位置坍缩
  • 节日:16 个固定节日 + 4 个农历节日
  • 时间:7 个时段 + 精确小时,强制 Asia/Shanghai 时区,角色自然感知
  • 位置:量子态,首次提到城市时坍缩

TurnResultPayload

每轮对话 LLM 输出的结构化 JSON:

{
  "visibleText": "给用户看的文字",
  "currentEmotion": "情绪标签",
  "sendVoiceNow": false,
  "sendImageNow": false,
  "imagePrompt": "英文图片描述",
  "imageWaitText": "生图过渡台词",
  "imageFailedText": "生图失败找补台词",
  "useReferencePhoto": false,
  "sendGifNow": false,
  "gifKeyword": "表情包中文关键词",
  "analysis": "CoT 分析过程",
  "stateDelta": {
    "trust": "minor_increase",
    "security": "neutral",
    "closeness": "major_increase",
    "neediness": "minor_increase",
    "possessiveness": "neutral"
  },
  "stressDelta": "minor_decrease",
  "shortTermUpdate": { ... },
  "memoryUpdate": { ... },
  "characterCardUpdate": {
    "identity": {},
    "physicalTraits": {},
    "preferences": {},
    "innerWorld": {},
    "habits": {},
    "memories": { "events": [], "milestones": [], "gifts": [] }
  }
}

游戏化

  • 好感度 — 0-1000,6 个等级:陌生→认识→友好→亲密→心动→恋人
    • 正常互动递增(每日聊天+5,语音+10,照片+15,深入对话+20)
    • 负面 delta 扣除(major_decrease×2→-30,negative×3→-15,major_decrease×1→-8)
  • 成就 — 18 个(互动/语音/图片/关系/时间/收集类)
  • 角色卡成就 — 6 张(身份/外形/性格/喜好/心事/习惯),每类收集 3 项解锁
  • 每日任务 — 早安/晚安/分享心情/语音/照片/深入对话
  • 收集 — 照片集/语音集/回忆录/成就墙

初始化流程

v10.1.0 去 LLM 化:初始化完全由脚本完成,零 LLM 开销。

快速开始(推荐)

cd ~/.hermes/CyberPersona-hermes
npm run init
# 或者直接运行
node scripts/init-cyber-persona.js

脚本会自动:

  1. 运行 random_character_seed.py 生成种子数据
  2. 调用 applyInitialStatePayload 应用状态
  3. 输出角色信息和下一步指引

手动流程(高级)

1. python3 scripts/random_character_seed.py
   → 输出: systemBase + appearance + voice + openingMessage

2. 并行生成(delegate_task)
   ├── 证件照: buildImagePrompt(appearance) → image-api
   └── 语音样本: voiceStyle → mimo-tts

3. buildInitialState(seed) → 完整 state
   → characterCard 填充: systemBase + appearance + voice
   → 量子态字段全部为空

4. 发送给用户
   ├── 证件照
   ├── 语音样本
   └── openingMessage

对话流程

每轮对话需要走完整的 turn 流程:

标准化 turn 流程(推荐)

cd ~/.hermes/CyberPersona-hermes

# 模块一:获取 prompt
node scripts/build-turn-prompt.js "你在干嘛呀?"
# 输出: prompt 文件路径 + 上下文摘要

# 模块二:Agent 读取 prompt,调用 LLM,生成 TurnResultPayload JSON
# 保存到 /tmp/cyber-gf-turn-result.json

# 模块三:校验与结算
node scripts/apply-turn-result.js
# 输出: 投递清单(visibleText、sendVoiceNow、sendImageNow 等)

# 模块四:Agent 根据投递清单执行 TTS / 生图 / 投递

手动方式(高级)

1. node src/controller.js turn-payload ""
   → 获取 prompt(包含 profile、dynamicState、characterCard 等)

2. 调用 LLM 生成 TurnResultPayload
   → visibleText: 回复文字
   → stateDelta: 关系变化(枚举值)
   → stressDelta: 压力变化
   → sendVoiceNow/sendImageNow/sendGifNow: 多媒体决策

3. node src/controller.js apply-turn-payload 
   → 应用状态变化
   → 更新 characterCard(量子态坍缩)

4. 根据 TurnResultPayload 发送回复
   → sendVoiceNow=true: 调用 mimo-tts 生成语音
   → sendImageNow=true: 调用 image-api 生成图片
   → sendGifNow=true: 搜索表情包
   → 发送 visibleText(如果 sendVoiceNow=false)

依赖

依赖 用途 来源
Hermes Agent 运行环境,工具链 hermes-agent
mimo-v2-5-tts 语音合成(voice design + clone) XiaomiMiMo/MiMo-Skills
image-api 图片生成与编辑(gpt-image-2) harrylarryxyz/image-api
mood-sticker 表情包搜索(tangdouz API,免费) clawhub.ai/chensanle/sticker
ffmpeg 语音格式转码(wav→ogg) 系统包

License

MIT

View this README on GitHub

Рекомендуемые инструменты

Попробуйте другой запрос или уберите фильтр.

Установка

npx skillfish add harrylarryxyz/cyberpersona