ในกระบวนการสร้างสรรค์ผลงานเขียน ไม่ว่าจะเป็นบทความบล็อก เอกสารสรุปงานวิจัย หรือบันทึกความรู้ส่วนบุคคล การเขียนร่างแรก (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 โดยทำงานแยกส่วนจากขั้นตอนการจดบันทึกเพื่อไม่ให้ขัดจังหวะการเขียน:
- Vault File Scanner: สคริปต์ Python สแกนโฟลเดอร์ร่างบทความ (
Drafts/) ใน Obsidian Vault เพื่อหาไฟล์ Markdown ที่ต้องการการตรวจทาน (ระบุผ่าน Frontmatter tag เช่นstatus: proofread-requested) - Markdown & Frontmatter Parser: แยกส่วนหัวข้อ Metadata และเนื้อหาบทความออกจากกันอย่างชัดเจน เพื่อป้องกันไม่ให้ AI ไปแก้ไขค่าการตั้งค่าหรือ Tag ของระบบ
- Structured Local LLM Editing: ส่งเนื้อหาบทความไปให้โมเดลภาษาในเครื่อง (เช่น
qwen2.5หรือllama3.2) ตรวจวิเคราะห์ 3 มิติ: คำผิดและการสะกด, ความสอดคล้องของโทนภาษา, และ โครงสร้าง Markdown - 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
- สร้างโน้ตใหม่ในโฟลเดอร์
Drafts/ของ Obsidian เช่นmy-new-post.md - ใส่ Frontmatter ระบุ
status: proofread-requestedไว้ด้านบนสุดของไฟล์:
---
title: "แนวคิดการจัดการเวลาสำหรับนักพัฒนา"
status: "proofread-requested"
---
นี่คือเนื้อหาร่างแรกที่เขียนแบบเร็วๆ มีคำผิิดบ้าง และประโยคยังไม่ค่อยสลวยเท่าไหร่...
- รันสคริปต์ Python ใน Terminal:
python proofreader_agent.py
- สคริปต์จะสร้างไฟล์
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 ที่นอกจากจะเป็นคลังเก็บความรู้แล้ว ยังเป็นผู้ช่วยคิดขัดเกลาผลงานให้คุณโดยอัตโนมัติทุกวัน