สร้าง AI Agent สกัด Knowledge Graph จากโน้ตส่วนตัว: เปลี่ยนข้อความกระจัดกระจายให้เป็นเครือข่ายความรู้ออฟไลน์ 100% ด้วย Python + Ollama

เปลี่ยนเอกสารและโน้ตข้อความร้อยแก้วให้เป็น Knowledge Graph แบบโครงสร้าง (Subject-Predicate-Object) โดยอัตโนมัติ ด้วยสคริปต์ Python ร่วมกับ Local LLM ในเครื่อง ช่วยสกัดความสัมพันธ์ระหว่างความคิด เทคโนโลยี และบุคคลอย่างเป็นระบบออฟไลน์ 100%

Share
สร้าง AI Agent สกัด Knowledge Graph จากโน้ตส่วนตัว: เปลี่ยนข้อความกระจัดกระจายให้เป็นเครือข่ายความรู้ออฟไลน์ 100% ด้วย Python

เคยสงสัยไหมว่า โน้ตความรู้ เอกสารวิจัย หรือบันทึกโปรเจกต์ที่เราจดไว้หลายร้อยไฟล์ในสมองส่วนที่สอง (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 จะดำเนินการตามขั้นตอนดังนี้:

  1. อ่านโน้ตข้อความดิบ จากไฟล์ Markdown หรือ Text ในเครื่อง
  2. ส่งข้อความไปยัง Local LLM (ผ่าน Ollama API) พร้อมคำสั่งบีบผลลัพธ์ให้อยู่ในรูปแบบ JSON Schema
  3. ถอดองค์ประกอบเป็น Triplets: แยกเป็น source (เอนทิตีต้นทาง), relation (ความสัมพันธ์), และ target (เอนทิตีปลายทาง)
  4. แปลงผลลัพธ์เป็น 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"

ประโยชน์และการนำไปประยุกต์ใช้งานจริง

  1. สร้าง Obsidian Canvas อัตโนมัติ: คุณสามารถเขียนสคริปต์สั้นๆ แปลงโครงสร้าง JSON นี้ไปเป็นไฟล์ .canvas ใน Obsidian เพื่อเปิดดูไดอะแกรมความคิดแบบอินเทอร์แอคทีฟได้ทันที
  2. ค้นหาความสัมพันธ์ที่ซ่อนอยู่ (Uncover Hidden Connections): เมื่อนำโน้ตหลายๆ ใบมาผ่านสคริปต์นี้ เราจะเห็นจุดร่วม (Hub Entities) ที่เชื่อมโยงระหว่างโปรเจกต์ต่างหมวดหมู่กัน ซึ่งการอ่านด้วยสายตาปกติมักมองข้ามไป
  3. ความเป็นส่วนตัว 100%: โน้ตส่วนตัว ความคิดในชีวิตประจำวัน หรือข้อมูลความลับขององค์กร จะถูกประมวลผลภายในเครื่องคอมพิวเตอร์ของคุณเอง ไม่ต้องเสี่ยงส่งข้อมูลเข้า API คลาวด์สาธารณะ

สรุป

การทำ Cognitive Automation ไม่ได้หมายถึงการให้ AI มาทำงานแทนเราทั้งหมด แต่คือการใช้สคริปต์และ Local AI มาช่วยผ่อนแรงสมองในส่วนงานซ้ำซาก เช่น การสกัดโครงสร้างความสัมพันธ์ ช่วยให้เราประหยัดเวลา และเอาพลังสมองไปโฟกัสกับการคิดสร้างสรรค์และการตัดสินใจที่สำคัญแทน

ลองนำสคริปต์ kg_extractor.py ไปปรับใช้กับคลังโน้ตของคุณ แล้วคุณจะพบว่า การมองเห็นโครงสร้างความรู้ส่วนบุคคลนั้นง่ายและทรงพลังกว่าที่เคย!

Read more

บอกลา Audible: คู่มือติดตั้ง Audiobookshelf เซิร์ฟเวอร์หนังสือเสียงและ eBook ส่วนตัวบน Home Server ด้วย Docker

บอกลา Audible: คู่มือติดตั้ง Audiobookshelf เซิร์ฟเวอร์หนังสือเสียงและ eBook ส่วนตัวบน Home Server ด้วย Docker

เปลี่ยนคลังหนังสือเสียงและดิจิทัลไฟล์ของคุณให้กลายเป็นเซิร์ฟเวอร์สตรีมมิ่งส่วนตัว ด้วย Audiobookshelf บน Home Server ผ่าน Docker พร้อมวิธีซิงค์ความคืบหน้าการฟังข้ามอุปกรณ์แบบเรียลไทม์

By Linn
สร้าง AI Agent สกัดและสังเคราะห์ Book Highlights: เปลี่ยนโน้ตอ่านหนังสือเป็น Book Summary อัจฉริยะใน Obsidian ด้วย Python + O

สร้าง AI Agent สกัดและสังเคราะห์ Book Highlights: เปลี่ยนโน้ตอ่านหนังสือเป็น Book Summary อัจฉริยะใน Obsidian ด้วย Python + Ollama

เปลี่ยนไฮไลต์และโน้ตย่อยจากการอ่านหนังสือให้กลายเป็น Book Summary ที่ทรงคุณค่าด้วย AI Agent ออฟไลน์ส่วนตัวที่จะสกัด Core Key Takeaways, Actionable Insights และเชื่อมโยงเข้ากับระบบ Second Brain แบบ Local 100%

By Linn
สร้าง Private AI Router ในเครื่องตัวเอง: คู่มือตั้งค่า LiteLLM สลับโมเดลอัจฉริยะตามประเภทงานแบบออฟไลน์ 100%

สร้าง Private AI Router ในเครื่องตัวเอง: คู่มือตั้งค่า LiteLLM สลับโมเดลอัจฉริยะตามประเภทงานแบบออฟไลน์ 100%

เรียนรู้วิธีตั้งค่า LiteLLM เป็น AI Gateway และ Router ในเครื่องตัวเอง เพื่อสลับรันโมเดล Ollama อัตโนมัติ ทั้งโมเดลเน้นความเร็ว โมเดลคิดวิเคราะห์เชิงลึก และโมเดลวิเคราะห์ภาพ ปลอดภัย 100% ไม่ต้องพึ่งคลาวด์

By Linn
บอกลาการจำพอร์ตและ SSL หมดอายุ: คู่มือติดตั้ง Nginx Proxy Manager จัดการ Domain และ HTTPS บน Home Server ด้วย Docker

บอกลาการจำพอร์ตและ SSL หมดอายุ: คู่มือติดตั้ง Nginx Proxy Manager จัดการ Domain และ HTTPS บน Home Server ด้วย Docker

เปลี่ยนการเข้าถึงบริการบน Home Server จาก IP และพอร์ตยุ่งยาก ให้กลายเป็นชื่อโดเมนส่วนตัวพร้อมระบบ SSL (HTTPS) อัตโนมัติด้วย Nginx Proxy Manager บน Docker ทำง่ายผ่าน Web UI ไร้บรรทัดคำสั่งซับซ้อน

By Linn