Retour au blog
Guide d’implémentation·25 mai 2026·7 min de lecture

Automatisation de centre d’appels IA en coréen — traiter pour un centième du coût avec Claude Haiku

Le domaine où les entreprises SaaS / e-commerce coréennes adoptent le plus rapidement l’IA : l’automatisation du support client. Classification avec Haiku, génération des réponses avec Sonnet, réduction des coûts de 90 % grâce au prompt caching. 10 wons par interaction, 280 000 wons par mois pour 1 000 interactions quotidiennes. Cohérence des niveaux de politesse coréens + conformité à la loi sur la protection des données personnelles.

Les entreprises SaaS et e-commerce coréennes adoptent le plus rapidement l’IA dans l’automatisation du support client. Lorsque tout est traité par des humains, le coût atteint plusieurs dizaines de millions de wons par mois ; en automatisant la classification et les brouillons de réponse avec Claude, il est possible de réduire les coûts d’au moins 90 %. Cet article présente du code réellement exploitable et ses coûts.

Structure

  1. Classer les tickets entrants avec Claude Haiku 4.5 (le moins cher)
  2. Rechercher des cas passés similaires (base de données vectorielle)
  3. Générer un brouillon de réponse avec Claude Sonnet 4.6
  4. Le conseiller vérifie puis envoie (ou l’envoi est automatique pour les tickets peu prioritaires)

Étape 1 : classification — Claude Haiku 4.5

Haiku 4.5 est très économique pour les tâches simples comme la classification. Aux tarifs Kunavo : entrée 0,40 $/1M, sortie 2,00 $/1M. Un ticket coréen de 200 caractères avec une sortie JSON de 50 tokens coûte environ 0,00004 $ par ticket (0,06 won).

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)

Étape 2 : recherche de cas similaires

Nous stockons les réponses historiques bien traitées sous forme d’embeddings avec pgvector, puis recherchons les 5 premières selon la similarité cosinus avec l’embedding du nouveau ticket. Kunavo ne fournit pas les embeddings ; cette seule étape appelle donc directement OpenAI et est facturée directement. Consultez la page tarifaire d’OpenAI pour le prix. Nous utilisons Kunavo uniquement pour la génération.

Étape 3 : génération du brouillon — 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

Les directives de l’entreprise (3 000 tokens) étant identiques à chaque appel, nous les mettons en cache avec cache_control. À partir du 2e appel, cette partie n’est facturée qu’à 10 % du tarif d’entrée.

Estimation du coût par ticket (après mise en cache) :

  • Classification (Haiku 4.5) : 0,00006 $
  • Embedding de recherche : 0,0000025 $
  • Génération de la réponse (Sonnet 4.6, cache atteint) : environ 1K tokens d’entrée + 500 tokens de sortie = 0,0042 $
  • Total : environ 0,004 $ (environ 6 wons)

Exemple de coût mensuel

  • 100 tickets par jour : 13 $ par mois (environ 18 000 wons)
  • 1 000 tickets par jour : 130 $ par mois (environ 180 000 wons)
  • 10 000 tickets par jour : 1 300 $ par mois (environ 1,8 million de wons)

Comparaison : 1 agent = environ 2,5 millions de KRW par mois, avec une limite de 100 demandes traitées par jour. Pour traiter 1 000 demandes par jour, il faut 10 agents = 25 millions de KRW par mois. L’automatisation par IA représente une différence de coût d’un facteur d’au moins 100.

Points à prendre en compte pour le contexte coréen

  • Cohérence des niveaux de politesse : indiquez à plusieurs reprises dans le prompt système d’utiliser un « registre formel et poli (~습니다) ». Pour détecter les variations, échantillonnez 100 réponses, comme lors de l’évaluation d’un entretien.
  • Consommation de tokens en coréen : le coréen consomme 1,5 à 2 fois plus de tokens que l’anglais. Cette estimation des coûts est basée sur le coréen.
  • Respect de la loi sur la protection des informations personnelles : n’insérez jamais les données personnelles des clients (nom, numéro de téléphone, adresse) dans le prompt système. Masquez-les avant de les transmettre au LLM.
  • Mode de paiement : vous pouvez recharger le solde Kunavo avec une carte internationale, Apple Pay ou Google Pay ; si la page de paiement s’affiche en won, avec KakaoPay, Naver Pay, PAYCO, Samsung Pay ou une carte nationale (Toss n’est pas pris en charge). Aucun certificat fiscal ni aucune facture n’est émis — les seuls justificatifs utilisables sont les détails de paiement du relevé de carte ou de paiement simplifié, ainsi que l’historique des recharges et de l’utilisation dans /app/billing

Checklist de mise en œuvre

  • Les 100 premières demandes sont vérifiées à 100 % par un agent → passez progressivement à l’automatisation après avoir confirmé une précision de 90 % ou plus.
  • Les catégories urgentes sont toujours vérifiées par un humain (le coût des erreurs est élevé).
  • Ajoutez chaque semaine les cas mal classés aux directives (apprentissage itératif).
  • Suivez l’utilisation mensuelle dans /app/usage et définissez la limite quotidienne dans /app/keys (pour éviter une envolée accidentelle de la consommation).

Pour commencer, inscrivez-vous gratuitement, puis rechargez votre compte à partir de $10 pour utiliser la facturation à l’usage. Consultez Récapitulatif des tarifs et du paiement de l’API Claude et la page des tarifs pour les prix par modèle et les modes de paiement, et consultez Comparaison des alternatives à OpenRouter pour comparer avec OpenRouter. Documentation complète : /docs/quickstart ; guide approfondi sur la mise en cache des prompts : prompt caching deep dive.