สร้างระบบติวเตอร์ Python อัจฉริยะด้วย FastAPI และ SQLite
เรียนรู้วิธีสร้าง PyMentor API สำหรับตรวจโค้ด Python พร้อมให้คำแนะนำผ่าน OpenAI และบันทึกคะแนนความเข้าใจลง SQLite

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- สร้าง API สำหรับตรวจโค้ด Python และรับคำแนะนำการสอนจาก OpenAI
- บันทึกประวัติการส่งงานและคะแนนความเข้าใจลงในฐานข้อมูล SQLite
- จำกัดขนาดโค้ดสูงสุดที่ 12,000 ตัวอักษรและไม่รันโค้ดผู้เรียนโดยตรง
- ควบคุมช่วงคะแนนความเข้าใจให้อยู่ระหว่าง 0 ถึง 100 เสมอ
บทความนี้เป็นส่วนหนึ่งของซีรีส์ Agentic Workflows จาก Gate of AI โดยมุ่งเน้นการสร้าง API ขนาดกะทัดรัดที่เรียกว่า PyMentor เพื่อทำหน้าที่เป็นระบบติวเตอร์ Python แบบปรับตัวได้ (Adaptive Tutoring API) ระบบจะรับข้อมูลรหัสผู้เรียน หัวข้อ แบบฝึกหัด และโค้ดที่ส่งมา จากนั้นดึงคะแนนความเข้าใจเดิมของผู้เรียนในหัวข้อนั้นมาประเมินร่วมกับ OpenAI model เพื่อขอคำแนะนำในการสอน ตรวจสอบความถูกต้องของ JSON ที่ตอบกลับ คำนวณคะแนนใหม่ และบันทึกผลลัพธ์ลงใน SQLite
เป้าหมายของระบบถูกกำหนดไว้อย่างชัดเจนว่าตัว API จะไม่ทำการรันโค้ดของผู้เรียน ไม่ตัดสินว่าผู้เรียนสอบผ่านหรือไม่ และไม่ทำหน้าที่แทนครูผู้สอน แต่เน้นกระบวนการให้ฟีดแบ็กซ้ำๆ ได้แก่ การระบุปัญหาที่น่าจะเกิดขึ้น ชื่นชมส่วนที่ถูกต้อง ให้คำใบ้ถัดไป ตั้งคำถาม และเก็บบันทึกความคืบหน้า ซึ่งขอบเขตนี้ช่วยป้องกันไม่ให้นำโค้ดที่ไม่รู้จักมาประมวลผลเป็นคำสั่งที่รันได้จริง
การจำกัดขอบเขตไม่ให้ API รันโค้ดของผู้เรียนโดยตรงถือเป็นแนวทางด้านความปลอดภัยที่สำคัญมากในการพัฒนาเครื่องมือ AI ด้านการศึกษา เนื่องจากช่วยป้องกันช่องโหว่ประเภท Remote Code Execution (RCE) ที่อาจเกิดขึ้นหากผู้เรียนส่งโค้ดอันตรายเข้ามาในระบบ
ในการเริ่มต้นพัฒนา ให้สร้างไดเรกทอรีโปรเจกต์และสภาพแวดล้อมเสมือน (Virtual Environment) สำหรับ POSIX shell สามารถใช้คำสั่งดังนี้:
- mkdir pymentor
- cd pymentor
- python3 -m venv .venv
- source .venv/bin/activate
- python -m pip install --upgrade pip
- pip install fastapi "uvicorn[standard]" openai pydantic-settings
- mkdir -p app
สำหรับ Windows PowerShell สามารถเปิดใช้งานสภาพแวดล้อมได้ด้วยคำสั่ง .\.venv\Scripts\Activate.ps1 พร้อมทั้งสร้างไฟล์ .env ที่รูทของโปรเจกต์เพื่อกำหนดค่า API Key, โมเดล OpenAI, ตำแหน่งฐานข้อมูล และขนาดโค้ดสูงสุด 12,000 ตัวอักษร รวมถึงเพิ่มค่าลงในไฟล์ .gitignore เพื่อความปลอดภัย
ในส่วนของการพัฒนาแอปพลิเคชัน ให้นำโค้ดทั้งหมดใส่ไว้ในไฟล์ app/main.py โดยโมเดลคำขอจะช่วยจำกัดข้อมูลที่ยอมรับจากไคลเอนต์ และใช้ Pydantic เพื่อตรวจสอบความถูกต้องของ JSON ผลลัพธ์ หากข้อมูลขาดหายหรือคะแนนอยู่นอกช่วงที่กำหนด ระบบจะคืนค่าข้อผิดพลาดที่ปลอดภัยแทนการบันทึกข้อมูลที่ไม่น่าเชื่อถือ นอกจากนี้การบันทึกข้อมูลลง SQLite จะใช้พารามิเตอร์แทนการแทรกสตริงเพื่อป้องกัน SQL Injection
"Do not test for an exact sentence from a language model. Test the response contract: fields should exist, lists should have the expected shape, and mastery should remain within the API’s defined range."
Gate of AI Technical Briefing

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
เมื่อเริ่มต้นเซิร์ฟเวอร์พัฒนาด้วยคำสั่ง uvicorn app.main:app --host 127.0.0.1 --port 8000 --reload ผู้ใช้สามารถทดสอบส่งคำขอผ่าน cURL ไปยังจุดเชื่อมต่อ /v1/tutor/review เพื่อส่งข้อมูลรหัส learner_42 หัวข้อ loops และโค้ด Python สำหรับคำนวณผลรวม ระบบจะส่งคืนสถานะ HTTP 201 พร้อมรหัสการทำรายการ คะแนนเดิม คะแนนใหม่ และวัตถุฟีดแบ็กที่ผ่านการตรวจสอบแล้ว
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น