Reddit 帖子引擎 是做什么的?
撰写一篇符合子版块文化的 Reddit 帖子。可选择通过 Composio 发布。
关键规则: 未经确认子版块规则,绝不发布。绝不在正文中包含产品链接:仅在适当的情况下将其放在第一条评论中。遵循 90/10 规则:你的帖子应独立于任何产品提及,为社区增添价值。
反垃圾规则: 主要具有推广性质的帖子将被删除,并可能导致帐户被封禁。目标是优先为社区做出贡献。产品提及应放在第一条评论中,且仅当子版块允许自我推广时。
步骤 1:环境检查
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+已设置}"
# 检查 Composio Reddit MCP 是否已连接
claude mcp list 2>/dev/null | grep -i reddit || echo "Composio Reddit MCP: 未连接"
如果缺少 GEMINI_API_KEY: 停止。告知用户:“需要 GEMINI_API_KEY。请从 aistudio.google.com 获取。将其添加到您的 .env 文件中。”
如果 Composio Reddit MCP 未连接: 继续。该技能将撰写帖子但跳过发布步骤。告知用户:“Composio Reddit MCP 未连接:我将为您起草一份帖子供您手动提交。要启用直接发布,请查看 README.md 中的设置说明。”
步骤 2:收集上下文
你需要:
- 目标子版块(例如 r/devops、r/startups、r/SideProject)
- 你正在分享的内容(项目、文章、问题、讨论、工具)
- 一段话描述其功能
- 为什么它与该特定子版块的社区相关
- 你想要一个文本帖还是链接帖
如果缺少任何这些信息,请在一次消息中询问:
“要起草您的 Reddit 帖子,我需要:
- 哪个子版块?(例如 r/devops、r/startups)
- 您要分享什么?(项目、文章、工具、问题)
- 它的功能是什么?(一句话描述,技术上)
- 为什么这个子版块会特别关心它?”
步骤 3:获取子版块规则和文化
获取子版块的规则:
curl -s \
-H "User-Agent: varnan-skills/1.0" \
"https://www.reddit.com/r/{SUBREDDIT}/about/rules.json" \
| python3 -c "
import sys, json
d = json.load(sys.stdin)
rules = d.get('rules', [])
for r in rules:
print(f'规则: {r.get(\"short_name\", \"\")}')
print(f'详情: {r.get(\"description\", \"\")[:200]}')
print()
"
获取近期热门帖子以了解语气和风格:
curl -s \
-H "User-Agent: varnan-skills/1.0" \
"https://www.reddit.com/r/{SUBREDDIT}/top.json?t=week&limit=10" \
| python3 -c "
import sys, json
d = json.load(sys.stdin)
for p in d['data']['children'][:10]:
pd = p['data']
print(f'分数: {pd[\"score\"]} | 标题: {pd[\"title\"][:100]}')
"
注意热门帖子的模式:
- 标题是问题还是陈述?
- 它们是以技术还是结果开头?
- 它们是个人的(“我构建了...”)还是非个人的(“用于...的工具”)?
- 哪种格式在该子版块中获得了最多的参与度?
检查子版块侧边栏以了解发帖规则:
curl -s \
-H "User-Agent: varnan-skills/1.0" \
"https://www.reddit.com/r/{SUBREDDIT}/about.json" \
| python3 -c "
import sys, json
d = json.load(sys.stdin)
data = d.get('data', {})
print('公开描述:', data.get('public_description', '')[:300])
print('订阅者:', data.get('subscribers', 0))
"
确定子版块类型:
| 类型 | 示例 | 发帖风格 |
|---|---|---|
| 技术从业者 | r/devops, r/sysadmin, r/ExperiencedDevs | 技术细节,无废话,“我做了 X 并学到了 Y” |
| 创业者/构建者 | r/startups, r/SideProject, r/indiehackers | 个人故事,指标,经验教训 |
| 通用技术 | r/programming, r/technology | 新闻角度,讨论钩子,有争议的观点 |
| 职业发展 | r/cscareerquestions, r/ITCareerQuestions | 问题格式,具体场景,征求经验 |
| 小众工具 | r/vim, r/rust, r/golang | 深入的技术内容,代码示例,基准测试 |
使用获取的规则和热门帖子来确定适用的风格。
步骤 4:使用 Gemini 起草帖子
将帖子内容写入临时文件并调用 Gemini:
cat > /tmp/reddit-post-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "你是一个活跃在 {SUBREDDIT} 社区的开发者。写一篇符合此子版块文化的 Reddit 帖子。规则:(1) 如果是项目或经验帖,使用第一人称撰写。(2) 正文中绝对不要包含任何产品链接:链接只能放在第一条评论中。(3) 帖子必须独立于任何被分享的产品,为社区提供真正的价值。(4) 与此子版块中热门帖子的语气相匹配:{SUBREDDIT_TONE_NOTES}。(5) 标题最多 300 个字符。(6) 文本帖的正文 150-400 字。(7) 不使用营销语言:不要使用‘变革性的’、‘强大的’、‘稳健的’、‘无缝的’、‘创新的’。(8) 如果帖子是关于用户构建的工具,请使用‘我做了...’或‘我构建了...’作为开头:这在 Reddit 上效果最好。(9) 输出:第一行是标题,空一行,然后是正文。不要标签,不要评论。不要使用破折号。”
}]
},
"contents": [{
"parts": [{
"text": "POST_DETAILS_HERE"
}]
}],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 1024
}
}
ENDJSON
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/reddit-post-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
将 POST_DETAILS_HERE 替换为:
- 子版块名称和类型
- 观察到的热门帖子模式
- 分享的内容及其相关原因
- 关键技术细节
- 构建者的真实动机
步骤 5:起草第一条评论
如果用户有产品链接或需要分享的额外上下文,请起草第一条评论,以便在帖子发布后立即发布。
第一条评论有两个目的:
- 提供链接(保持正文无链接,感觉不那么具有推广性)
- 添加在帖子正文中可能显得过于推广的上下文
第一条评论规则:
- 在帖子发布后,立即将其作为对你自己的帖子的第一条回复发布
- 保持在 100 字以内
- 示例格式:“想查看的人请点链接:[URL];也很乐意回答关于 [帖子中提到的具体技术内容] 的问题。”
- 仅当子版块允许在评论中自我推广时,才包含第一条评论
- 如果子版块有“禁止自我推广”规则,则完全省略链接
步骤 6:自我质量检查
在呈现草稿之前进行检查:
结构:
- 标题不超过 300 个字符
- 帖子正文中不包含链接
- 帖子以第一人称开头(适用于项目/经验帖)
- 包含至少一个具体的技术细节或具体数字
- 帖子语气与观察到的子版块热门帖子(在步骤 3 中记录)相匹配
- 未违反步骤 3 中的子版块规则
Claude 风格词汇检测:扫描这些词汇类别并删除所有实例:
| 类别 | 需删除的词汇 |
|---|---|
| 填充性强调词 | 难以置信地,绝对地,确定地,本质上,根本地,字面上,特别地,相当,非常,真正地,显着地,简单地,真正地,终极地,非常 |
| AI 模糊措辞 | 我应该指出,值得指出,重要的是要注意,如前所述,正如我所提到的 |
| 炒作描述词 | 变革性的,革命性的,强大的,稳健的,无缝的,创新的,同类最佳的,尖端,开创性的,非凡的 |
| 开场白 | 结论是,总之,总结一下,总体而言,首先也是最重要的,最后但同样重要的是 |
| 不必要的连接词 | 此外,而且,另外,然而(在句子开头),因此,因此,从而 |
| AI 痕迹词 | 这确保了,这允许了,这有助于,这使能够,深入探讨,利用,杠杆化,促进 |
如果出现任何此类词汇:用一个具体的名词、动词或数字替换。“非常快”变成“运行时间 12ms”。“强大的工具”变成它实际的功能。
即时删除短语检查:这些模式会触发 Reddit 垃圾邮件过滤器或版主删除:
- 任何读起来像广告的句子(“立即试用 [产品]”、“立即注册”、“免费开始”)
- 暗示你不是构建者的短语(“我偶然发现了这个很棒的工具”、“我发现了这个神奇的产品”)
- 在未建立社区存在的子版块中使用第一人称提及用户(“我们的用户”、“我们的客户”)
- “我做了 X,你可以用它来...”紧接着一个链接(推广结构)
- 没有定语的最高级(“最好的方法是...”、“唯一的工具是...”)
- 帖子正文中的外部链接(仅使用第一条评论)
如果出现任何即时删除短语:完全重写该句子,而不仅仅是替换词汇。
步骤 7:对抗性审查
在呈现最终草稿之前,运行一个 3 角色审查。每个角色阅读帖子并找到一个具体问题,引述触发该问题的确切文本。
角色 1:怀疑论从业者 此人在 r/{SUBREDDIT} 已有多年,见过数百次伪装成帖子的产品发布。他们的看法:
- 即使不是明确销售,是否有任何句子感觉具有推广性?
- 帖子是否显示了对社区问题的真正了解,还是仅仅在谈论产品?
- 是否有任何从业者会翻白眼的说法?
说明他们会标记的具体一行及其原因。
角色 2:版主 此人执行在步骤 3 中获取的规则。他们的看法:
- 帖子在技术上符合子版块规则吗?
- 自我推广与社区贡献的比例是否可以接受?
- 他们以前是否见过这种精确的帖子结构被删除?
说明有违规风险的一条具体规则,或确认其是干净的。
角色 3:目标读者 这是一位非构建者的社区成员,与子版块的人口统计特征相匹配。他们的看法:
- 即使他们从不使用该产品,他们也会点赞这个帖子吗?
- 即使他们跳过第一条评论中的链接,他们能否获得一些可应用的东西?
- 开头句子是否让他们想继续阅读?
说明他们会停止阅读的一点,或确认帖子能保持他们的注意力。
在所有三个角色报告后:应用任何修复。如果没有角色发现问题,则说明“对抗性审查:干净。”
步骤 8:通过 Composio 发布(可选)
如果 Composio Reddit MCP 已连接且用户确认要发布:
使用 reddit-composio MCP 工具 REDDIT_CREATE_REDDIT_POST 并设置:
- subreddit: {去掉 r/ 的 SUBREDDIT}
- title: {标题}
- kind: "self"
- text: {正文}
在发布前,向用户确认: “准备在 r/{SUBREDDIT} 上发布。帖子标题:'{TITLE}'。要继续吗?”
仅在获得明确确认后继续。
发布后:
- 记录响应中的帖子 URL
- 如果起草了第一条评论,立即使用相同的 MCP 使用返回的帖子 ID 发布它
如果发布失败(403、429 或其他错误): 提供草稿供手动提交。告知用户:“直接发布失败([错误代码])。这是您的帖子,供手动提交。请在 reddit.com/r/{SUBREDDIT}/submit 复制粘贴标题和正文。”
步骤 9:呈现输出
## Reddit 帖子:r/{SUBREDDIT}
### 标题
{title}
### 正文
{body}
### 第一条评论(立即发布)
{first comment, if applicable}
---
### 提交备注
- 帖子类型:{self/link}
- 最佳发布时间:{该子版块的峰值时间:对于大多数技术子版块,美国工作日上午}
- 发布后:在第一个小时内回复每一条评论:早期参与向算法表明质量
- 因果报应注意:{If account is new, note that some subreddits require minimum karma before posting}
如果帖子已通过 Composio 提交,请将输出块替换为:
帖子已提交:{reddit_post_url}