วิธีสร้าง AI Agent บน VPS ด้วยตัวเองแบบครบวงจร
เรียนรู้วิธีสร้าง AI Agent บน VPS ตั้งแต่แนวคิดการทำลูป การจัดการเครื่องมือผ่าน MCP ไปจนถึงการตั้งค่าหน่วยความจำ เพื่อให้โมเดลทำงานอัตโนมัติได้จริงตามเป้าหมายที่คุณกำหนด
AI agent คืออะไรในทางปฏิบัติ
AI agent คือลูปที่ครอบอยู่บน language model โดยโมเดลจะอ่านสถานการณ์ ตัดสินใจเลือกหนึ่งการกระทำ โค้ดของคุณจะดำเนินการตามนั้น ผลลัพธ์จะถูกส่งกลับไปยังโมเดล และลูปจะทำงานซ้ำจนกว่างานจะเสร็จสิ้น นี่คือแนวคิดทั้งหมดของมัน Chatbot ทั่วไปจะตอบเพียงครั้งเดียวแล้วหยุด แต่ agent จะทำงานต่อไปโดยดำเนินการจริงระหว่างรอบการทำงานของมัน จนกว่าจะบรรลุเป้าหมายที่คุณกำหนดไว้ ลูปนี้มีขนาดเล็กพอที่คุณจะเขียนเองได้ภายในช่วงบ่าย ซึ่งเป็นจุดเริ่มต้นของ เส้นทางการเรียนรู้การสร้าง agent ตั้งแต่เริ่มต้น ก่อนที่จะเพิ่มเครื่องมือ หน่วยความจำ และความปลอดภัยเข้าไปในภายหลัง
การกระทำเป็นส่วนที่สำคัญที่สุด โดยตัวมันเองแล้ว language model ทำได้เพียงสร้างข้อความเท่านั้น มันไม่สามารถอ่านไฟล์ เรียกใช้ API หรือรันคำสั่งได้ Agent จะมอบชุดเครื่องมือที่ได้รับอนุญาตให้ใช้และวิธีการเรียกใช้งานให้กับโมเดล เมื่อโมเดลต้องการค้นหาข้อมูลบนเว็บหรือเขียนไฟล์ มันไม่ได้ทำงานนั้นด้วยตัวเอง แต่จะส่งคำขอที่มีโครงสร้างออกมา โค้ดของคุณจะรันเครื่องมือนั้น และคำตอบจะถูกส่งกลับมาเป็นข้อมูลถัดไปที่โมเดลจะอ่าน โมเดลทำหน้าที่ตัดสินใจ ส่วนเซิร์ฟเวอร์ของคุณทำหน้าที่เป็นผู้ลงมือปฏิบัติ
ไม่ใช่ทุกงานที่จำเป็นต้องใช้ agent และการเลือกใช้ agent เป็นค่าเริ่มต้นถือเป็นข้อผิดพลาดที่พบบ่อย หากขั้นตอนต่างๆ ทราบล่วงหน้า การใช้สคริปต์ธรรมดาจะง่ายกว่า เร็วกว่า และเชื่อถือได้มากกว่า "ดึงข้อมูลหน้านี้ทุกชั่วโมงแล้วส่งอีเมลราคามาให้ฉัน" เป็นงานที่ตั้งเวลาไว้ (scheduled job) ไม่ใช่ agent ให้สร้าง agent เมื่อเส้นทางไม่สามารถกำหนดไว้ล่วงหน้าได้ เมื่อโมเดลต้องพิจารณาสิ่งที่พบแล้วตัดสินใจว่าจะทำอย่างไรต่อไป ต้นทุนของ agent คือความไม่แน่นอน ดังนั้นควรเลือกใช้ก็ต่อเมื่อความยืดหยุ่นนั้นคุ้มค่ากับสิ่งที่ได้รับเท่านั้น
เครื่องมือ: วิธีที่เอเจนต์ทำงาน
เครื่องมือคือความสามารถใดก็ตามที่คุณมอบให้กับโมเดล โดยมีการอธิบายไว้อย่างชัดเจนเพียงพอเพื่อให้โมเดลทราบว่าเมื่อใดควรเรียกใช้งาน ไม่ว่าจะเป็นการอ่านไฟล์, การรันคำสั่ง shell, การสอบถามฐานข้อมูล หรือการส่งข้อความ แต่ละอย่างถือเป็นเครื่องมือที่มีชื่อ คำอธิบายสั้นๆ และรายการอินพุต คุณเป็นผู้กำหนดเครื่องมือเหล่านี้ ส่วนโมเดลจะเป็นผู้ตัดสินใจว่าจะเรียกใช้เมื่อใด โดยปกติแล้ว Web search เป็นเครื่องมือแรกที่ควรเพิ่ม และหากคุณรันอินสแตนซ์ SearXNG ของคุณเองอยู่แล้ว คุณสามารถ เปลี่ยนให้เป็นแบ็กเอนด์การค้นหาของเอเจนต์ ได้ แทนที่จะต้องจ่ายค่าบริการ API การค้นหาเชิงพาณิชย์
กลไกนี้เหมือนกันในทุกที่ ไม่ว่าคุณจะใช้โมเดลใดก็ตาม โมเดลจะส่งคำขอที่มีโครงสร้างซึ่งระบุชื่อเครื่องมือและกรอกข้อมูลอินพุตที่จำเป็น โค้ดของคุณจะเห็นคำขอนั้น รันฟังก์ชันที่ตรงกัน และส่งผลลัพธ์กลับไปในรอบถัดไป โมเดลจะอ่านผลลัพธ์นั้นแล้วตัดสินใจว่าจะเรียกใช้เครื่องมืออื่นต่อหรือเขียนคำตอบสุดท้ายออกมา การเรียกใช้ฟังก์ชัน (Function calling) คือระบบท่อส่งข้อมูลที่อยู่เบื้องหลังเอเจนต์ทุกตัว และลูปที่ขับเคลื่อนกระบวนการนี้เป็นเพียงโค้ดทั่วไปไม่กี่บรรทัดเท่านั้น
นี่คือจุดที่คุณสามารถควบคุมการทำงานได้เช่นกัน โมเดลอาจร้องขอให้รันคำสั่ง แต่จะไม่มีการรันใดๆ เกิดขึ้นจนกว่าโค้ดของคุณจะเลือกให้รัน ช่องว่างตรงนี้คือจุดที่คุณสามารถใส่การแจ้งเตือนเพื่อขออนุมัติสำหรับการกระทำที่อันตราย, กำหนดขีดจำกัดว่าเครื่องมือสามารถเข้าถึงอะไรได้บ้าง และบันทึก log ของทุกสิ่งที่เอเจนต์ได้ทำลงไป ความปลอดภัยของเอเจนต์ขึ้นอยู่กับเครื่องมือที่คุณมอบให้และการตรวจสอบที่คุณวางไว้เบื้องหน้าเครื่องมือเหล่านั้นเท่านั้น
MCP: มาตรฐานสำหรับการเชื่อมต่อเครื่องมือ
การเขียนโค้ดเชื่อมต่อ (integration) สำหรับแต่ละบริการด้วยตนเองใหม่ทุกครั้งเป็นเรื่องที่น่าเบื่อหน่าย Model Context Protocol หรือ MCP คือมาตรฐานเปิดที่เข้ามาแก้ไขปัญหานี้ แทนที่จะต้องเขียนเครื่องมือใหม่สำหรับไฟล์ ฐานข้อมูล และระบบติดตามปัญหาของคุณ คุณเพียงแค่ชี้ตัว agent ไปยัง MCP server ที่เปิดเผยข้อมูลเหล่านั้นในรูปแบบเครื่องมือไว้แล้ว ตัว agent จะสื่อสารผ่านโปรโตคอลเดียว ในขณะที่ server จะทำหน้าที่ติดต่อกับระบบจริงให้
ผลลัพธ์ที่ได้คือการนำกลับมาใช้ใหม่ (reuse) MCP server ที่ผู้อื่นเขียนไว้สำหรับบริการที่คุณใช้งานอยู่ จะสามารถนำมาใช้กับ agent ของคุณได้ทันทีโดยไม่ต้องเขียนโค้ดเชื่อมต่อใหม่ และ server ที่คุณเขียนขึ้นเองก็สามารถใช้งานได้กับทุก agent ที่รองรับโปรโตคอลนี้ ปัจจุบันแอปพลิเคชันแบบ self-hosted บางตัวเริ่มมีการติดตั้ง MCP server มาให้ในตัว เช่น openGym ซึ่งเป็นแอปติดตามการออกกำลังกาย ได้เปิดเผย MCP server แบบอ่านได้อย่างเดียว เพื่อให้ agent สามารถตอบคำถามเกี่ยวกับประวัติการฝึกซ้อมของคุณได้โดยไม่สามารถแก้ไขข้อมูลใดๆ บน VPS นั้น เรื่องนี้มีความสำคัญเพราะคุณสามารถรัน MCP server เป็นบริการย่อยๆ แยกต่างหากข้างๆ ตัว agent โดยแต่ละตัวจะมีสิทธิ์เข้าถึงเฉพาะสิ่งที่จำเป็นเท่านั้น ในกรณีที่ระบบหลังบ้านของ server เหล่านั้นอยู่ในเครือข่ายที่ VPS มองไม่เห็น เช่น ฐานข้อมูลที่บ้านหรือที่ทำงาน การ ประกาศเครือข่ายนั้นเข้าสู่ tailnet ของคุณด้วย subnet router จะช่วยให้ agent สามารถเข้าถึงระบบเหล่านั้นผ่านที่อยู่ส่วนตัวได้โดยไม่ต้องเปิดเผยข้อมูลใดๆ สู่สาธารณะ ผมได้อธิบายขั้นตอนการตั้งค่าไว้ใน การรัน MCP servers บน VPS
หน่วยความจำและการเรียกคืนข้อมูล
โมเดลภาษาไม่มีหน่วยความจำของตนเองระหว่างการเรียกใช้งาน ข้อมูลทั้งหมดที่โมเดลทราบเกี่ยวกับงานปัจจุบันจะต้องถูกส่งให้ในแต่ละรอบ สำหรับงานระยะสั้นวิธีนี้ไม่มีปัญหาเนื่องจากการสนทนาทั้งหมดสามารถอยู่ในคำขอเดียวได้ ปริมาณข้อมูลที่รองรับขึ้นอยู่กับ context window โดยโมเดลที่โฮสต์เองผ่าน Ollama จะมีค่าเริ่มต้นขนาดเล็กซึ่งจะค่อยๆ ตัดข้อมูลเก่าที่สุดทิ้งไป ดังนั้นการ ตั้งค่า num_ctx ให้สอดคล้องกับปริมาณข้อมูลที่ลูปของคุณสร้างขึ้น จึงเป็นสิ่งที่ควรทำก่อนที่จะสรุปว่าเอเจนต์ลืมข้อมูล สำหรับงานที่ยาวกว่านั้น คุณต้องจัดการหน่วยความจำด้วยตนเอง ซึ่งมีรูปแบบที่ควรทราบอยู่ 2 วิธี
วิธีแรกคือ scratchpad คุณจัดเตรียมไฟล์ที่เอเจนต์สามารถอ่านและเขียนได้ให้แก่เอเจนต์ และสั่งให้เอเจนต์บันทึกสิ่งที่เรียนรู้ระหว่างการทำงาน ในรอบถัดไปหรือเซสชันถัดไป เอเจนต์จะอ่านไฟล์นั้นกลับมาและทำงานต่อจากจุดที่ค้างไว้ นี่คือหน่วยความจำในรูปแบบเอกสารทั่วไป ซึ่งได้ผลเพราะเอเจนต์มองว่าไฟล์ดังกล่าวเป็นเพียงเครื่องมือหนึ่งเท่านั้น
วิธีที่สองคือการเรียกคืนข้อมูล (retrieval) เมื่อเอเจนต์ต้องการความรู้จากเอกสารจำนวนมากที่ไม่สามารถใส่ในคำขอเดียวได้ คุณต้องจัดเก็บเอกสารเหล่านั้นในรูปแบบที่ค้นหาได้ และดึงเฉพาะส่วนที่เกี่ยวข้องเข้ามาในมุมมองของโมเดลเมื่อจำเป็น รูปแบบนี้เรียกว่า retrieval-augmented generation หรือ RAG เอเจนต์จะตั้งคำถาม โค้ดของคุณจะค้นหาข้อความที่ตรงกันจำนวนหนึ่ง และส่งเฉพาะข้อความเหล่านั้นไปยังโมเดล คลังข้อมูลจะถูกเก็บไว้บนเซิร์ฟเวอร์ของคุณ ดังนั้นเอกสารส่วนตัวของคุณจะไม่ถูกส่งออกไปภายนอก
เอเจนต์จำนวนมากภายใต้ผู้ประสานงานหนึ่งเดียว
การใช้เอเจนต์หนึ่งตัวพร้อมเครื่องมือหลายอย่างเพียงพอสำหรับงานส่วนใหญ่ แต่เมื่อต้องรับมือกับงานขนาดใหญ่หรือมีลักษณะแบ่งส่วนได้ชัดเจน รูปแบบที่แตกต่างออกไปจะมีประสิทธิภาพมากกว่า นั่นคือการใช้เอเจนต์ผู้ประสานงาน (coordinator agent) เพื่อมอบหมายงานให้กับเอเจนต์ย่อยเฉพาะทาง ผู้ประสานงานจะแบ่งเป้าหมายออกเป็นส่วนย่อย ส่งมอบแต่ละส่วนให้เอเจนต์ย่อยที่ถูกสร้างมาเพื่องานประเภทนั้นโดยเฉพาะ แล้วจึงนำผลลัพธ์มารวมกัน การมอบหมายงานจำเป็นต้องมีช่องทางสื่อสารระหว่างส่วนประกอบต่างๆ ซึ่งรูปแบบที่เรียบง่ายที่สุดนั้นมีอยู่บนเซิร์ฟเวอร์ของคุณแล้ว นั่นคือ การเปิด Claude Code สองเซสชันบน VPS เดียวกันเพื่อให้ส่งข้อความถึงกันได้ ซึ่งเป็นวิธีที่ประหยัดในการทดสอบพฤติกรรมการส่งต่องานก่อนที่คุณจะสร้างกลไกการประสานงานขึ้นมาเอง
ผลลัพธ์ที่ได้คือความมุ่งเน้นของงาน เอเจนต์ย่อยที่มีขอบเขตงานแคบและชุดเครื่องมือขนาดเล็กจะตัดสินใจได้ดีกว่าเอเจนต์ทั่วไปที่ต้องรับมือกับทุกอย่าง อีกทั้งส่วนประกอบที่เป็นอิสระต่อกันยังสามารถทำงานไปพร้อมกันได้ ต้นทุนที่ต้องแลกมาคือความซับซ้อนในการประสานงานซึ่งเป็นเรื่องจริง ดังนั้นควรคงไว้ที่เอเจนต์ตัวเดียวจนกว่างานนั้นจะต้องการมากกว่าเดิมอย่างชัดเจน เริ่มต้นจากสิ่งที่เรียบง่าย และเพิ่มจำนวนเอเจนต์เมื่อเอเจนต์ตัวเดียวเริ่มทำงานหนักเกินไปเท่านั้น
Self-hosted หรือ hosted: รูปแบบใดที่ใช้รันเอเจนต์ของคุณ
โมเดลเป็นส่วนประกอบเดียวของเอเจนต์ที่คุณไม่จำเป็นต้องรันด้วยตัวเอง และการเลือกว่าจะให้มันอยู่ที่ไหนคือการตัดสินใจที่สำคัญที่สุดที่คุณต้องทำ โมเดลแบบ hosted ซึ่งเข้าถึงผ่าน API มอบความสามารถในการใช้เหตุผลที่แข็งแกร่งที่สุดโดยที่คุณไม่ต้องดูแลระบบใดๆ เพียงแค่ส่งข้อความไปและรับข้อความกลับมา ส่วนโมเดลแบบ self-hosted จะรันบนเซิร์ฟเวอร์ของคุณเอง ซึ่งช่วยให้ทุกคำขอเป็นส่วนตัว มีค่าใช้จ่ายคงที่แทนที่จะเป็นค่าธรรมเนียมต่อโทเค็น และไม่ต้องพึ่งพาการทำงานของผู้อื่น สิ่งที่ต้องแลกคือความสามารถและความพยายาม โมเดลแบบ hosted ที่ดีที่สุดนั้นล้ำหน้ากว่าสิ่งที่คุณสามารถรันเองได้ และการรันด้วยตัวเองหมายถึงการจัดสรรหน่วยความจำให้เพียงพอต่อการใช้งาน
ประเด็นสุดท้ายคือข้อจำกัดในทางปฏิบัติ โมเดลต้องมีขนาดพอดีกับหน่วยความจำของเซิร์ฟเวอร์ และหากคุณใช้ GPU ก็ต้องพอดีกับหน่วยความจำวิดีโอ (VRAM) โมเดลที่มีขนาดใหญ่เกินกว่าฮาร์ดแวร์จะไม่สามารถโหลดขึ้นมาได้ ก่อนที่คุณจะวางแผนทำเอเจนต์แบบ self-hosted ให้ตรวจสอบก่อนว่าโมเดลที่คุณต้องการนั้นเหมาะสมกับเครื่องที่คุณมีหรือไม่:
หากตัวเลขไม่สอดคล้องกัน คุณมีทางเลือก 3 ทาง: เลือกโมเดลที่เล็กลง, ใช้การ quantization ที่เข้มข้นขึ้นเพื่อลดขนาดโมเดล หรือใช้ hosted API สำหรับการประมวลผลเหตุผลและเก็บไว้เพียงเครื่องมือและข้อมูลของคุณบนเซิร์ฟเวอร์ เอเจนต์แบบ self-hosted จำนวนมากเริ่มต้นด้วยโมเดลภายในผ่าน Ollama บน VPS และเปลี่ยนไปใช้ hosted API สำหรับขั้นตอนที่ยากที่สุด
เซิร์ฟเวอร์คือส่วนที่อันตรายที่สุด
เอเจนต์ที่สามารถรัน shell command และเขียนไฟล์ได้นั้นมีขีดความสามารถสูง และนั่นคือเหตุผลว่าทำไมมันถึงอันตราย การตัดสินใจของโมเดลนั้นดีแต่ยังไม่สมบูรณ์แบบ คำสั่งที่ผิดพลาด บั๊ก หรืออินพุตที่เป็นอันตรายสามารถเปลี่ยนเอเจนต์ที่เป็นประโยชน์ให้กลายเป็นสิ่งที่ลบข้อมูลผิดพลาดหรือทำข้อมูลลับรั่วไหลได้ งานด้านความปลอดภัยไม่ใช่สิ่งที่เลือกทำได้ แต่บนเซิร์ฟเวอร์ถือเป็นส่วนที่สำคัญที่สุด
นิสัยเพียงไม่กี่อย่างช่วยลดความเสี่ยงได้มากที่สุด ให้รันเอเจนต์ในฐานะผู้ใช้ที่ไม่มีสิทธิ์พิเศษ (unprivileged user) โดยเฉพาะ ห้ามรันในฐานะ root เพื่อให้ความผิดพลาดมีขอบเขตจำกัด ซึ่งเป็นเหตุผลเดียวกับใน การรันเซอร์วิสด้วยผู้ใช้ที่ไม่มีสิทธิ์พิเศษ เก็บข้อมูลลับ เช่น API keys ไว้นอกโค้ดและให้เฉพาะผู้ใช้นั้นอ่านได้เท่านั้น และทำ sandbox ให้กับเครื่องมือที่เข้าถึงระบบ เพื่อให้เอเจนต์เข้าถึงได้เฉพาะสิ่งที่จำเป็นจริงๆ หากคุณไม่ต้องการเขียนการตรวจสอบด้วยตนเอง ปลั๊กอิน DeepSeek Harness ที่ควรติดตั้ง ครอบคลุมเนื้อหาเดียวกันในรูปแบบสำเร็จรูป เช่น กฎการอนุญาตเครื่องมือ การสแกน prompt injection และการจำกัดงบประมาณที่เอเจนต์ใช้ได้ก่อนที่จะหยุดทำงาน สำหรับตัวอย่างการทำ hardening เอเจนต์ที่โฮสต์เองจริง ให้ดูที่ การรัน OpenClaw อย่างปลอดภัยบน VPS หากคุณต้องการใช้โมเดลแบบ hosted สำหรับการประมวลผล คู่มือประกอบเรื่อง การสร้างเอเจนต์ด้วย Claude บน VPS จะนำแนวคิดเดียวกันนี้ไปใช้กับโมเดลเฉพาะ
สำหรับตัวอย่างการใช้งานจริง การสร้างเอเจนต์ส่วนตัวสไตล์ OpenClaw จะนำส่วนประกอบเหล่านี้มาประยุกต์ใช้ และหากคุณต้องการรันเอเจนต์สำเร็จรูป ให้เริ่มจาก การ self-host Hermes Agent บน VPS หรือ การรัน Agent Zero บนเซิร์ฟเวอร์ของคุณเอง และ เอเจนต์ AI แบบ self-hosted ที่ดีที่สุดในปี 2026 จะเปรียบเทียบตัวเลือกสำเร็จรูปทั้งหมดที่เราครอบคลุมไว้แบบเคียงข้างกัน
FAQ
AI agent กับ chatbot ต่างกันอย่างไร?
Chatbot จะตอบข้อความแล้วจบการทำงาน แต่ agent จะทำงานเป็นลูป โดยโมเดลจะตัดสินใจเลือกการกระทำ โค้ดของคุณจะดำเนินการตามนั้น ผลลัพธ์จะถูกส่งกลับไปที่โมเดล และทำซ้ำจนกว่างานจะเสร็จสิ้น ความแตกต่างคือ agent จะดำเนินการจริงระหว่างรอบการทำงาน โดยเรียกใช้เครื่องมือเพื่ออ่านไฟล์ รันคำสั่ง หรือสอบถามข้อมูลจากบริการต่างๆ แทนที่จะสร้างเพียงข้อความเท่านั้น
ฉันจำเป็นต้องใช้ GPU เพื่อรัน AI agent บน VPS หรือไม่?
จำเป็นเฉพาะในกรณีที่คุณโฮสต์โมเดลด้วยตนเองเท่านั้น ลูปของ agent, เครื่องมือ และหน่วยความจำ เป็นโค้ดทั่วไปที่สามารถรันบน VPS ปกติที่ไม่มี GPU ได้ตามปกติ GPU จะมีความสำคัญเมื่อคุณต้องการรันโมเดลภาษาบนฮาร์ดแวร์ของคุณเอง เนื่องจากโมเดลต้องใช้หน่วยความจำในการประมวลผล หากคุณใช้โมเดลผ่าน API การคำนวณหนักๆ จะเกิดขึ้นที่อื่น ซึ่ง VPS ขนาดทั่วไปก็เพียงพอแล้ว
MCP คืออะไร และจำเป็นต้องใช้เพื่อสร้าง agent หรือไม่?
MCP หรือ Model Context Protocol คือมาตรฐานเปิดสำหรับการเชื่อมต่อ agent เข้ากับเครื่องมือและแหล่งข้อมูลต่างๆ คุณไม่จำเป็นต้องใช้มันอย่างเคร่งครัด เนื่องจากคุณสามารถเขียนเครื่องมือแต่ละตัวขึ้นมาเองได้ แต่ MCP ช่วยประหยัดเวลาโดยให้คุณนำเซิร์ฟเวอร์ที่มีอยู่แล้วสำหรับบริการทั่วไปมาใช้ซ้ำ และเปิดเผยระบบของคุณเองเพียงครั้งเดียวเพื่อให้ agent ใดๆ ก็ตามสามารถใช้งานได้ ถือเป็นความสะดวกที่คุ้มค่าเมื่อจำนวนการเชื่อมต่อเพิ่มมากขึ้น
การให้ AI agent เข้าถึงเซิร์ฟเวอร์ของฉันมีความปลอดภัยหรือไม่?
สามารถปลอดภัยได้หากคุณจำกัดขอบเขตของมัน ความปลอดภัยของ agent ที่รันคำสั่งขึ้นอยู่กับบัญชีผู้ใช้ที่มันใช้รันและเครื่องมือที่คุณอนุญาตให้ใช้เท่านั้น ควรให้มันรันในฐานะผู้ใช้ที่ไม่มีสิทธิ์พิเศษ (unprivileged user) เก็บข้อมูลลับให้ห่างจากที่ที่มันเข้าถึงได้ ทำ sandbox สำหรับเครื่องมือที่ต้องเข้าถึงระบบไฟล์ และกำหนดให้ต้องมีการอนุมัติก่อนดำเนินการที่ย้อนกลับได้ยาก ให้ปฏิบัติต่อ agent เสมือนเป็นโค้ดที่ไม่น่าเชื่อถือแต่มีความฉลาด และให้สิทธิ์เข้าถึงเฉพาะสิ่งที่จำเป็นต่องานนั้นๆ เท่านั้น