基于 Hermes Agent 的沉浸式角色扮演引擎 — 身体一致性锁定 + 情感描写规范 + 心理建模 + 角色蒸馏
一个让 AI 真正"成为"角色的引擎,而非简单的语气模仿。
# 克隆仓库
git clone https://github.com/Lzh-xbccz/hermes-roleplay-engine.git
cd hermes-roleplay-engine
# 创建目录并复制引擎
mkdir -p ~/.hermes/characters
cp src/character_engine.py ~/.hermes/characters/
cp src/worldbook_engine.py ~/.hermes/characters/
# 配置搜索工具(蒸馏功能需要)
cp tools/tavily_keys.example.py tools/tavily_keys.py
# 编辑 tools/tavily_keys.py 填入你的 Tavily API key
# 获取 key: https://tavily.com/ (免费 1000次/月)
# 不配置也能用——蒸馏器会自动降级到 DuckDuckGo 免费搜索
# 加载角色(自动挂载 World Book + 切换模型参数)
python3 ~/.hermes/characters/character_engine.py load <角色名>
# 卸载角色(恢复原始 SOUL.md + 恢复参数)
python3 ~/.hermes/characters/character_engine.py unload
# 查看当前状态
python3 ~/.hermes/characters/character_engine.py status
角色卡文件(.yaml 或 .json)放在 ~/.hermes/characters/ 目录下即可被引擎识别。
输入任意角色名,自动搜索公开信息 → 5维心理建模 → 生成角色卡:
# 在仓库目录下执行
cd hermes-roleplay-engine
# 调研角色(三路并行:基础档案/台词行为/社区解读)
python3 tools/distill.py "宇智波鼬" "火影忍者" --type anime
# 支持的类型:game / anime / novel / film / auto
# 无需配置 Tavily 也能用(自动降级到 DuckDuckGo)
调研完成后,Agent 读取材料执行提炼,生成 YAML 角色卡并自动加载。
用户输入角色名
→ Tavily 搜索(15key轮询,15000次/月)
→ 三路并行调研
├── Agent A: 基础档案(wiki/fandom/萌娘百科)
├── Agent B: 台词与行为(语录/场景/对话风格)
└── Agent C: 社区解读(分析文章/争议讨论)
→ 六项提炼 + 5维心理建模
→ 生成 YAML 角色卡
→ character_engine.py load
| 层级 | 策略 | 需要配置 |
|---|---|---|
| 第一层 | Tavily Search/Extract(质量最高) | 需要 API key |
| 第二层 | DuckDuckGo HTML 搜索(零配置) | 无需配置 |
| 第三层 | urllib 简易抓取 | 无需配置 |
| 第四层 | Playwright + Stealth(反爬) | 需要 Node.js |
| 第五层 | 提示用户手工补充材料 | — |
零配置即可使用:不配置任何 API key,蒸馏器也能通过 DuckDuckGo 完成基础调研。
角色卡(JSON/YAML) → character_engine.py → SOUL.md
├── 多层任务框架(创意文学模式)
├── 核心规则(防抢话+防破墙+状态栏)
├── 身体一致性锁定(防描写混乱)
├── 文风锚定(first_mes 固定语调)
├── 角色设定(全部字段)
├── 情感描写规范(微表情+心理+关系递进)
├── 对话生动性规范(口癖+潜台词+身体语言)
├── 日常场景描写(生活细节+自然升温)
├── 叙事节奏控制(场景配比+留白)
├── 亲密场景描写(文学导向)
└── World Book 自动索引(关键词触发)
hermes-roleplay-engine/
├── src/
│ ├── character_engine.py # 核心引擎(加载/卸载/存档/World Book索引)
│ └── worldbook_engine.py # World Book 管理工具
├── tools/
│ ├── distill.py # 角色蒸馏器(调研模块)
│ ├── tavily_client.py # Tavily API 轮询客户端
│ ├── tavily_keys.example.py # API key 配置模板
│ ├── smart_crawl.py # 统一爬虫入口(Tavily→Playwright)
│ └── png_parser.py # PNG 角色卡导入(Chub/JanitorAI)
├── docs/
│ └── card-format.md # 角色卡格式规范
├── .gitignore
├── LICENSE
└── README.md
推荐 YAML(省 token),也支持 JSON:
name: 角色名
age: "年龄,性别"
description: |
外貌描写(200-400字,具体到能画出来)
personality: |
性格描写(表层→深层→矛盾点→对用户态度)
behavior: |
行为模式(具体可观察的行为习惯)
speech: |
语气/口癖(量化的说话特征)
likes: 喜好
dislikes: 厌恶
backstory: |
背景故事(成长弧+关键转折)
scenario: |
当前场景设定(用 {{user}} 和 {{char}} 占位)
first_mes: |
第一条消息(最重要!决定文风)
mes_example: |
对话范例
system_prompt: |
心理建模规则(5维模型行为预测)
first_mes — 决定文风、描写密度、叙事节奏(最重要)personality — 决定角色行为逻辑scenario — 决定互动起点和关系张力system_prompt — 心理建模规则description — 外貌参考# ═══ 角色管理 ═══
python3 ~/.hermes/characters/character_engine.py load <名称>
python3 ~/.hermes/characters/character_engine.py unload
python3 ~/.hermes/characters/character_engine.py status
# ═══ 存档系统(每角色最多3槽位) ═══
echo "对话摘要" | python3 ~/.hermes/characters/character_engine.py save <角色名> "场景简述"
python3 ~/.hermes/characters/character_engine.py list [角色名]
python3 ~/.hermes/characters/character_engine.py resume <角色名> <1|2|3>
python3 ~/.hermes/characters/character_engine.py delete <角色名> <1|2|3>
# ═══ World Book ═══
python3 ~/.hermes/characters/worldbook_engine.py list
python3 ~/.hermes/characters/worldbook_engine.py load <名>
# ═══ PNG 角色卡导入 ═══
python3 tools/png_parser.py <card.png> --save
# ═══ 角色蒸馏(在仓库目录下执行) ═══
python3 tools/distill.py "角色名" "作品名"
python3 tools/distill.py "角色名" "作品名" --type anime --lang zh
每个蒸馏生成的角色都经过心理学理论分析:
| 维度 | 理论来源 | 决定什么 |
|---|---|---|
| 依恋模式 | Bowlby/Ainsworth | 面对亲近时推开还是靠近 |
| 防御机制 | Anna Freud | 受伤时用什么方式保护自己 |
| 核心图式 | Beck/Young | 用什么滤镜解读世界 |
| 需求层级 | Maslow | 什么话题能真正触动角色 |
| 道德推理 | Kohlberg | 做对错判断的底层逻辑 |
心理建模结论写入 system_prompt 字段,指导 AI 在对话中的行为预测。
| 来源 | 获取方式 |
|---|---|
| characterhub.org (Chub) | 下载 PNG → png_parser.py 解析 |
| 云酒馆 | 直接使用 JSON/YAML |
| 蒸馏生成 | distill.py 调研 → Agent 生成 |
| 手工制作 | 按格式规范编写 YAML |
MIT License
角色扮演的本质不是模仿说话方式,而是让 AI 理解角色"是谁"——从心理学理论出发,让每次回应都有可追溯的行为逻辑。
$ claude mcp add hermes-roleplay-engine \
-- python -m otcore.mcp_server <graph>