실시간 PIX 거래 위험 분석에 Claude를 사용하는 브라질 핀테크 — 전체 코드, 거래당 비용, 관찰된 지연 시간, LGPD 및 BACEN 고려 사항. 2026년 브라질 핀테크에서 제가 가장 자주 보는 사용 사례입니다.
이 방식이 잘 작동하는 이유
기존 PIX 위험 분석은 고정된 특성(금액, 빈도, 시간대)으로 학습한 ML 모델입니다. 작동하기는 하지만 미묘한 패턴에는 취약합니다. 예를 들어 "이 고객은 보통 형제에게 송금하지만 이런 금액은 보낸 적이 없고 IP는 다른 도시이다 — SIM 스와핑일 가능성이 높다"와 같은 상황입니다. Claude는 이러한 맥락적 추론을 자연스럽게 처리합니다.
코드
import json
from openai import OpenAI
client = OpenAI(
api_key="sk-kn-...",
base_url="https://api.kunavo.com/v1",
)
# No Claude, um response_format json_schema é garantido na resposta; json_object não.
ANALISE = {
"type": "object",
"properties": {
"risco": {"type": "string", "enum": ["baixo", "medio", "alto"]},
"sinais": {"type": "array", "items": {"type": "string"}},
"recomendacao": {"type": "string", "enum": ["aprovar", "revisar", "bloquear"]},
"explicacao_pt_BR": {"type": "string"},
},
"required": ["risco", "sinais", "recomendacao", "explicacao_pt_BR"],
"additionalProperties": False,
}
def analisar_transacao(transacao: dict, historico: list[dict]) -> dict:
"""Detecta sinais de fraude em uma transação PIX usando Claude."""
historico_txt = "\n".join(
f"- {t['data']}: R$ {t['valor']:.2f} para {t['destinatario']} ({t['categoria']})"
for t in historico[-20:]
)
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[
{
"role": "system",
"content": [
{
"type": "text",
"text": (
"Você é um analista de risco de pagamentos PIX no Brasil. "
"Analise a transação atual em relação ao histórico do "
"cliente e retorne JSON: "
'{"risco": "baixo|medio|alto", '
'"sinais": ["..."], '
'"recomendacao": "aprovar|revisar|bloquear", '
'"explicacao_pt_BR": "..."}'
),
"cache_control": {"type": "ephemeral"},
},
],
},
{
"role": "user",
"content": (
f"## Transação atual\n"
f"Data: {transacao['data']}\n"
f"Valor: R$ {transacao['valor']:.2f}\n"
f"Destinatário: {transacao['destinatario']}\n"
f"Origem (IP/dispositivo): {transacao['origem']}\n\n"
f"## Histórico recente (últimas 20 transações)\n{historico_txt}"
),
},
],
response_format={"type": "json_schema",
"json_schema": {"name": "analise", "schema": ANALISE}},
max_tokens=400,
)
return json.loads(resp.choices[0].message.content)분석당 비용: 약 $0.008(현재 환율로 약 R$ 0.04). 하루 100,000건의 PIX 거래를 처리하는 핀테크라면 월 약 R$ 4,000입니다. 건당 평균 R$ 2,000~5,000의 비용이 드는 사기를 방지하기 위한 용도로는 ROI가 매우 높습니다.
지연 시간
상파울루에서 Kunavo를 통해 Claude Sonnet 4.6을 사용하는 경우(AWS sa-east-1): P50 약 800ms, P99 약 2초입니다. 동기식 분석(PIX 결제 완료 전에 차단)에는 충분하며, BACEN은 타임아웃 전 약 10초를 제공합니다. 매우 높은 처리량에서는 비동기 방식을 고려하세요. 먼저 승인한 다음 분석하여 의심 사례를 수동으로 검토합니다.
출력에서 기대할 수 있는 것
- 낮은 위험: 일관된 패턴, 알려진 수취인, 평소 시간대 → 바로 승인
- 중간 위험: 1~2개의 신호(고액, 신규 수취인, 이례적인 시간대) → 차단하고 수동 검토 또는 강화된 2FA로 전송
- 높은 위험: 여러 신호(의심스러운 SIM 스와핑, 가짜 boleto 시도, 자금 운반책 패턴) → 차단하고 사기 대응팀에 즉시 알림
LGPD 및 BACEN — 핵심 사항
- LLM 전 비식별화: CPF, 전체 이름, 은행 계좌를 전송하기 전에 마스킹하세요. 모델에는 "[CLIENT_42]가 [DEST_198]에 R$ X를 송금했습니다"로 표시됩니다.
- 데이터로 학습하지 않음: Anthropic은 기본적으로 API 요청을 학습에 사용하지 않습니다. Enterprise에서는 Kunavo(sales@kunavo.com)를 통해 Zero Data Retention을 요청할 수 있습니다.
- 자동화된 의사 결정: LGPD는 고객에게 영향을 미치는 자동화된 결정에 이의를 제기할 수 있도록 요구합니다. UI에 "이의 제기" 버튼을 제공해야 하며, 모델이 반환하는 explicação_pt_BR은 응답의 좋은 출발점입니다.
- BACEN의 AI 관련 결의: 아직 PIX 위험 분석에서의 LLM 사용에 관한 특정 BACEN 규정은 없지만(2026년), 거버넌스 및 위험 관리에 관한 Circular 4.018과 3.978의 일반 원칙이 적용됩니다. 모델이 어떻게 결정하는지 명확히 문서화하세요.
금액별 티어링
모든 PIX 거래에 Claude Sonnet을 실행할 필요는 없습니다. 권장 패턴은 다음과 같습니다.
- PIX < R$ 100: LLM 분석 없이 바로 통과
- R$ 100 - R$ 1,000: Claude Haiku 4.5(10배 저렴), 신속 분석
- R$ 1.000 - R$ 10.000: Claude Sonnet 4.6(표준 분석)
- > R$ 10.000: Claude Opus 4.7(심층 분석) + 병행 수동 검토
결제 및 청구
PIX 또는 국제 결제가 가능한 카드를 사용해 결제하세요. 가격은 USD로 표시되며 결제 화면에는 헤알로 환산된 금액이 표시됩니다. 브라질에 있는 사람이 해외 기업에 결제하는 경우 두 결제 수단 모두 3.5%의 IOF가 적용됩니다. Kunavo는 NF-e를 발행하지 않습니다.
다음 단계
- 무료 가입으로 계정을 만드세요($10부터 충전, 종량제 = 프로토타입용 분석 약 1,250건).
- 백엔드에서 PII 비식별화를 구성하세요
- 실제 거래 1,000건(마스킹됨)을 shadow 모드로 실행하고 현재 ML 모델과 비교하세요
- 거짓 양성 및 거짓 음성을 피드백으로 사용해 system prompt를 반복 개선하세요
- CRO/컴플라이언스팀의 승인과 최신 LGPD 로그를 확보한 후에만 프로덕션으로 전환하세요
전체 문서: /docs/quickstart; 비용을 추가로 70% 줄이는 프롬프트 캐싱 가이드: prompt caching deep dive.