Tôi đã tạo pipeline tự động đăng nhật ký tư vấn AI từ Obsidian lên WordPress

Tôi đã tạo pipeline tự động đăng nhật ký tư vấn AI từ Obsidian lên WordPress

Tôi đã tạo pipeline tự động đăng nhật ký tư vấn AI từ Obsidian lên WordPress

Giới thiệu

Khi tư vấn kỹ thuật với AI, đôi khi có những lúc bạn nghĩ "cuộc trò chuyện này có vẻ sẽ hữu ích sau này". Tuy nhiên trên thực tế, lịch sử chat thường bị chôn vùi và không được tận dụng như kiến thức.

Bài viết này giới thiệu thiết kế và các điểm triển khai của pipeline tự động chuyển đổi nhật ký tư vấn AI được dán vào Obsidian thành bài viết blog và đăng dưới dạng bản nháp lên WordPress. Hy vọng hữu ích cho những ai gặp vấn đề tương tự.


Tổng quan về pipeline

Luồng xử lý được chia đơn giản thành 4 bước.

  1. Đầu vào — Lưu nhật ký trò chuyện dưới dạng Markdown vào thư mục Inbox trong Obsidian
  2. Kích hoạt — Phát hiện thay đổi file và khởi động xử lý
  3. Xử lý — Chuyển đổi nhật ký sang định dạng bài viết blog bằng Claude API
  4. Đầu ra — Tự động đăng dưới dạng bản nháp qua WordPress REST API
Obsidian (Markdown)
  └─ watchdog (giám sát file)
       └─ Claude API (chuyển đổi bài viết)
            └─ WP REST API (đăng bản nháp)

Lựa chọn tech stack

Giám sát file: Python watchdog

Thư viện watchdog của Python có thể phát hiện các sự kiện thay đổi trong thư mục được chỉ định theo thời gian thực. Vì sự kiện kích hoạt mỗi khi Obsidian lưu, nó rất lý tưởng như một trigger.

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()

Chuyển đổi bài viết: Claude API

Thay vì đăng nhật ký nguyên xi, hãy truyền "prompt chuyển đổi bài viết" vào Claude API để định dạng. Điểm mấu chốt ở đây là xác định định dạng bài viết trước.

  • Giữ dạng Q&A → dễ truyền đạt luồng hội thoại
  • Chuyển thành bài viết tóm tắt → dễ lướt và đọc
  • Kết hợp → giới thiệu + trích đoạn Q&A + kết luận

Ví dụ prompt:

prompt = f"""
Dựa trên nhật ký tư vấn AI sau đây, hãy viết một bài blog kỹ thuật.
- Sử dụng tiêu đề H2/H3
- Sử dụng khối code phù hợp
- Đề xuất 3 thẻ
- Định dạng đầu ra: JSON {{ "title": "", "content": "", "tags": [] }}

---Nhật ký---
{raw_log}
"""

Đăng WordPress: REST API

Sử dụng WP REST API có thể đăng bài lập trình từ bên ngoài. Sử dụng Application Password để xác thực là thực hành tốt nhất hiện tại.

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",  # Luôn đăng dưới dạng bản nháp
        "tags": tags,
    }
    
    response = requests.post(
        "https://example.com/wp-json/wp/v2/posts",
        json=payload,
        headers=headers,
    )
    return response.json()

Những điểm dễ phân vân trong thiết kế

Giữ lại "tính tự nhiên" của nhật ký đến mức nào

Cuộc trò chuyện với AI bao gồm quá trình thử và sai. Nếu định dạng tất cả, bối cảnh "tại sao đi đến kết luận đó" sẽ mất đi. Giữ lại một phần định dạng Q&A giúp bài viết dễ theo dõi hơn cho độc giả.

Tự động gán thẻ và danh mục

Đưa các ứng viên thẻ vào phản hồi của Claude API có thể loại bỏ hoàn toàn công việc thủ công. Tuy nhiên cho đến khi độ chính xác ổn định, an toàn hơn là giữ trạng thái đăng draft và để con người xem xét.

Ngăn chặn xử lý trùng lặp

watchdog kích hoạt sự kiện mỗi khi lưu file, có trường hợp cùng một file được xử lý nhiều lần. Nên ngăn chặn bằng DB ghi lại các file đã xử lý (SQLite là đủ) hoặc quản lý hash file.


Kết luận

Cốt lõi của pipeline này là "xác định định dạng đầu ra bài viết trước". Khi định dạng được xác định, thiết kế prompt và triển khai code sẽ tiến hành suôn sẻ.

Thay vì cố gắng tự động hóa mọi thứ từ đầu, cách tiếp cận thực tế là bắt đầu với luồng chuyển đổi → xem xét → đăng thủ công, rồi chuyển sang đăng tự động khi chất lượng ổn định. Các cuộc trò chuyện với AI có đủ chất lượng để trở thành bài blog nếu được tổ chức tốt. Thật tiếc nếu để chúng bị lãng quên.