:構(gòu)建小紅書圖文自動發(fā)布系統(tǒng))
先說結(jié)論這套東西跑通之后我真的可以實現(xiàn)每天早上九點自動打開小紅書創(chuàng)作后臺把前一天生成好的圖文內(nèi)容自動發(fā)布出去文案、封面、標(biāo)簽全部由程序包辦全程不用手動碰手機和電腦。聽起來很玄乎對吧其實背后的邏輯不復(fù)雜——你只需要一個開源的 Agent 框架 OpenClaw社區(qū)里也習(xí)慣叫它 Clawdbot再給它配上叫 Skills 的插件體系剩下的事情就是按部就班地填參數(shù)、寫規(guī)則。這篇我就用最“喂飯”的方式把 2026 版本的部署過程、Skills 開發(fā)方法以及小紅書圖文發(fā)布的整條鏈路拆開揉碎講清楚。這篇內(nèi)容適合誰我覺得三類人最需要一是做內(nèi)容運營但每天被重復(fù)發(fā)布工作拖垮的博主二是想入門 AI Agent 但被各種術(shù)語勸退的新手三是已經(jīng)玩過 OpenClaw 但卡在“不知道怎么讓它干活”的折騰型選手。不管你屬于哪一類只要按著下面的步驟走我保證你能在半小時內(nèi)跑通第一版自動發(fā)布流程。1. 先想清楚這套自動化的完整鏈路1.1 這件事的本質(zhì)是什么很多人一聽“AI 自動發(fā)小紅書”第一反應(yīng)是“是不是要寫爬蟲”“是不是要破解接口”“是不是很危險”。其實都不是。你完全可以把它理解成一個機器人管家你告訴它“每天早上 9 點發(fā)一篇關(guān)于咖啡的圖文”它就自己去調(diào)用文案生成能力、圖片處理能力、瀏覽器操作能力最后把成品發(fā)到創(chuàng)作后臺。這里面的核心鏈條有四段內(nèi)容生成根據(jù)你給的主題由大模型生成文案和圖片。內(nèi)容存儲生成好的 markdown 文件和圖片按日期歸檔到本地。發(fā)布執(zhí)行通過瀏覽器自動化或平臺接口把內(nèi)容提交到小紅書創(chuàng)作后臺。定時調(diào)度由 OpenClaw 的觸發(fā)機制按計劃調(diào)用整個流程。我用一個生活化的類比這就像你雇了一個助理助理每天自己找選題、寫稿子、做封面、排版然后打開網(wǎng)頁登錄你的賬號發(fā)布。你只需要每周看一眼數(shù)據(jù)反饋調(diào)整一下選題方向。1.2 Skills 在 OpenClaw 里到底是個啥OpenClawClawdbot本身更像是一個調(diào)度中樞它不負(fù)責(zé)具體的業(yè)務(wù)操作。真正干活的是 Skills。每個 Skill 就是一個獨立的功能模塊類似手機里的 App。比如你想讓它生成文案就裝一個“文案生成 Skill”想讓它處理圖片就裝一個“圖片處理 Skill”想讓它操作瀏覽器發(fā)布就裝一個“發(fā)布 Skill”。多個 Skill 可以被編排成一條流水線先調(diào)用哪個、后調(diào)用哪個、失敗怎么重試都由 OpenClaw 統(tǒng)一管理。我一開始犯的錯誤是總想把所有邏輯寫在一個腳本里結(jié)果越寫越亂。后來才明白Skill 的拆分原則很簡單一個 Skill 只做一件具體的事。文案生成歸文案圖片處理歸圖片發(fā)布?xì)w發(fā)布這樣后續(xù)替換任何一個環(huán)節(jié)都不用動其他代碼。1.3 為什么這個方案適合新手對比一下現(xiàn)成的發(fā)帖腳本。市面上很多所謂的“一鍵發(fā)布工具”是打包好的黑盒你填個賬號密碼就完事。聽起來省事但問題在于你沒法控制內(nèi)容質(zhì)量沒法調(diào)整發(fā)布節(jié)奏更沒法把它接到自己的數(shù)據(jù)源上。而 OpenClaw 的好處是模塊化 事件驅(qū)動。你可以從最簡單的一個 Skill 開始跑通之后再加第二個、第三個。整個學(xué)習(xí)曲線是平滑的不至于一上來就面對一堆抽象概念。另外它是本地運行的你的賬號數(shù)據(jù)、生成的內(nèi)容都在自己手里可控性高得多。有人可能會問那直接用 ChatGPT 生成文案再手動粘貼到小紅書不行嗎當(dāng)然行但那就回到手工操作了。自動化講究的是“無人值守”你要的是內(nèi)容能自己從數(shù)據(jù)庫里拿出來、自己配圖、自己發(fā)布而你只需要在數(shù)據(jù)反饋好的時候多生成幾篇數(shù)據(jù)不好就換個選題方向。2. 起步部署把 OpenClaw (Clawdbot) 跑起來2.1 環(huán)境要求與依賴準(zhǔn)備先說環(huán)境這步卡住了很多人但實際要求并不高。我是在一臺普通的 Windows 筆記本上做的部署系統(tǒng)是 Win 11。如果你用 macOS 或者 Linux操作基本一致。硬件方面OpenClaw 本身不挑配置2 核 4G 內(nèi)存就能跑得很流暢。但如果你的 Skills 里包含本地圖片生成模型那我建議至少準(zhǔn)備 8G 顯存新手階段我強烈建議直接調(diào)用現(xiàn)成的大模型服務(wù) API這樣就能跳過本地模型部署這道坎。軟件方面需要準(zhǔn)備這幾樣Node.js 18 或 Python 3.10看你的運行環(huán)境選哪個我個人推薦 Node 版本后續(xù)安裝 Skills 更順手。Git用來拉取項目代碼。瀏覽器發(fā)布 Skill 需要用到推薦新版的 Chromium 系瀏覽器。Docker可選但如果你不想污染本地環(huán)境可以用容器跑。安裝 Node 的時候記得勾選“自動安裝必需工具”選項它會幫你把編譯環(huán)境一并搞定。我見過不少新手的報錯其實都是這一步漏了。2.2 拉取程序與初始化配置環(huán)境準(zhǔn)備好之后打開終端執(zhí)行下面這條命令把項目克隆到本地git clone OpenClaw項目倉庫地址 openclaw cd openclaw接著安裝依賴。這一步會拉取幾十個第三方包耐心等它跑完npm install安裝完成后你會發(fā)現(xiàn)項目根目錄里有個.env.example文件。把它復(fù)制一份命名為.envcp .env.example .env然后打開.env文件重點配置這幾個字段# 大模型服務(wù)的 API Key MODEL_API_KEY你的密鑰 # 默認(rèn)使用的模型名稱建議選支持長上下文的型號 MODEL_NAMEdefault-model # 數(shù)據(jù)存儲目錄默認(rèn)為 ./data DATA_DIR./data # 時區(qū)設(shè)置影響定時任務(wù) TZAsia/Shanghai這里要特別提醒API Key 屬于敏感信息不要把.env文件提交到 Git 倉庫。項目默認(rèn)的.gitignore通常會忽略它但你自己心里要有這根弦。我在剛上手時有一次把配置寫進(jìn)了示例文件差點就傳上去了后來養(yǎng)成了改完配置就檢查一遍git status的習(xí)慣。2.3 驗證安裝跑通第一個基礎(chǔ) Skill配置完成之后啟動服務(wù)npm run dev看到終端輸出類似“OpenClaw (Clawdbot) is running on port 3000”的日志就說明主程序已經(jīng)起來了。但此時還不算真正跑通你需要驗證它能不能調(diào)用 Skills。項目自帶了一個基礎(chǔ)示例 Skill叫hello作用是打印一段文字。在另一個終端窗口執(zhí)行claw run skill:hello如果能看到類似Hello from OpenClaw!的輸出恭喜你整套框架已經(jīng)活了。后面你做再多復(fù)雜功能本質(zhì)都是在往這個框架里填自己的 Skill。2.4 部署中的三個常見坑直接把我踩過的坑列出來省得你重復(fù)交學(xué)費第一個坑端口被占用。如果你本機已經(jīng)跑著其他服務(wù)3000 端口可能沖突啟動會報錯。解決辦法是把.env里的PORT3000改成PORT3001之類的未占用端口。第二個坑依賴安裝失敗。國內(nèi)網(wǎng)絡(luò)環(huán)境下npm 偶爾會卡在某個包上。這時候可以把 npm 鏡像源切換成國內(nèi)鏡像然后再重新安裝。這一步解決的是下載速度問題跟網(wǎng)絡(luò)代理沒有任何關(guān)系。第三個坑日志不輸出。有些版本默認(rèn)把日志級別設(shè)成了 warn導(dǎo)致你看不到正常輸出還以為程序卡死了??梢栽趩用詈竺婕由险{(diào)試參數(shù)或者直接去logs/app.log看實時日志。3. 核心環(huán)節(jié)開發(fā)“小紅書自動發(fā)圖文” Skills3.1 Skill 的文件結(jié)構(gòu)長什么樣在項目根目錄下新建一個skills文件夾然后為小紅書圖文發(fā)布單獨建一個目錄。一個標(biāo)準(zhǔn) Skill 的文件結(jié)構(gòu)是skills/ xiaohongshu_auto/ manifest.json main.py assets/manifest.json是 Skill 的說明書聲明了它的名稱、版本、支持的輸入?yún)?shù)。main.py是具體的執(zhí)行邏輯。assets目錄用來放默認(rèn)圖片模板、字體等資源。先寫manifest.json{ name: xiaohongshu_auto, version: 1.0.0, description: 自動生成小紅書圖文并發(fā)布, inputs: [ { name: topic, type: string, required: true, description: 圖文主題 }, { name: images, type: string, required: false, description: 本地圖片路徑多個用逗號分隔 } ] }這里的關(guān)鍵是inputs。它相當(dāng)于告訴 OpenClaw我這個 Skill 需要接收什么參數(shù)。topic是你每次調(diào)用時傳入的主題詞images是可選的自定義圖片路徑。3.2 文案生成和圖片處理邏輯寫main.py的時候我建議把它拆成三個函數(shù)generate_copy、generate_images、save_article最后再定義一個run把它們串起來。import json import os from datetime import datetime def generate_copy(topic: str) - dict: # 調(diào)用大模型生成文案 # 這里以 HTTP 請求為例 response call_model( promptf為即將發(fā)布小紅書的內(nèi)容寫一篇種草文案主題是{topic}。 f要求標(biāo)題不超過20字正文800字左右?guī)г掝}標(biāo)簽。 ) return { title: response[title], body: response[body], tags: response[tags] } def generate_images(topic: str, custom_images: str None) - list: if custom_images: return [p.strip() for p in custom_images.split(,) if p.strip()] # 沒有自定義圖片時調(diào)用圖像生成模型或從模板目錄拷貝 return [assets/default_cover.png] def save_article(data: dict, images: list) - str: date_str datetime.now().strftime(%Y%m%d_%H%M) folder foutput/{date_str} os.makedirs(folder, exist_okTrue) with open(f{folder}/content.md, w, encodingutf-8) as f: f.write(f# {data[title]}\n\n{data[body]}\n\n) f.write( .join(f#{tag} for tag in data[tags])) return folder def run(topic: str, images: str None): data generate_copy(topic) image_list generate_images(topic, images) folder save_article(data, image_list) # 最后調(diào)用發(fā)布流程下節(jié)細(xì)說 publish_to_xiaohongshu(folder) return {status: success, folder: folder}這里面的核心邏輯一點都不神秘先讓大模型寫文案再處理圖片最后保存到本地。文件保存的路徑我特意用了“日期時間”的目錄名方便后續(xù)排查哪一篇是哪天生成的。3.3 發(fā)布動作自動化操作還是接口調(diào)用發(fā)布是整個流程里最容易翻車的環(huán)節(jié)也是大家最關(guān)心的。目前主流的做法有兩種我分別說清楚。第一種瀏覽器自動化。我用的是 Playwright它就像在幕后開了一個不需要屏幕的瀏覽器幫你自動打開創(chuàng)作后臺、登錄賬號、上傳圖片、填文案、點發(fā)布。核心代碼是這樣from playwright.sync_api import sync_playwright def publish_to_xiaohongshu(folder: str): with sync_playwright() as p: browser p.chromium.launch(headlessTrue) context browser.new_context( storage_statesession/session.json ) page context.new_page() # 打開創(chuàng)作后臺 page.goto(https://example.com/editor) # 等待頁面加載完成 page.wait_for_selector(text發(fā)布筆記) # 填寫標(biāo)題和正文 page.fill(input[placeholder請輸入標(biāo)題], title) page.fill(textarea[placeholder輸入正文], body) # 上傳圖片 page.set_input_files(input[typefile], image_paths) # 點擊發(fā)布 page.click(button:has-text(發(fā)布)) browser.close()這里的storage_state是存儲的登錄態(tài)第一次你需要手動打開瀏覽器登錄一次把登錄后的 Cookie 保存成session/session.json以后就能自動復(fù)用。第二種平臺接口。如果平臺方提供了開放接口那是更干凈的方式速度快也不需要維護(hù)瀏覽器。但接口通常有權(quán)限限制和頻率限制不是所有人都能申請到。新手階段我更建議先把瀏覽器自動化跑通等確認(rèn)有穩(wěn)定需求再考慮接口方案。3.4 參數(shù)設(shè)置與發(fā)布偽裝策略這里說的“偽裝”不是惡意行為而是模擬真人操作習(xí)慣避免被平臺的風(fēng)控誤判為機器人。比如每次發(fā)布前隨機延遲 3 到 8 秒模擬思考時間。發(fā)布時間不要固定在每分每秒而是間隔 10 到 15 秒之間隨機。如果當(dāng)天發(fā)布多條每條之間至少間隔 1 小時以上。這些細(xì)節(jié)看起來不起眼但實測下來非常有用。我有一次把間隔時間設(shè)成 5 秒固定值連續(xù)發(fā)了三條第三條直接觸發(fā)驗證碼。后來改成了隨機延遲類似問題再沒出現(xiàn)過。4. 實戰(zhàn)接入把 Skills 集成進(jìn) OpenClaw 并加入定時任務(wù)4.1 手動觸發(fā)一次全流程Skill 寫好后先別急著掛定時任務(wù)手動跑一次全流程驗證鏈路是通的。執(zhí)行claw run skill:xiaohongshu_auto --topic 春季通勤穿搭如果一切順利你會看到終端日志里依次出現(xiàn)“文案生成完成”“圖片處理完成”“文章已保存”“發(fā)布成功”這幾條記錄。這時候去你的小紅書賬號后臺看一眼內(nèi)容應(yīng)該已經(jīng)躺在“筆記管理”里了。這一步極其重要。我第一次直接掛定時任務(wù)結(jié)果第二天發(fā)現(xiàn)一條都沒發(fā)出去原因是登錄態(tài)過期了但日志全在本地沒來得及看。先手動跑通能讓你把問題控制在最小范圍內(nèi)。4.2 配置定時發(fā)布的觸發(fā)規(guī)則OpenClaw 支持通過配置文件聲明定時任務(wù)。在項目根目錄下有一個triggers.yaml把下面這段加進(jìn)去triggers: - type: cron schedule: 0 9 * * * skill: xiaohongshu_auto params: topic: 今日好物推薦這行配置的意思很簡單每天早上 9 點整自動調(diào)用xiaohongshu_auto這個 Skill主題參數(shù)固定為“今日好物推薦”。如果你不想用固定的主題可以改成一個動態(tài)來源比如從 RSS 訂閱源抓取最新的文章標(biāo)題作為 topic 傳入。這樣每天發(fā)布的內(nèi)容就是自動更新的不用你手動改配置。一條簡單的聯(lián)動方案是這樣的- type: cron schedule: 30 8 * * * skill: rss_fetch params: feed_url: https://example.com/feed.xml next_skill: xiaohongshu_auto意思是早上 8 點 30 分先抓取 RSS 內(nèi)容然后把抓到的標(biāo)題傳給后一個 Skill。4.3 讓內(nèi)容來源更豐富接入數(shù)據(jù)庫或 RSS只有固定主題的自動發(fā)布很快你會覺得乏味。真正的玩法是把它接到自己的內(nèi)容池上。我自己的做法是維護(hù)了一個選題庫用一張簡單的表格記錄候選話題和權(quán)重。每次調(diào)度觸發(fā)時OpenClaw 先讀取這個選題庫按照權(quán)重隨機抽一個主題再交給小紅書 Skill 去生成。這樣每天發(fā)的內(nèi)容都不一樣而且權(quán)重高的選題出現(xiàn)概率大效果好的選題會自然被多選幾次。數(shù)據(jù)源的接入其實就是一個額外的 Skill它負(fù)責(zé)從數(shù)據(jù)庫或 RSS 里讀數(shù)據(jù)然后返回給調(diào)度器。OpenClaw 允許一個 Skill 的輸出作為另一個 Skill 的輸入這正好串起了一條完整的數(shù)據(jù)流水線。4.4 日志與監(jiān)控自動化的前提是可控而可控的前提是能第一時間發(fā)現(xiàn)問題。OpenClaw 的日志默認(rèn)寫在logs/app.log我建議你在配置里把日志級別調(diào)成info這樣每次任務(wù)的執(zhí)行結(jié)果都會有記錄。如果你需要更直觀的監(jiān)控可以接一個簡單的通知 Skill每當(dāng)發(fā)布成功或失敗時往你的即時通訊工具里發(fā)一條消息。實現(xiàn)方式就是在run()函數(shù)末尾加一行 HTTP 回調(diào)把執(zhí)行結(jié)果推過去。這樣你早上醒來翻一眼手機就知道昨晚的發(fā)布任務(wù)都干了什么不用特意打開電腦查日志。5. 常見問題與排查技巧實錄5.1 登錄態(tài)失效導(dǎo)致的發(fā)布失敗這是最容易出問題的地方。Cookie 可能因為平臺更新或長時間未操作而過期導(dǎo)致自動化打開后臺時跳轉(zhuǎn)到登錄頁發(fā)布動作自然失敗。排查方式看日志里有沒有“登錄已過期”或“跳轉(zhuǎn)登錄頁”之類的關(guān)鍵詞。解決方案用 Playwright 寫一個登錄腳本手動掃碼后把新的 Cookie 保存到session/session.json覆蓋舊的即可。我已經(jīng)習(xí)慣每周檢查一次登錄態(tài)如果連續(xù)三天沒發(fā)新內(nèi)容我也會手動觸發(fā)一次來確認(rèn)賬號狀態(tài)。5.2 圖片生成失敗或尺寸不符小紅書的封面圖有官方推薦比例常見的是 3:4。如果你的圖片生成模塊輸出的尺寸不對發(fā)布時會提示“圖片比例不支持”或直接被平臺截斷。解決方案在圖片處理環(huán)節(jié)加一個標(biāo)準(zhǔn)化步驟把生成的圖片統(tǒng)一縮放到目標(biāo)尺寸并檢查文件大小是否超過平臺限制。你可以提前在本地把所有圖片過一遍PIL的處理流程確保尺寸、格式、清晰度都符合要求再交給發(fā)布模塊。5.3 發(fā)布頻率過快觸發(fā)風(fēng)控平臺對短時間內(nèi)的發(fā)布頻率是有監(jiān)控的。如果你把定時任務(wù)設(shè)成每小時發(fā)一條連續(xù)跑一整天極大概率觸發(fā)驗證碼甚至限流。解決方案把發(fā)布間隔拉長控制在每天 2 到 3 條以內(nèi)。哪怕你有很好的內(nèi)容儲備也不要讓自動化賬號變成“發(fā)稿機器”。我給自己的上限是每天 3 條每條發(fā)布時間隨機在 8 點到 12 點之間浮動。5.4 Skill 調(diào)用超時有些 Skill 可能在執(zhí)行過程中卡住比如大模型接口響應(yīng)慢或者瀏覽器頁面加載不出來導(dǎo)致整個任務(wù)超時掛起。解決方案在main.py里給每個環(huán)節(jié)加上超時控制。比如調(diào)用模型接口設(shè)置 120 秒上限瀏覽器操作設(shè)置 60 秒上限超時后直接拋異常并記錄日志。OpenClaw 會對異常任務(wù)做重試但如果一直卡在同一環(huán)節(jié)就要考慮是不是輸入?yún)?shù)有問題了。5.5 問題快查表問題可能原因排查手段解決辦法日志為空日志級別過高查看配置文件調(diào)為 info 級別端口沖突其他程序占用查看啟動報錯更改 PORT 參數(shù)Cookie 失效登錄態(tài)過期觀察頁面跳轉(zhuǎn)重新登錄并保存圖片上傳失敗尺寸/格式不支持查看上傳報錯預(yù)處理圖片觸發(fā)風(fēng)控頻率過快觀察時間間隔加隨機延遲任務(wù)未運行定時配置錯誤檢查 triggers 文件確認(rèn) cron 表達(dá)式5.6 一個值得注意的細(xì)節(jié)所有自動發(fā)布的內(nèi)容發(fā)布后都要第一時間去賬號后臺核對一下實際效果。我觀察到一個小規(guī)律自動化生成的內(nèi)容數(shù)據(jù)表現(xiàn)通常不如人工精心打磨的爆款但它勝在穩(wěn)定產(chǎn)出、量大管飽。你要做的是把自動化生成的內(nèi)容定位成“日常更新”把你親自寫的內(nèi)容定位成“精品內(nèi)容”兩條腿走路。6. 合規(guī)意識與長期運營心得6.1 遵守平臺規(guī)則是底線我在前面反復(fù)強調(diào)風(fēng)控、限流、驗證碼其實背后就一句話自動化工具要在平臺允許的范圍內(nèi)使用。小紅書對內(nèi)容營銷和自動化操作有自己的管理規(guī)范我們做自動化內(nèi)容生成必須遵守這些規(guī)范不刷量、不惡意營銷、不使用違規(guī)內(nèi)容。具體操作上我有幾條硬性自律規(guī)則發(fā)布頻率嚴(yán)格模仿真人每天不超過 3 條。內(nèi)容必須有實際信息增量嚴(yán)禁自動生成無意義的灌水文。涉及推薦、導(dǎo)購類內(nèi)容必須標(biāo)注立場和利益關(guān)系保證內(nèi)容透明。絕不批量注冊或管理多個賬號用于營銷只做自己正常賬號的效率提升。這不僅是合規(guī)問題也是賬號能不能長久運營的關(guān)鍵。我見過很多人因為頻率過高被限流后再恢復(fù)權(quán)重要花大半個月得不償失。6.2 內(nèi)容質(zhì)量是自動化的生命線一旦開始自動化你很容易陷入“為了更新而更新”的陷阱。我的經(jīng)驗是自動化負(fù)責(zé)“穩(wěn)定輸出”但內(nèi)容角度的選擇和最終質(zhì)量把控還是要靠你自己。比如我每周會抽半小時看看上一周自動發(fā)布的內(nèi)容數(shù)據(jù)把點擊率高的主題放進(jìn)選題庫的高權(quán)重區(qū)數(shù)據(jù)差的直接移出。用數(shù)據(jù)反饋來調(diào)優(yōu)自動生成的方向而不是任憑程序自己寫。這半個小時的投入比多寫十篇自動生成的文章都有效。6.3 后續(xù)還能怎么擴展這套框架跑通之后可玩性遠(yuǎn)不止小紅書圖文發(fā)布。我目前已經(jīng)在做的擴展方向有這么幾個把同一個 Skills 框架接駁其他圖文平臺的“創(chuàng)作后臺”實現(xiàn)一稿多發(fā)。增加數(shù)據(jù)分析 Skill自動讀取筆記數(shù)據(jù)生成周報。接入私信自動回復(fù)對評論區(qū)互動做初步響應(yīng)。把內(nèi)容流程做成一個完整的“選題—創(chuàng)作—發(fā)布—復(fù)盤”閉環(huán)每周自動生成運營總結(jié)。這些都只是把現(xiàn)有 Skill 的顆粒度再拆細(xì)一點再加幾條觸發(fā)規(guī)則難度不會比現(xiàn)在高太多。OpenClaw 的底子決定了一旦跑通一個完整 Skill后面就是拼接積木的活兒。最后多分享一個我個人的心得體會自動化不是為了讓你徹底撒手不管而是為了把你從重復(fù)勞動里解放出來把時間花在真正需要判斷力的地方。像“這篇內(nèi)容標(biāo)題起得好不好”“這周的選題方向?qū)Σ粚Α边@類問題依然需要你自己拍板。工具能幫你節(jié)省兩小時但省下來的時間要用在刀刃上否則自動化就失去了意義。