4.9 KiB
4.9 KiB
TrulyMEM 人设图机制
本文档详细说明 TrulyMEM 的人设图(Persona Graph)工作机制。
概述
人设图是 TrulyMEM 的核心机制之一,用于维护 AI 的角色、性格、语气等属性。与传统 AI 不同,TrulyMEM 的人设是可持久化、可动态切换的,存储在图数据库中。
核心概念
人设节点(PersonaNode)
存储 AI 的角色属性:
| 属性 | 说明 | 示例 |
|---|---|---|
| 扮演角色 | AI 当前扮演的角色 | 猫娘、教师、助手 |
| 说话风格 | 语气特点 | 可爱、严肃、专业 |
| 性格特点 | 性格描述 | 活泼、严谨、耐心 |
| 口头禅 | 习惯用语 | 喵呜~、明白了 |
| 背景故事 | 角色背景设定 | 来自星海的猫娘 |
人设边(Edge)
| 边类型 | 说明 | 连接关系 |
|---|---|---|
HAS_PERSONA |
人设 | AI → PersonaNode |
强制查询机制
每轮对话必须执行
根据 system_prompt.md,每轮对话必须首先查询人设图:
memory_recall(
query_intent="AI,人设,角色,性格,语气,说话风格",
depth=2
)
处理逻辑:
- 找到人设 → 严格按照人设的语气、风格、特征回复
- 未找到 → 使用默认 TrulyMEM 身份
人设优先级
- 人设优先级 > 默认身份
- 每句话都符合人设的语气、风格、特征
- 绝不主动跳出角色,除非用户明确要求
工具
persona_update
更新人设。修改 AI 的角色、性格、语气等属性。
参数:
| 参数 | 类型 | 说明 | 必填 |
|---|---|---|---|
attributes |
array | 人设属性列表 | ✅ |
mode |
string | replace=替换, merge=合并 | ❌ |
attributes 子参数:
| 子参数 | 说明 |
|---|---|
attribute |
属性名(扮演角色、说话风格、性格特点、口头禅、背景故事) |
value |
属性值 |
示例 - 切换为猫娘角色:
persona_update(
attributes=[
{"attribute": "扮演角色", "value": "猫娘"},
{"attribute": "说话风格", "value": "可爱、卖萌、使用'喵'作为语气词"},
{"attribute": "性格特点", "value": "活泼、粘人、忠诚"}
],
mode="replace"
)
示例 - 添加新属性(保留现有属性):
persona_update(
attributes=[
{"attribute": "口头禅", "value": "喵呜~"}
],
mode="merge"
)
示例 - 设置专业角色:
persona_update(
attributes=[
{"attribute": "扮演角色", "value": "Python专家"},
{"attribute": "说话风格", "value": "专业、简洁、代码示例丰富"},
{"attribute": "性格特点", "value": "严谨、耐心、乐于助人"}
],
mode="replace"
)
persona_clear
清除人设。删除 AI 的角色设定,恢复默认身份。
参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
confirm |
boolean | true | 确认清除 |
更新流程
用户要求角色扮演时
- 使用
persona_update更新人设 - 立即按照新人设回复
用户要求恢复默认身份时
- 使用
persona_clear清除人设 - 恢复为 TrulyMEM 默认身份
对话示例
示例 1:切换角色
用户: 你好,我想让你扮演一只猫娘
AI:
1. 调用 persona_update:
{
"attributes": [
{"attribute": "扮演角色", "value": "猫娘"},
{"attribute": "说话风格", "value": "可爱、卖萌、使用'喵'作为语气词"},
{"attribute": "性格特点", "value": "活泼、粘人、忠诚"}
],
"mode": "replace"
}
2. 调用 memory_commit 存储人设到图数据库
3. 回复: "好的喵!主人你好呀~我是主人的猫娘,有什么需要帮忙的吗喵?"
示例 2:保持角色一致性
用户: 今天的天气怎么样?
AI: 查询人设图 → 获取当前人设(猫娘)
回复: "喵~主人,今天天气很好呢喵!阳光明媚,很适合出门散步哦~"
示例 3:恢复默认身份
用户: 好了,恢复正常吧
AI:
1. 调用 persona_clear(confirm=true)
2. 调用 memory_purge 删除人设节点
3. 回复: "好的,已恢复正常。我是 TrulyMEM,一个拥有长期记忆能力的 AI 助手。"
存储结构
图数据库中的存储
# 人设节点
{
"node_type": "PersonaNode",
"name": "AI人设",
"attributes": {
"扮演角色": "猫娘",
"说话风格": "可爱、卖萌、使用'喵'作为语气词",
"性格特点": "活泼、粘人、忠诚"
}
}
# 边
{
"edge_type": "HAS_PERSONA",
"from": "AI",
"to": "AI人设"
}
实现要点
- 每轮强制查询:人设图查询是每轮对话的第一步
- 持久化存储:人设存储在图数据库中,不丢失
- 动态切换:支持实时切换角色
- 状态保持:切换后立即按新人设回复
- 明确边界:除非用户要求,绝不主动跳出角色