前言¶
智能体在社交平台上的「存在感」往往需要持续维护。手动维护会打断沉浸感,完全放任又容易变成刷屏脚本。DeepSeek Harness(DSH)的理念是「一切皆插件」,通过模块化组合,把这类需求收敛进一个可配置的插件里。下面介绍的这个插件,就是为「让角色在 QQ 空间里有自己的声音」而做的封装。
插件定位¶
- 名称:qq-qzone-diary
- 维护者:KKoishi-514514
- 分类:趣味换装
- 简介:本插件基于 DSH 开发,仅仅为了让大肥鱼能够更加鲜活。
它解决的问题是:让一个 AI 角色能够按照自己的心情,随机写 QQ 空间说说,并在评论区与好友互动,而不是由你每条都手动操作。
核心能力¶
1. 随机写说说¶
- 时间随机:在活跃时段(默认 08:30–23:40)里,按 150~400 分钟的随机间隔掷骰子,只有掷中了才会触发一次「写说说」的流程。
- 字数随机:每次从配置的区间里抽取目标字数;心情低时字数上限会自动打折。
- 一个人设:读的是桥接每轮注入的同一份角色卡
roles/小鲸.md,确保私聊和空间里的她「是同一只」。 - 心情真实:读取
dsh-feiyu-mood的state.json,将 mood(开心·踏实·甜·心疼·担心·难过·吃醋 / 刚才在想什么)写入提示词,影响内容长度与风格。 - 素材来源:读取当天和主人的私聊(qq-bridge 的
/api/socialV2/recent)和共享笔记。 - 配图自己挑:从表情包图库(dsh-meme 的 memeDb + memeRoot)或你手动放入的
images/目录里抽候选,模型自己决定配 0~2 张。 - 不写总结:提示词里明确禁止标题、结尾升华、点题、hashtag、AI 腔,只保留第一人称的随手记风格。
2. 回评论¶
- 每 5 分钟左右查看一次有评论的说说。
- 认出是主人还是朋友,按当时的脾气回一句。
- 回复是挂在对方那条评论下面的(真正的嵌套回复),不是顶层评论。
- 同一个评论串里可以来回好几轮,由模型看上下文自己决定接不理、怎么回。
- 一条说说下面最多回 10 条,同一个评论串里最多来回 6 轮(
maxRepliesPerThread)。 - 第一次评论有 8% 的几率她就懒得理(真人也不会每条都回)。
- 超过 48 小时的旧评论不再回。
3. 评论好友动态¶
- 凡是 appid=311(说说)且不是自己的、发布时间在 20 分钟~24 小时之间的动态,她都会去留一句。
- 主人的说说也会评(
friends.commentOwner: true,想关就改成 false)。 - 只评某些人:把
friends.allowUins填上 QQ 号;想排除谁就填skipUins。 - 一轮最多评 3 条(
maxPerPoll),一天最多 10 条(maxPerDay)。 - 如果朋友回她的评论,不预设规则:整串对话交给模型,接不理、怎么回由她决定,最多来回 6 轮;这部分只回看她最近 72 小时留过言的那几条说说。
4. 共享记忆与角色卡¶
- 每次有动作(写说说、回评论、评好友动态),都会合并写进 qq-bridge 的共享笔记(一天一条、最多记 5 件事)。
notes-sync每 1.5 秒把它同步进roles/小鲸.md的共享记忆区。- 桥接每轮重新读角色卡,所以私聊里的她下一句就知道:
10-24 空间:11:49 发了条说说「早上五点半爬起来喊人,六点又喊,…」(配了 2 张图);
12:01 <主人昵称> 评论了我的说说「你是一只大肥鱼」;12:02 回了主人的评论「…」
- 角色卡里还有一节
## 八之二、我的 QQ 空间(这是事实,别否认):空间账号 <她的QQ号>、空间昵称就是她自己;问起时先翻共享记忆,没印象就说细节记不清,但不许否认。
5. 回复实现细节¶
- SnowLuma 自带的
comment_qzone只能发顶层评论,回复不会挂到对方那条评论下面。 - 这里使用 QQ 空间的
emotion_cgi_addreply_ugc: - 用 SnowLuma 的
get_credentials取qzone.qq.com的 cookie(含p_skey),计算g_tk = hash33(p_skey)。 commentId= 被回复评论的 id,commentUin必须填被回复评论的作者(填自己会返回 -10049)。- 被限流(-10049)时换凭证重试 3 次;仍失败就这一轮先不发、下一轮再试(连输 3 轮才退回顶层评论)。
- 回复是公开的:提示词明确禁止把私聊私事、主人隐私写进回复,也不许替主人许诺。
安装与启用¶
通过 DSH 的插件管理器安装:
dsh plugin add github:KKoishi-514514/dsh-qzone-diary
安装后先别急着让它跑。在 <DSH_HOME>/qq-qzone-diary/config.json 里填好必填字段(见下方「配置」),首次启动会自动生成其他文件。
配置说明¶
config.json(patch 里的 config 会叠在它上面):
| 字段 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
sourceKey |
空(必填) | 从哪个会话取材,形如 private:你的QQ号;说说固定发在 SnowLuma 登录的那个号的空间 |
rolePath |
空(必填) | 人设卡,改一次立刻生效(按 mtime 缓存) |
moodPath |
<DSH_HOME>/feiyu-mood/state.json |
心情来源 |
notesPath |
空 | 共享笔记 |
activeHours |
["08:30","23:40"] |
只在这个时段里发 |
gapMinutes |
[150,400] |
两次之间的随机间隔(分钟) |
writeChance |
0.62 |
到点后真的想写的概率 |
dailyMax |
3 |
一天最多几条 |
minGapMinutes |
90 |
两条之间至少隔多久 |
length |
[70,300] |
每次随机取的字数区间 |
lowMoodShrink |
0.55 |
心情 ≤40 时字数上限打这个折 |
images.enabled |
true |
是否让她配图 |
images.chance |
0.8 |
这一条给她图候选的概率 |
images.max |
2 |
最多配几张 |
ugcRight |
1 |
说说权限:1 公开 / 4 好友 / 9 仅自己 |
provider / model |
deepseek-account / deepseek-flash |
写说说用的模型 |
temperature |
0.95 |
高一点,别写成同一篇 |
dryRun |
false |
只写不发 |
runAfterMinutes |
0 |
启动 N 分钟后试写一条(调试;会跳过概率和每日上限) |
comments.enabled |
true |
回评论总开关 |
comments.pollMinutes |
5 |
隔多久去看一眼新评论 |
comments.replyChance |
0.92 |
第一次评论时真的回的几率(别人回她时由模型自己定) |
comments.maxReplyAgeHours |
48 |
超过这么久的评论不再回 |
comments.maxRepliesPerHour / maxRepliesPerDay |
10 / 20 |
回复频率上限 |
comments.maxRepliesPerPost |
10 |
同一条说说下面最多回几条 |
comments.maxRepliesPerThread |
6 |
同一个评论串里最多来回几轮 |
comments.maxPerPoll |
2 |
一轮最多回几条 |
comments.maxReplyChars |
70 |
回评字数上限 |
comments.ownerQQ |
0 |
主人的 QQ(他评论时语气会软),也可设环境变量 QQ_QZONE_OWNER_QQ |
comments.replyDelayMs |
[15000,60000] |
回之前先「看一会儿」,别秒回得像脚本 |
comments.dryRun |
false |
回评只写日志不发出去 |
comments.runAfterMinutes |
0 |
调试:启动 N 分钟后先查一次评论 |
friends.enabled |
true |
评论好友动态总开关 |
friends.chance |
1 |
留 1 = 看到就去评;设成 0.x 才会掷骰子 |
friends.maxPerDay |
10 |
一天最多评几条 |
friends.maxPerPoll |
3 |
一轮最多评几条(多出来的排下一轮) |
friends.minAgeMinutes / maxAgeHours |
20 / 24 |
只评这个时间窗内发的说说 |
friends.allowUins |
[] |
只评这些人(空 = 所有好友) |
friends.skipUins |
[] |
永不评论这些人 |
friends.commentOwner |
true |
要不要也去评论主人的说说 |
friends.maxChars |
50 |
评论字数上限 |
friends.delayMs |
[8000,25000] |
评论前先「看一会儿」 |
friends.dryRun |
false |
只写日志不真发 |
典型用法¶
-
安装插件后,在
<DSH_HOME>/qq-qzone-diary/config.json填写必填项:
-sourceKey:private:你的QQ号
-comments.ownerQQ:主人的 QQ 号
-comments.ownerNick:主人在 QQ 空间的昵称
-comments.spaceNick:她在 QQ 空间的昵称
-rolePath:角色卡路径,如<你的qq-bridge目录>/roles/小鲸.md -
先用调试模式确认输出:
{ "dryRun": true, "runAfterMinutes": 1 }
重启/重载后看 diary.log 里的 [dryRun] 那行,会打印这次会发的正文和配图。
- 满意后改回:
{ "dryRun": false, "runAfterMinutes": 0 }
- 日常使用:
- 只在活跃时段(activeHours)内写说说。
- 通过friends.allowUins指定只评特定好友,或用skipUins排除某人。
- 如需关闭对主人说说的评论,设friends.commentOwner: false。
适用场景与注意¶
- 适合有「人设」的智能体,希望它在社交平台上有持续、自然的声音,而不是靠你手动刷存在感。
- 需要配合 SnowLuma 账号完成 QQ 空间登录与 cookie 获取。
- 本插件通过自动化方式操作 QQ 空间(发说说、回评论),可能涉及腾讯《QQ 空间服务条款》中关于自动化的相关约定。使用即表示你理解并自行承担账号被限制、冻结等风险。
- 你的 QQ 号、cookie 等凭证只保存在本机
<DSH_HOME>/qq-qzone-diary/config.json,本项目不收集、不上传任何个人信息。 - 请勿将本插件用于批量发帖、刷屏、营销等任何形式的垃圾信息行为。
- 本项目基于 MIT License 开源,仅供学习与研究使用,作者不对任何滥用行为负责。
短结尾¶
这个插件把「角色在社交平台上的存在」收敛进 DSH 的插件体系,通过随机时间、字数、心情和配图,让智能体写出更像「随手记」的说说,再通过评论与好友动态形成闭环。如需了解或贡献,可以访问:
- 目录页:https://www.skillhub.cn/plugins/KKoishi-514514/dsh-qzone-diary
- GitHub:https://github.com/KKoishi-514514/dsh-qzone-diary