บทนำ: ทำไมต้องเรียนรู้ Tool Use
สวัสดีครับ ผมเป็นนักพัฒนาที่ใช้งาน AI API มาหลายปี ในบทความนี้ผมจะมาสอนเพื่อนๆ ที่ยังไม่เคยใช้ API เลย ให้สามารถใช้งาน Qwen3 Tool Use หรือที่เรียกว่า Function Call ได้อย่างคล่องแคล่ว
สิ่งที่ทำให้ AI ฉลาดขึ้นมากคือการที่มันสามารถเรียกใช้เครื่องมือต่างๆ ได้ เช่น ค้นหาข้อมูล คำนวณตัวเลข หรือดึงข้อมูลจากฐานข้อมูล แทนที่จะตอบสนองแค่ข้อความอย่างเดียว
HolySheep AI สมัครที่นี่ เป็นผู้ให้บริการ API ที่มีความเร็วสูงมาก โดยมีความหน่วงต่ำกว่า 50 มิลลิวินาที และราคาประหยัดมากกว่าผู้ให้บริการอื่นถึง 85% รองรับการชำระเงินผ่าน WeChat และ Alipay พร้อมให้เครดิตฟรีเมื่อลงทะเบียน
Tool Use คืออะไร อธิบายแบบเข้าใจง่าย
ลองนึกภาพว่า AI เปรียบเสมือนลูกจ้างของคุณ ถ้าคุณบอกว่า "หาอากาศวันพรุ่งนี้ที่กรุงเทพให้หน่อย" ลูกจ้างธรรมดาจะตอบว่า "ผมไม่รู้ครับ" แต่ถ้าลูกจ้างมีเครื่องมือติดตัว (Tool) เขาจะไปดูข้อมูลจริงๆ มาบอกคุณได้
Tool Use ก็เป็นสิ่งเดียวกัน มันทำให้ AI สามารถทำสิ่งที่ต้องใช้ข้อมูลจริงๆ ได้
ตัวอย่างการใช้งานจริง
- ค้นหาข้อมูล - ถามราคาหุ้น สภาพอากาศ ข่าวล่าสุด
- คำนวณตัวเลข - บวกลบคูณหาร หรือสูตรยากๆ
- จัดการไฟล์ - อ่าน เขียน ลบ ไฟล์
- เชื่อมต่อฐานข้อมูล - ดึงข้อมูลลูกค้า สินค้า
การตั้งค่าเริ่มต้น: ติดตั้ง Python และไลบรารี
ก่อนจะเริ่ม เราต้องเตรียมเครื่องมือให้พร้อมก่อนครับ
ขั้นตอนที่ 1: ติดตั้ง Python
ไปที่เว็บไซต์ python.org แล้วดาวน์โหลด Python เวอร์ชันล่าสุดมาติดตั้ง ระหว่างติดตั้งอย่าลืมติ๊กถูกที่ "Add Python to PATH" ด้วยนะครับ
ขั้นตอนที่ 2: ติดตั้งไลบรารี
เปิด Command Prompt หรือ Terminal แล้วพิมพ์คำสั่งนี้
pip install openai requests
ขั้นตอนที่ 3: ขอ API Key
ไปที่ HolySheep AI สมัครสมาชิกแล้วไปที่หน้า Dashboard เพื่อสร้าง API Key จะได้รหัสประมาณ "hs-xxxxxxxxxxxx" มา
โค้ดพื้นฐาน: เริ่มต้นเรียกใช้ Qwen3
มาดูโค้ดพื้นฐานที่สุดก่อนครับ วิธีเรียกใช้ Qwen3 ผ่าน HolySheep API
import openai
ตั้งค่าการเชื่อมต่อกับ HolySheep API
client = openai.OpenAI(
api_key="YOUR_HOLYSHEEP_API_KEY",
base_url="https://api.holysheep.ai/v1"
)
ส่งข้อความไปถาม AI
response = client.chat.completions.create(
model="Qwen3-8B",
messages=[
{"role": "user", "content": "สวัสดีครับ AI"}
]
)
แสดงคำตอบ
print(response.choices[0].message.content)
ราคาของ Qwen3-8B อยู่ที่ $0.42 ต่อล้าน token ซึ่งถูกมากเมื่อเทียบกับ GPT-4.1 ที่ $8 ต่อล้าน token
รู้จักกับ OpenAI Format และ Function Call
OpenAI Format คือมาตรฐานการสื่อสารกับ AI ที่เป็นที่นิยมมากที่สุด ทำให้โค้ดของเราสามารถใช้กับ AI หลายตัวได้โดยไม่ต้องเปลี่ยนโครงสร้าง
ส่วนประกอบสำคัญของ Function Call
- name - ชื่อของฟังก์ชันที่เราต้องการให้ AI เรียกใช้
- description - คำอธิบายว่าฟังก์ชันนี้ทำอะไร ยิ่งละเอียดยิ่งดี
- parameters - กำหนดว่าต้องส่งข้อมูลอะไรเข้าไปบ้าง
ตัวอย่างการสร้าง Function Call: ระบบเช็คสภาพอากาศ
มาลงมือทำตัวอย่างจริงกันเลยครับ ผมจะสร้างระบบเช็คสภาพอากาศง่ายๆ
import openai
import json
ตั้งค่าการเชื่อมต่อ
client = openai.OpenAI(
api_key="YOUR_HOLYSHEEP_API_KEY",
base_url="https://api.holysheep.ai/v1"
)
กำหนดรายละเอียดของฟังก์ชันที่ให้ AI เรียกใช้ได้
weather_functions = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "ดึงข้อมูลสภาพอากาศของเมืองที่ต้องการ",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "ชื่อเมืองที่ต้องการทราบสภาพอากาศ เช่น กรุงเทพ เชียงใหม่"
},
"country": {
"type": "string",
"description": "ชื่อประเทศ เช่น ไทย ญี่ปุ่น"
}
},
"required": ["city"]
}
}
}
]
ส่งคำถามที่ต้องการให้ AI ตอบ
user_question = "พรุ่งนี้อากาศที่กรุงเทพเป็นอย่างไร?"
response = client.chat.completions.create(
model="Qwen3-8B",
messages=[
{"role": "user", "content": user_question}
],
tools=weather_functions
)
ดูว่า AI ต้องการเรียกฟังก์ชันอะไร
assistant_message = response.choices[0].message
print(f"AI ต้องการทำ: {assistant_message.content}")
print(f"Tool Calls: {assistant_message.tool_calls}")
การประมวลผลผลลัพธ์และตอบกลับ
เมื่อ AI บอกว่าต้องการเรียกฟังก์ชัน เราต้องนำข้อมูลไปประมวลผลแล้วส่งกลับไปให้ AI ตอบ
# ฟังก์ชันจำลองการดึงข้อมูลอากาศ
def get_weather(city, country="ไทย"):
# ในโค้ดจริงอาจเรียก API อากาศ เช่น OpenWeatherMap
weather_data = {
"กรุงเทพ": {"temp": 35, "condition": "แดดจัด", "humidity": 75},
"เชียงใหม่": {"temp": 28, "condition": "มีเมฆ", "humidity": 65}
}
return weather_data.get(city, {"temp": 30, "condition": "ไม่ทราบ", "humidity": 50})
ตรวจสอบว่ามี tool_calls หรือไม่
if assistant_message.tool_calls:
# ดึงข้อมูลการเรียกฟังก์ชัน
tool_call = assistant_message.tool_calls[0]
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
print(f"เรียกใช้ฟังก์ชัน: {function_name}")
print(f"พารามิเตอร์: {arguments}")
# เรียกใช้ฟังก์ชันจริง
if function_name == "get_weather":
result = get_weather(**arguments)
# ส่งผลลัพธ์กลับไปให้ AI
second_response = client.chat.completions.create(
model="Qwen3-8B",
messages=[
{"role": "user", "content": user_question},
assistant_message,
{
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result)
}
],
tools=weather_functions
)
print(f"คำตอบสุดท้าย: {second_response.choices[0].message.content}")
else:
print(f"คำตอบปกติ: {assistant_message.content}")
การแปลงรูปแบบ (Format Conversion)
บางครั้งเราต้องการใช้โค้ดที่เขียนสำหรับ OpenAI ไปใช้กับโมเดลอื่น หรือกลับกัน มาดูวิธีแปลงรูปแบบกันครับ
# ฟังก์ชันแปลง OpenAI Format เป็น Anthropic Format
def convert_openai_to_anthropic(messages, tools):
anthropic_messages = []
for msg in messages:
if msg["role"] == "user":
anthropic_messages.append({
"role": "user",
"content": msg["content"]
})
elif msg["role"] == "assistant":
if msg.get("tool_calls"):
# แปลง tool_calls เป็น content สำหรับ Anthropic
content = []
if msg["content"]:
content.append({"type": "text", "text": msg["content"]})
for tool in msg["tool_calls"]:
content.append({
"type": "tool_use",
"id": tool["id"],
"name": tool["function"]["name"],
"input": json.loads(tool["function"]["arguments"])
})
anthropic_messages.append({"role": "user", "content": content})
else:
anthropic_messages.append({
"role": "assistant",
"content": msg["content"]
})
elif msg["role"] == "tool":
anthropic_messages.append({
"role": "user