Reddit 發文引擎 是做什麼的?
撰寫符合子版文化的 Reddit 貼文。可選擇透過 Composio 發佈。
關鍵規則: 未確認子版規則前,絕不發佈。絕不在內文中包含產品連結:若有需要,僅將連結放在首則留言。遵循 90/10 法則:您的貼文應在提及任何產品之前,先提供獨立價值。
反垃圾郵件規則: 主要為推銷性質的貼文將被移除,並可能導致帳號被停權。目標是優先貢獻社群。產品提及應放在首則留言,且僅在該子版允許自我推廣時才這麼做。
步驟 1:環境檢查
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
# 檢查 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 特有用語 | 這確保了、這允許了、這有助於、這使得、深入探究、利用、善用、促進 |
如果出現任何詞彙:用特定的名詞、動詞或數字取代。「非常快」改為「12 毫秒內執行完畢」。「強大的工具」改為其實際功能。
立即刪除用語檢查:以下模式會觸發 Reddit 垃圾郵件過濾器或版主移除:
- 任何讀起來像廣告的句子(「立即試用 [產品]」、「立即註冊」、「免費開始」)
- 暗示您不是建造者的用語(「我發現了這個很棒的工具」、「我找到了這個驚人的產品」)
- 在您尚未建立社群存在的子版中使用第一人稱提及使用者(「我們的使用者」、「我們的客戶」)
- 「我做了 X,你可以用它來...」後面緊接著連結(推銷結構)
- 未經限定的最高級用語(「做...的最好方法」、「唯一能做到的工具」)
- 內文中的外部連結(請僅在首則留言中使用)
如果出現任何立即刪除用語:完全改寫句子,而非僅替換詞彙。
步驟 7:抗辯審查
在展示最終草稿之前,執行 3 種角色的審查。每個角色閱讀貼文,並找出一個具體問題,引用觸發該問題的確切文字。
角色 1:懷疑論實踐者 這個人在 r/{SUBREDDIT} 多年,看過數百個偽裝成貼文的產品發表。他們的看法:
- 是否有任何句子即使不是明確銷售,也感覺有推銷意味?
- 貼文是否展現了對社群問題的真正了解,還是只談論產品?
- 是否有任何實踐者會翻白眼的說法?
指出他們會標記的具體一行文字及其原因。
角色 2:版主 這個人負責執行步驟 3 中獲取的規則。他們的看法:
- 貼文是否在技術上符合子版規則?
- 自我推廣與社群貢獻的比例是否可接受?
- 他們是否看過完全相同的貼文結構之前被移除過?
指出有違規風險的具體一條規則,或確認其是乾淨的。
角色 3:目標讀者 這是一位非建造者的社群成員,符合該子版的人口統計特徵。他們的看法:
- 即使他們永遠不會使用該產品,他們會給這篇貼文按讚嗎?
- 即使他們跳過首則留言中的連結,他們能學到可以應用的東西嗎?
- 開頭句子是否讓他們想繼續讀下去?
指出他們會在何處停止閱讀,或確認貼文能吸引他們的注意力。
在所有三個角色報告之後:套用任何修正。如果沒有角色發現問題,則聲明「抗辯審查:通過。」
步驟 8:透過 Composio 發佈(可選)
如果 Composio Reddit MCP 已連線且使用者確認要發佈:
使用 reddit-composio MCP 工具 REDDIT_CREATE_REDDIT_POST,參數如下:
- subreddit: {SUBREDDIT_WITHOUT_r/}
- title: {TITLE}
- kind: "self"
- text: {BODY}
發佈前,請與使用者確認: 「準備發佈到 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}
- 最佳發文時間:{此子版的尖峰時段:多數科技子版為美國平日上午}
- 發文後:在最初一小時內回覆每則留言:早期互動會向演算法傳達品質訊號
- 網路聲譽注意事項:{如果帳號是新建立的,請注意某些子版在允許發文前需要最低網路聲譽值}
如果貼文已透過 Composio 提交,請將輸出區塊替換為:
貼文已提交:{reddit_post_url}