ปลดล็อกพลัง Local LLM ให้สั่งการคอมพิวเตอร์: คู่มือตั้งค่า Function Calling และ Tool Use บน Ollama แบบออฟไลน์ 100%
สอนวิธีตั้งค่า Function Calling บน Ollama เพื่อให้ Local AI สามารถเรียกใช้ฟังก์ชัน Python ค้นหาข้อมูล หรืออ่านเขียนไฟล์ในเครื่องได้อย่างปลอดภัย โดยประมวลผลออฟไลน์ 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
ก่อนเริ่มเขียนโค้ด ให้ตรวจสอบว่าเครื่องของคุณมีเครื่องมือพร้อมใช้งานดังนี้:
- Ollama (เวอร์ชัน 0.3.0 ขึ้นไป): ติดตั้งเอนจิน Ollama ให้เรียบร้อย
- Python 3.10+ และ Ollama Python SDK: ติดตั้งด้วยคำสั่ง
bash pip install ollama - เลือกโมเดลที่รองรับ Function Calling: โมเดลยุคใหม่ที่ทดสอบแล้วว่าสกัด Tool Calls ได้แม่นยำสูง ได้แก่:
qwen2.5:7bหรือqwen2.5:14b(แนะนำอย่างยิ่งสำหรับงานตรรกะและภาษาไทย)llama3.1:8bmistral: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 จัดระเบียบงาน สรุปข้อมูล และเชื่อมโยงโน้ตในเครื่องได้โดยอัตโนมัติ โดยไม่ต้องพึ่งพาคลาวด์และไม่ต้องกังวลเรื่องความเป็นส่วนตัวอีกต่อไปครับ