Torna al blog
Guida all'implementazione·25 maggio 2026·7 min di lettura

Automazione con IA dei call center in lingua coreana — gestire con Claude Haiku a un centesimo del costo

L'area in cui le aziende SaaS / e-commerce coreane adottano più rapidamente l'IA: l'automazione dell'assistenza clienti. Classificazione con Haiku, generazione delle risposte con Sonnet e riduzione dei costi del 90% grazie al prompt caching. 10 won per caso, 280.000 won al mese per 1.000 casi al giorno. Include coerenza delle forme onorifiche coreane e conformità alla legge sulla protezione delle informazioni personali.

Per le aziende SaaS / e-commerce coreane, l'adozione più rapida dell'AI riguarda l'automazione dell'assistenza clienti. Se tutto viene gestito da persone, il costo è di decine di milioni di won al mese; automatizzando classificazione e bozze di risposta con Claude, è possibile ridurlo di oltre il 90%. Questo articolo presenta codice e costi realmente utilizzabili in produzione.

Struttura

  1. Classificare i ticket in arrivo con Claude Haiku 4.5 (il più economico)
  2. Cercare casi passati simili (database vettoriale)
  3. Generare una bozza di risposta con Claude Sonnet 4.6
  4. L'operatore esamina e invia (oppure i casi a bassa priorità vengono inviati automaticamente)

Fase 1: classificazione — Claude Haiku 4.5

Haiku 4.5 è molto economico per attività semplici come la classificazione. Ai prezzi Kunavo: input $0,40/1M, output $2,00/1M. Un ticket coreano di 200 caratteri più un output JSON di 50 token costano circa $0,00004 (0.06 won) per 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)

Fase 2: ricerca di casi simili

Salva le risposte passate gestite correttamente tramite embedding + pgvector e cerca i 5 risultati più simili usando la similarità coseno con l'embedding del nuovo ticket. Kunavo non fornisce embedding, quindi solo questa fase viene chiamata direttamente su OpenAI e fatturata direttamente. Verifica il prezzo nella pagina dei prezzi OpenAI. Per la generazione utilizza Kunavo.

Fase 3: generazione della bozza di risposta — 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

Le linee guida aziendali (3.000 token) sono sempre uguali, quindi vengono memorizzate nella cache con cache_control. Dalla seconda chiamata in poi, quella parte viene addebitata solo al 10% del prezzo di input.

Stima del costo per ticket (dopo l'applicazione della cache):

  • Classificazione (Haiku 4.5): $0,00006
  • Embedding per la ricerca: $0,0000025
  • Generazione della risposta (Sonnet 4.6, cache hit): circa 1K token di input + 500 token di output = $0,0042
  • Totale: circa $0,004 (circa 6 won)

Esempio di costo mensile

  • 100 ticket al giorno: $13 al mese (circa 18.000 won)
  • 1.000 ticket al giorno: $130 al mese (circa 180.000 won)
  • 10.000 ticket al giorno: $1.300 al mese (circa 1.800.000 won)

Confronto: 1 operatore = circa 2.500.000 won al mese, con un limite di 100 ticket al giorno. Per gestire 1.000 ticket al giorno servono 10 persone = 25.000.000 won al mese. L'automazione con IA crea una differenza di costo di almeno 100 volte.

Considerazioni specifiche per l'ambiente coreano

  • Coerenza del registro onorifico: specifica ripetutamente nel prompt di sistema "stile formale cortese (~습니다)". Per le varianti, campiona 100 risposte e valuta come in un colloquio
  • Consumo di token in coreano: il coreano consuma 1.5-2 volte più token rispetto all'inglese. Le stime dei costi sopra sono basate sul coreano
  • Conformità alla legge sulla protezione dei dati personali: non inserire mai nel prompt di sistema i dati PII dei clienti (nome, numero di telefono, indirizzo). Trasmettili al modello LLM dopo averli mascherati
  • Metodo di pagamento: potete ricaricare il saldo Kunavo con carte internazionali, Apple Pay, Google Pay e, se il checkout mostra gli importi in won, KakaoPay, Naver Pay, PAYCO, Samsung Pay e carte nazionali (Toss non è supportato). Non emettiamo certificati fiscali né fatture — come prova sono disponibili solo i dettagli del pagamento nell'estratto conto della carta o del pagamento semplificato e i registri delle ricariche e dell'utilizzo in /app/billing.

Checklist di implementazione

  • Per i primi 100 ticket, revisione al 100% da parte degli operatori → automatizzazione graduale dopo aver verificato una precisione del 90%+
  • Le categorie urgenti devono essere sempre revisionate da una persona (il costo degli errori è elevato)
  • Aggiungi ogni settimana i casi classificati erroneamente alle linee guida (apprendimento iterativo)
  • Monitora l'utilizzo mensile in /app/usage e imposta il limite giornaliero in /app/keys (per evitare picchi accidentali)

Per iniziare, registrati gratuitamente, ricarica a partire da $10 e usa il servizio a consumo. Consulta Prezzi e pagamenti dell'API Claude e la pagina dei prezzi per le tariffe per modello e i metodi di pagamento; per il confronto con OpenRouter, leggi Confronto delle alternative a OpenRouter. Documentazione completa: /docs/quickstart; guida al prompt caching: approfondimento sul prompt caching.