TL;DR
DiDi International Business Group은 Spanish와 Portuguese 상담 데이터를 대상으로 하던 불투명한 외부 QA 솔루션을 Amazon Bedrock 기반의 자체 시스템으로 교체했습니다. 시스템은 대화 데이터를 공통 형식으로 정규화한 뒤 의도 검증, 규정 준수 평가, Voice of Customer 분석이라는 세 파이프라인으로 분기하며, 각 호출에서 모델이 보는 정보의 범위를 정밀하게 통제합니다. 의도 검증 정확도는 38%에서 86%로 높아졌고 규정 준수 점수 정확도는 90%를 넘었으며, VOC 분석은 수작업으로 몇 시간이 걸리던 요약을 몇 분으로 줄였습니다. 핵심 구현은 현재 라벨만 먼저 검증한 뒤 실패할 때만 전체 분류 체계를 제공하는 정보 격리, 외부 설정을 조합하는 동적 프롬프트, 개별 추출·이슈 군집화·보고서 생성으로 나눈 다단계 처리입니다.
섹션별 상세
import boto3
bedrock = boto3.client("bedrock-runtime", region_name="us-east-1")
MODEL_ID = ""
def build_output_schema(num_criteria):
"""Derive the JSON schema from the checklist size — adding a new compliance item requires only a config change, not a code change."""
criteria = {
f"criteria_{i}": {
"type": "object",
"properties": {
"reasoning": {"type": "string"},
"score": {"type": "integer"}, # 0 = pass, 1 = fail
},
"required": ["reasoning", "score"],
}
for i in range(1, num_criteria + 1)
}
return {
"type": "object",
"properties": {"scoring": {"type": "object", "properties": criteria}},
"required": ["scoring"],
}
def assemble_prompt(criteria_config, language, business_line):
"""Dynamic assembly: one template covers every language x business-line combination. Context lives in external config, injected at call time."""
criteria_block = "
".join(
f"CRITERIA_{i}:
- {c['parameter']}
- PASS: {c['pass']}
- FAIL: {c['fail']}"
for i, c in enumerate(criteria_config, 1)
)
return (
f"You are a customer service quality auditor for DiDi.
"
f"LANGUAGE CONTEXT: the conversation is in {language}.
"
f"BUSINESS CONTEXT: this is a {business_line} service interaction.
"
f"SCORING CRITERIA TO EVALUATE:
{criteria_block}"
)
def evaluate(transcript, criteria_config, language, business_line):
system_prompt = assemble_prompt(criteria_config, language, business_line)
schema = build_output_schema(len(criteria_config))
response = bedrock.converse(
modelId=MODEL_ID,
system=[{"text": system_prompt}],
messages=[{"role": "user", "content": [{"text": transcript}]}],
# Tool Use with a forced tool choice constrains the model to emit
# schema-valid JSON — every score carries its own reasoning chain.
toolConfig={
"tools": [{
"toolSpec": {
"name": "output_result",
"description": "Output the structured evaluation result",
"inputSchema": {"json": schema},
}
}],
"toolChoice": {"tool": {"name": "output_result"}},
},
inferenceConfig={"maxTokens": 8192, "temperature": 0.0},
)
for block in response["output"]["message"]["content"]:
if "toolUse" in block:
return block["toolUse"]["input"]외부 설정을 조합해 언어와 사업 부문에 맞는 평가 프롬프트를 만들고, Amazon Bedrock Tool Use로 근거가 포함된 구조화 JSON을 반환받습니다.
이미지 분석

첫 번째 이미지는 phone 녹취가 STT를 거치고 live chat 데이터와 함께 채널별 preprocessing을 통과한 뒤 Unified Schema로 합쳐지는 흐름을 보여줍니다. 이후 Intent는 verify-then-classify와 Other 분석을, Evaluation은 compliance scoring과 BI insights를, VOC는 티켓별 추출·semantic clustering·report generation을 수행하며 Amazon Bedrock을 통해 구조화된 결과를 만듭니다.
Live chat와 phone 데이터가 전처리와 공통 schema 변환을 거쳐 Intent, Evaluation, VOC 세 파이프라인으로 분기되는 구조도입니다.

두 번째 이미지는 External Configs의 Language Context, Business Line, Evaluation Criteria와 Conversation이 Dynamic Prompt Assembly로 합쳐지는 과정을 나타냅니다. Amazon Bedrock의 Converse API와 Tool Use가 QA Compliance와 BI Insights를 reasoning trace와 함께 반환하고, compliance 결과는 규칙 기반 Programmatic Post-Validation을 추가로 통과합니다.
언어, 사업 부문, 평가 기준, 전처리된 대화를 동적 프롬프트로 조합해 Amazon Bedrock의 구조화된 평가 결과로 변환하는 파이프라인입니다.
용어 해설
- Context Management
- — LLM 호출마다 모델에 전달하는 정보의 범위와 순서를 통제하는 방식입니다. 이 사례에서는 현재 분류만 검증할 때 전체 분류 체계를 숨기고, 오분류가 확인된 뒤에만 전체 체계를 제공해 불필요한 재분류를 줄였습니다. 프롬프트 문구보다 입력 정보의 격리가 정확도에 더 큰 영향을 주는 핵심 원리로 활용됐습니다.
- Tool Use
- — LLM이 정해진 도구의 입력 스키마에 맞춰 구조화된 결과를 반환하도록 제한하는 기능입니다. DiDi는 Amazon Bedrock의 Tool Use와 강제된 tool choice를 사용해 각 평가 결과를 schema-valid JSON으로 받았습니다. 각 점수에 판정 근거를 함께 저장할 수 있어 후속 검증과 사람의 감사가 쉬워졌습니다.
- Embedding Model
- — 텍스트를 의미를 반영한 벡터로 변환해 문장이나 표현 사이의 유사도를 계산하는 모델입니다. VOC 파이프라인은 추출된 이슈 유형을 벡터화하고 의미적으로 가까운 표현을 묶어 동의어성 표현을 통합했습니다. 이 단계는 생성형 LLM 대신 임베딩 거리와 빈도 순위를 사용해 결과의 재현성을 높였습니다.
- 프로그램 기반 사후 검증(Programmatic Post-Validation)
- — LLM의 판정을 원문 대화와 결정론적 규칙으로 다시 확인하는 처리 단계입니다. DiDi는 상담원 메시지 안의 철자 오류와 응답 대기 시간처럼 코드로 계산할 수 있는 사실을 별도로 검증하거나 산출했습니다. 모델이 자체적으로 센 오류 수나 추정한 수치만으로 최종 점수를 확정하지 않도록 만든 안전장치입니다.
기술
- Amazon Bedrock
- Amazon VPC
- AWS PrivateLink
- AWS Identity and Access Management (IAM)
- Amazon Bedrock Guardrails
- Amazon Bedrock Tool Use
- speech-to-text
- embedding model
- Amazon Bedrock Converse API
- Python
활용 사례
- 다국어 고객센터 QA
- 상담 의도 및 contact reason 검증
- 규정 준수 점수 산출
- 상담원 서비스 품질 개선
- Voice of Customer 트렌드 탐지
- 대규모 상담 데이터의 이슈 군집화
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.