FraudTrace: AI 에이전트가 그래프에서 돈의 흐름을 추적하도록 학습시키기
요약
본 기사는 AI 에이전트가 그래프 데이터베이스를 활용하여 복잡한 금융 사기 패턴을 추적하는 방법을 설명합니다. 에이전트는 여러 '홉(hop)' 떨어진 관계를 따라 행동하고, 발견 내용을 개인 메모리 그래프에 저장하며, 모든 조사 과정을 투명하게 기록할 수 있습니다.
핵심 포인트
- 그래프 DB는 다중 홉 관계 추적에 최적화되어 SQL이나 벡터 검색보다 우수합니다.
- FalkorDB는 사기 조직 탐지 및 돈세탁 허브 식별을 위한 네이티브 그래프 알고리즘을 제공합니다.
- 개인 메모리 그래프를 통해 분석가는 발견 내용을 저장하고, 오탐 여부에 따라 위험 점수를 조정할 수 있습니다.
아이디어
분석가가 다음과 같이 질문합니다: "플래그가 지정된 거래 T-9001과 연결된 계정은 무엇인가요?" 그러면 에이전트는 다음을 수행합니다:
- 연결된 데이터에 기반하여 행동: 여러 '홉(hop)' 떨어진 관계(계정, 장치, IP 주소, 거래)를 추적하고 그래프 알고리즘을 실행합니다.
- 기억: 해당 분석가를 위해 발견한 내용을 개인 메모리 그래프에 저장하고 나중에 조사에서 재사용합니다.
- 자체 설명: 모든 결과는 증거 경로, 그 뒤에 숨겨진 Cypher 쿼리, 사용된 기억, 수행된 행동을 보여줍니다.
왜 그래프인가요?
"이 거래의 송신자와 장치를 공유하는 사람은 누구이며, 그들은 또 누구에게 돈을 보내나요?"는 다중 '홉(multi-hop)' 질문입니다. SQL에서는 사전에 계획해야 하는 조인(join) 체인입니다. 벡터 검색은 유사한 텍스트를 찾을 뿐, 공유된 장치는 찾아내지 못합니다. 그래프 데이터베이스에서는 에이전트가 관계를 직접 추적할 수 있습니다.
FalkorDB 사용 방법
FalkorDB는 상태(state)가 존재하는 유일한 곳입니다.
1. 사기 그래프: fraud_data에는 Person, Account, Device, IPAddress, Merchant 및 Transaction 노드가 포함되어 있습니다. 이 데이터는 5,000개의 계정과 50,000개의 거래로 구성된 합성(synthetic) 데이터이며, 정상적인 활동 속에 세 가지 숨겨진 패턴(사기 조직, 돈세탁 계정(mule accounts), 그리고 하나의 장치와 주소를 공유하는 합성 신원)이 심어져 있습니다. 정답 키는 그래프 외부에 보관되어 있어 에이전트가 스스로 패턴을 발견해야 합니다.
2. 네이티브 알고리즘: FalkorDB의 알고리즘은 동일한 유형의 노드 간 관계에서 가장 잘 작동하므로, 저는 그래프 내에 두 가지 관계 유형인 PAID(계정 간 돈의 흐름)와 LINKED(장치, IP 또는 주소를 공유하는 계정)를 파생했습니다. 그 위에 에이전트는 다음을 사용할 수 있습니다:
algo.WCC를 사용하여 클러스터(사기 조직/fraud rings) 찾기,algo.pageRank와algo.betweenness를 사용하여 의심 계정 및 돈세탁 허브(mule hubs) 순위 매기기,algo.SPpaths를 사용하여 두 계정 간의 최단 연결 경로 찾기,- 바운디드 패스 쿼리(bounded path queries)를 통해 자금 루프(money loops) 감지.
3. 그래프로서의 메모리. 모든 분석가에게는 Investigation, Finding, Entity, Feedback 노드를 가진 고유한 그래프 memory_<analyst>가 제공됩니다. 동일한 엔티티에 대한 새로운 발견은 이전 것을 대체하지만 기록은 유지합니다. 분석가가 특정 발견을 오탐(false positive)으로 표시하면, 이후 조사에서 해당 계정의 위험 점수(risk score)가 하락합니다. 분석가들은 서로의 메모리를 볼 수 없는데, 이는 백엔드가 분석가 신원을 주입하고 모델이 이를 선택하지 않기 때문입니다.
에이전트와 MCP
17개의 모든 도구는 MCP 서버를 통해 제공됩니다: 읽기 도구(프로필, 이웃, 공유 장치, 커뮤니티, 사이클, 최단 경로), 메모리 도구, 그리고 실행 도구(계정 플래그 지정, 거래 보류, 케이스 개설). 에이전트는 하드코딩된 흐름 없이 스스로 도구를 발견하고 선택합니다.
설명 가능성 및 안전성 유지
- 모든 도구는 실행한 Cypher와 건드렸던 서브그래프를 반환하므로, UI에서 증거 경로를 그리고 조사 단계를 하나하나 재현할 수 있습니다.
- 위험 점수는 모델의 의견이 아닙니다. 이는 그래프 신호(graph signals)와 분석가 피드백을 통해 계산되며, 백엔드가 모델이 제안하는 어떤 숫자든 덮어씁니다.
- 자유 형식 쿼리(Free-form queries)는 쓰기를 차단하고 시간 제한과 함께 읽기 전용으로 실행되는 가드(guard)를 통과합니다.
- 실행 도구(플래그 지정, 보류, 케이스 개설)는 그래프에서 검색된 증거 없이는 작동을 거부합니다.
제가 배운 것
- 알고리즘을 위해 그래프를 모양 잡기.
PAID와LINKED를 도출함으로써 FalkorDB의 알고리즘을 사용 가능하게 했고, 에이전트의 쿼리를 짧게 유지할 수 있었습니다. - LLM에게 숫자의 소유권을 주지 마세요. 모델 외부에서 점수(score)를 계산함으로써 결과를 안정적이고 설명하기 쉽게 만들었습니다.
- 무료 등급 모델은 주의가 필요합니다. 저는 [Groq의 무료 등급 / 사용한 모델]을 사용했기 때문에, 토큰 제한 내에 머물기 위해 도구 결과를 간결하게 다듬고 속도 제한(rate limit)에 대비해 재시도 로직을 추가했습니다.
- 격리(Isolation)는 프롬프트가 아닌 아키텍처에 있어야 합니다.
사용해 보기 (Try it)
- 코드: https://github.com/priyanshiy1312-ui/FraudTrace

- 데모 영상:
- 스택(Stack): FalkorDB, FastAPI, MCP Python SDK, 도구 호출 기능이 있는 LLM, force-directed graph 뷰를 사용한 React.
FalkorDB와 WeMakeDevs에 해커톤 기회를 주신 것에 감사드립니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기