สร้าง AI Agent สกัด Knowledge Graph จากโน้ตส่วนตัว: เปลี่ยนข้อความกระจัดกระจายให้เป็นเครือข่ายความรู้ออฟไลน์ 100% ด้วย Python + Ollama
เปลี่ยนเอกสารและโน้ตข้อความร้อยแก้วให้เป็น Knowledge Graph แบบโครงสร้าง (Subject-Predicate-Object) โดยอัตโนมัติ ด้วยสคริปต์ Python ร่วมกับ Local LLM ในเครื่อง ช่วยสกัดความสัมพันธ์ระหว่างความคิด เทคโนโลยี และบุคคลอย่างเป็นระบบออฟไลน์ 100%
เคยสงสัยไหมว่า โน้ตความรู้ เอกสารวิจัย หรือบันทึกโปรเจกต์ที่เราจดไว้หลายร้อยไฟล์ในสมองส่วนที่สอง (Second Brain) มีความสัมพันธ์เชื่อมโยงกันอย่างไรบ้าง?
หลายคนพยายามสร้าง Knowledge Graph หรือกราฟความรู้ขึ้นมาด้วยตัวเอง แต่การอ่านโน้ตทีละหน้าแล้วคัดแยกองค์ประกอบว่า "ใคร/อะไร (Subject)" มีความสัมพันธ์อย่างไร " (Predicate)" กับ "สิ่งใด (Object)" เป็นงานที่ใช้พลังงานสมองสูงมาก (Cognitive Load) และกินเวลาอย่างมหาศาล จนสุดท้ายไอเดียเจ๋งๆ มักถูกทิ้งค้างอยู่ในคลังโน้ตโดยไม่ได้นำมาเชื่อมต่อกัน
นี่คือจุดที่ Cognitive Automation เข้ามาเปลี่ยนเกม ด้วยการสร้าง AI Agent ประจำเครื่องที่รันบน Local LLM เพื่ออ่านข้อความร้อยแก้ว แล้วทำการถอดโครงสร้างความสัมพันธ์ออกมาเป็น Triplets (Subject-Predicate-Object) และแปลงเป็นไดอะแกรม Mermaid Graph หรือลิงก์ Obsidian โดยอัตโนมัติ โดยที่ข้อมูลส่วนตัวของคุณไม่เคยเล็ดลอดออกไปนอกเครื่องเลยแม้แต่ไบต์เดียว
หลักการทำงานของ Knowledge Graph Extractor Agent
แทนที่เราจะให้ LLM เขียนสรุปเนื้อหาเป็นความเรียงทั่วไป เราจะบังคับให้ LLM ประมวลผลแบบ Structured Data Extraction โดยสคริปต์ Python จะดำเนินการตามขั้นตอนดังนี้:
- อ่านโน้ตข้อความดิบ จากไฟล์ Markdown หรือ Text ในเครื่อง
- ส่งข้อความไปยัง Local LLM (ผ่าน Ollama API) พร้อมคำสั่งบีบผลลัพธ์ให้อยู่ในรูปแบบ JSON Schema
- ถอดองค์ประกอบเป็น Triplets: แยกเป็น
source(เอนทิตีต้นทาง),relation(ความสัมพันธ์), และtarget(เอนทิตีปลายทาง) - แปลงผลลัพธ์เป็น Mermaid Diagram และ Markdown: สร้างโค้ดภาพมองเห็นไดอะแกรม และโครงสร้างลิงก์สำหรับคลังโน้ต Obsidian
ขั้นตอนที่ 1: เตรียมระบบและโมเดล Local AI
เพื่อให้การสกัดโครงสร้างภาษาไทยและอังกฤษทำได้อย่างแม่นยำและรวดเร็ว เราควรใช้โมเดลที่มีความสามารถด้าน Instruction Following และรองรับ JSON Format ได้ดี เช่น Qwen 2.5 (7B/14B) หรือ Llama 3.1 (8B)
เปิด Terminal แล้วดาวน์โหลดโมเดล Qwen 2.5 (8B) ผ่าน Ollama:
ollama run qwen2.5:latest
ติดตั้งไลบรารี Python ที่จำเป็นสำหรับการเรียกใช้ API และจัดการไฟล์:
pip install requests pydantic
ขั้นตอนที่ 2: เขียนสคริปต์ Python ควบคุม AI Agent
สร้างไฟล์ชื่อ kg_extractor.py ขึ้นมา สคริปต์นี้จะรับไฟล์โน้ต ส่งเข้า Ollama API และนำผลลัพธ์ JSON มาสร้างเป็นไดอะแกรม Mermaid ให้ทันที
import os
import json
import requests
# ตั้งค่า Ollama API และโมเดลที่ใช้งาน
OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL_NAME = "qwen2.5:latest"
SYSTEM_PROMPT = """คุณคือ AI Specialist ด้าน Knowledge Graph Extraction
จงอ่านข้อความที่ได้รับ แล้วสกัดเอนทิตีและความสัมพันธ์ออกมาเป็นโครงสร้าง Triplets (Subject -> Relation -> Object)
เงื่อนไขการตอบ:
1. ตอบกลับเป็น JSON ออบเจกต์ที่มีคีย์ "triplets" เท่านั้น ห้ามใส่คำเกริ่นนำหรือ markdown code block
2. รูปแบบโครงสร้าง JSON:
{
"triplets": [
{"source": "เอนทิตี A", "relation": "ความสัมพันธ์", "target": "เอนทิตี B"}
]
}
3. กระชับ ชัดเจน ใช้คำสั้นๆ สำหรับ source, relation, และ target"""
def extract_knowledge_graph(text_content):
"""ส่งเนื้อหาโน้ตไปยัง Ollama เพื่อสกัดความสัมพันธ์"""
prompt = f"ข้อความสำหรับสกัด Knowledge Graph:\n\n{text_content}"
payload = {
"model": MODEL_NAME,
"prompt": prompt,
"system": SYSTEM_PROMPT,
"stream": False,
"format": "json"
}
try:
response = requests.post(OLLAMA_URL, json=payload, timeout=60)
response.raise_for_status()
result_data = response.json()
return json.loads(result_data.get("response", "{}"))
except Exception as e:
print(f"เกิดข้อผิดพลาดในการเชื่อมต่อ Ollama: {e}")
return None
def generate_mermaid_code(triplets):
"""แปลง Triplets เป็นโค้ด Mermaid Graph สำหรับสร้างภาพแผนผัง"""
mermaid_lines = ["graph TD"]
for t in triplets:
src = t.get("source", "").replace('"', '')
rel = t.get("relation", "").replace('"', '')
tgt = t.get("target", "").replace('"', '')
if src and rel and tgt:
mermaid_lines.append(f' "{src}" -->|"{rel}"| "{tgt}"')
return "\n".join(mermaid_lines)
if __name__ == "__main__":
# ตัวอย่างข้อความโน้ตดิบเกี่ยวกับระบบ Home Server & Second Brain
sample_note = """
Linn กำลังวางระบบ Second Brain โดยใช้ Obsidian ในการจัดการความรู้ส่วนบุคคล
และใช้ Syncthing ในการซิงค์ไฟล์โน้ตรอบบ้าน
นอกจากนี้ระบบยังรันอยู่บน Home Server ที่เปิดใช้งาน Docker
และมี AdGuard Home ช่วยกรองโฆษณาในเครือข่าย โดยมี Tailscale ช่วยในการเชื่อมต่อทางไกลอย่างปลอดภัย
"""
print("กำลังสกัดโครงสร้าง Knowledge Graph ด้วย Local AI...")
data = extract_knowledge_graph(sample_note)
if data and "triplets" in data:
triplets = data["triplets"]
print("\n--- ผลลัพธ์ Triplets (JSON) ---")
print(json.dumps(triplets, ensure_ascii=False, indent=2))
print("\n--- ไดอะแกรม Mermaid Graph ---")
mermaid_code = generate_mermaid_code(triplets)
print("```mermaid")
print(mermaid_code)
print("```")
ขั้นตอนที่ 3: ทดสอบและวิเคราะห์ผลลัพธ์
เมื่อรันสคริปต์ python kg_extractor.py สโมเดล Local LLM จะทำการวิเคราะห์บริบทภาษาไทยและตอบกลับเป็น Triplets JSON พร้อมแปลงเป็นโค้ด Mermaid:
ผลลัพธ์ Triplets (JSON):
{
"triplets": [
{ "source": "Linn", "relation": "สร้าง", "target": "Second Brain" },
{ "source": "Second Brain", "relation": "ใช้งาน", "target": "Obsidian" },
{ "source": "Obsidian", "relation": "ซิงค์ไฟล์ด้วย", "target": "Syncthing" },
{ "source": "ระบบ", "relation": "รันบน", "target": "Home Server" },
{ "source": "Home Server", "relation": "เปิดใช้งาน", "target": "Docker" },
{ "source": "Home Server", "relation": "ติดตั้ง", "target": "AdGuard Home" },
{ "source": "AdGuard Home", "relation": "กรองโฆษณาใน", "target": "เครือข่าย" },
{ "source": "Tailscale", "relation": "ช่วยเชื่อมต่อทางไกล", "target": "Home Server" }
]
}
แผนผังภาพ Mermaid Graph:
graph TD
"Linn" -->|"สร้าง"| "Second Brain"
"Second Brain" -->|"ใช้งาน"| "Obsidian"
"Obsidian" -->|"ซิงค์ไฟล์ด้วย"| "Syncthing"
"ระบบ" -->|"รันบน"| "Home Server"
"Home Server" -->|"เปิดใช้งาน"| "Docker"
"Home Server" -->|"ติดตั้ง"| "AdGuard Home"
"AdGuard Home" -->|"กรองโฆษณาใน"| "เครือข่าย"
"Tailscale" -->|"ช่วยเชื่อมต่อทางไกล"| "Home Server"
ประโยชน์และการนำไปประยุกต์ใช้งานจริง
- สร้าง Obsidian Canvas อัตโนมัติ: คุณสามารถเขียนสคริปต์สั้นๆ แปลงโครงสร้าง JSON นี้ไปเป็นไฟล์
.canvasใน Obsidian เพื่อเปิดดูไดอะแกรมความคิดแบบอินเทอร์แอคทีฟได้ทันที - ค้นหาความสัมพันธ์ที่ซ่อนอยู่ (Uncover Hidden Connections): เมื่อนำโน้ตหลายๆ ใบมาผ่านสคริปต์นี้ เราจะเห็นจุดร่วม (Hub Entities) ที่เชื่อมโยงระหว่างโปรเจกต์ต่างหมวดหมู่กัน ซึ่งการอ่านด้วยสายตาปกติมักมองข้ามไป
- ความเป็นส่วนตัว 100%: โน้ตส่วนตัว ความคิดในชีวิตประจำวัน หรือข้อมูลความลับขององค์กร จะถูกประมวลผลภายในเครื่องคอมพิวเตอร์ของคุณเอง ไม่ต้องเสี่ยงส่งข้อมูลเข้า API คลาวด์สาธารณะ
สรุป
การทำ Cognitive Automation ไม่ได้หมายถึงการให้ AI มาทำงานแทนเราทั้งหมด แต่คือการใช้สคริปต์และ Local AI มาช่วยผ่อนแรงสมองในส่วนงานซ้ำซาก เช่น การสกัดโครงสร้างความสัมพันธ์ ช่วยให้เราประหยัดเวลา และเอาพลังสมองไปโฟกัสกับการคิดสร้างสรรค์และการตัดสินใจที่สำคัญแทน
ลองนำสคริปต์ kg_extractor.py ไปปรับใช้กับคลังโน้ตของคุณ แล้วคุณจะพบว่า การมองเห็นโครงสร้างความรู้ส่วนบุคคลนั้นง่ายและทรงพลังกว่าที่เคย!