[CodeStudy] แอปเรียน Swift (AI Tutor) ที่ตั้งใจทำให้ใช้งานไม่สะดวก
(apps.apple.com)สวัสดีครับ/ค่ะ
ขอแนะนำแอปเรียน iOS ที่ทำเป็นโปรเจกต์ส่วนตัว
ที่มาของการสร้าง
เวลาถาม ChatGPT หรือ Claude เกี่ยวกับแนวคิดของ Swift ก็จะได้คำตอบที่เรียบร้อยทันที
แต่พออีกไม่กี่วันต่อมาเจอแนวคิดเดิมอีกครั้ง ก็พบว่าหัวโล่งเหมือนเดิมซ้ำๆ จนรู้สึกชัดอีกครั้งว่า "การเรียนแบบได้รับคำตอบ" กับ "การเรียนแบบค้นหาคำตอบ" นั้นต่างกัน
เลยลองนำ วิธีสอนแบบโสกราตีส หรือก็คือแนวทางที่แทนที่จะให้คำตอบ ก็โยนคำถามกลับเพื่อให้ผู้เรียนเข้าใจได้ด้วยตัวเอง มาสร้างเป็น AI tutor ดู
พูดตามตรง นี่คือแอปที่ตั้งใจทำให้ไม่สะดวกใช้งาน
เป็นแอปแบบไหน
- แนวคิด Swift 50 หัวข้อ (ตั้งแต่พื้นฐาน → ขั้นสูง รวมถึง async/await, Actor, Associated Types เป็นต้น)
- ต่อให้ผู้ใช้ถาม AI ก็จะไม่ให้คำตอบ แต่จะชวนคิดผ่านคำถามย้อนกลับแทน
- โครงสร้างแบบ วันละ 1 แนวคิด แล้วค่อยๆ บรรลุ "mastery" ผ่านบทสนทนา
- มีเอดิเตอร์ในตัวที่ให้ พิมพ์โค้ด Swift ได้โดยตรง ระหว่างสนทนา (syntax highlighting + auto indent)
- มีประวัติการเรียนรู้(กราฟหญ้า), วิดเจ็ต, โหมดมืด
เทคโนโลยีที่ใช้
- iOS: SwiftUI + SwiftData, MVVM + @Observable, ไม่มี external dependency
- Backend: Node.js บน Vercel Functions (SSE streaming)
- LLM: Claude Haiku 4.5 ผ่าน OpenRouter โดย abstract provider ไว้ จึงสลับไปใช้ Gemini/OpenAI ได้
- Curriculum: 50 concept บนพื้นฐาน JSON และบังคับข้อจำกัดแบบ "ถามแทนตอบ" ด้วย prompt engineering ฝั่งเซิร์ฟเวอร์
สถานะปัจจุบัน
- ไม่มีสมัครสมาชิก/ล็อกอิน — ตอนนี้บันทึกไว้เฉพาะในเครื่อง ใช้งานแบบไม่ระบุตัวตน
- ไม่มีโฆษณา — เพราะมองว่าไม่เข้ากับโทนของแอปเรียนรู้
- ไม่มีการชำระเงิน — ตอนนี้ยังอยู่ในช่วงตรวจสอบฐานการใช้งาน และกำลังพิจารณาโมเดลสมัครสมาชิกในอนาคต
ข้อจำกัดแบบตรงไปตรงมา / สิ่งที่กำลังคิดอยู่
- มีฟีดแบ็กว่า ใช้งานระหว่างเดินทางไปทำงานค่อนข้างหนัก เลยกำลังออกแบบ "โหมด 5 นาที" เพื่อให้คาดเดาความยาวของแต่ละเซสชันได้
- การตอบกลับครั้งแรก p99 อยู่ที่ประมาณ 9 วินาที (ค่าที่สังเกตจาก OpenRouter) ตั้งเป้าเวอร์ชันถัดไปไว้ที่ 3–4 วินาทีด้วยการใช้ prompt caching
- ต้นทุนโทเคนต่อผู้ใช้ อยู่ที่ระดับ $0.005/DAU จำเป็นต้องกลับมาทบทวนอีกครั้งเมื่อขยายสเกล
3 ความคิดเห็น
สิ่งที่ทำให้ผมประหลาดใจที่สุดตอนลงมือทำ คือผมต้องใช้เวลากับ prompt engineering มากกว่าที่คิด เพราะ LLM พยายามฝ่าข้อจำกัดที่ผมใส่ไว้ใน system prompt อยู่เรื่อย ๆ เพื่อสร้าง "AI ที่ไม่ยอมให้คำตอบ" ([MASTERY] การตัดสิน mastery แบบอิงโทเค็น)
เมื่อเทียบกับ Claude Haiku แล้ว Gemini Flash รักษาข้อจำกัดนี้ได้ดีกว่า แต่ในทางกลับกัน Claude ทำได้ดีกว่าในแง่ความลึกของคำถาม ตอนนี้เลยใช้ชุดผสม Claude + การปรับแต่งพรอมป์ต์อย่างละเอียดครับ
ถ้าใครเคยมีประสบการณ์ออกแบบพรอมป์ต์ลักษณะ "กดพฤติกรรมของ LLM" แบบคล้ายกัน รบกวนช่วยแชร์เคล็ดลับหน่อยนะครับ 🙏
ถ้ากำหนด role ให้เอเจนต์แล้วเรียนด้วยการคุยกับเอเจนต์โดยตรง กับการเรียนผ่านแอปนี้ สองแบบนี้มีความแตกต่างกันอย่างไรบ้าง?
ผมก็เคยลองใช้ทั้ง GPT กับ Claude ด้วย custom prompt เหมือนกัน แต่พอทำไปได้ไม่กี่วัน สุดท้ายก็จะกลายเป็น "อ๋อ บอกคำตอบมาเลยเถอะ!" อยู่ดี... แล้วพอใช้ต่อไปเรื่อย ๆ ก็มีหลายจังหวะที่มันลงเอยด้วยการเฉลยคำตอบให้อยู่บ่อย ๆ
เลยให้ความรู้สึกว่าแทนที่จะเป็นการเรียน มันเหมือนการค้นหาข้อมูลมากกว่า
แอปที่ผมทำ system prompt กับการตัดสิน mastery จะอยู่ฝั่งเซิร์ฟเวอร์ เลยหลุดจากกรอบแบบนั้นได้น้อยกว่าอยู่หน่อยครับ
แล้วก็มีการกำหนดจังหวะจบเซสชันไว้ด้วย เลยคิดว่าสะดวกสำหรับใช้ตอนเดินทางไปทำงาน
จริง ๆ แล้วอย่างที่คุณบอก วิธีแบบนี้ใช้ GPT หรือ Claude ก็ทำได้สบาย ๆ อยู่แล้วครับ
แต่ถ้ามองว่าเป็นฟอร์แมตที่เหมาะกับคนที่ทำคนเดียวแล้วไม่ค่อยทำได้ต่อเนื่องแบบผม ก็น่าจะใช่เลยครับ! :)