Я створив pipeline для автоматичної публікації в WordPress журналів консультацій з AI з Obsidian

Я створив pipeline для автоматичної публікації в WordPress журналів консультацій з AI з Obsidian

Я створив pipeline для автоматичної публікації в WordPress журналів консультацій з AI з Obsidian

Вступ

Коли консультуєшся з AI щодо технічних питань, іноді виникає відчуття "ця розмова стане в нагоді пізніше". Однак насправді журнали чатів часто заховуються і не використовуються як знання.

У цій статті я представляю проектування та ключові моменти реалізації pipeline, який автоматично перетворює журнали консультацій з AI, вставлені в Obsidian, на статті блогу та публікує їх у вигляді чернеток у WordPress. Сподіваюся, це стане в нагоді тим, хто стикається з тією ж проблемою.


Загальний огляд pipeline

Процес просто поділяється на 4 кроки.

  1. Вхід — Збереження журналів чату у вигляді Markdown у папці Inbox в Obsidian
  2. Тригер — Виявлення змін файлу і запуск обробки
  3. Обробка — Перетворення журналу у формат статті блогу за допомогою Claude API
  4. Вихід — Автоматична публікація у вигляді чернетки через WordPress REST API
Obsidian (Markdown)
  └─ watchdog (моніторинг файлів)
       └─ Claude API (конвертація статті)
            └─ WP REST API (публікація чернетки)

Вибір технологічного стеку

Моніторинг файлів: Python watchdog

Бібліотека watchdog Python може виявляти події зміни у вказаній директорії в реальному часі. Оскільки подія спрацьовує щоразу, коли 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

Замість публікації журналу як є, до Claude API передається "промпт конвертації статті" для форматування. Ключовий момент тут — заздалегідь визначити формат статті.

  • Залишити у форматі Q&A → легко передати хід розмови
  • Перетворити на стислу статтю → легко переглянути і прочитати
  • Гібрид → вступ + уривки Q&A + підсумок

Приклад промпту:

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 містять процес спроб та помилок. Якщо все відформатувати, контекст "як прийшли до цього висновку" втрачається. Залишивши частину формату Q&A, стаття стає легшою для відтворення досвіду читачами.

Автоматичне присвоєння тегів і категорій

Включення кандидатів тегів у відповідь Claude API дозволяє повністю усунути ручну роботу. Однак поки точність не стабілізується, безпечніше тримати статус публікації на draft і проводити перевірку людиною.

Запобігання подвійній обробці

Оскільки watchdog спрацьовує при кожному збереженні файлу, один і той же файл може оброблятися кілька разів. Краще запобігати цьому за допомогою БД, що записує оброблені файли (SQLite достатньо), або управлінням хешем файлу.


Підсумок

Суть цього pipeline — "спочатку визначити формат виводу статті". Коли формат визначено, проектування промпту та реалізація коду просуваються плавно.

Замість того щоб намагатися автоматизувати все з самого початку, практичним підходом є початок з потоку конвертація → перевірка → ручна публікація, а потім перехід на автоматичну публікацію, коли якість стабілізується. Розмови з AI мають достатню якість, щоб стати статтями блогу, якщо їх організувати. Шкода дозволяти їм зникати.