我建立了一個將Obsidian中AI諮詢記錄自動發布到WordPress的流水線
前言
與AI進行技術諮詢時,有時會有「這段對話以後會有用」的感覺。然而實際上,聊天記錄往往被埋沒,無法作為知識加以利用。
本文介紹將貼到Obsidian中的AI諮詢記錄自動轉化為部落格文章、以草稿形式發布到WordPress的流水線的設計與實作要點。希望能為有同樣困擾的人提供參考。
流水線全貌
處理流程簡單分為4個步驟。
- 輸入 — 將聊天記錄以Markdown格式儲存到Obsidian的Inbox資料夾
- 觸發 — 偵測檔案變化並啟動處理
- 處理 — 用Claude API將記錄轉換為部落格文章格式
- 輸出 — 透過WordPress REST API自動發布為草稿
Obsidian (Markdown)
└─ watchdog(檔案監控)
└─ Claude API(文章轉換)
└─ WP REST API(草稿發布)
技術堆疊選型
檔案監控:Python watchdog
Python的watchdog函式庫能即時偵測指定目錄的變更事件。由於Obsidian每次儲存時都會觸發事件,用作觸發器再合適不過。
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MarkdownHandler(FileSystemEventHandler):
def on_created(self, event):
if event.src_path.endswith(".md"):
process_file(event.src_path)
observer = Observer()
observer.schedule(MarkdownHandler(), path="./inbox", recursive=False)
observer.start()
文章轉換:Claude API
不直接發布記錄,而是將「文章化prompt」傳入Claude API進行格式化。這裡的關鍵是事先確定文章格式。
- 保留問答形式 → 易於傳達對話脈絡
- 轉為摘要文章 → 便於快速瀏覽和閱讀
- 混合形式 → 引言 + 問答摘錄 + 總結
Prompt範例:
prompt = f"""
請根據以下AI諮詢記錄,撰寫一篇技術部落格文章。
- 使用H2/H3標題
- 適當使用程式碼區塊
- 提議3個標籤
- 輸出格式:JSON {{ "title": "", "content": "", "tags": [] }}
---記錄---
{raw_log}
"""
WordPress發布:REST API
使用WP REST API可從外部以程式方式發布。目前使用Application Password進行認證是最佳實踐。
import requests
import base64
def post_to_wordpress(title, content, tags):
credentials = base64.b64encode(b"username:app_password").decode("utf-8")
headers = {"Authorization": f"Basic {credentials}"}
payload = {
"title": title,
"content": content,
"status": "draft", # 必須以草稿形式發布
"tags": tags,
}
response = requests.post(
"https://example.com/wp-json/wp/v2/posts",
json=payload,
headers=headers,
)
return response.json()
設計中容易糾結的地方
保留多少記錄的「原始感」
與AI的互動包含試錯過程。全部格式化之後,「為何得出該結論」的上下文就會消失。保留部分問答形式,可以讓讀者更容易重現思考過程。
標籤與分類的自動指派
在Claude API的回應中包含標籤候選,可以將手動工作降為零。但在精度穩定之前,將發布狀態設為draft讓人工審核的運作方式更為穩妥。
防止重複處理
由於watchdog每次檔案儲存都會觸發事件,可能出現同一檔案被處理多次的情況。用記錄已處理檔案的DB(SQLite足矣)或檔案雜湊管理來防止是個好辦法。
總結
這條流水線的核心是「先確定文章輸出格式」。格式確定後,prompt設計和程式碼實作都會順暢推進。
不必一開始就把一切都自動化,從轉換→審核→手動發布的流程開始,待品質穩定後再切換至自動發布,這才是現實的做法。與AI的對話,整理之後完全具備成為部落格文章的品質。讓它們被埋沒實在可惜。