Quay lại blog
Hướng dẫn triển khai·25 tháng 5, 2026·Đọc 7 phút

Tự động hóa AI tổng đài tiếng Hàn — xử lý với chi phí bằng 1/100 bằng Claude Haiku

Lĩnh vực các công ty SaaS / thương mại điện tử Hàn Quốc áp dụng AI nhanh nhất: tự động hóa hỗ trợ khách hàng. Dùng Haiku để phân loại, Sonnet để tạo phản hồi, prompt caching để giảm 90% chi phí. 10 won mỗi trường hợp, 280.000 won mỗi tháng cho 1.000 trường hợp mỗi ngày. Bao gồm tính nhất quán kính ngữ tiếng Hàn + tuân thủ Luật bảo vệ thông tin cá nhân.

Các công ty SaaS / thương mại điện tử Hàn Quốc áp dụng AI nhanh nhất ở tự động hóa chăm sóc khách hàng. Nếu con người xử lý toàn bộ, chi phí có thể lên đến hàng chục triệu won mỗi tháng; nhưng khi tự động hóa phân loại + soạn thảo phản hồi bằng Claude, chi phí có thể giảm hơn 90%. Bài viết này công khai code và chi phí có thể vận hành thực tế.

Cấu trúc

  1. Phân loại ticket đến bằng Claude Haiku 4.5 (rẻ nhất)
  2. Tìm kiếm các trường hợp tương tự trong quá khứ (vector DB)
  3. Tạo bản nháp phản hồi bằng Claude Sonnet 4.6
  4. Nhân viên tư vấn xem xét rồi gửi (hoặc tự động gửi các trường hợp ưu tiên thấp)

Bước 1: Phân loại — Claude Haiku 4.5

Haiku 4.5 rất rẻ cho các tác vụ đơn giản như phân loại. Theo giá Kunavo, đầu vào $0,40/1M, đầu ra $2,00/1M. Một ticket tiếng Hàn 200 ký tự + JSON đầu ra 50 token có giá khoảng $0,00004 (0.06 won) mỗi ticket.

classify.py
import json
from openai import OpenAI

client = OpenAI(
    api_key="sk-kn-...",
    base_url="https://api.kunavo.com/v1",
)

# Claude는 json_schema로 지정한 response_format만 지킵니다 (json_object는 보장 안 됨).
TICKET = {
    "type": "object",
    "properties": {
        "category": {"type": "string", "enum": ["결제", "배송", "반품", "기술", "기타"]},
        "priority": {"type": "string", "enum": ["긴급", "보통", "낮음"]},
        "summary": {"type": "string"},
    },
    "required": ["category", "priority", "summary"],
    "additionalProperties": False,
}

def classify_ticket(text: str) -> dict:
    """들어온 고객 문의를 카테고리 + 우선순위로 분류."""
    resp = client.chat.completions.create(
        model="claude-haiku-4-5",  # 가장 저렴, 분류엔 충분
        messages=[
            {
                "role": "system",
                "content": (
                    "당신은 한국어 고객 문의 분류기입니다. "
                    "다음 JSON 형식으로만 응답하세요: "
                    '{"category": "결제|배송|반품|기술|기타", '
                    '"priority": "긴급|보통|낮음", '
                    '"summary": "한 문장 요약"}'
                ),
            },
            {"role": "user", "content": text},
        ],
        response_format={"type": "json_schema",
                         "json_schema": {"name": "ticket", "schema": TICKET}},
        max_tokens=200,
    )
    return json.loads(resp.choices[0].message.content)

Bước 2: Tìm kiếm trường hợp tương tự

Lưu các phản hồi quá khứ được xử lý tốt bằng embedding + pgvector, sau đó tìm 5 trường hợp hàng đầu theo độ tương đồng cosine với embedding của ticket mới. Kunavo không cung cấp embedding, nên chỉ bước này gọi trực tiếp OpenAI và bị tính phí trực tiếp —— kiểm tra đơn giá trên trang giá OpenAI. Chỉ dùng Kunavo cho bước tạo.

Bước 3: Tạo bản nháp phản hồi — Claude Sonnet 4.6 + prompt caching

reply.py
def generate_reply(ticket: dict, context: list[str]) -> str:
    """과거 유사 사례 5건을 참조해 응답 초안 생성."""
    references = "\n\n".join(context)
    resp = client.chat.completions.create(
        model="claude-sonnet-4-6",  # 응답 품질은 Sonnet
        messages=[
            {
                "role": "system",
                "content": [
                    {
                        "type": "text",
                        "text": COMPANY_GUIDELINES,  # 회사 톤 & 정책
                        "cache_control": {"type": "ephemeral"},
                    },
                ],
            },
            {
                "role": "user",
                "content": (
                    f"## 고객 문의\n{ticket['original_text']}\n\n"
                    f"## 분류\n{ticket['category']} / {ticket['priority']}\n\n"
                    f"## 참고할 과거 응답 (5건)\n{references}\n\n"
                    "## 작성 지침\n"
                    "1. 정중한 격식체 (~습니다)\n"
                    "2. 3문단 이내\n"
                    "3. 다음 단계가 무엇인지 명확히 안내\n"
                ),
            },
        ],
        max_tokens=600,
    )
    return resp.choices[0].message.content

Vì hướng dẫn công ty (3.000 token) luôn giống nhau, hãy cache bằng cache_control. Từ lượt gọi thứ 2, phần đó chỉ bị tính 10% giá đầu vào.

Ước tính chi phí mỗi ticket (sau khi áp dụng caching):

  • Phân loại (Haiku 4.5): $0,00006
  • Embedding tìm kiếm: $0,0000025
  • Tạo phản hồi (Sonnet 4.6, cache hit): khoảng 1K token đầu vào + 500 token đầu ra = $0,0042
  • Tổng: khoảng $0,004 (khoảng 6 won)

Ví dụ chi phí hằng tháng

  • 100 ticket/ngày: $13/tháng (khoảng 18.000 won)
  • 1.000 ticket/ngày: $130/tháng (khoảng 180.000 won)
  • 10.000 ticket/ngày: $1.300/tháng (khoảng 1.800.000 won)

So sánh: 1 nhân viên tư vấn = khoảng 2.500.000 won/tháng, giới hạn xử lý 100 ticket/ngày. Để xử lý 1.000 ticket/ngày cần 10 người = 25.000.000 won/tháng. Tự động hóa AI tạo ra chênh lệch chi phí ít nhất 100 lần.

Điểm cần lưu ý cho môi trường Hàn Quốc

  • Tính nhất quán của kính ngữ: Lặp lại rõ trong system prompt "văn phong trang trọng lịch sự (~습니다)". Kiểm thử biến thể bằng cách lấy mẫu 100 phản hồi như đánh giá phỏng vấn
  • Mức tiêu thụ token tiếng Hàn: Tiếng Hàn tiêu thụ nhiều hơn tiếng Anh 1.5-2 lần token. Ước tính chi phí trên dựa trên tiếng Hàn
  • Tuân thủ Luật bảo vệ thông tin cá nhân: Tuyệt đối không đưa PII của khách hàng (tên, số điện thoại, địa chỉ) vào system prompt. Che thông tin trước khi chuyển cho LLM
  • Phương thức thanh toán: Bạn có thể nạp số dư Kunavo bằng thẻ quốc tế, Apple Pay, Google Pay và nếu màn hình thanh toán hiển thị bằng won Hàn Quốc thì bằng KakaoPay, Naver Pay, PAYCO, Samsung Pay hoặc thẻ nội địa (không hỗ trợ Toss). Không xuất giấy chứng nhận thuế hay hóa đơn — bằng chứng duy nhất có thể sử dụng là thông tin thanh toán trong sao kê thẻ hoặc dịch vụ thanh toán nhanh và lịch sử nạp tiền, sử dụng tại /app/billing

Checklist triển khai

  • 100 ticket đầu tiên phải được nhân viên tư vấn xem xét 100% → sau khi xác nhận độ chính xác từ 90% trở lên, tự động hóa dần
  • Các danh mục khẩn cấp luôn phải được con người xem xét (chi phí lỗi cao)
  • Mỗi tuần thêm các trường hợp phân loại sai vào hướng dẫn (học lặp lại)
  • Theo dõi mức sử dụng hằng tháng tại /app/usage, đặt giới hạn hằng ngày tại /app/keys (ngăn tăng đột biến do nhầm lẫn)

Để bắt đầu, hãy đăng ký miễn phí, nạp từ $10 và sử dụng theo mức dùng. Kiểm tra đơn giá theo model và phương thức thanh toán tại tổng hợp giá và thanh toán Claude API và trang giá; xem so sánh các lựa chọn thay thế OpenRouter để đối chiếu với OpenRouter. Tài liệu đầy đủ: /docs/quickstart; hướng dẫn prompt caching: tìm hiểu chuyên sâu về prompt caching.