สร้าง 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

สร้าง AI Agent สำหรับการทำ Decision Log อัตโนมัติ: เปลี่ยนทุกการตัดสินใจสำคัญให้เป็นบทเรียนเพื่อการเติบโต

สร้าง AI Agent สำหรับการทำ Decision Log อัตโนมัติ: เปลี่ยนทุกการตัดสินใจสำคัญให้เป็นบทเรียนเพื่อการเติบโต

เรียนรู้วิธีใช้ AI Agent ช่วยบันทึกและวิเคราะห์การตัดสินใจสำคัญในชีวิตประจำวัน เพื่อเปลี่ยนทุกทางเลือกให้กลายเป็นฐานข้อมูลบทเรียนที่มีค่าสำหรับอนาคต

By Linn
คู่มือใช้งาน Obsidian Graph View: เปลี่ยนใยแมงมุมความรู้ให้เป็นเครื่องมือนำทางความคิดใน Second Brain

คู่มือใช้งาน Obsidian Graph View: เปลี่ยนใยแมงมุมความรู้ให้เป็นเครื่องมือนำทางความคิดใน Second Brain

Graph View ใน Obsidian ไม่ใช่แค่ภาพกราฟสวยๆ ไว้ดูเล่น มาเรียนรู้วิธีปรับแต่ง Local Graph, Color Groups และฟิลเตอร์ เพื่อเปลี่ยนเครือข่ายความรู้ให้กลายเป็นเครื่องมือนำทางความคิดจริง

By Linn
สร้าง Smart Clipboard Agent: ดักจับและคัดแยกข้อความที่คัดลอกระหว่างวัน บันทึกเข้า Obsidian อัตโนมัติด้วย Python + Ollama

สร้าง Smart Clipboard Agent: ดักจับและคัดแยกข้อความที่คัดลอกระหว่างวัน บันทึกเข้า Obsidian อัตโนมัติด้วย Python + Ollama

เปลี่ยนข้อความ โค้ด ลิงก์ และไอเดียที่คุณคัดลอกระหว่างวันให้กลายเป็นบันทึกความรู้ที่มีบริบทใน Second Brain โดยอัตโนมัติ ด้วยสคริปต์ Python คอยมอนิเตอร์คลิปบอร์ดคู่กับ Local LLM บน Ollama แบบออฟไลน์ 100%

By Linn
บอกลาคำสั่ง Docker CLI ที่ซับซ้อน: คู่มือติดตั้ง Dockge จัดการ Docker Compose บน Home Server อย่างมือโปร

บอกลาคำสั่ง Docker CLI ที่ซับซ้อน: คู่มือติดตั้ง Dockge จัดการ Docker Compose บน Home Server อย่างมือโปร

ยกระดับการจัดการคอนเทนเนอร์บน Home Server ให้ง่ายและเป็นระเบียบ ด้วย Dockge ตัวจัดการ Docker Compose สไตล์มินิมอลที่เน้นความโปร่งใส ควบคุมไฟล์ .yml ได้โดยตรง 100%

By Linn