リアルタイムの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)。1日100,000件のPIX取引を処理するフィンテックなら、月約R$4,000です。1件あたり平均R$2,000~5,000の損失につながる不正を防ぐことを考えれば、ROIは非常に高くなります。
レイテンシ
サンパウロ(AWS sa-east-1)からKunavo経由でClaude Sonnet 4.6を呼び出す場合:P50約800ms、P99約2秒。同期分析(PIX決済前にブロック)には十分です。BACENはタイムアウトまで約10秒の猶予を設けています。非常に大きな取引量では、非同期処理を検討してください。まず承認し、後から分析して疑わしいケースを手動レビューします。
出力に期待できること
- 低リスク:一貫したパターン、既知の受取人、通常の時間帯 → そのまま承認
- 中リスク:1~2個の兆候(高額、新しい受取人、通常と異なる時間帯) → ブロックし、手動レビューまたは強化された2FAへ送信
- 高リスク:複数の兆候(疑わしいSIMスワップ、架空請求書の試行、マネーミュールのパターン) → ブロックし、不正検知担当へ即時アラート
LGPDとBACEN — 重要なポイント
- LLMの前に仮名化:CPF、氏名、銀行口座は送信前にマスキングしてください。モデルには「[CLIENT_42]が[DEST_198]へR$ Xを送金しました」と表示されます
- データで学習しない:AnthropicはデフォルトでAPIリクエストを学習に使用しません。Enterpriseでは、Kunavo(sales@kunavo.com)を通じてZero Data Retentionを依頼できます
- 自動意思決定:LGPDでは、顧客に影響を及ぼす自動意思決定に異議を申し立てられるようにする必要があります。UIには「異議を申し立てる」ボタンを用意し、モデルが返す説明_pt_BRは回答の出発点として適しています
- BACENのAIに関する決議:2026年現在、PIXのリスク管理におけるLLM利用についてBACENの個別規制はまだありませんが、ガバナンスとリスク管理に関する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建てで、決済画面にはレアル換算額が表示されます。支払う人がブラジルにいて企業が国外の場合、どちらの決済方法にもIOF 3.5%がかかります。KunavoはNF-eを発行しません。
次のステップ
- 無料登録でアカウントを作成($10からチャージ、従量課金でプロトタイプなら約1,250件の分析)
- バックエンドでPIIの仮名化を設定
- 実際の取引1,000件(マスキング済み)をshadowモードで実行し、現在のMLモデルと比較
- 偽陽性と偽陰性をフィードバックとしてsystem promptを反復改善
- CRO/コンプライアンスの承認を得て、LGPDログを整備してから本番へ移行
完全なドキュメント:/docs/quickstart;コストをさらに70%削減するprompt cachingガイド:prompt caching deep dive。