persona-forge:把聊天记录蒸馏成可扮演的人设

前言

DeepSeek Harness(DSH)的理念是「一切皆插件」,开发者可以按需加载功能。如果你在折腾智能体,经常遇到这样的问题:想给一个角色设定固定的说话方式,要么手写 prompt,要么用「角色卡改写」类插件,前者费脑子,后者需要提前写好人设。另一个常见做法是微调模型,但单条对话数据量太少时学不到风格,显存和时间成本又高,不适合个人开发者。

persona-forge 专门解决这个痛点:给一份聊天记录导出文件,它自动解析说话人、统计风格、逐块蒸馏,产出可以直接用的人设;之后还能用这个人设跟你对话。和需要手写人设的方案不同,它只负责「读」和「蒸馏」,不负责「写」。

是什么

persona-forge 是一个给 DeepSeek Harness 用的插件,维护者是 zmairc。它把聊天记录蒸馏成可扮演的人设,让 AI 用他的方式说话。核心思路是「离线蒸馏 + 运行时 prompt 分层注入」:先把对话切成小块,让模型读并统计风格,生成初稿;之后在对话时,把这个人设注入到 system prompt 里。整个过程在本地运行,聊天记录不会上传到项目仓库。

零依赖、零构建,Node 24+ 直接跑 TypeScript。它提供两个工具:forge_persona 生成人设,chat_persona 按人设回复。

安装与启用

在 DSH 里执行安装命令:

dsh plugin --profile web add @zmairc/persona-forge

安装完成后,DSH 里会多出两个工具:

工具 作用
forge_persona 给一个 txt 路径,自动生成人设
chat_persona 给一个人设名和一句话,按那个人的口吻回复

需要 Node 24+,以及一个 OpenAI 兼容的模型端点(默认 DeepSeek)。API key 放在当前会话工作目录的 .env 里:

PERSONAFORGE_API_KEY=sk-...

.env 和生成的人设都落在当前会话的工作目录(DSH 里就是你打开的那个目录;命令行里用就是当前目录)。如果想放到别处,可以设置 PERSONAFORGE_ROOT。升级插件不会带走你的人设——装成包之后它不往 node_modules 里写东西。

本地开发或改了代码想立刻试,可以用 link: 装当前目录:

dsh plugin --profile web add link:E:\code\persona-forge

典型用法

生成人设

把导出的聊天记录存成一个 txt(格式随便,微信/QQ 的复制粘贴都能认),然后执行:

node src/cli/index.ts forge --file 聊天记录.txt --persona 老王 --me 我

它会自动解析说话人、算风格指纹、把对话切块让模型读、写出 personas/老王/persona.md。中间不用你操作。

如果文本很多,可以加 --sample 40:从全部对话里均匀抽 40 块,覆盖不同时间段但控制花费;不加就是全量。每次覆盖 persona.md、style.md、transcript.txt 之前都会先存一份 .prev 副本,命令结束会告诉你备份到哪。

作为 DSH 插件

在 DSH 里调用工具时,直接传参数即可:

  • forge_persona:传入文件路径和 persona 名,生成人设
  • chat_persona:传入 persona 名和一句话,按那个人设回复

清洗原始导出

直接拿微信导出跑也能用,但导出里有两类东西会干扰统计:一是把媒体写成独立行(media/00001_xxx.jpg),二是附件名里带真实学号。可以用一条命令清掉:

node src/cli/index.ts prepare --file 原始导出.txt --self 我 --as 老王 --out 干净.txt

它做三件事:把说话人标签「我」改成你给的名字(这样蒸馏「自己」时草稿里不会满屏 我:…)、把媒体行换成 [图片]/[视频]/[语音]/[文件] 占位、把手机号 / 学号(连续 12 位数字)/ 身份证 / 卡号 / 邮箱 / 链接打码。不想打码加 --no-redact。

风格指纹与对话

如果想先看看工具能做什么,可以用内置的合成样例:

node src/cli/index.ts stats --file personas/example/transcript.sample.txt

把你的记录粘进 personas/<名字>/transcript.txt,然后解析:

node src/cli/index.ts ingest --file personas/<名字>/transcript.txt --persona demo --me 我

再跑一次统计,输出可以粘进 persona.md 的风格指纹:

node src/cli/index.ts stats --persona demo --markdown

编辑 personas/demo/persona.md,然后开始聊:

node src/cli/index.ts chat --persona demo

适用场景与注意

适合需要固定说话方式的智能体开发、角色扮演对话、或想快速复刻某人语气的场景。它不提供「接入对方真实账号」的能力,生成的说话人应被标记为 AI 模拟,不要拿去骗共同好友。

隐私方面,解析、统计、蒸馏全部在本地跑,聊天记录不会上传到本项目;只有切块后的对话片段会发给你自己配置的模型端点;data/、personas/*/transcript.txt、.env 都在 .gitignore 里,不会进仓库。分享生成的人设之前,建议先跑 ingest --redact 把手机号、身份证、邮箱、链接打掉。

插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。本项目走离线蒸馏 + 运行时 prompt 分层注入,真正难的是蒸馏质量,不是注入。

结尾

persona-forge 让你从「手写 prompt」或「费力的微调」里解放出来,只要有一份聊天记录,就能自动生成可复用的说话人设定。它聚焦在「读」和「蒸馏」这一步,把 prompt 设计留给开发者。如果你在折腾智能体,想快速给一个角色定下说话方式,可以到它的目录页查看更多细节:https://www.skillhub.cn/plugins/zmairc/dsh-plugin,源码在 GitHub:https://github.com/zmairc/dsh-plugin。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜