🇬🇧 มีฉบับภาษาอังกฤษ: Read this article in English →

สร้าง AI Agent ตรวจทานและขัดเกลาบทความอัตโนมัติ: ปรับโทน ตรวจคำผิด และจัดฟอร์แมต Markdown ใน Obsidian ด้วย Python + Ollama

สร้าง AI Agent ตรวจทานและขัดเกลาบทความอัตโนมัติ: ปรับโทน ตรวจคำผิด และจัดฟอร์แมต Markdown ใน Obsidian ด้วย Python + Ollama

ในกระบวนการสร้างสรรค์ผลงานเขียน ไม่ว่าจะเป็นบทความบล็อก เอกสารสรุปงานวิจัย หรือบันทึกความรู้ส่วนบุคคล การเขียนร่างแรก (First Draft) และการตรวจทานขัดเกลา (Proofreading & Editing) คือสองขั้นตอนที่ใช้พลังสมองที่แตกต่างกันสิ้นเชิง

ขณะร่างแรกต้องการ Flow State และความคิดสร้างสรรค์ที่ลื่นไหล การตรวจทานขัดเกลากลับต้องการความละเอียดถี่ถ้วน ตรวจเช็กคำผิด ตรวจสอบความสอดคล้องของระดับภาษา (Tone & Style) และจัดระเบียบโครงสร้างหัวข้อให้ถูกต้องตามมาตรฐาน

ผู้เขียนหลายคนมักตกหลุมพรางของการพยายามทำทั้งสองอย่างพร้อมกัน ส่งผลให้เกิด Cognitive Friction หรือความเหนื่อยล้าทางความคิดจนงานเขียนไม่คืบหน้า การนำ Cognitive Automation เข้ามาช่วยขัดเกลาเนื้อหาในเบื้องหลัง จึงเป็นทางออกที่ช่วยผ่อนแรงสมองและทำให้เราโฟกัสกับการคิดเนื้อหาหลักได้อย่างเต็มที่

บทความนี้จะพาคุณสร้าง Local AI Article Proofreader Agent ด้วย Python ร่วมกับ Ollama เพื่อคอยตรวจทานบทความใน Obsidian Vault ของคุณโดยอัตโนมัติ ปรับปรุงคำผิด เสนอการปรับระดับภาษา และตรวจสอบโครงสร้าง Markdown โดยข้อมูลทั้งหมดประมวลผลบนเครื่องของคุณแบบออฟไลน์ 100%


สถาปัตยกรรมของ Local Proofreader Agent

Agent ตัวนี้ถูกออกแบบตามแนวคิด Local-first & Privacy-centric โดยทำงานแยกส่วนจากขั้นตอนการจดบันทึกเพื่อไม่ให้ขัดจังหวะการเขียน:

  1. Vault File Scanner: สคริปต์ Python สแกนโฟลเดอร์ร่างบทความ (Drafts/) ใน Obsidian Vault เพื่อหาไฟล์ Markdown ที่ต้องการการตรวจทาน (ระบุผ่าน Frontmatter tag เช่น status: proofread-requested)
  2. Markdown & Frontmatter Parser: แยกส่วนหัวข้อ Metadata และเนื้อหาบทความออกจากกันอย่างชัดเจน เพื่อป้องกันไม่ให้ AI ไปแก้ไขค่าการตั้งค่าหรือ Tag ของระบบ
  3. Structured Local LLM Editing: ส่งเนื้อหาบทความไปให้โมเดลภาษาในเครื่อง (เช่น qwen2.5 หรือ llama3.2) ตรวจวิเคราะห์ 3 มิติ: คำผิดและการสะกด, ความสอดคล้องของโทนภาษา, และ โครงสร้าง Markdown
  4. Diff & Review Note Generator: สร้างโน้ตผลการตรวจทานแยกต่างหากคู่กับบทความเดิม โดยสรุปรายการจุดที่ปรับแก้ พร้อมฉบับขัดเกลาเรียบร้อยแล้ว เพื่อให้ผู้เขียนพิจารณาอนุมัติก่อนรวมเข้าเนื้อหาหลัก

ขั้นตอนที่ 1: เตรียมสภาพแวดล้อมและโมเดลภาษา

การตรวจทานบทความต้องการโมเดลที่มีความเข้าใจโครงสร้างภาษาและไวยากรณ์อย่างลึกซึ้ง โมเดลขนาดกลางอย่าง Qwen 2.5 (7B หรือ 14B) หรือ Llama 3.1 / 3.2 ถือเป็นตัวเลือกที่ยอดเยี่ยมสำหรับการประมวลผลภาษาไทยและอังกฤษในเครื่อง

เปิด Terminal แล้วดาวน์โหลดโมเดลผ่าน Ollama:

ollama run qwen2.5:7b

จากนั้นติดตั้งไลบรารี Python สำหรับจัดการไฟล์ YAML และส่ง HTTP Request:

pip install python-frontmatter requests PyYAML

ขั้นตอนที่ 2: เขียนสคริปต์ Python สำหรับ Proofreader Agent

สร้างไฟล์ proofreader_agent.py ในเครื่องของคุณ โดยระบุเส้นทาง Vault และตรรกะการประมวลผลดังนี้:

import os
import glob
import requests
import frontmatter
from datetime import datetime

# กำหนดค่าคอนฟิก
VAULT_DRAFTS_PATH = "/home/linn/ObsidianVault/Drafts"
OLLAMA_API_URL = "http://localhost:11434/api/generate"
MODEL_NAME = "qwen2.5:7b"

PROMPT_TEMPLATE = """คุณคือบรรณาธิการมืออาชีพ (Senior Content Editor) หน้าที่ของคุณคือตรวจทานและขัดเกลาบทความต่อไปนี้:

[กฎการตรวจทาน]
1. ตรวจสอบและแก้ไขคำผิด คำพ้องเสียง และการสะกดผิดภาษาไทยและอังกฤษ
2. ปรับปรุงระดับภาษาให้กระชับ ชัดเจน มีความสอดคล้องกัน (Tech-savvy, Professional, Actionable)
3. ตรวจสอบโครงสร้าง Markdown (เช่น H2/H3, การใช้ตัวหนาเน้นคำสำคัญ, รายการ bullet points)
4. ห้ามเปลี่ยนแปลงความหมายดั้งเดิมหรือข้อเท็จจริงในบทความ

[เนื้อหาบทความดิบ]
{article_text}

[รูปแบบผลลัพธ์ที่ต้องการ]
โปรดตอบกลับในรูปแบบ Markdown โดยแบ่งเป็น 2 ส่วนชัดเจน:
### 1. รายการจุดที่เสนอปรับแก้ไข (Suggested Revisions)
- รายการคำผิดที่แก้
- รายการปรับโครงสร้างประโยค/โทนภาษา

---

### 2. เนื้อหาฉบับขัดเกลาสมบูรณ์ (Polished Version)
(วางเนื้อหาบทความที่ตรวจทานเรียบร้อยแล้วที่นี่)
"""

def process_draft_file(filepath):
    print(f"📄 กำลังอ่านไฟล์: {filepath}")
    with open(filepath, 'r', encoding='utf-8') as f:
        post = frontmatter.load(f)

    # ตรวจสอบว่าไฟล์ต้องการตรวจทานหรือไม่
    if post.metadata.get('status') != 'proofread-requested':
        return

    print("🤖 กำลังส่งเนื้อหาให้ Local LLM ตรวจทาน...")
    prompt = PROMPT_TEMPLATE.format(article_text=post.content)

    payload = {
        "model": MODEL_NAME,
        "prompt": prompt,
        "stream": False
    }

    try:
        response = requests.post(OLLAMA_API_URL, json=payload)
        response.raise_for_status()
        result = response.json().get('response', '')

        # บันทึกผลลัพธ์ลงในไฟล์ตรวจทานคู่ขนาน
        base_name = os.path.basename(filepath)
        filename_without_ext = os.path.splitext(base_name)[0]
        review_filename = f"{filename_without_ext}-review.md"
        review_path = os.path.join(os.path.dirname(filepath), review_filename)

        review_content = f"""---
title: "Review: {post.metadata.get('title', filename_without_ext)}"
date: "{datetime.now().strftime('%Y-%m-%d')}"
type: "proofread-report"
original_file: "{base_name}"
---

# รายงานการตรวจทานบทความ: {post.metadata.get('title', filename_without_ext)}

{result}
"""
        with open(review_path, 'w', encoding='utf-8') as f_out:
            f_out.write(review_content)

        print(f"✅ บันทึกรายงานการตรวจทานเรียบร้อย: {review_path}")

        # อัปเดตสถานะในไฟล์ต้นฉบับ
        post.metadata['status'] = 'proofread-completed'
        with open(filepath, 'w', encoding='utf-8') as f_orig:
            f_orig.write(frontmatter.dumps(post))

    except Exception as e:
        print(f"❌ เกิดข้อผิดพลาดในการประมวลผล: {e}")

def main():
    markdown_files = glob.glob(os.path.join(VAULT_DRAFTS_PATH, "*.md"))
    for file_path in markdown_files:
        if not file_path.endswith("-review.md"):
            process_draft_file(file_path)

if __name__ == "__main__":
    main()

ขั้นตอนที่ 3: ทดสอบการทำงานใน Obsidian Workflow

  1. สร้างโน้ตใหม่ในโฟลเดอร์ Drafts/ ของ Obsidian เช่น my-new-post.md
  2. ใส่ Frontmatter ระบุ status: proofread-requested ไว้ด้านบนสุดของไฟล์:
---
title: "แนวคิดการจัดการเวลาสำหรับนักพัฒนา"
status: "proofread-requested"
---

นี่คือเนื้อหาร่างแรกที่เขียนแบบเร็วๆ มีคำผิิดบ้าง และประโยคยังไม่ค่อยสลวยเท่าไหร่...
  1. รันสคริปต์ Python ใน Terminal:
python proofreader_agent.py
  1. สคริปต์จะสร้างไฟล์ my-new-post-review.md ขึ้นมาโดยอัตโนมัติ พร้อมแสดงจุดที่แก้ไขอย่างชัดเจน และอัปเดตสถานะไฟล์เดิมเป็น proofread-completed ช่วยให้คุณเปรียบเทียบและเลือกรวมข้อความขัดเกลาเข้าบทความหลักได้อย่างง่ายดาย

สรุปและประโยชน์ของการใช้ Cognitive Automation

การเปลี่ยนขั้นตอนตรวจทานและขัดเกลาบทความให้เป็นระบบอัตโนมัติด้วย Local AI Proofreader Agent ช่วยเปิดล็อกประโยชน์สำคัญ 3 ประการ:

  • รักษา Flow State ในการเขียน: แยกสมองส่วนสร้างสรรค์ออกจากสมองส่วนจับผิด ไม่ต้องกังวลเรื่องคำผิดระหว่างร่างบทความ
  • ความเป็นส่วนตัว 100%: ร่างไอเดีย และความทรงจำส่วนตัวใน Second Brain ไม่ถูกส่งขึ้น Cloud AI ของบริษัทใดๆ
  • กำหนดมาตรฐานและโทนส่วนตัวได้: สามารถปรับแต่ง PROMPT_TEMPLATE ให้ตรงกับ Style Guide เฉพาะตัวของคุณเองได้ตลอดเวลา

การตั้งค่า Cognitive Automation เช่นนี้คือหัวใจสำคัญของการสร้าง Second Brain ที่นอกจากจะเป็นคลังเก็บความรู้แล้ว ยังเป็นผู้ช่วยคิดขัดเกลาผลงานให้คุณโดยอัตโนมัติทุกวัน

🛒 TREND DEE STORE • ร้านเทรนด์ดี

🛠️ เครื่องสำหรับรัน Autonomous Agent ตลอด 24 ชม.

คัดสรรอุปกรณ์ที่ตอบโจทย์และใช้งานจริงตามเนื้อหาในบทความนี้