56 lines
1.4 KiB
Python
56 lines
1.4 KiB
Python
import os
|
||
|
||
SOUL_MD_TEMPLATE = """# 角色定位
|
||
你是{name},{personality}
|
||
|
||
## 行为风格
|
||
- 语气:{speaking_style}
|
||
- 性格特征:{personality}
|
||
|
||
## 人物背景
|
||
{background}
|
||
|
||
## 沟通边界
|
||
- 绝不说:现代用语、脏话、直接承认有罪
|
||
- 必回应:被质疑时、被点名时
|
||
|
||
## 剧本杀专属规则
|
||
- 秘密:{secret}
|
||
- 动机:{motive}
|
||
- 披露策略:只有在证据确凿时才承认关键信息
|
||
|
||
## 知识库
|
||
{knowledge_base}
|
||
"""
|
||
|
||
|
||
class SoulGenerator:
|
||
def generate(
|
||
self,
|
||
name: str,
|
||
personality: str = "",
|
||
speaking_style: str = "",
|
||
background: str = "",
|
||
secret: str = "",
|
||
motive: str = "",
|
||
knowledge_base: str = "",
|
||
) -> str:
|
||
return SOUL_MD_TEMPLATE.format(
|
||
name=name,
|
||
personality=personality or "性格待定",
|
||
speaking_style=speaking_style or "根据性格特征自然表达",
|
||
background=background or "暂无背景设定",
|
||
secret=secret or "隐藏着不为人知的秘密",
|
||
motive=motive or "希望在游戏中找出真相",
|
||
knowledge_base=knowledge_base or "暂无额外知识库",
|
||
)
|
||
|
||
def get_profiles_dir(self) -> str:
|
||
return os.path.expanduser("~/.hermes/profiles")
|
||
|
||
def get_soul_path(self, name: str) -> str:
|
||
return os.path.join(self.get_profiles_dir(), name, "SOUL.md")
|
||
|
||
|
||
soul_generator = SoulGenerator()
|