บทนำ: ทำไมต้องสร้างเกม AI ผจญภัยด้วยตัวเอง?
ผมเคยเป็นคนที่ชอบเล่น AI Dungeon มาก แต่พอลองศึกษาว่าเบื้องหลังมันทำงานยังไง กลับพบว่าหลักการไม่ได้ซับซ้อนอย่างที่คิด วันนี้ผมจะมาแบ่งปันวิธีสร้าง Narrative Engine ของตัวเองตั้งแต่เริ่มต้น โดยใช้
HolySheep AI เป็นตัวขับเคลื่อน ซึ่งมีความเร็วตอบสนองน้อยกว่า 50 มิลลิวินาที ทำให้การเล่นรู้สึกลื่นไหลมาก
**สิ่งที่คุณจะได้เรียนรู้ในบทความนี้:**
- หลักการทำงานของ AI ที่สร้างเนื้อเรื่องแบบไดนามิก
- วิธีตั้งค่า API สำหรับผู้ไม่มีประสบการณ์เขียนโค้ด
- เทคนิคการจัดการ Context ให้เรื่องราวต่อเนื่อง
- การเพิ่มความสมจริงด้วย Memory System
Concept ของ AI Dungeon Engine คืออะไร?
AI Dungeon ไม่ใช่เกมที่มีเนื้อเรื่องตายตัว แต่เป็น "เครื่องมือสร้างเรื่อง" ที่ใช้ Large Language Model หรือ LLM ในการตอบสนองต่อสิ่งที่ผู้เล่นพิมพ์ โดยมีหลักการง่ายๆ คือ:
1. **Prompt คือทุกอย่าง** - เราส่งข้อความที่รวมฉากหลัง + สิ่งที่เกิดขึ้น + คำถามไปหา AI
2. **Context Window** - คือข้อจำกัดว่า AI จะ "จำ" เรื่องที่เกิดขึ้นก่อนหน้าได้แค่ไหน
3. **Streaming Response** - การที่ตัวอักษรขึ้นทีละตัวทำให้รู้สึกเหมือน AI กำลัง "คิด"
**ภาพหน้าจอที่ควรเห็น:** แสดงหน้าต่าง Terminal ที่มีข้อความขึ้นทีละตัวอักษร
สำหรับราคา API ของ
HolySheep AI นั้นคุ้มค่ามาก เพราะอัตราแลกเปลี่ยน ¥1 เท่ากับ $1 ทำให้ประหยัดได้มากกว่า 85% เมื่อเทียบกับบริการอื่น
ขั้นตอนที่ 1: เตรียมเครื่องมือ
ก่อนเริ่ม คุณต้องมีสิ่งเหล่านี้:
**สิ่งที่ต้องมี:**
- บัญชี HolySheep AI (ลงทะเบียนแล้วได้เครดิตฟรี)
- Python 3.8 ขึ้นไป (ดาวน์โหลดจาก python.org)
- โปรแกรมแก้ไขโค้ด เช่น VS Code
**ภาพหน้าจอที่ควรเห็น:** หน้าจอลงทะเบียน HolySheep ที่แสดง API Key
วิธีดู API Key หลังลงทะเบียน:
1. ล็อกอินเข้า
HolySheep AI
2. ไปที่หน้า Dashboard
3. คลิก "API Keys" แล้วกดสร้าง Key ใหม่
ขั้นตอนที่ 2: เขียนโค้ดพื้นฐาน
ผมจะเริ่มจากโค้ดที่ง่ายที่สุดก่อน แล้วค่อยเพิ่มฟีเจอร์ทีละขั้น
import requests
import json
class SimpleNarrator:
def __init__(self, api_key):
self.api_key = api_key
self.base_url = "https://api.holysheep.ai/v1"
self.history = []
def create_story(self, system_prompt, user_input):
"""สร้างเรื่องราวจาก input ของผู้เล่น"""
# สร้าง messages list
messages = [{"role": "system", "content": system_prompt}]
# เพิ่มประวัติการสนทนาก่อนหน้า
for role, content in self.history:
messages.append({"role": role, "content": content})
# เพิ่ม input ล่าสุด
messages.append({"role": "user", "content": user_input})
# เรียก API
response = requests.post(
f"{self.base_url}/chat/completions",
headers={
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
},
json={
"model": "gpt-4.1",
"messages": messages,
"temperature": 0.8,
"max_tokens": 500
}
)
# ดึงคำตอบ
result = response.json()
ai_response = result["choices"][0]["message"]["content"]
# บันทึกลงประวัติ
self.history.append(("user", user_input))
self.history.append(("assistant", ai_response))
return ai_response
วิธีใช้งาน
narrator = SimpleNarrator("YOUR_HOLYSHEEP_API_KEY")
system = """คุณคือผู้เล่าเรื่องของเกมผจญภัยแฟนตาซี
- อธิบายฉากอย่างละเอียด
- ให้ผู้เล่นเลือกทำอะไรก็ได้
- อย่ากำหนดทางเลือกแบบตายตัว"""
print("=== เริ่มเกม ===")
print(narrator.create_story(system, "ฉันตื่นขึ้นมาในป่ามืด"))
while True:
player_input = input("\nคุณ: ")
if player_input.lower() in ["exit", "ออก"]:
break
print("\nเรื่องราว:")
print(narrator.create_story(system, player_input))
**ภาพหน้าจอที่ควรเห็น:** หน้าต่าง Terminal ที่แสดงการรันโค้ดและผลลัพธ์ตัวอย่าง
ราคาของ GPT-4.1 บน
HolySheep AI อยู่ที่ $8 ต่อล้านโทเค็น ซึ่งถูกกว่าที่อื่นมาก
ขั้นตอนที่ 3: เพิ่มระบบจำ (Memory System)
ปัญหาของโค้ดข้างบนคือ AI จะจำรายละเอียดได้น้อย ถ้าเนื้อเรื่องยาวมาก เราต้องเพิ่ม "ระบบจำ" เพื่อให้ AI ติดตามเหตุการณ์สำคัญ
import requests
class AdventurerNarrator:
def __init__(self, api_key):
self.api_key = api_key
self.base_url = "https://api.holysheep.ai/v1"
self.short_term = [] # ความจำระยะสั้น (สนทนาปัจจุบัน)
self.long_term = [] # ความจำระยะยาว (เหตุการณ์สำคัญ)
self.max_history = 10 # จำสนทนาล่าสุดได้แค่ 10 ครั้ง
def extract_memories(self, new_text):
"""ดึงข้อมูลสำคัญจากเรื่องที่เกิดขึ้น"""
prompt = f"""จากข้อความต่อไปนี้ ให้ระบุ:
1. ชื่อตัวละครที่พึ่งพบ
2. สถานที่สำคัญ
3. เหตุการณ์สำคัญที่เกิดขึ้น
4. ของวิเศษหรือไอเทมที่ได้มา
ข้อความ: {new_text}
ตอบในรูปแบบ JSON:
{{"characters": [], "locations": [], "events": [], "items": []}}"""
response = requests.post(
f"{self.base_url}/chat/completions",
headers={
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
},
json={
"model": "deepseek-v3.2",
"messages": [{"role": "user", "content": prompt}],
"max_tokens": 200
}
)
try:
result = response.json()
content = result["choices"][0]["message"]["content"]
# ดึง JSON จาก response
import re
json_match = re.search(r'\{.*\}', content, re.DOTALL)
if json_match:
return json.loads(json_match.group())
except:
pass
return {"characters": [], "locations": [], "events": [], "items": []}
def build_context(self):
"""สร้าง context สำหรับส่งให้ AI"""
context = "=== ความจำระยะยาว ===\n"
if self.long_term:
for mem in self.long_term[-5:]: # แสดงแค่ 5 อันล่าสุด
context += f"- {mem}\n"
context += "\n=== ความจำระยะสั้น ===\n"
for role, content in self.short_term:
speaker = "ผู้เล่น" if role == "user" else "เรื่องราว"
context += f"{speaker}: {content[:200]}...\n" if len(content) > 200 else f"{speaker}: {content}\n"
return context
def create_story(self, system_prompt, user_input):
"""สร้างเรื่องราวพร้อมระบบจำ"""
# เพิ่มข้อความล่าสุด
self.short_term.append(("user", user_input))
# จำกัดความยาวประวัติ
if len(self.short_term) > self.max_history:
oldest = self.short_term.pop(0)
# ดึงความจำจากสิ่งที่จะลบ
memory = self.extract_memories(oldest[1])
self.long_term.append(f"ผู้เล่นทำ: {oldest[1][:100]}")
# สร้าง messages
context = self.build_context()
messages = [
{"role": "system", "content": system_prompt + "\n\n" + context},
]
# รันโค้ดต่อไปนี้เพื่อทดสอบ
response = requests.post(
f"{self.base_url}/chat/completions",
headers={
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
},
json={
"model": "gpt-4.1",
"messages": messages,
"temperature": 0.8,
"max_tokens": 500
}
)
result = response.json()
ai_response = result["choices"][0]["message"]["content"]
# บันทึกและอัพเดตความจำ
self.short_term.append(("assistant", ai_response))
# ดึงความจำใหม่จากเรื่องที่ได้
new_memory = self.extract_memories(ai_response)
if new_memory.get("events"):
for event in new_memory["events"]:
self.long_term.append(event)
return ai_response
ทดสอบ
narrator = AdventurerNarrator("YOUR_HOLYSHEEP_API_KEY")
print("=== เกมผจญภัย v2 พร้อมระบบจำ ===")
print(narrator.create_story(
"คุณคือผู้เล่าเรื่องเกมแฟนตาซี ให้ตอบสนองอย่างสร้างสรรค์",
"ฉันเดินเข้าป่ามืดและเจอยักษ์ใหญ่"
))
DeepSeek V3.2 บน
HolySheep AI มีราคาเพียง $0.42 ต่อล้านโทเค็น เหมาะสำหรับงานดึงความจำที่ไม่ต้องการความแม่นยำสูงมาก
ขั้นตอนที่ 4: เพิ่มสไตล์การเล่าเรื่อง
สิ่งที่ทำให้เกมแต่ละเกมต่างกันคือ "สไตล์การเล่าเรื่อง" เราสามารถกำหนดได้หลายแบบ
# ตัวอย่าง System Prompts สำหรับสไตล์ต่างๆ
STYLE_PROMPTS = {
"dark_fantasy": """คุณคือผู้เล่าเรื่องสไตล์ Dark Fantasy
- ใช้คำอธิบายมืดมน ลึกลับ
- ตัวละครมีแง่มุมซับซ้อน ไม่ดีหรือเลวอย่างเดียว
- ฉากมักมีความรุนแรงหรือน่ากลัว
- ตอนจบมักไม่สมบูรณ์แบบ
ตัวอย่างการเขียน:
"ท้องฟ้าสีเลือดยามพระอาทิตย์ตก... หมู่บ้านเล็กๆ ที่เคยสงบ... บัดนี้เต็มไปด้วยเงาแห่งความตาย"""",
"light_comedy": """คุณคือผู้เล่าเรื่องสไต
แหล่งข้อมูลที่เกี่ยวข้อง
บทความที่เกี่ยวข้อง