สร้าง AI Agent สรุปข่าวสารรายวันเข้าระบบ Second Brain: วิธีเซ็ต Cognitive Automation แบบ Local 100%
ในแต่ละวันเราต้องเผชิญกับคลื่นข้อมูลมหาศาล มาสร้าง AI Agent ในเครื่องตัวเองด้วย Python และ Ollama เพื่อสรุปข่าวสารและส่งตรงเข้า Obsidian แบบออฟไลน์และเป็นส่วนตัว 100% กัน
ในยุคดิจิทัลที่มีข้อมูลข่าวสารและบทความเทคโนโลยีอัปเดตใหม่ทุกนาที ปัญหาที่พวกเราหลายคนพบเจอคือ "Information Overload" หรือการมีข้อมูลท่วมท้นจนสมองรับไม่ไหว การต้องคอยกดเข้าไปอ่านทุกเว็บไซต์ ทุกฟีดข่าว เพื่อตามหาสาระสำคัญ ทำให้เราสูญเสียพลังงานสมอง (Cognitive Load) ไปกับสิ่งที่ไม่จำเป็นในแต่ละวัน
นี่คือจุดที่แนวคิด Cognitive Automation เข้ามามีบทบาท นั่นคือการสร้างระบบอัตโนมัติเพื่อทำหน้าที่แทนกระบวนการคิดขั้นพื้นฐานของเรา เช่น การคัดกรอง การคัดแยก และการสรุปข้อมูล
แม้ว่าเราจะสามารถใช้เครื่องมือ Cloud-based อย่าง Zapier, Make หรือ OpenAI API ในการสร้างระบบสรุปข้อมูลเหล่านี้ได้อย่างรวดเร็ว แต่ก็ต้องแลกมาด้วยความกังวลเรื่อง ความเป็นส่วนตัวของข้อมูล และ ค่าบริการรายเดือน ที่อาจบานปลาย ในบทความนี้ เราจะมาสร้าง AI Agent ส่วนตัวที่ทำงานบนเครื่องคอมพิวเตอร์ของคุณเอง 100% เพื่อทำหน้าที่ดึงข้อมูลฟีดข่าวมาให้ local LLM สรุปเนื้อหา แล้วเซฟลง Obsidian vault โดยอัตโนมัติ
โครงสร้างการทำงานของ Local AI Agent
ก่อนเริ่มลงมือเขียนโค้ด เรามาดูแผนภาพการไหลของข้อมูล (Data Flow) ในระบบที่เรากำลังจะสร้างกันก่อน:
- ดึงข้อมูล (Fetch): สคริปต์ Python ทำการดึงข่าวสารล่าสุดจาก RSS Feed ของเว็บไซต์ที่เราสนใจ
- ประมวลผลและสรุป (Summarize): ส่งเนื้อหาข่าวเข้าสู่ Ollama ที่รันอยู่ในเครื่องเพื่อสรุปประเด็นด้วยโมเดลภาษาขนาดใหญ่ (Local LLM)
- จัดเก็บ (Store): บันทึกผลสรุปเป็นไฟล์ Markdown (.md) ลงในโฟลเดดอร์ของ Obsidian Vault เพื่อรอให้เราเข้ามาอ่าน
ทุกขั้นตอนการทำงานนี้เกิดขึ้นภายในเครื่องคอมพิวเตอร์ของคุณเองทั้งหมด ไม่มีการส่งข้อมูลใดๆ ออกไปยังเซิร์ฟเวอร์ภายนอก ทำให้ปลอดภัยและเป็นส่วนตัวอย่างแน่นอน
สิ่งที่ต้องเตรียมก่อนเริ่มสร้าง
เพื่อให้ระบบ Cognitive Automation นี้ทำงานได้ คุณต้องติดตั้งโปรแกรมเหล่านี้ในเครื่องก่อน:
- Python 3: ติดตั้งในระบบสำหรับรันสคริปต์ดึงฟีดและควบคุมการส่งงานให้ AI
- Ollama: สำหรับรัน Local LLM ในเครื่อง (ดาวน์โหลดได้จาก ollama.com)
- Obsidian: แอปพลิเคชันจดโน้ตแนว Second Brain ที่ใช้ระบบไฟล์ Markdown
หลังจากติดตั้ง Ollama เรียบร้อยแล้ว ให้เปิด Terminal หรือ Command Prompt แล้วสั่งดาวน์โหลดโมเดลที่ต้องการใช้งาน ในคู่มือนี้เราจะใช้ llama3 หรือ gemma2 ซึ่งเป็นโมเดลที่เข้าใจและประมวลผลภาษาไทยได้ดี:
ollama pull llama3
เขียนสคริปต์ Python ควบคุม AI Agent
มาเริ่มเขียนโค้ดภาษา Python เพื่อสร้างตัวตนของ AI Agent สรุปข่าวสารกันครับ ให้สร้างไฟล์ชื่อ summarizer_agent.py และใส่โค้ดดังต่อไปนี้:
import urllib.request
import json
import xml.etree.ElementTree as ET
import os
from datetime import datetime
# ตั้งค่าตำแหน่ง Obsidian Vault และ URL ของ RSS Feed ที่ต้องการสรุป
OBSIDIAN_VAULT_PATH = "/home/linn/notes/Daily Summaries" # เปลี่ยนเป็น Path โฟลเดอร์ใน Obsidian ของคุณ
RSS_FEED_URL = "https://www.blognone.com/atom.xml" # ตัวอย่างฟีดข่าวจาก Blognone
LLM_MODEL = "llama3" # โมเดลที่ต้องการใช้งานใน Ollama
def fetch_rss_titles(url):
print("กำลังดึงข่าวจาก RSS Feed...")
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
with urllib.request.urlopen(req) as response:
xml_data = response.read()
root = ET.fromstring(xml_data)
articles = []
# รองรับทั้งรูปแบบ RSS 2.0 และ Atom Feed
namespaces = {'atom': 'http://www.w3.org/2005/Atom'}
entries = root.findall('atom:entry', namespaces) or root.findall('.//item')
for entry in entries[:5]: # ดึงมาเฉพาะ 5 ข่าวล่าสุดเพื่อไม่ให้คิวยาวเกินไป
title = entry.find('atom:title', namespaces) or entry.find('title')
link = entry.find('atom:link', namespaces) or entry.find('link')
title_text = title.text.strip() if title is not None else ""
link_href = link.attrib.get('href', '').strip() if link is not None and 'href' in link.attrib else (link.text.strip() if link is not None else "")
articles.append({"title": title_text, "link": link_href})
return articles
def generate_summary(article_title):
prompt = f"กรุณาสรุปข่าวดังต่อไปนี้ให้กระชับ เป็นภาษาไทย โดยเน้นประเด็นสำคัญและผลกระทบที่อาจเกิดขึ้นเป็นข้อๆ (Bullet points):\n\nหัวข้อข่าว: {article_title}"
url = "http://localhost:11434/api/generate"
data = {
"model": LLM_MODEL,
"prompt": prompt,
"stream": False
}
req = urllib.request.Request(
url,
data=json.dumps(data).encode('utf-8'),
headers={'Content-Type': 'application/json'}
)
try:
with urllib.request.urlopen(req) as response:
res_data = json.loads(response.read().decode('utf-8'))
return res_data.get('response', 'ไม่สามารถสรุปได้')
except Exception as e:
return f"เกิดข้อผิดพลาดในการเชื่อมต่อ Ollama: {str(e)}"
def main():
articles = fetch_rss_titles(RSS_FEED_URL)
if not articles:
print("ไม่พบข่าวใหม่")
return
date_str = datetime.now().strftime("%Y-%m-%d")
content = f"---\ntitle: Daily News Summary {date_str}\ndate: {date_str}\ntags: [news, daily-summary, cognitive-automation]\n---\n\n"
content += f"# รายงานสรุปข่าวรายวันประจำวันที่ {date_str}\n\n"
for i, article in enumerate(articles, 1):
print(f"กำลังประมวลผลข่าวที่ {i}: {article['title']}")
summary = generate_summary(article['title'])
content += f"## [{article['title']}]({article['link']})\n\n"
content += f"**บทสรุปโดย AI:**\n{summary}\n\n---\n\n"
# ตรวจสอบและสร้างโฟลเดอร์สำหรับบันทึกผล
os.makedirs(OBSIDIAN_VAULT_PATH, exist_ok=True)
file_path = os.path.join(OBSIDIAN_VAULT_PATH, f"Summary-{date_str}.md")
with open(file_path, "w", encoding="utf-8") as f:
f.write(content)
print(f"บันทึกสรุปข่าวประจำวันเรียบร้อยแล้วที่: {file_path}")
if __name__ == "__main__":
main()
การตั้งค่าให้สคริปต์ทำงานอัตโนมัติ (Automation)
เมื่อเราเขียนสคริปต์ประมวลผลเสร็จแล้ว ขั้นตอนสุดท้ายคือการตั้งเวลาให้ระบบรันโดยอัตโนมัติ เพื่อให้มันเป็น Cognitive Automation ที่ช่วยผ่อนแรงสมองอย่างแท้จริงโดยที่เราไม่ต้องคอยกดสั่งงานเอง
สำหรับผู้ใช้ Linux และ macOS (ผ่าน Cron)
เปิด Terminal และรันคำสั่ง:
crontab -e
เพิ่มบรรทัดนี้ลงไปที่ด้านล่างสุดของไฟล์ เพื่อสั่งให้สคริปต์นี้เริ่มทำงานในเวลา 8.00 น. ของทุกวัน:
0 8 * * * /usr/bin/python3 /home/linn/summarizer_agent.py
(หมายเหตุ: โปรดปรับ Path ของไฟล์ Python และสคริปต์ให้ตรงตามจริงในระบบของคุณ)
สำหรับผู้ใช้ Windows (ผ่าน Task Scheduler)
- เปิด Task Scheduler แล้วเลือก Create Basic Task
- ตั้งชื่อ Task เช่น
Local AI News Summarizerและกำหนด Trigger เป็น Daily - ในส่วน Action ให้เลือก Start a Program
- ในช่อง Program/script ให้ระบุตำแหน่งของไฟล์
python.exeและใส่ Path ของสคริปต์ในช่องAdd arguments
บทสรุปและความคุ้มค่า
การสร้างระบบ Cognitive Automation ด้วยการเชื่อมต่อเครื่องมือแบบ Local-first นอกเหนือจากจะได้ ความเป็นส่วนตัวสูงสุด แล้ว มันยังมีข้อดีอื่นๆ อีกมากมาย:
- ไม่มีข้อจำกัดด้านปริมาณการใช้งาน: คุณสามารถรันสคริปต์นี้กี่รอบ สรุปข่าววันละกี่สิบบทความก็ได้โดยไม่มีการเก็บเงินตาม Token เหมือนการใช้ API เชิงพาณิชย์
- ผ่อนแรงสมองอย่างเห็นผล: เมื่อคุณเริ่มเปิดคอมพิวเตอร์ในตอนเช้า คุณไม่ต้องเปิดเบราว์เซอร์ไปเปิดหน้าเว็บข่าวหลายๆ แท็บอีกต่อไป เพียงแค่เปิด Obsidian แล้วเปิดไฟล์สรุปประจำวันขึ้นมาอ่านประเด็นสำคัญในเวลาไม่เกิน 5 นาที
- สร้างความเชื่อมโยงความรู้: เนื่องจากผลสรุปถูกเซฟอยู่ในรูปแบบไฟล์ Markdown ใน Obsidian Vault คุณจึงสามารถสร้าง Bi-directional links เชื่อมต่อข่าวเหล่านั้นไปยังสมุดโน้ตหรือโปรเจกต์งานที่เกี่ยวข้องได้ทันที
การเริ่มลดความถี่ในการทำงานซ้ำๆ ของสมองด้วยระบบอัตโนมัติ จะช่วยให้เราเหลือพลังงานสมองที่มีคุณค่าไว้คิดวิเคราะห์ แก้ปัญหาที่ท้าทาย และสร้างสรรค์ไอเดียใหม่ๆ ที่มีคุณค่าได้อย่างเต็มที่ ลองนำแนวคิดนี้ไปปรับแต่งเพิ่มเติมให้เข้ากับสไตล์การทำงานของคุณกันครับ!