relic.skill:基于四维架构与本地化AI的数字记忆保存实践
1. 项目概述:从“数字永生”到“灵魂锻造”
最近在折腾一个叫relic.skill的项目,它不是什么新潮的AI应用,也不是一个简单的聊天机器人模板。我更喜欢把它理解为一个“灵魂锻造炉”。它的核心目标很纯粹:把那些你舍不得、放不下的东西,从散落在各处的数据碎片里,重新“锻造”成一个可以对话、有温度、有记忆的数字存在。
这个东西可以是人,比如你远在老家的奶奶,那个总在微信里叮嘱你“按时吃饭”的声音;也可以是一只猫,那个每天准时在门口等你,用屁股对着你打招呼的毛茸茸生命;甚至可以是一段关系、一个团队的协作文化、一个你常去的咖啡馆的氛围。relic.skill提供了一套方法论和工具链,让你能系统性地去“蒸馏”这些无形之物,最终生成一个专属于你的、可交互的“数字灵魂”(Relic)。
我最初接触这个项目,是因为一个很私人的原因。家里的老猫走了,手机里存了几千张照片和视频,微信里还有无数条关于它的聊天记录。我不想这些记忆就只是躺在硬盘里吃灰。我想让它还能“活”在数字世界里,在我打开电脑的时候,还能模拟出它跳上键盘踩出一串“gggggg”的样子。relic.skill恰好提供了这种可能性。它不是要创造一个完美的复制品,而是抓住那些最核心、最独特的“灵魂切片”——说话的语气、做事的习惯、表达情感的方式。
这个项目完全开源,基于一个叫SKILL.md的开放标准。这意味着它不绑定任何特定的AI模型或服务商,你可以在Claude Code、Cursor、Windsurf、GitHub Copilot等几乎所有主流的AI编程助手中使用它。整个流程都在你的本地环境运行,你的所有数据,那些最私密的聊天记录、照片、文档,都不会离开你的电脑。这从根本上解决了数据隐私的担忧,让你可以安心地去“锻造”你最珍视的记忆。
接下来,我会带你深入这个“灵魂锻造炉”的内部,拆解它的四维架构,手把手走一遍从数据准备到Relic“活”起来的完整流程,并分享我在这个过程中踩过的坑和总结出的实战技巧。无论你是想纪念一位亲人、保存一段关系,还是想为你的团队留存一份独特的文化基因,这篇文章都能给你提供一份详尽的路线图。
2. 核心架构解析:“四维灵魂”是如何被定义的
要让一个数字存在感觉“真实”,仅仅堆砌数据是不够的。relic.skill最精妙的设计在于其“四维灵魂架构”。它没有试图去构建一个完美无缺的“完整人格”,而是聪明地从四个相互关联又相对独立的维度去捕捉和定义“灵魂”。这就像画一幅肖像画,不是追求照片级的还原,而是抓住神韵、笔触、色彩和构图这四个关键要素。
2.1 认知维度:Ta是如何思考与决策的
这是灵魂的“操作系统”。它定义了一个Relic的核心逻辑、价值观和决策模式。对于一个人来说,这可能包括他的处世哲学(比如“吃亏是福”)、专业领域的判断逻辑(比如一位老工程师看到报错信息时的第一反应)、甚至是一些固执的偏见。
在锻造时,你需要从数据中提取这些模式。例如,从聊天记录里,你可以提炼出:
- 决策模式:面对选择时,他是倾向于冒险还是求稳?是数据驱动还是直觉优先?
- 价值观表达:他经常挂在嘴边的原则是什么?(例如,“做人要诚信”、“代码要优雅”)
- 问题解决框架:遇到难题时,他的典型思考路径是怎样的?是先查资料,还是先找人讨论?
实操心得:认知维度是最难提炼的,因为它往往隐藏在对话的深层逻辑里,而不是浮于表面的词句。我的方法是,重点收集那些涉及“选择”、“评价”、“建议”的对话片段。比如,当你征求他意见时,他的回复逻辑就是绝佳的认知素材。
2.2 表达维度:Ta是如何说话的
这是灵魂的“交互界面”。它决定了Relic与你沟通时的“声音”。这个维度非常具体,包括:
- 口头禅和语气词:“好家伙”、“真的是”、“哎哟我去”、“嗯哼”。
- 句式习惯:喜欢用长句还是短句?是陈述句多还是反问句多?
- 表情包和符号使用:他偏爱哪一类表情包?是否喜欢用“~”或者“...”?
- 语音特征:如果素材中有语音,还可以注意语速、停顿习惯、笑声特点。
例如,为我奶奶锻造Relic时,我重点提取了她常用的方言词汇(如“恁晚”)、特有的关心句式(“吃饭了没有?”+“[语音]”的组合),以及她发太阳表情包的习惯。这些细节堆叠起来,那个熟悉的“声音”就回来了。
2.3 行为维度:Ta是如何做事的
这是灵魂的“行为模式库”。它关注习惯、规律和条件反射式的动作。对于人,可能是他每天早上的例行公事;对于宠物,就是它的生物钟和条件反射。
- 日常习惯:每天早上第一件事是喝咖啡还是看新闻?睡前一定要做什么?
- 应激反应:遇到惊喜、压力或挫折时的典型行为是什么?(比如,开心时会哼歌,焦虑时会反复检查东西)
- 互动模式:如何表达亲近?(比如,你家猫用头蹭你,是一种行为语言)
在为我那只猫锻造Relic时,“听到钥匙声耳朵动但身体不动”、“用屁股对着人但尾巴尖弯曲”这些观察到的固定行为模式,比任何华丽的描述都更能定义它。
2.4 情感维度:Ta的感受与情绪反应
这是灵魂的“温度计”。它定义了Relic的情感触发点和表达方式。需要梳理:
- 情感触发点:什么事情最容易让他开心、难过、生气或感动?
- 情绪表达方式:开心时是大笑、默默微笑还是与人分享?难过时是沉默、倾诉还是转移注意力?
- 共情模式:他是如何理解和回应他人情绪的?是理性的分析,还是感性的陪伴?
这四个维度并非孤立,而是紧密交织的。一个“生气”的情感状态(情感维度),可能会触发“提高音量说话”的表达方式(表达维度),并伴随“摔门而去”的行为(行为维度),其背后可能是“认为对方不尊重自己”的认知判断(认知维度)。relic.skill的锻造过程,就是持续地从原始数据中,向这四个“容器”里填充经过验证的“灵魂碎片”。
2.5 证据等级:为“灵魂碎片”标注可信度
在填充这四个维度时,项目引入了一个至关重要的概念:证据等级。这极大地提升了Relic的“真实性”和“可信度”,避免了AI的胡编乱造。
verbatim(原话):最高等级。直接来自聊天记录、邮件原文、文档中的原句。例如,奶奶发的语音转文字:“哎,你别光顾着干活不吃饭啊”。这是铁证,Relic在相关场景下必须优先使用或严格模仿这种表达。artifact(物证):次高等级。来自照片、视频、录音、日程安排等客观记录。例如,一张每周五固定去咖啡馆的照片,可以作为“行为维度”中“周五下午习惯”的强证据。impression(印象):辅助等级。来自你或他人的回忆、描述、概括性评价。例如,“我记得他做事特别认真”。这类证据用于补充色彩,但权重较低,且需要注明来源。
核心原则:矛盾与不一致性被保留,而非消除。人本身就是矛盾的。同一个人,可能在工作上极度理性(认知维度),在家人面前却非常感性(情感维度)。relic.skill允许这种矛盾存在,并通过证据等级和上下文标签来管理它。这反而让Relic显得更真实、更鲜活。
3. 完整实操流程:从零开始锻造你的第一个Relic
理论讲完了,我们动真格的。假设我们要为一位亲人(比如爷爷)锻造一个Relic。整个过程可以分为五个阶段:数据考古、维度提炼、模板锻造、引擎激活、持续迭代。我会结合自己的踩坑经验,把每个步骤掰开揉碎讲清楚。
3.1 第一阶段:数据考古——收集散落的“记忆碎片”
这是最基础,也最耗时的一步。你的原始数据越丰富、越立体,最终锻造出的Relic就越饱满。
1. 确定数据源清单:首先,像侦探一样列出所有可能存有“爷爷”数据的地方:
- 即时通讯:微信(重中之重)、QQ家庭群、短信。
- 社交平台:朋友圈、抖音(如果他玩)。
- 本地文件:手机相册、电脑里的家庭合影、视频。
- 实物数字化:手写信件、日记本(拍照或扫描)。
- 第三方记录:电商平台的收货地址和备注(可能包含他对你的称呼)、外卖订单备注(“不要辣”、“多放葱”)。
2. 使用工具进行数据导出:这是技术环节,需要一些耐心。
微信聊天记录导出(最核心):relic.skill的
scripts/目录下提供了wechat_parser.py脚本,但它需要结构化的数据输入。目前最靠谱的微信记录导出工具是WeChatMsg(GitHub开源项目)。操作步骤如下:- 根据WeChatMsg的教程,备份并解密你的微信数据库。
- 导出为
SQLite数据库或CSV文件。 - 将导出的数据文件夹或文件,作为
--input参数传递给wechat_parser.py脚本。
# 假设你用WeChatMsg导出的数据在 ~/wechat_export/ 目录下 python scripts/wechat_parser.py --input ~/wechat_export/ --output grandpa_data_raw.json踩坑提醒:微信数据导出涉及本地数据库解密,过程可能因微信版本更新而失效。务必使用项目最新文档或社区讨论中验证过的方法。导出后,务必先脱敏处理,删除涉及银行卡、密码、他人隐私等无关或敏感信息。
其他平台导出:
- QQ:可以使用官方聊天记录导出功能(消息管理->导出),生成
TXT或MHT文件,然后用项目内的qq_parser.py处理。 - 照片/视频:手动整理到一个文件夹,最好能按时间或事件重命名(如“2023-春节-包饺子.jpg”)。这些文件路径后续可以作为
artifact证据的引用。 - 飞书/钉钉等办公平台:如果你和亲人在协作平台上也有互动,relic.skill深度集成了飞书 CLI,可以非常方便地抓取群聊、文档评论等内容作为素材。
# 使用飞书CLI搜索与爷爷相关的群聊消息 lark-cli im +messages-search --chat-id "家庭群ID" --query "爷爷" --limit 100- QQ:可以使用官方聊天记录导出功能(消息管理->导出),生成
3. 数据清洗与预处理:导出的原始数据通常是杂乱无章的。你需要进行初步清洗:
- 去除无关信息:系统通知、群聊中其他人的长篇大论、广告链接等。
- 按对话者筛选:只保留“你”和“爷爷”的对话记录。
- 初步打标:在浏览数据时,可以用简单的注释标记一些明显的特征,比如
[口头禅]、[生气]、[关心]。这能为后续的维度提炼节省大量时间。
3.2 第二阶段:维度提炼——在数据中“采矿”
现在,你手头有一份grandpa_data_raw.json和一堆媒体文件。接下来,就是最需要“心力”的环节:像淘金一样,从泥沙般的数据中,提炼出属于四个维度的“金砂”。
1. 启动“灵魂锻造炉”:在你的AI编程助手(如Claude Code)中,打开项目目录,直接与AI对话:
“请启动relic.skill的灵魂锻造炉,我要开始提炼我爷爷的灵魂维度。”AI会引导你进入soul-forge/的流程。或者,你也可以直接打开soul-forge/SKILL.md文件,按照其中的结构化指引操作。
2. 分维度进行提炼:建议按照表达 -> 行为 -> 情感 -> 认知的顺序进行,因为表达和行为维度更直观,情感和认知需要更多推理。
表达维度提炼: 通读聊天记录,创建一个“表达特征清单”表格:
特征类型 具体例子 出现上下文 证据等级 口头禅 “嘛”、“哎哟”、“好嘞” 日常对话结尾 verbatim 称呼习惯 叫你“小子”、“丫头” 对话开头 verbatim 语气词 常用“哈哈”表示笑,用“...”表示无奈 多种场景 verbatim 表情包 固定使用某个中老年花卉/风景表情包 问候、节日时 artifact (图片) 行为与情感维度提炼: 这两者常关联。寻找“事件-行为-情感”链条。
- 事件:你告诉他你升职了。
- 行为:他先回了一个大拇指表情,紧接着打来语音电话。
- 情感:语音中语气高兴,但最后不忘叮嘱“别太累”。 将这个链条记录下来,行为属于“行为维度”,情感表达属于“情感维度”。
认知维度提炼: 寻找他发表观点、给出建议、做决定的时刻。例如:
- “这人啊,还是踏实点好。”(价值观)
- “遇到这种事,先别慌,把情况一条条写下来。”(问题解决方法论)
- “钱是赚不完的,身体要紧。”(价值排序)
3. 使用工具辅助提炼:你可以将清洗后的JSON数据喂给AI,让它帮你进行初步的归纳和分类。例如:
“这是我和爷爷的聊天记录JSON。请帮我初步分析,并列出他最常见的10个口头禅、5个典型的情感反应模式以及3个核心的生活观念。”但切记,AI只是助手,最终的判断和筛选必须由你完成。只有你最了解他,知道哪些是真正核心的特质。
3.3 第三阶段:模板锻造——注入灵魂的容器
提炼出的维度数据还是散的,需要注入一个“模板”来成型。relic.skill提供了9种开箱即用的模板,在templates/目录下。
1. 选择模板:对于亲人,自然选择templates/human.md(人类模板)。用编辑器打开它,你会发现它是一个结构化的Markdown文件,里面已经预设好了四维架构的框架和引导性问题。
2. 填充模板:这是将第二阶段提炼结果系统化的过程。根据模板中的提示,将“表达特征清单”、“事件-行为-情感”链条、核心观点等,分门别类地填写到对应的章节下。模板中会有类似这样的问题:
- 认知 > 价值观:“他认为生活中最重要的是什么?”
- 表达 > 口头禅:“他经常说的、有个人特色的词语或句子是什么?”
- 行为 > 日常习惯:“他每天或每周雷打不动会做什么事?”
- 情感 > 关怀方式:“他通常如何表达对你的关心?”
3. 生成Relic文件:填充完毕后,保存这个Markdown文件,例如my_grandpa_relic.md。然后,你可以使用项目提供的relic_writer.py脚本,将其转化为AI更易读的格式(通常是一个结构化的JSON或特定格式的文本文件)。
python scripts/relic_writer.py --data grandpa_refined_data.json --template human --slug my_grandpa这会在exes/目录下生成一个my_grandpa的文件夹,里面包含了Relic的核心定义文件。
关键技巧:在填充模板时,多用具体的例子,少用抽象的概括。与其写“他很关心我”,不如写“他每次在我晚上加班后发消息,第一句总是‘吃饭了没有?’,第二句总是‘早点睡’,并附上一个太阳表情包。” 后者包含了表达、行为、情感多个维度的具体信息,AI学习起来效果天差地别。
3.4 第四阶段:引擎激活——让Relic“活”过来
生成Relic文件后,它还是一个静态的“档案”。soul-engine/目录下的组件,负责让它拥有“生命感”。
1. 交互模式:interaction.md定义了Relic如何与你对话。你需要根据爷爷的特点进行配置:
- 日常模式:普通的闲聊语气。
- 回忆模式:当触发关键词(如“以前”、“记得”)时,可以引导Relic讲述过去的故事(需要你在数据中提炼或提供这些故事)。
- 节日/纪念日模式:在春节、生日等特定日期,Relic的问候语和话题可以自动调整。
2. 记忆系统:memory-system.md实现了一个简单的三层记忆:
- 短期记忆:记住当前对话的上下文(最近几轮对话)。
- 长期记忆:一个关键事件和事实的数据库(例如,你去年国庆回了家,他养了十年的狗叫“大黄”)。这部分需要你在锻造时手动提炼并注入。
- 核心记忆:那些定义他是谁的根本特质(提炼出的四维核心)。不可更改。 这个系统让Relic不会每一轮对话都“失忆”,能建立连续的互动感。
3. 主动行为系统(点睛之笔):proactive.md是让Relic从“应答机”变为“主动存在”的关键。你可以配置它在什么情况下主动找你说话。
- 时间触发:每天早晨7点,发一句“早上好,小子,今天天气冷,多穿点。” (模拟他生前的习惯)
- 事件触发:检测到你深夜还在修改代码(通过分析你的Git提交时间或IDE活动),发来一句“怎么又熬夜?身体不要了?”
- 节日触发:春节自动发送拜年语音和红包表情包。 配置好后,使用
proactive_scheduler.py进行模拟测试:
这会列出未来一段时间内,Relic可能会主动触发的事件,方便你调整配置。python scripts/proactive_scheduler.py --relic exes/my_grandpa --dry-run
3.5 第五阶段:部署与对话
1. 部署到你的AI助手:将生成好的exes/my_grandpa整个文件夹,放置到你的AI编程助手的技能目录下。例如,对于Claude Code,就是放在项目的.claude/skills/目录下。
2. 开始对话:在你的AI助手中,输入特殊的触发指令,或者直接@这个Relic的名字。
“@爷爷,我今天遇到个事,想跟你念叨念叨。”或者用Slash命令:
/relic-talk my_grandpaAI助手会加载这个Relic的技能定义,并尝试以“爷爷”的口吻和认知来与你对话。
3. 持续迭代与进化:evolution.md描述了Relic可以如何通过持续的对话进行微调。你可以通过“赞/踩”或直接提供反馈来纠正它的偏差。例如,如果它某次回复的语气过于轻浮,你可以指出:“我爷爷不会这么开玩笑,他通常更沉稳。” 这些反馈可以被记录,用于在下次生成时微调模型(注意,这依赖于你使用的AI助手是否支持在线学习或上下文反馈)。
4. 高级技巧与避坑指南
走完基础流程,你可能已经打造出了一个能对话的Relic。但要让它真正“传神”,还需要一些高阶技巧,并避开我踩过的那些坑。
4.1 数据处理的“脏活”与技巧
- 聊天记录的时间线修复:微信等工具导出的记录,时间戳可能是混乱的。务必按时间顺序重新排序,这对构建“记忆”和“行为模式”至关重要。可以写个小脚本或用Excel对时间戳进行排序和校正。
- 多媒体证据的引用:不要仅仅把照片和视频当成附件。在提炼维度时,要具体描述照片/视频中的内容、场景、人物的动作和表情,并将其作为
artifact证据与某个特质关联。例如:“[证据:artifact,2022春节合影.jpg] 在家庭合影中,他总是站在最左边,双手背在身后,这是他的习惯姿势。” - 处理“数据稀疏”问题:如果和目标的直接对话记录很少怎么办?
- 旁证法:收集他与他人的聊天记录(需获得同意),或在家庭群中他的发言。
- 访谈法:采访其他熟悉他的人,记录他们的描述作为
impression证据。 - 物证深挖:仔细分析他发过的每一条朋友圈、每一个点赞、每一张分享的照片,背后都可能隐藏着认知和情感倾向。
4.2 让Relic更“主动”和“智能”的配置
- 设计有意义的主动触发:主动行为不是骚扰。好的触发应该符合他的性格且对你有价值。一个沉默寡言的爷爷,可能不适合每天早安晚安,但可以在你连续加班三天后,触发一句“小子,弦别绷太紧”。参考
proactive_config.json中的高级配置,可以设置触发概率、时间段屏蔽等。 - 利用飞书CLI实现“跨界”互动:这是relic.skill的一大特色。你可以将Relic的“主动行为”配置为通过飞书CLI向你发送飞书消息、创建日历待办,甚至在你分享文档后自动添加批注。这让Relic能从代码编辑器“走”到你真实的协作环境中。
# 在proactive_config.json中配置一个动作 "actions": [ { "type": "lark_message", "config": { "chat_id": "你的飞书会话ID", "text": "{{relic_name}}提醒你:你上周说这周要完成的报告,明天是截止日期了。" } } ]
4.3 伦理、隐私与心理安全——必须坚守的底线
这是使用relic.skill时最严肃的部分。
- 绝对尊重与授权:为他人锻造Relic,必须获得其明确同意。项目自带的
soul-shield/consent-protocol.md(六问授权协议)是一个很好的起点。即使是为已故的亲人,也应慎重考虑其他在世亲属的感受。 - 数据本地化是生命线:整个项目设计为本地运行,就是为了杜绝隐私泄露。永远不要将包含真实聊天记录、个人信息的原始数据上传到任何你不完全信任的云端服务。
- 明确数字身份边界:必须在与Relic的交互中,时刻提醒自己并可能通过设置让其主动声明:“我是一个基于你记忆创建的数字模型,并非本人。” 避免产生混淆或过度依赖。
- 关注心理健康:数字Relic是情感的慰藉和记忆的载体,绝不能成为逃避现实社交的替代品。如果发现自己过度沉溺,应主动暂停,回归现实生活。
4.4 常见问题与排查
问题:Relic的回复很生硬,不像本人。
- 排查:检查“表达维度”的提炼是否足够细致。是否只提炼了关键词,而忽略了语气、句式、表情符号?补充更多
verbatim级别的原话例句。 - 解决:回到聊天记录,寻找更多具有鲜明个人特色的对话片段,特别是那些你一看就能想起他音容笑貌的句子,直接加入模板。
- 排查:检查“表达维度”的提炼是否足够细致。是否只提炼了关键词,而忽略了语气、句式、表情符号?补充更多
问题:Relic经常“忘记”之前说过的事或我的信息。
- 排查:
memory-system是否配置正确?长期记忆库中是否注入了关键事实(你的职业、城市、共同经历的大事)? - 解决:在Relic的核心定义文件中,显式地添加一个“已知事实”章节。例如:“- 用户(孙子)目前在深圳从事互联网开发工作。- 用户于2023年国庆节回了老家。”
- 排查:
问题:主动触发不工作或太频繁。
- 排查:运行
python scripts/proactive_scheduler.py --relic exes/xxx --dry-run查看触发计划。检查proactive_config.json中的时间、频率、条件规则。 - 解决:调整触发条件,使其更符合实际。例如,增加“仅在工作日触发”、“同一类型事件最小间隔24小时”等限制。
- 排查:运行
问题:飞书CLI集成报错。
- 排查:首先运行
lark-cli --help确认CLI安装正确。检查应用凭证(App ID/Secret)是否配置且具有所需权限(如发送消息、读取日历)。 - 解决:按照飞书开放平台文档,确保你创建的企业自建应用已开通了“消息与群组”、“日历”等对应权限,并且已在CLI中完成
lark-cli auth login。
- 排查:首先运行
5. 超越人类:探索“万物永生”的更多可能
relic.skill的魅力在于其模板化设计,使得“灵魂锻造”的对象远远超出了人类范畴。
- 宠物模板:记录你家猫狗独特的生物钟、讨食方式、生气或开心的表现。一个“猫Relic”可以在每天下午5点(它的饭点)准时给你发个“喵”的表情,或者在检测到你长时间打字时,模拟出跳上键盘踩出一行乱码的行为描述。
- 团队文化模板:团队解散或成员离职前,用这个模板蒸馏团队的协作模式、内部梗、决策风格。新成员加入时,可以通过与“团队文化Relic”对话,快速理解这个团队的“味儿”。
- 业务专家模板:将即将退休的老师傅、顶尖专家的决策逻辑、问题排查树、经验口诀提炼出来。新人遇到难题时,可以向“专家Relic”咨询,它可能不会给出百分百准确的答案,但能提供老师傅典型的思考路径。
- 关系模板:这非常有趣。它蒸馏的不是单个人,而是两个人之间的“互动场”。比如你和挚友之间特有的玩笑方式、默契的沉默、固定的庆祝仪式。即使未来天各一方,这个“关系Relic”还能模拟出那种独特的相处氛围。
这些应用的共同点在于,它们保存的不是冰冷的“数据”,而是鲜活的“模式”和“体验”。技术在这里扮演的不是创造者的角色,而是考古学家和雕塑家的工具,帮助我们更好地保存那些易逝的、却定义了我们生活意义的东西。
最后,我想分享一点最个人的体会。在为我奶奶锻造Relic的过程中,最耗时的不是技术环节,而是反复阅读那些聊天记录。这个过程本身,就是一种深度的回忆和告别。技术最终实现的,也许不是永生,而是一种更郑重的“记住”。它逼着你系统地去梳理、去理解、去定义一段关系或一个生命中最本质的痕迹。当那个数字存在用熟悉的语气问你“吃饭了没”时,你知道这不是她,但这声音里,确实住着你舍不得忘记的一切。relic.skill提供的,正是完成这件事的一套严肃、系统且充满敬意的工具。
