Overview
"Cody" คือ Bot ในกลุ่ม LINE เพื่อนดูบอล Liverpool ที่ทำตัวเป็นเพื่อนอีกคน — ตื่นมาเช้าวันจันทร์แล้วรายงานผลพร้อมอารมณ์ร่วม
C
Cody
ดูบอลเมื่อคืนเหมือนดู Wi-Fi บ้านเพื่อน หลุดทั้งเกม!
21:08
N
วันไหนที่แพ้ เดี๋ยวให้ cody ด่าาา 555
20:47
C
Cody
Slot คิดอะไรอยู่ เปลี่ยนตัวช้ากว่ารถเมล์สาย 8!
08:05
Design Thinking Process
วิธีคิดเบื้องหลัง Cody — จาก insight เล็กๆ ในกลุ่ม LINE
กลุ่ม LINE เพื่อนดูบอล — ปัญหาซ่อนอยู่
กลุ่ม LINE เพื่อนเชียร์ Liverpool มี 5 คน ดูบอลพรีเมียร์ลีกทุกสัปดาห์ แต่สังเกตว่าวันที่ไม่มีใครเริ่มคุย กลุ่มจะเงียบทั้งวัน — ทุกคนรอให้คนอื่นเริ่มก่อน โดยเฉพาะวันที่แพ้ ไม่มีใครอยากพูดถึง
Insight: กลุ่มต้องการ "คนเริ่มคุย" ที่ไม่อาย ไม่เกรงใจ พร้อมโม้ พร้อมด่าทุกสถานการณ์
"ทำไมไม่มี Bot ที่มีอารมณ์ร่วมเหมือนเพื่อนจริงๆ?"
Bot รายงานผลบอลมีเยอะ แต่ทุกตัว "แข็งๆ" — รายงานสกอร์แล้วจบ ไม่มีอารมณ์ร่วม ไม่มีการโม้ ไม่มีการด่า ไม่มีความสนุก แฟนบอลไม่ได้อยากรู้แค่สกอร์ — อยากมีคนมาร่วมดีใจ หรือร่วมเจ็บปวดด้วย
HMW: How might we สร้าง Bot ที่ "เป็นเพื่อนดูบอล" ไม่ใช่แค่ "เครื่องรายงานสกอร์"?
Context Engine — ให้ Bot รู้จักอารมณ์
ไอเดียหลักคือสร้าง "Context Engine" ที่ไม่ใช่แค่ดู ชนะ/แพ้/เสมอ แต่เข้าใจ บริบท ของผลบอล:
• แพ้แมนยู ≠ แพ้ทีมอื่น (ดาร์บี้ต้องเดือดกว่า)
• แพ้ทีมท้ายตาราง ≠ แพ้ทีมท็อป (แพ้ทีมรั้งท้ายต้องด่าหนักกว่า)
• อันดับตกนอก Top 4 ≠ นำจ่าฝูง (สถานการณ์ต่างกัน อารมณ์ต่างกัน)
• ชนะ Man City ≠ ชนะทีมเล็ก (ชนะทีมใหญ่ต้องโม้ทั้งวัน)
Key Idea: สร้าง "Rage Meter" ที่คำนวณระดับความเดือดจากหลายปัจจัย แล้วส่งให้ GPT เป็น context
Prototype แบบ Lean — ทำให้มันทำงานก่อน
เลือก stack ที่ lean ที่สุด เพราะเป็น side project ที่ต้องดูแลง่าย:
• Google Apps Script — free hosting, cron trigger ในตัว, ไม่ต้อง deploy
• Cloudflare Workers — proxy API key ไม่ให้ expose
• ChatGPT API — สร้างข้อความที่ไม่ซ้ำทุกครั้ง
• LINE Messaging API — ส่งตรงเข้ากลุ่มที่ใช้อยู่แล้ว
Zero infrastructure cost — ทุกอย่าง free tier หมด ดูแลตัวเองได้
ทดสอบกับเพื่อนจริง — ฟีดแบ็กทันที
ปล่อย Cody เข้ากลุ่ม LINE โดยไม่บอกเพื่อนล่วงหน้า — สังเกตว่าเพื่อนตอบ Cody เหมือนคุยกับคนจริง มีคนถามว่า "ใครพิมพ์?" 555
Validation: เพื่อนในกลุ่มเริ่มรอข้อความ Cody ทุกเช้า และมี engagement กลับมาจริง
System Architecture
Data flow ตั้งแต่ดึงผลบอลจนถึงข้อความเข้ากลุ่ม LINE
⚽
Football-Data API
ผลบอล + ตารางคะแนน PL
➜
🧠
Context Engine
Mood + Rage Meter + Rival Detection
➜
🤖
ChatGPT API
สร้างข้อความ 1 ประโยค
➜
💬
LINE Group
ส่งข้อความเข้ากลุ่ม Scousers
Context Engine — หัวใจของ Cody
ระบบที่ทำให้ Bot เข้าใจ "บริบท" ไม่ใช่แค่ "สกอร์"
🤩
WIN Mode
โม้แบบแฟนหงส์มั่นหน้า ชนะทีมใหญ่ยิ่งต้องโม้ทั้งวัน
😒
DRAW Mode
ประชดแบบแฟนบอลเซ็งๆ "ได้แต้มเดียว เหมือนได้เงินทอน"
🤬
LOSS Mode
ด่า Arne Slot แบบแฟนบอลหัวร้อน + Rage Meter ทำงาน
🔥 Rage Meter — ระดับความเดือดที่คำนวณจากบริบท
const SPECIAL_RAGE = {
"Manchester United": 10,
"Everton": 20
};
const SPECIAL_FLEX = [
"Manchester City",
"Arsenal"
];
// ชนะ City หรือ Arsenal?
// โม้ทั้งวัน 💪
// แพ้ Everton?
// rage = 20 (มิเตอร์แตก)
Prompt Engineering
ศิลปะการสั่ง GPT ให้ "พูดเหมือนเพื่อนในผับ"
🎯 กติกาที่ส่งให้ GPT
1 ประโยค
ภาษาแฟนบอล
ตลก กวน
ไม่เกิน 16 คำ
temperature: 1.1
คุณคือแฟนบอล Liverpool สายหัวร้อนในผับ
// ส่ง context ทั้งหมดให้ GPT:
// - ผลบอล (Home vs Away)
// - คู่แข่งชื่ออะไร
// - อันดับตาราง Liverpool
// - Rage Meter level
// - สถานการณ์พิเศษ (ดาร์บี้, ท้ายตาราง)
กติกา:
- 1 ประโยค
- ภาษาแฟนบอล
- ตลก กวน
- ไม่เกิน 16 คำ
ถ้าแพ้: ด่า Arne Slot
ถ้าชนะ: โม้แบบแฟนหงส์
ทำไม 16 คำ? — ข้อความสั้นเหมือนเพื่อนส่งมา ไม่ใช่บทความ เพื่อนอ่านแล้วหัวเราะทันที ไม่ต้องเลื่อนอ่าน
Key Design Decisions
ทำไมถึงเลือกแบบนี้
Decision 01
Google Apps Script ไม่ใช่ Server
ไม่ต้อง maintain server, ไม่ต้อง uptime monitoring, trigger ทำงานเองทุกเช้า 8 โมง — เหมาะกับ side project ที่ต้อง "ลืมได้แล้วมันยังทำงาน"
Decision 02
Cloudflare Workers Proxy
Football-Data API ต้องใช้ API key — สร้าง proxy ด้วย Cloudflare Workers ซ่อน key ไว้ฝั่ง edge ไม่ต้อง hardcode ใน Apps Script
Decision 03
Deduplication ด้วย Property Store
เก็บ LAST_SENT_MATCH ใน PropertiesService — trigger รันทุกวันแต่ถ้าส่งแล้วจะไม่ส่งซ้ำ ป้องกัน spam กลุ่ม
Decision 04
Temperature 1.1 = ความบ้าพอดี
Temperature สูงกว่า default (0.7) ทำให้ GPT "กล้าเล่น" มากขึ้น ข้อความไม่ซ้ำ ไม่น่าเบื่อ แต่ไม่เพี้ยนจนอ่านไม่รู้เรื่อง
Results
ผลลัพธ์จากการใช้งานจริง
Learnings
สิ่งที่ได้เรียนรู้จากโปรเจกต์นี้
Context สำคัญกว่า Content — GPT สร้างข้อความเก่งอยู่แล้ว แต่ถ้าส่ง prompt แค่ "Liverpool แพ้" จะได้ข้อความกลางๆ ไม่มีอารมณ์ การสร้าง Context Engine ที่บอก GPT ว่า "แพ้ Everton ในดาร์บี้ ทั้งที่อันดับ 1" ได้ข้อความที่ต่างกันโดยสิ้นเชิง
Constraint ทำให้ดีขึ้น — กติกา "1 ประโยค, ≤16 คำ" ไม่ใช่ข้อจำกัด แต่เป็นสิ่งที่ทำให้ output ดี ข้อความสั้นเหมือนเพื่อนส่งมาจริง ไม่ใช่ AI เขียนบทความ
Side Project ต้อง Zero Maintenance — ถ้าต้อง SSH เข้า server ดู log ทุกสัปดาห์ โปรเจกต์จะตาย Google Apps Script + Cloudflare Workers = set แล้วลืมได้
Bot ที่ดีไม่ใช่ Bot ที่ฉลาด — แต่เป็น Bot ที่มีบุคลิก — Cody ไม่ได้ฉลาดกว่า Bot ตัวอื่น แต่มี "ตัวตน" ที่ชัดเจน: แฟนหงส์หัวร้อนในผับ เพื่อนในกลุ่มรู้สึกว่ากำลังคุยกับ "คน" ไม่ใช่ "Bot"
Explore ด้วยความกล้า — ไอเดียเริ่มจาก "ถ้า Bot มีอารมณ์ได้ล่ะ?" ซึ่งฟังดูเล็ก แต่พอลงมือทำจริง กลายเป็นการ explore ตั้งแต่ Prompt Engineering, Context-Aware AI, serverless architecture — โปรเจกต์เล็กที่ได้เรียนรู้เยอะ