การพัฒนา AI Chatbot ที่สามารถจำบทสนทนาก่อนหน้าและตอบสนองได้อย่างเป็นธรรมชาตินั้น ไม่ใช่เรื่องง่าย หลายทีมต้องเผชิญปัญหา Context Overflow, Memory Leak หรือค่าใช้จ่ายที่พุ่งสูงจากการส่ง History ทั้งหมดในทุก Request บทความนี้จะพาคุณเรียนรู้วิธีออกแบบระบบ Conversation Management ที่แข็งแกร่ง พร้อม Case Study จริงจากทีมสตาร์ทอัพ AI ในกรุงเทพฯ ที่ประสบความสำเร็จในการลด Latency ลง 57% และประหยัดค่าใช้จ่ายได้ถึง 84%

กรณีศึกษา: ทีมสตาร์ทอัพ AI ในกรุงเทพฯ

ทีมสตาร์ทอัพ AI แห่งหนึ่งในกรุงเทพฯ พัฒนา Chatbot สำหรับบริการลูกค้าของธุรกิจอีคอมเมิร์ซขนาดใหญ่ ระบบเดิมใช้ OpenAI API โดยตรง แต่พบจุดเจ็บปวดหลายประการ:

หลังจากประเมินและเปรียบเทียบผู้ให้บริการ AI หลายราย ทีมตัดสินใจย้ายมาใช้ HolySheep AI เนื่องจากราคาที่ประหยัดกว่า 85% และ Latency เฉลี่องต่ำกว่า 50ms

ขั้นตอนการย้ายระบบ

การย้ายระบบทำอย่างเป็นขั้นตอนเพื่อไม่ให้กระทบกับผู้ใช้งานจริง:

  1. การเปลี่ยน Base URL: แก้ไข Endpoint จาก api.openai.com เป็น api.holysheep.ai/v1
  2. การหมุน API Key: สร้าง Key ใหม่บน HolySheep Dashboard และ Rollout ทีละ 10% ของ Traffic
  3. Canary Deploy: ใช้ Feature Flag เพื่อให้ 10% ของผู้ใช้ได้ลองใช้ระบบใหม่ก่อน
  4. Monitor & Optimize: ติดตาม Metrics และปรับปรุง Context Window และ Summarization Logic

ผลลัพธ์หลัง 30 วัน

หลักการพื้นฐานของ Multi-Turn Conversation

ก่อนจะเข้าสู่การ Implement มาทำความเข้าใจแนวคิดหลักๆ ก่อน:

Conversation Context คืออะไร?

Context คือข้อมูลที่ช่วยให้ AI เข้าใจว่ากำลังคุยกับผู้ใช้เรื่องอะไร มีหลายระดับ:

Session State vs Conversation State

หลายคนสับสนระหว่างสองคำนี้:

การออกแบบระบบ Context Management

นี่คือส่วนสำคัญที่สุดของบทความ มาดูโค้ดจริงที่ใช้ในการ Implement ระบบจัดการบทสนทนาหลาย Turn กัน

1. Smart Context Window with Summarization

แทนที่จะส่ง History ทั้งหมดในทุก Request เราจะใช้เทคนิค Summarization เพื่อรักษา Context ที่สำคัญแต่ลด Token Usage:

import hashlib
import json
from datetime import datetime, timedelta
from typing import List, Dict, Optional

class ConversationManager:
    """
    ระบบจัดการบทสนทนาหลาย Turn สำหรับ HolySheep AI
    รองรับ Smart Context Windowing และ Automatic Summarization
    """
    
    def __init__(
        self,
        api_key: str,
        base_url: str = "https://api.holysheep.ai/v1",
        max_context_tokens: int = 4000,
        summary_threshold: int = 3000
    ):
        self.api_key = api_key
        self.base_url = base_url
        self.max_context_tokens = max_context_tokens
        self.summary_threshold = summary_threshold
        
        # เก็บ Conversation แยกตาม Session ID
        self.sessions: Dict[str, Dict] = {}
        
        # กำหนด Token Estimate (เฉลี่ย 4 ตัวอักษร = 1 Token)
        self.chars_per_token = 4
    
    def estimate_tokens(self, text: str) -> int:
        """ประมาณจำนวน Token จากข้อความ"""
        return len(text) // self.chars_per_token
    
    def should_summarize(self, session_id: str) -> bool:
        """ตรวจสอบว่าควรทำ Summarization หรือยัง"""
        if session_id not in self.sessions:
            return False
        
        session = self.sessions[session_id]
        current_tokens = self.estimate_tokens(
            self._build_context_string(session)
        )
        
        return current_tokens >= self.summary_threshold
    
    def _build_context_string(self, session: Dict) -> str:
        """สร้าง Context String สำหรับส่งให้ AI"""
        parts = []
        
        # 1. System Prompt
        if session.get("system_prompt"):
            parts.append(f"System: {session['system_prompt']}")
        
        # 2. Summary ถ้ามี
        if session.get("summary"):
            parts.append(f"Previous Summary: {session['summary']}")
        
        # 3. Recent Messages
        recent = session.get("recent_messages", [])
        parts.append("Recent Conversation:")
        for msg in recent:
            role = msg.get("role", "user")
            content = msg.get("content", "")
            parts.append(f"{role.capitalize()}: {content}")
        
        return "\n".join(parts)
    
    def add_message(
        self,
        session_id: str,
        role: str,
        content: str,
        metadata: Optional[Dict] = None
    ) -> Dict:
        """เพิ่มข้อความในบทสนทนา"""
        if session_id not in self.sessions:
            self._init_session(session_id)
        
        session = self.sessions[session_id]
        
        message = {
            "role": role,
            "content": content,
            "timestamp": datetime.now().isoformat(),
            "metadata": metadata or {}
        }
        
        session["messages"].append(message)
        
        # เก็บ Recent Messages (ล่าสุด N ข้อความ)
        max_recent = 10
        session["recent_messages"] = session["messages"][-max_recent:]
        
        # ตรวจสอบว่าควร Summarize หรือยัง
        if self.should_summarize(session_id):
            self._create_summary(session_id)
        
        return message
    
    def _create_summary(self, session_id: str) -> str:
        """สร้าง Summary ของบทสนทนาก่อนหน้า"""
        session = self.sessions[session_id]
        
        # รวมข้อความเก่าสำหรับ Summarize
        old_messages = session["messages"][:-5]  # เก็บ 5 ข้อความล่าสุดไว้
        old_text = "\n".join([
            f"{m['role']}: {m['content']}" 
            for m in old_messages
        ])
        
        # สร้าง Summary Prompt
        summary_prompt = (
            "สรุปบทสนทนาต่อไปนี้ให้กระชับ โดยระบุ: "
            "1) หัวข้อหลัก 2) ข้อมูลสำคัญที่ได้รับจากลูกค้า "
            "3) สถานะปัจจุบันของการสนทนา:\n\n"
            f"{old_text}"
        )
        
        # เรียก HolySheep API เพื่อสร้าง Summary
        # (ดูโค้ดในส่วน API Call ด้านล่าง)
        
        summary = f"[Summary of {len(old_messages)} messages about main topic]"
        session["summary"] = summary
        
        # ล้างข้อความเก่า
        session["messages"] = session["messages"][-5:]
        
        return summary
    
    def get_context_for_ai(self, session_id: str) -> str:
        """ดึง Context ที่พร้อมส่งให้ AI"""
        if session_id not in self.sessions:
            return ""
        
        return self._build_context_string(self.sessions[session_id])
    
    def _init_session(self, session_id: str, system_prompt: str = ""):
        """เริ่มต้น Session ใหม่"""
        self.sessions[session_id] = {
            "created_at": datetime.now().isoformat(),
            "system_prompt": system_prompt,
            "messages": [],
            "recent_messages": [],
            "summary": "",
            "metadata": {}
        }

ตัวอย่างการใช้งาน

manager = ConversationManager( api_key="YOUR_HOLYSHEEP_API_KEY", max_context_tokens=4000, summary_threshold=3000 )

เริ่ม Session ใหม่

session_id = "user_123_session_456" manager._init_session( session_id, system_prompt="คุณเป็นพนักงานบริการลูกค้าที่เป็นมิตร ช่วยเหลือด้วยใจ" )

เพิ่มข้อความ

manager.add_message(session_id, "user", "สินค้าสีแดงมีขนาดอะไรบ้างคะ?") manager.add_message(session_id, "assistant", "มีขนาด S, M, L, XL ค่ะ") print(f"Context