ปลดล็อกพลัง Local LLM ให้สั่งการคอมพิวเตอร์: คู่มือตั้งค่า Function Calling และ Tool Use บน Ollama แบบออฟไลน์ 100%

สอนวิธีตั้งค่า Function Calling บน Ollama เพื่อให้ Local AI สามารถเรียกใช้ฟังก์ชัน Python ค้นหาข้อมูล หรืออ่านเขียนไฟล์ในเครื่องได้อย่างปลอดภัย โดยประมวลผลออฟไลน์ 100% ไร้ความเสี่ยงข้อมูลรั่วไหล

Share
ปลดล็อกพลัง Local LLM ให้สั่งการคอมพิวเตอร์: คู่มือตั้งค่า Function Calling และ Tool Use บน Ollama แบบออฟไลน์ 100%

โดยทั่วไปแล้ว เมื่อเราสนทนากับ Local LLM ผ่านหน้าต่างแชต AI ทำได้เพียงตอบกลับมาเป็นข้อความธรรมดา (Plain Text) เท่านั้น หากเราต้องการให้ AI ช่วยค้นหาไฟล์ในเครื่อง เช็กสภาพระบบ หรือดึงข้อมูลจากฐานข้อมูล SQLite ในเครื่อง เรามักจะต้องคัดลอกข้อความไปๆ มาๆ ด้วยตัวเอง

แต่ด้วยฟีเจอร์ Function Calling (หรือ Tool Use) ที่เปิดใช้งานบน Ollama เราสามารถเปลี่ยน Local LLM ให้กลายเป็น AI Agent อัจฉริยะ ที่สามารถวิเคราะห์ความต้องการของผู้ใช้ แล้วเลือกเรียกใช้โค้ด Python หรือสคริปต์ในเครื่องได้อย่างถูกตัวและถูกจังหวะ โดยที่กระบวนการทั้งหมดทำงานแบบ Offline 100% อยู่บนคอมพิวเตอร์ส่วนตัวของคุณ

บทความนี้จะพาทุกคนไปเข้าใจสถาปัตยกรรม Function Calling พร้อมคู่มือตั้งค่าและตัวอย่างโค้ด Python ที่นำไปใช้งานได้จริงทันที


Function Calling คืออะไร? ทำไมถึงเป็นจุดเปลี่ยนของ Local AI Agent

Function Calling คือกระบวนการที่ AI ไม่ได้แค่เจเนอเรตคำตอบเป็นข้อความ แต่จะส่งคืนโครงสร้างข้อมูลแบบ JSON Format ที่ระบุว่า "ต้องเรียกใช้ฟังก์ชันชื่ออะไร" และ "ต้องส่งพารามิเตอร์ (Arguments) อะไรไปให้ฟังก์ชันนั้น"

ตัวอย่างเช่น เมื่อผู้ใช้พิมพ์ว่า "ช่วยเช็กพื้นที่ดิสก์ที่เหลืออยู่ในเครื่องให้หน่อย" 1. แทนที่ AI จะคาดเดาคำตอบมั่วๆ (Hallucination) AI จะส่ง JSON ออกมาว่า {"name": "check_disk_space", "arguments": {}} 2. สคริปต์ Python ของเราจะรับ JSON นั้นไปรันคำสั่งเช็กดิสก์บน OS จริงๆ ได้ผลลัพธ์ว่า พื้นที่คงเหลือ 150 GB 3. สคริปต์ส่งผลลัพธ์กลับไปให้ AI สรุปเป็นภาษาพูดให้ผู้ใช้ฟัง

ข้อดีด้านความเป็นส่วนตัวและความปลอดภัย (Privacy & Security)

  • LLM ไม่ได้รันโค้ดเองโดยตรง: AI เพียงแค่ส่งชื่อฟังก์ชันและค่าพารามิเตอร์มาให้ สคริปต์ Python ของเราเป็นผู้ตรวจสอบความถูกต้อง (Validation) ก่อนรันโค้ดจริง ป้องกันปัญหาการสั่งลบไฟล์หรือรันคำสั่งอันตราย
  • ข้อมูลประมวลผลในเครื่อง 100%: ไม่มีทั้ง Prompt และ Payload ของฟังก์ชันหลุดรอดออกไปผ่านอินเทอร์เน็ต

เตรียมความพร้อมและโมเดลที่รองรับ Function Calling ใน Ollama

ก่อนเริ่มเขียนโค้ด ให้ตรวจสอบว่าเครื่องของคุณมีเครื่องมือพร้อมใช้งานดังนี้:

  1. Ollama (เวอร์ชัน 0.3.0 ขึ้นไป): ติดตั้งเอนจิน Ollama ให้เรียบร้อย
  2. Python 3.10+ และ Ollama Python SDK: ติดตั้งด้วยคำสั่ง bash pip install ollama
  3. เลือกโมเดลที่รองรับ Function Calling: โมเดลยุคใหม่ที่ทดสอบแล้วว่าสกัด Tool Calls ได้แม่นยำสูง ได้แก่:
  4. qwen2.5:7b หรือ qwen2.5:14b (แนะนำอย่างยิ่งสำหรับงานตรรกะและภาษาไทย)
  5. llama3.1:8b
  6. mistral:7b

ดึงโมเดลมาไว้ในเครื่องด้วยคำสั่ง:

ollama pull qwen2.5:7b

วิธีเขียน Python สั่งการ Ollama Function Calling (Step-by-Step)

เรามาลองสร้างสคริปต์ Python ที่เปิดให้ Local AI สามารถดึงข้อมูลเวลาปัจจุบันและค้นหาโน้ตในเครื่องได้ด้วย Function Calling

import json
import datetime
import ollama

# 1. นิยามฟังก์ชันจริงในภาษา Python
def get_current_time():
    """ดึงเวลาปัจจุบันในเครื่อง"""
    return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

def search_local_notes(query: str):
    """ฟังก์ชันจำลองการค้นหาโน้ตในเครื่อง"""
    notes_db = {
        "password": "รหัส WiFi บ้านคือ PrivateBrain2026",
        "project": "โปรเจกต์ Private Brain OS มีกำหนดส่งสิ้นเดือนนี้"
    }
    results = [v for k, v in notes_db.items() if query.lower() in k or query.lower() in v]
    return results if results else ["ไม่พบข้อมูลที่ตรงกัน"]

# 2. นิยาม Schema ของ Tools ส่งให้ Ollama
tools_schema = [
    {
        "type": "function",
        "function": {
            "name": "get_current_time",
            "description": "ดึงวันที่และเวลาปัจจุบันของระบบ",
            "parameters": {
                "type": "object",
                "properties": {},
                "required": []
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "search_local_notes",
            "description": "ค้นหาข้อความในคลังโน้ตส่วนตัว",
            "parameters": {
                "type": "object",
                "properties": {
                    "query": {
                        "type": "string",
                        "description": "คำค้นหาที่ต้องการค้นในโน้ต"
                    }
                },
                "required": ["query"]
            }
        }
    }
]

# 3. ส่ง Prompt พร้อม Tools ให้ Ollama
user_prompt = "ตอนนี้กี่โมงแล้ว และในโน้ตมีพูดถึงโปรเจกต์อะไรบ้าง?"
messages = [{"role": "user", "content": user_prompt}]

response = ollama.chat(
    model="qwen2.5:7b",
    messages=messages,
    tools=tools_schema
)

# 4. ตรวจสอบว่า AI ร้องขอการเรียกใช้ ฟังก์ชัน (Tool Calls) หรือไม่
if response.message.tool_calls:
    messages.append(response.message) # บันทึกความจำของ AI

    for tool in response.message.tool_calls:
        fn_name = tool.function.name
        args = tool.function.arguments

        print(f"🤖 AI ต้องการเรียกฟังก์ชัน: {fn_name} พร้อมอาร์กิวเมนต์: {args}")

        # ดำเนินการเรียกฟังก์ชันจริงใน Python
        if fn_name == "get_current_time":
            result = get_current_time()
        elif fn_name == "search_local_notes":
            result = search_local_notes(args.get("query", ""))
        else:
            result = "Function not found"

        # ส่งผลลัพธ์กลับเข้าสู่ประวัติการสนทนา
        messages.append({
            "role": "tool",
            "content": json.dumps(result, ensure_ascii=False)
        })

    # 5. ให้ AI สรุปคำตอบสุดท้ายให้ผู้ใช้
    final_response = ollama.chat(model="qwen2.5:7b", messages=messages)
    print("\n💡 คำตอบสุดท้ายจาก AI:")
    print(final_response.message.content)

3 หลักการความปลอดภัยในการรัน Function Calling แบบ Local

แม้การรัน Function Calling จะเกิดขึ้นแบบออฟไลน์ แต่เพื่อป้องกันความผิดพลาดของโมเดล ควรยึดหลักความปลอดภัย 3 ข้อดังนี้:

1. สแกนและกรองอาร์กิวเมนต์ (Input Sanitization)

ก่อนนำค่าพารามิเตอร์ที่ AI ส่งกลับมาไปใช้ เช่น พาธไฟล์ (Path) หรือคำสั่งค้นหา ควรทำการตรวจสอบเสมอว่าไม่มีการป้อนสัญลักษณ์อันตรายอย่าง ../ เพื่อป้องกันปัญหา Path Traversal หรือการเข้าถึงไฟล์นอกโฟลเดอร์ที่อนุญาต

2. แยกฟังก์ชันประเภทอ่าน (Read-Only) และแก้ไข (Mutating Actions)

  • Read-Only Functions: เช่น การอ่านเวลา ค้นหาโน้ต หรือดึงค่าสถานะ สามารถให้ระบบรันโดยอัตโนมัติได้ทันที
  • Mutating Functions: เช่น การลบไฟล์ ส่งอีเมล หรือแก้ไขฐานข้อมูล ควรเพิ่มขั้นตอน Human-in-the-Loop หรือการแสดงป๊อปอัปให้ผู้ใช้กดยืนยัน (Confirm) ก่อนรันเสมอ

3. ปรับตั้งค่า Temperature ให้ต่ำ

เมื่อต้องการให้โมเดลทำ Function Calling ควรตั้งค่า temperature ให้อยู่ในช่วง 0.0 - 0.2 เพื่อลดความผิดพลาดในการสร้างรูปแบบ JSON และทำให้การเลือกฟังก์ชันมีความเสถียรสูงสุด


บทสรุป

การเปิดใช้งาน Function Calling บน Ollama ช่วยทลายข้อจำกัดเดิมๆ ของ Local LLM จากผู้ช่วยตอบคำถามธรรมดา ให้กลายเป็น Cognitive Automation Engine ที่ทำงานร่วมกับระบบและคลังความรู้ส่วนตัวของคุณได้อย่างสมบูรณ์แบบ

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

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