我搭建了一个将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的对话,整理之后完全具备成为博客文章的质量。让它们被埋没实在可惜。