สร้าง AI Agent จัดระเบียบไฟล์และเอกสารอัตโนมัติ: ลาขาดโฟลเดอร์ดาวน์โหลดสุดรกด้วย Python + Ollama

เปลี่ยนโฟลเดอร์ดาวน์โหลดหรือโฟลเดอร์งานที่แสนรกให้เป็นระเบียบตามหมวดหมู่โดยอัตโนมัติ ด้วยสคริปต์ Python ที่เชื่อมโยงกับโมเดลภาษาขนาดใหญ่ (LLM) ในเครื่องเพื่ออ่านบริบทและคัดแยกประเภทเอกสารอย่างชาญฉลาด

Share
สร้าง AI Agent จัดระเบียบไฟล์และเอกสารอัตโนมัติ: ลาขาดโฟลเดอร์ดาวน์โหลดสุดรกด้วย Python + Ollama

ลองเปิดโฟลเดอร์ Downloads หรือโฟลเดอร์หน้าจอ Desktop ของคุณดูตอนนี้... คุณเห็นไฟล์นับร้อยที่กองรวมกันอยู่อย่างกระจัดกระจายหรือไม่? ทั้งไฟล์ PDF ใบเสร็จ, คู่มือการใช้งาน, สไลด์งานประชุม, รูปภาพอ้างอิง, ไฟล์โค้ด ไปจนถึงหนังสือ E-book

ปัญหาคือ การจัดระเบียบไฟล์เหล่านี้ด้วยตัวเองเป็นเรื่องที่น่าเบื่อและใช้พลังงานสมองค่อนข้างมาก ครั้นจะเขียนสคริปต์จัดระเบียบแบบเดิมๆ ที่ย้ายไฟล์ตาม นามสกุลไฟล์ (File Extension) เช่น ย้ายไฟล์ .pdf ทั้งหมดไปไว้โฟลเดอร์เดียวกัน ก็ยังไม่ตอบโจทย์ เพราะในความเป็นจริง ใบเสร็จรับเงิน PDF กับบทความวิจัย PDF ควรจะอยู่คนละที่กันโดยสิ้นเชิง

นี่คือจุดที่ Cognitive Automation หรือการเปลี่ยนงานที่ต้องใช้ระดับการคิดพื้นฐานให้เป็นอัตโนมัติ เข้ามามีบทบาท ในบทความนี้ เราจะมาสร้าง AI Agent แบบรัน Local 100% ในเครื่องคอมพิวเตอร์ของคุณ เพื่อทำหน้าที่อ่านชื่อไฟล์และวิเคราะห์ประเภทของเอกสาร จากนั้นจึงย้ายไฟล์ไปยังโฟลเดอร์ที่เหมาะสมอย่างถูกต้องแม่นยำ


หลักการทำงานของ AI File Sorter

แทนที่จะใช้นามสกุลไฟล์หรือการเขียนเงื่อนไขด้วย if-else อันซับซ้อน เราจะใช้ Local LLM ผ่าน Ollama เป็นสมองส่วนกลาง สคริปต์ Python ของเราจะทำหน้าที่ดังนี้:

  1. สแกนรายชื่อไฟล์ ในโฟลเดอร์เป้าหมาย (เช่น Downloads)
  2. ส่งชื่อไฟล์ ไปให้ Local LLM วิเคราะห์
  3. จัดหมวดหมู่ โดย LLM จะตอบกลับมาเป็นหมวดหมู่ที่เหมาะสมจากตัวเลือกที่เรากำหนดไว้ (เช่น Receipts, Books, Projects, Media)
  4. ย้ายไฟล์ ไปยังโฟลเดอร์ย่อยตามหมวดหมู่นั้นๆ โดยอัตโนมัติ

การประมวลผลทั้งหมดเกิดขึ้นบนเครื่องของคุณ ข้อมูลชื่อไฟล์และเอกสารสำคัญต่างๆ จึงปลอดภัยจากการถูกส่งขึ้นระบบคลาวด์ภายนอก


ขั้นตอนที่ 1: เตรียมสภาพแวดล้อมและโมเดล AI

ก่อนเริ่มเขียนโค้ด ตรวจสอบให้มั่นใจว่าคุณติดตั้ง Ollama เรียบร้อยแล้ว (หากยังไม่มี สามารถอ่านคู่มือติดตั้ง Ollama ได้ในบทความก่อนหน้า)

เราจะใช้โมเดลขนาดเล็กที่มีความเร็วสูงและฉลาดเพียงพอสำหรับการแยกแยะประเภท เช่น Llama 3 (8B) หรือ Gemma 2 (2B / 9B) ในตัวอย่างนี้เราจะใช้ gemma2:2b ซึ่งประหยัดทรัพยากรเครื่องอย่างมาก

เปิด Terminal แล้วดาวน์โหลดโมเดลด้วยคำสั่ง:

ollama run gemma2:2b

จากนั้น ทำการติดตั้งไลบรารี Python ที่จำเป็น:

pip install requests

ขั้นตอนที่ 2: เขียนสคริปต์ Python ควบคุม AI Agent

สร้างสคริปต์ชื่อ file_agent.py ขึ้นมา โดยโค้ดจะแบ่งออกเป็น 3 ส่วนหลักๆ คือ การเรียกใช้ Ollama API, การตัดสินใจเลือกหมวดหมู่ และการจัดการย้ายไฟล์จริง

นี่คือโค้ดตัวอย่างสำหรับการทำงาน:

import os
import shutil
import requests
import json

# ตั้งค่าโฟลเดอร์ต้นทางและโฟลเดอร์ปลายทาง
SOURCE_DIR = os.path.expanduser("~/Downloads")
TARGET_BASE_DIR = os.path.expanduser("~/OrganizedFiles")

# กำหนดหมวดหมู่เป้าหมายพร้อมคำอธิบายเพื่อให้ AI เข้าใจ
CATEGORIES = {
    "Receipts": "ใบเสร็จรับเงิน, Invoice, หลักฐานการโอนเงิน, ใบรับรองการจ่ายเงิน",
    "Books_and_Papers": "หนังสือ, E-book, งานวิจัย (Research Papers), คู่มือการใช้งานเชิงลึก (Manuals)",
    "Work_Documents": "เอกสารการทำงาน, รายงานการประชุม, สไลด์นำเสนอ (PPTX), ไฟล์ Word (DOCX) ที่เกี่ยวกับงาน",
    "Code_and_Data": "ไฟล์โปรเจกต์โค้ด (.py, .js, .json), ไฟล์ฐานข้อมูล (.csv, .xlsx, .sql)",
    "Media_and_Designs": "รูปภาพอ้างอิง, ไฟล์วิดีโอ, เสียงบันทึก, ไฟล์ออกแบบดิบ (.psd, .fig)",
    "Others": "ไฟล์อื่นๆ ที่ไม่เข้าพวก หรือไม่มั่นใจว่าเป็นประเภทไหน"
}

# สร้างโฟลเดอร์ปลายทางรอไว้
for cat in CATEGORIES.keys():
    os.makedirs(os.path.join(TARGET_BASE_DIR, cat), exist_ok=True)

def classify_file_with_ai(filename):
    url = "http://localhost:11434/api/generate"

    # สร้าง Prompt ที่ชัดเจนและบังคับให้ตอบเฉพาะชื่อหมวดหมู่เท่านั้น
    prompt = f\"\"\"
    คุณเป็น AI ผู้ช่วยจัดระเบียบไฟล์ส่วนตัว 
    จงวิเคราะห์ชื่อไฟล์ต่อไปนี้: "{filename}"
    แล้วเลือกหมวดหมู่ที่เหมาะสมที่สุดเพียงหมวดหมู่เดียวจากตัวเลือกด้านล่างนี้:

    {json.dumps(CATEGORIES, ensure_ascii=False, indent=2)}

    กฎเหล็ก:
    - ตอบกลับเป็นเฉพาะชื่อคีย์ภาษาอังกฤษของหมวดหมู่เท่านั้น (เช่น Receipts หรือ Work_Documents)
    - ห้ามอธิบาย ห้ามใส่เครื่องหมายคำพูด ห้ามมีคำขึ้นต้นหรือคำลงท้ายใดๆ ทั้งสิ้น
    \"\"\"

    payload = {
        "model": "gemma2:2b",
        "prompt": prompt,
        "stream": False,
        "options": {
            "temperature": 0.0 # ตั้งค่าเป็น 0 เพื่อให้ได้ผลลัพธ์ที่เสถียรและแม่นยำที่สุด
        }
    }

    try:
        response = requests.post(url, json=payload)
        result = response.json()
        category = result.get("response", "").strip()

        # ตรวจสอบว่าคำตอบที่ได้ตรงกับหมวดหมู่จริงหรือไม่
        if category in CATEGORIES:
            return category
        else:
            # ค้นหาเผื่อ AI ตอบปนข้อความอื่นมา
            for cat in CATEGORIES.keys():
                if cat in category:
                    return cat
            return "Others"
    except Exception as e:
        print(f"Error connecting to Ollama: {e}")
        return "Others"

def organize_folder():
    print(f"กำลังสแกนโฟลเดอร์: {SOURCE_DIR}...")
    files = [f for f in os.listdir(SOURCE_DIR) if os.path.isfile(os.path.join(SOURCE_DIR, f))]

    if not files:
        print("ไม่พบไฟล์ที่ต้องการจัดระเบียบ")
        return

    for filename in files:
        # ข้ามไฟล์ซ่อน (Hidden files)
        if filename.startswith('.'):
            continue

        print(f"วิเคราะห์ไฟล์: {filename}...")
        category = classify_file_with_ai(filename)

        src_path = os.path.join(SOURCE_DIR, filename)
        dest_path = os.path.join(TARGET_BASE_DIR, category, filename)

        # จัดการกรณีชื่อไฟล์ซ้ำในโฟลเดอร์ปลายทาง
        if os.path.exists(dest_path):
            base, extension = os.path.splitext(filename)
            counter = 1
            while os.path.exists(dest_path):
                new_filename = f"{base}_{counter}{extension}"
                dest_path = os.path.join(TARGET_BASE_DIR, category, new_filename)
                counter += 1

        try:
            shutil.move(src_path, dest_path)
            print(f"-> ย้ายไปที่ [{category}] เรียบร้อย")
        except Exception as e:
            print(f"เกิดข้อผิดพลาดในการย้ายไฟล์ {filename}: {e}")

if __name__ == "__main__":
    organize_folder()
    print("เสร็จสิ้นการจัดระเบียบไฟล์!")

ขั้นตอนที่ 3: ทดสอบการทำงานของสคริปต์

เมื่อคุณรันสคริปต์นี้ ตัวสคริปต์จะค้นหาไฟล์ทั้งหมดในโฟลเดอร์ Downloads (SOURCE_DIR) ส่งชื่อไปสอบถามความเข้าใจจากโมเดล AI ในเครื่อง แล้วย้ายมันไปเก็บแยกตามโฟลเดอร์ย่อยใน OrganizedFiles (TARGET_BASE_DIR) ทันที

ลองสังเกตการคัดแยก: * ไฟล์ชื่อ receipt_july2026.pdf -> จะถูกส่งไปยังโฟลเดอร์ Receipts * ไฟล์ชื่อ intro_to_deep_learning_textbook.pdf -> จะถูกส่งไปยังโฟลเดอร์ Books_and_Papers * ไฟล์ชื่อ marketing_plan_v2.docx -> จะถูกส่งไปยังโฟลเดอร์ Work_Documents * ไฟล์ชื่อ data_clean_script.py -> จะถูกส่งไปยังโฟลเดอร์ Code_and_Data

ความมหัศจรรย์คือคุณไม่ต้องมานั่งเขียน Regex คอยดักคำศัพท์หลายร้อยคำ เพราะ LLM มี Semantic Understanding หรือความสามารถในการเข้าใจความหมายเชิงบริบทของข้อความ ทำให้มันคัดแยกประเภทของไฟล์ผ่านชื่อได้อย่างน่าทึ่ง


ขั้นตอนที่ 4: ตั้งเวลาทำงานอัตโนมัติ (Automation)

เพื่อพัฒนาให้เป็นระบบ Cognitive Automation แบบสมบูรณ์ คุณคงไม่อยากมากดรันสคริปต์ Python นี้เองทุกวัน เราสามารถตั้งเวลาให้คอมพิวเตอร์รันสคริปต์นี้โดยอัตโนมัติได้ง่ายๆ

สำหรับระบบ macOS และ Linux (ผ่าน Cron):

  1. เปิด Terminal แล้วพิมพ์คำสั่ง crontab -e
  2. เพิ่มคำสั่งเพื่อให้สคริปต์ทำงานทุกวันเวลา 18.00 น. (หรือเวลาที่ต้องการ): bash 0 18 * * * /usr/bin/python3 /path/to/file_agent.py

สำหรับระบบ Windows (ผ่าน Task Scheduler):

  1. ค้นหาโปรแกรม Task Scheduler ในปุ่ม Start
  2. เลือก Create Basic Task ตั้งค่าทริกเกอร์เป็น Daily
  3. ในส่วน Action เลือก Start a program แล้วกำหนดที่อยู่ของสคริปต์ Python ของคุณ

บทสรุป

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

ความสวยงามของการใช้ระบบนี้บน Private Brain OS คือ ความปลอดภัยสูงสุด ข้อมูลทั้งหมดของคุณยังคงอยู่ในพื้นที่ของคุณเองอย่างปลอดภัย 100% ลองนำสคริปต์นี้ไปประยุกต์ใช้ ปรับปรุงหมวดหมู่ให้เข้ากับสายงานของคุณ แล้วก้าวเข้าสู่การทำงานที่มีประสิทธิภาพแบบออฟไลน์ไปพร้อมกัน!

Read more

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

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

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

By Linn
บอกลา 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