반응형

OpenAI의 Agents SDK, MCP, Ollama 및 Neo4j로 구축

금융 서비스 업계에서 KYC(고객 파악)와 AML(자금 세탁 방지)은 불법 행위에 맞서는 중요한 방어선이에요. KYC는 고객, 계정, 거래, IP 주소, 장치, 위치 등 모든 요소가 거대한 관계 네트워크 안에서 서로 연결된 **Node**로 표현되는 **Graph** 문제로 자연스럽게 모델링할 수 있죠. 수사관들은 사기, 제재 위반, 돈세탁 조직을 밝혀내기 위해 겉으로는 연관 없어 보이는 점들을 연결하며 이 복잡한 연결망을 조사하게 돼요.

이것은 **Knowledge Graph** 기반 AI의 훌륭한 활용 사례랍니다! (GraphRAG) 복잡하게 얽힌 연결망은 일반적인 문서 기반 **RAG**(보통 **Vector Embedding** 유사성 검색 및 순위 재지정 기술 기반) 이상의 기능을 필요로 하거든요.

폭로

저는 Neo4j의 AI 수석 제품 관리자이고, 이 글에서 소개된 **Graph Database**를 만들고 있어요. 코드 스니펫은 Neo4j에 초점을 맞추고 있지만, 모든 **Graph Database**에 동일한 패턴을 적용할 수 있다는 점! 제 주요 목표는 **GraphRAG** 에이전트 구축에 대한 실용적인 지침을 AI/ML 커뮤니티와 공유하는 것이에요. 모든 코드는 연결된 저장소에 오픈 소스로 공개되어 있으니, 자유롭게 탐색하고 실험하고, 조정해 보세요.

GraphRAG KYC 에이전트

이 블로그 포스팅은 AI 엔지니어와 개발자를 위해 초기 KYC 에이전트 프로토타입을 구축하는 방법에 대한 실습 가이드를 제공해요. OpenAI Agents SDK를 사용해서요! 잠재적인 사기 패턴을 발견하고 조사할 수 있는 도구 모음을 에이전트에 장착하는 방법을 한번 살펴볼까요?

아래 다이어그램은 KYC 조사 중에 제기된 질문에 답변하기 위한 에이전트 처리 파이프라인을 보여주고 있어요.

Image by the Author, generated with Napkin AI
다음을 사용하여 생성된 작성자의 이미지냅킨 AI

주요 구성 요소를 자세히 살펴볼게요.

  • KYC 에이전트: OpenAI Agents SDK를 활용하고 사용자의 **Query**와 대화 기록을 기반으로 사용할 도구를 결정하는 "브레인" 역할을 해요. MCP 호스트와 MCP 클라이언트 역할을 수행하는 Neo4j MCP 암호화 서버이기도 하죠. 가장 중요한 점은 대화 기록을 유지하면서 사용자로부터 질문을 받고 에이전트를 호출하고 결과를 처리하는 매우 간단한 루프를 실행한다는 거예요.
  • 도구 세트: 에이전트가 사용할 수 있는 도구 모음이에요.
    • GraphRAG 도구: 특정 **Cypher** **Query**를 래핑하는 **Graph** 데이터 검색 기능이죠. 예를 들어:
      • 고객 세부 정보 가져오기: 고객 ID가 주어지면 계정 및 최근 거래 내역을 포함하여 고객에 대한 정보를 검색하는 **Graph** 검색 도구에요.
    • Neo4j MCP 서버: Neo4j MCP 암호화 서버는 Neo4j **Database**와 상호 작용하는 도구를 제공해요. 세 가지 필수 도구를 제공하죠.
      1. **Database**에서 **Schema** 가져오기
      2. 실행 READ **Database**에 대한 **Cypher** **Query**
      3. 실행 WRITE **Database**에 대한 **Cypher** **Query**
    • Text-to-Cypher 도구: Ollama를 통해 로컬에서 실행되는 **Fine-tuning**된 Gemma3-4B 모델을 래핑하는 Python 함수에요. 이 도구는 자연어 질문을 **Cypher** **Graph** **Query**로 변환해 준답니다.
    • 메모리 생성 도구: 이를 통해 조사자는 조사 결과를 **Knowledge Graph**에 직접 문서화할 수 있어요. **Knowledge Graph**에 (조사의) "메모리"를 생성하고 이를 모든 관련 고객, 거래 및 계정에 연결하는 거죠. 시간이 지남에 따라 이는 향후 조사를 위한 귀중한 지식 기반을 구축하는 데 도움이 될 거예요.
  • KYC Knowledge Graph: 8,000명의 가상 고객, 계정, 거래, 장치 및 IP 주소에 대한 **Knowledge Graph**를 저장하는 Neo4j **Database**에요. 에이전트의 장기 기억 저장소로도 사용된답니다.

지금 바로 에이전트를 사용해 보고 싶으신가요? 프로젝트 저장소에 대한 지침을 따라 해보세요. 나중에 돌아와서 에이전트가 어떻게 구축되었는지 읽어볼 수도 있고요.

KYC에 GraphRAG를 사용해야 하는 이유

기존의 Retrieval-Augmented Generation (RAG) 시스템은 여러 조각으로 나뉜 대규모 텍스트에서 정보를 찾는 데 집중하는 경향이 있어요. 하지만 KYC 조사에서는 계정에 연결된 고객, 거래를 통해 연결된 계정, IP 주소 및 장치에 연결된 거래, 개인 및 고용주 주소와 연결된 고객 등, 서로 복잡하게 연결된 데이터 속에서 흥미로운 패턴을 찾아내는 게 중요하죠.

정교한 사기 패턴을 발견하려면 이러한 관계를 이해하는 것이 핵심이에요. 예를 들어:

  • "이 고객이 관심 목록에 있는 누군가와 IP 주소를 공유하나요?"
  • "이 거래가 자금 출처를 숨기기 위해 설계된 순환 결제 루프의 일부인가요?"
  • "새로 등록된 동일 회사에서 일하는 사람이 여러 개의 새 계정을 개설하고 있나요?"

이런 질문들은 결국 연결성에 대한 질문이에요. Knowledge Graph는 고객, 계정, 트랜잭션, 장치가 node이고, 이들 간의 관계가 명시적인 edge로 표현되는 데이터 구조라서 이런 작업에 아주 적합하답니다. GraphRAG (데이터 검색) 도구를 사용하면 비정상적인 활동 패턴을 쉽게 식별할 수 있어요.

Image by the Author generated with Napkin AI
냅킨 AI로 생성된 이미지

합성 KYC 데이터 세트

이 블로그에서는 8,000명의 가상 고객과 그들의 계정, 거래, 등록된 주소, 장치, IP 주소로 구성된 합성 데이터 세트를 사용해볼 거예요.

아래 이미지는 데이터 세트를 Neo4j에 로드한 후 데이터베이스의 "스키마"를 보여주고 있어요. Neo4j에서 스키마는 데이터베이스에 저장된 entity 및 relationship의 유형을 설명하죠. 여기서는 주요 entity가 고객, 주소, 계정, 장치, IP 주소, 거래이고, 이들 간의 주요 relationship은 그림과 같아요.

Image by the Author

데이터 세트에는 몇 가지 예외적인 케이스들이 포함되어 있어요. 일부 고객은 의심스러운 거래 링에 연루되어 있고, 몇몇 고립된 장치와 IP 주소 (어떤 고객이나 계정에도 연결되지 않은)도 있죠. 또, 여러 고객이 공유하는 주소도 일부 존재해요. 데이터 세트 생성 스크립트를 통해 데이터 세트를 자유롭게 탐색하고, 필요에 따라 수정해 보세요.

OpenAI Agents SDK를 사용하는 기본 에이전트

이제 KYC 에이전트의 핵심 부분을 한번 살펴볼까요?

구현은 대부분 kyc_agent.py에 담겨 있어요. 에이전트 실행 방법에 대한 전체 소스 코드와 단계별 지침은 에서 확인할 수 있답니다.

먼저, 적절한 지침을 사용하여 에이전트의 핵심 ID를 정의해 볼게요.

import os
from agents import Agent, Runner, function_tool
# ... 기타 수입품

# 에이전트에 대한 지침을 정의합니다.
instructions = """당신은 Knowledge Graph에 액세스할 수 있는 KYC 분석가입니다. 도구를 사용하여 고객, 계정 및 의심스러운 패턴에 대한 질문에 답하세요.
당신은 또한 Neo4j 전문가이며 Neo4j MCP 서버를 사용하여 그래프를 쿼리할 수 있습니다.
GraphRAG 도구로 답변할 수 없는 KYC 데이터베이스 관련 질문이 있는 경우,
- Neo4j MCP 서버를 사용하여 그래프의 스키마를 가져옵니다(필요한 경우)
- generate_cypher 도구를 사용하여 질문 및 스키마에서 Cypher 쿼리를 생성합니다.
- 질문에 답하기 위해 Neo4j MCP 서버를 사용하여 그래프를 쿼리합니다.
"""코드 언어: PHP (php)

이 지침은 정말 중요해요! 에이전트의 페르소나를 설정하고, 특히 사전 정의된 도구가 사용자의 요청에 맞지 않는 경우 문제에 접근하는 방법에 대한 전략을 제시하죠.

이제 최소한의 에이전트부터 시작해볼게요. 도구는 없고, 지침만 제공되는 거죠.

# 에이전트 정의, 나중에 도구를 추가하겠습니다.
kyc_agent = Agent(
   name="KYC 분석가",
   instructions=instructions,
   tools=[...],      # 우리는 이 목록을 채울 것입니다
   mcp_servers=[...] # 그리고 이건
)
코드 언어: PHP (php)

KYC 에이전트에 몇 가지 도구를 추가해볼까요?

에이전트의 성능은 어떤 도구를 사용하느냐에 따라 달라지죠. KYC 분석가에게 제공될 5가지 도구를 한번 살펴볼게요.

도구 1 & 2: 미리 정의된 Cypher Queries

일반적이면서 중요한 쿼리의 경우, Python 함수로 래핑된 최적화된 Cypher 쿼리를 사용하는 게 가장 좋아요. OpenAI Agent SDK의 @function_tool 데코레이터를 사용하면 에이전트에서 바로 이런 함수들을 사용할 수 있게 된답니다.

도구 1: find_customer_rings

이 도구는 자금 세탁, 특히 자금의 출처를 숨기기 위해 여러 계좌를 거치는 순환 거래 패턴을 탐지하도록 설계되었어요.

KYC 그래프에서는, 시작점 또는 그 근처로 돌아오는 주기 또는 경로를 찾는 것으로 표현할 수 있죠. 이런 패턴을 감지하려면 가변 길이 경로를 사용해서 특정 홉 거리까지 연결을 탐색하는 복잡한 그래프 순회 알고리즘이 필요해요.

아래 코드 조각은 find_customer_rings 기능인데, KYC 데이터베이스에 대해 Cypher 쿼리를 실행하고 최대 10개의 잠재 고객 링을 반환해줘요. 각 링에 대해 해당 링과 관련된 고객의 계정 및 거래 정보를 얻을 수 있답니다.

@function_tool
def find_customer_rings(max_number_rings: int = 10, customer_in_watchlist: bool = True, ...):
   """
   고위험 고객과 관련된 순환 거래 패턴(최대 6홉)을 탐지합니다.
   지정된 일치 고객이 계정을 소유한 계정 주기를 찾습니다.
   위험 기준(관심 목록 및/또는 PEP 상태).
   인수:
       max_number_rings: 반환할 최대 링(기본값: 10)
       customer_in_watchlist: 관심 목록에 있는 고객에 대한 필터(기본값: True)
       customer_is_pep: PEP 고객을 위한 필터(기본값: False)
       customer_id: 집중할 특정 고객(구현되지 않음)
   반품:
       dict: 링 경로 및 관련된 고위험 고객을 포함합니다.
   """
   logger.info(f"도구: FIND_CUSTOMER_RINGS")
   with driver.session() as session:
       result = session.run(
           f"""
           일치 p=(a:계정)-[:FROM|TO*6]->(a:계정)
           WITH p, [n IN 노드(p) WHERE n:계정] AS 계정
           계정 AS 계정 해제
           MATCH(고객:고객)-[r:OWNS]->(계정)
           cust.on_watchlist = $customer_in_watchlist 위치
           // ... 결과를 수집하기 위한 추가 Cypher ...
           """,
           max_number_rings=max_number_rings,
           customer_in_watchlist=customer_in_watchlist,
       )
       # ... 결과를 처리하고 반환하는 Python 코드 ...
코드 언어: PHP (php)

여기서 중요한 점은, doc string이 OpenAI Agents SDK에서 도구 설명으로 자동으로 사용된다는 거예요. 훌륭한 Python 함수 문서는 정말 유용하죠!

도구 2: get_customer_and_accounts

계정 및 가장 최근 거래를 포함해서 고객 프로필을 검색하는 간단하면서도 필수적인 도구에요. 모든 조사의 기본이라고 할 수 있죠. 코드는 customer ID를 가져와서 간단한 Cypher 쿼리를 래핑하는 함수인데, 이전 도구와 비슷해요.

다시 한번, 함수는 @function_tool 로 데코레이팅되어서 에이전트가 사용할 수 있도록 만들어줍니다.

이 Python으로 래핑된 Cypher 쿼리는 다음과 같아요.

result = session.run(
           """
           MATCH (c:고객 {id: $customer_id})-[o:OWNS]->(a:계정)
           WITH c, a
           CALL {
               MATCH (a)-[b:TO|FROM]->(t:트랜잭션)
               ORDER BY t.timestamp DESC
               LIMIT $tx_limit
               RETURN collect(t) AS 트랜잭션
           }
           RETURN c AS 고객, a AS 계정, 거래
           """,
           customer_id=input.customer_id
       )
코드 언어: PHP (php)

이 도구 디자인에서 눈여겨볼 점은 Pydantic을 사용해서 함수의 출력을 지정한다는 거예요. OpenAI Agents SDK는 함수에서 반환된 Pydantic 모델을 사용해서 출력 매개변수에 대한 텍스트 설명을 자동으로 생성해준답니다.

자세히 살펴보면 함수는 다음을 반환해요.

return CustomerAccountsOutput(          
 customer=CustomerModel(**customer),
 accounts=[AccountModel(**a) for a in accounts],
)
코드 언어: 자바스크립트 (자바스크립트)

CustomerModelAccountModel은 각 고객에 대해 반환된 각 속성, 해당 계정 및 최근 거래 목록을 포함하고 있어요. 이 정의는 스키마.py에서 확인할 수 있습니다.

도구 3 및 4: Neo4j MCP 서버와 Text-to-Cypher의 만남

여기서부터 KYC 에이전트가 더욱 흥미로운 능력을 발휘하게 돼요.

다목적 AI 에이전트를 구축할 때 중요한 과제는 미리 정의된 정적 기능을 넘어서 복잡한 데이터 소스와 동적으로 상호 작용할 수 있도록 하는 것이죠. 에이전트는 범용 쿼리를 수행할 수 있는 능력이 필요한데, 새로운 통찰력을 얻으려면 별도의 작업 없이 자발적인 데이터 탐색이 필요할 수 있어요. 선험적으로 가능한 모든 작업에 대한 Python 래퍼는 필요 없죠.

이 섹션에서는 이 문제를 해결하기 위한 일반적인 아키텍처 패턴을 살펴볼 거예요. Natural Language 질문을 Cypher로 변환하는 도구와 동적 쿼리 실행을 허용하는 다른 도구를 결합하는 거죠.

이 메커니즘은 Neo4j MCP 서버를 사용해서 동적 그래프 쿼리 실행을 노출하고, Google의 Gemma3-4B Fine-tuning 모델을 사용해서 Text-to-Cypher 번역을 하는 방식으로 보여드릴게요.

도구 3: Neo4j MCP 서버 도구 세트 추가

강력한 에이전트가 Knowledge Graph를 효과적으로 사용하려면 그래프의 구조를 이해하고 Cypher 쿼리를 실행할 수 있어야 해요. 이러한 기능을 통해 에이전트는 데이터를 검사하고 동적인 임시 쿼리를 실행할 수 있죠.

MCP Neo4j Cypher 서버는 다음과 같은 기본 도구를 제공해요: get-neo4j-schema (그래프 스키마를 동적으로 검색하기 위해), read-neo4j-cypher (임의 읽기 쿼리 실행용), write-neo4j-cypher (쿼리 생성, 업데이트, 삭제용).

다행히 OpenAI Agents SDK는 MCP를 지원해요. 아래 코드 조각은 Neo4j MCP 서버를 KYC 에이전트에 추가하는 것이 얼마나 쉬운지 보여준답니다.

# 도구 3: Neo4j MCP 서버 설정
neo4j_mcp_server = MCPServerStdio(
   params={
       "명령": "uvx",
       "인수": ["mcp-neo4j-cypher@0.2.1"],
       "환경": {
           "NEO4J_URI": NEO4J_URI,
           "NEO4J_USERNAME": NEO4J_USER,
           "NEO4J_PASSWORD": NEO4J_PASSWORD,
           "NEO4J_DATABASE": NEO4J_DATABASE,
       },
   },
   cache_tools_list=True,
   name="Neo4j MCP 서버",
)
코드 언어: PHP (php)

더 자세히 알고 싶다면 OpenAI Agents SDK에서 MCP가 어떻게 지원되는지 한번 살펴보세요.

도구 4: 텍스트를 Cypher로 변환하는 도구

자연어를 강력한 그래프 `Query`로 동적으로 변환하는 기능은 `Schema` 인식 `Query` 생성을 위해 Fine-tuning된 전문 LLM에 크게 의존하는 경우가 많아요.

Hugging Face에서 공개 가중치로 제공되는 Text-to-Cypher 모델을 사용할 수 있어요. 바로 neo4j/text-to-cypher-Gemma-3-4B-Instruct-2025.04.0 모델인데요. 이 모델은 사용자 질문과 `Schema`로부터 정확한 Cypher `Query`를 생성하도록 특별히 Fine-tuning되었답니다.

이 모델을 로컬 장치에서 실행하고 싶다면 Ollama를 사용하면 돼요. llama.cpp를 사용해서 Hugging Face 모델을 Ollama에서 실행하는 데 필요한 GGUF 형식으로 변환하는 건 비교적 간단하거든요. convert-hf-to-GGUF Python 스크립트를 사용해서 Gemma3-4B Fine-tuning 모델의 GGUF 버전을 생성하고 Ollama에 업로드하면 돼요.

Ollama 사용자라면 다음 명령어를 통해 이 모델을 로컬 장치에 다운로드할 수 있어요.

ollama pull ed-neo4j/t2c-gemma3-4b-it-q8_0-35k

만약 사용자가 사전 정의된 도구와 일치하지 않는 질문을 하면 어떻게 될까요?

예를 들어 "CUST_00001 고객의 주소를 찾아서 다른 고객과 공유되는지 확인해 줘." 같은 질문이요.

이런 경우, 에이전트는 실패하는 대신 즉시 Cypher `Query`를 생성할 수 있게 되는 거죠!

@function_tool
async def generate_cypher(request: GenerateCypherRequest) -> str:
   """
   로컬로 Fine-tuning된 text2cypher Ollama 모델을 사용해서 자연어에서 Cypher Query를 생성해요.
   """
   USER_INSTRUCTION = """...""" # 자세한 프롬프트 지침

   user_message = USER_INSTRUCTION.format(
       schema=request.database_schema,
       question=request.question
   )
   # text2cypher 모델을 사용해서 Cypher Query를 생성합니다.
   model: str = "ed-neo4j/t2c-gemma3-4b-it-q8_0-35k"
   response = await chat(
       model=model,
       messages=[{"역할": "사용자", "콘텐츠": user_message}]
   )
    response['메시지']['콘텐츠']
코드 언어: PHP (php)

generate_cypher 도구는 Cypher 쿼리 생성 문제를 해결하지만, 에이전트는 이 도구를 언제 사용해야 하는지 어떻게 알 수 있을까요? 답은 에이전트의 지시에 달려있어요.

블로그 시작 부분에서 에이전트에 대한 지침을 다음과 같이 정의했던 것을 기억하실 거예요.

instructions = """당신은 Knowledge Graph에 액세스할 수 있는 KYC 분석가입니다. 도구를 사용하여 고객, 계정 및 의심스러운 패턴에 대한 질문에 답하세요.
   당신은 또한 Neo4j 전문가이며 Neo4j MCP 서버를 사용하여 그래프를 쿼리할 수 있습니다.
   GraphRAG 도구로 답변할 수 없는 KYC 데이터베이스 관련 질문이 있는 경우,
   - Neo4j MCP 서버를 사용하여 그래프의 스키마를 가져옵니다(필요한 경우)
   - generate_cypher 도구를 사용하여 질문 및 스키마에서 Cypher 쿼리를 생성합니다.
   - 질문에 답하기 위해 Neo4j MCP 서버를 사용하여 그래프를 쿼리합니다.
   """
코드 언어: PHP (php)

이번에는 그래프 검색 기반 도구로 응답할 수 없는 임시 쿼리를 처리하기 위한 구체적인 지침을 참고해 주세요.

에이전트가 이 경로로 이동하면 다음 단계를 거치게 돼요.

  1. 에이전트는 새로운 질문을 받아요.
  2. 가장 먼저 neo4j-mcp-server.get-neo4j-schema를 호출해서 데이터베이스의 스키마를 가져오죠.
  3. 그런 다음 스키마와 사용자의 질문을 generate_cypher 도구에 넘겨요. 그러면 Cypher 쿼리가 생성될 거예요.
  4. 마지막으로 생성된 Cypher 쿼리를 가져와서 neo4j-mcp-server.read-neo4j-cypher를 사용해 실행해요.

Cypher 생성 또는 Cypher 실행 중에 오류가 발생하면 에이전트는 Cypher 생성을 다시 시도하고 다시 실행하게 됩니다.

보시다시피 위의 접근 방식이 완벽하진 않아요. 유효하고 정확한 Cypher를 생성하기 위해 Text-to-Cypher 모델에 크게 의존하거든요. 대부분의 경우 잘 작동하지만, 그렇지 않은 경우에는 다음 사항을 고려해야 해요.

  • 이러한 유형의 질문에 대한 명시적인 Cypher 검색 도구를 정의해요.
  • UI/UX에 특정 형태의 최종 사용자 피드백(좋아요/싫어요)을 추가하는 건 어떨까요? 이렇게 하면 에이전트가 어려움을 겪고 있는 질문을 표시하는 데 도움이 될 거예요. 그런 다음 이러한 종류의 질문을 처리하는 가장 좋은 접근 방식을 결정할 수 있죠. (예: Cypher 검색 도구, 더 나은 지침, Text2Cypher 모델 개선, 가드레일 또는 에이전트가 질문에 정중하게 답변을 거부하도록 유도)

도구 5: KYC 에이전트에 메모리 추가

최근 에이전트 메모리(Agent Memory)라는 주제가 많은 관심을 받고 있죠.

에이전트가 본질적으로 관리하는 *단기 기억* (대화 기록을 통해) 외에도, 재무 조사와 같은 복잡한 다중 세션 작업에는 더욱 지속적이고 진화하는 *장기 기억*이 필요해요.

이 장기 기억은 단순히 과거 상호 작용의 기록이 아니에요. 통찰력을 축적하고, 진행 중인 조사를 추적하고, 다양한 세션과 심지어 다양한 에이전트에 걸쳐 컨텍스트를 제공할 수 있는 동적 지식 기반이죠.

create_memory 도구는 조사 요약이 전용 Node로 저장되고 관련 엔터티(고객, 계정, 거래)에 명시적으로 연결되는 명시적 Knowledge Graph 메모리 형태를 구현한답니다.

@function_tool def create_memory(content: str, customer_ids: list[str] = [], account_ids: list[str] = [], transaction_ids: list[str] = []) -> str: """ 메모리 Node를 생성하고 이를 지정된 고객, 계정 및 거래에 연결합니다. """ logger.info(f"도구: CREATE_MEMORY") with driver.session() as session: result = session.run( """ CREATE (m:메모리 {content: $content,created_at: datetime()}) WITH m UNWIND $customer_ids AS cid MATCH(c:고객 {id: cid}) MERGE (m)-[:FOR_CUSTOMER]->(c) WITH m UNWIND $account_ids AS aid MATCH(a:계정 {id:aid}) MERGE (m)-[:FOR_ACCOUNT]->(a) WITH m UNWIND $transaction_ids AS tid MATCH(t:거래 {id: tid}) MERGE (m)-[:FOR_TRANSACTION]->(t) RETURN m.content AS content """, content=content, customer_ids=customer_ids, account_ids=account_ids, transaction_ids=transaction_ids # ... )코드 언어: PHP (php)

에이전트 메모리 구현에 대한 추가 고려 사항은 다음과 같아요.

  • 메모리 아키텍처: 다양한 유형의 메모리(에피소드, 의미, 절차) 및 일반적인 구현(Semantic Search를 위한 Vector Database, 관계형 데이터베이스 또는 구조화된 통찰력을 위한 Knowledge Graph) 탐색
  • 맥락화: Knowledge Graph 구조를 통해 기억의 풍부한 맥락화를 가능하게 하여 단순한 키워드 일치가 아닌 관계 및 패턴을 기반으로 강력한 검색을 가능하게 하는 방법
  • 업데이트 및 검색 전략: 시간이 지남에 따라 메모리가 업데이트되는 방식(예: 추가, 요약, 구체화) 및 에이전트가 메모리를 검색하는 방식(예: 그래프 순회, 의미 유사성 또는 고정 규칙을 통해)
  • 과제: 메모리 일관성 관리, 상충되는 정보 처리, 메모리 검색 시 환각 방지, 메모리가 지나치게 크거나 시끄러워지지 않고 관련성과 최신 상태를 유지하도록 보장하는 복잡성

이는 위의 고려 사항 중 일부를 다루는 많은 프레임워크를 통해 활발하게 개발되고 빠르게 발전하는 영역이에요.

모든 것을 하나로 묶기 - 조사 사례

에이전트가 일반적인 워크플로를 어떻게 처리하는지 살펴볼까요? 직접 실행할 수도 있어요(또는 다음 페이지의 단계별 지침을 자유롭게 따르셔도 돼요. KYC 에이전트 GitHub 레포).

1. “데이터베이스의 Schema를 가져오세요.”

  • 에이전트 작업: 에이전트는 이를 Schema Query로 식별하고 Neo4j MCP 서버의 get-neo4j-schema 도구를 사용해요.

2. “의심스러운 링과 관련된 감시 대상 고객 5명을 보여주세요.

  • 상담원 조치: 이는 맞춤 도구의 목적과 직접적으로 일치하죠. 상담원이 find_customer_rings with customer_in_watchlist=True를 호출해요.

3. “각 고객의 주소를 찾아 다른 고객과 공유하고 있는지 알아보세요.

  • 상담원 조치: GraphRAG 도구로는 답변할 수 없는 질문이에요. 상담원은 다음 지침을 따라야 해요.
    • 이미 위의 첫 번째 상호 작용에서 얻은 Schema가 있죠.
    • 그것은 generate_cypher를 질문과 Schema로 호출해요. 이 도구는 조사관의 질문에 답하기 위해 Cypher Query를 반환하죠.
    • Neo4j MCP Cypher Server를 사용하여 이 Cypher Query를 실행하는 read-neo4j-cypher 도구를 사용해요.

4. “주소가 공유된 고객의 경우 자세한 내용을 알려주실 수 있나요?”

  • 에이전트 작업: 에이전트는 get_customer_and_accounts 도구가 완벽하게 적합하며 고객의 ID로 호출된다고 판단해요.

5. “이번 조사에 대해 300단어로 요약해 보세요. 추억으로 저장해 보세요. 이 고객에게 속한 모든 계좌 및 거래에 연결하세요.

  • 상담사 작업: 상담사는 먼저 내부 LLM 기능을 사용해서 요약을 생성해요. 그런 다음 create_memory 도구를 사용해서 대화 중에 발생한 모든 고객, 계정 및 거래 ID의 요약 텍스트와 목록을 전달하죠.

주요 시사점

여기까지 오셨다면 KYC GraphRAG 에이전트의 기본 구현에 익숙해지는 여정이 즐거우셨기를 바라요. OpenAI Agent SDK, MCP, Neo4j, Ollama 및 Gemma3-4B Fine-tuning된 Text-to-Cypher 모델 등 멋진 기술이 많이 사용되었죠!

다음 사항에 대해 감사의 마음을 가지셨기를 바라요.

  • GraphRAG, 더 구체적으로 말하면 연결된 데이터 문제에 필수적인 그래프 기반 데이터 검색이에요. 이를 통해 에이전트는 표준 RAG로는 답변할 수 없는 밀접하게 연결된 데이터에 대한 질문에 답변할 수 있어요.
  • 균형 잡힌 툴킷의 중요성은 강력해요. MCP 서버 도구를 자신만의 최적화된 도구와 결합해 보세요.
  • MCP 서버는 게임 체인저에요. 이를 통해 점점 늘어나는 MCP 서버 세트에 에이전트를 연결할 수 있어요.
    • 실험해 보세요 더 많은 MCP 서버 그래서 여러분은 가능성에 대해 더 잘 이해할 수 있을 거예요.
  • 에이전트는 통제된 방식으로 데이터 저장소에 다시 쓸 수 있어야 해요.
    • 이 예에서는 분석가가 발견한 내용을 유지하는 방법(예: Knowledge Graph에 메모리 Node 추가)과 그 과정에서 에이전트가 전체 조사 팀의 기본 Knowledge Graph를 개선하는 선순환을 만드는 방법을 확인했어요.
    • 에이전트는 Knowledge Graph에 정보를 추가하며 기존 정보를 업데이트하거나 삭제하지 않아요.

여기서 논의되는 패턴과 도구는 KYC에만 국한되지 않아요. 이는 공급망 분석, 디지털 트윈 관리, 약물 발견 및 데이터 포인트 간의 관계가 데이터 자체만큼 중요한 기타 모든 영역에 적용될 수 있어요.

그래프 인식 AI 에이전트의 시대가 왔어요.

다음은 무엇일까요?

MCP, Neo4j 및 Text-to-Cypher 모델을 사용하여 OpenAI Agents SDK 위에 간단한 AI 에이전트를 구축했어요.— 모두 하나의 기기에서 실행돼요.

이 초기 에이전트는 강력한 기반을 제공하지만 프로덕션 수준 시스템으로 전환하려면 다음과 같은 몇 가지 추가 요구 사항을 해결해야 해요.

  • 에이전트 UI/UX: 사용자가 에이전트와 상호 작용하는 핵심 부분이에요. 이는 궁극적으로 에이전트 채택 및 성공의 주요 동인이 될 거예요.
  • 장기 실행 작업 및 다중 에이전트 시스템: 일부 작업은 가치가 있지만 실행하는 데 상당한 시간이 걸려요. 이러한 경우 상담원은 작업 부하의 일부를 다른 상담원에게 오프로드할 수 있어야 해요.
    • OpenAI는 하위 에이전트로의 전달을 일부 지원하지만 장기 실행 에이전트에는 적합하지 않을 수 있어요.
  • 에이전트 가드레일: OpenAI Agents SDK는 가드레일에 대한 일부 지원을 제공해요.
  • 에이전트 호스팅: 에이전트를 사용자에게 노출해요.
  • 에이전트에 대한 통신 보안: 에이전트에 대한 최종 사용자 인증 및 승인.
  • 데이터베이스 액세스 제어: KYC Knowledge Graph에 저장된 데이터에 대한 액세스 제어를 관리해요.
  • 에이전트 관찰 가능성
  • 상담사 평가: 상담사 지침 변경이나 도구 추가/삭제는 어떤 영향을 미칠까요?

그동안 이 내용이 여러분이 계속 배우고 실험할 수 있도록 영감을 주었기를 바라요.

자원

  • 그래프 데이터베이스로 사기 탐지 가속화
  • OpenAI 에이전트 SDK
    • OpenAI 에이전트 및 MCP
  • 개발자가 MCP에 대해 알아야 할 모든 것
  • MCP 소개
  • Neo4j용 MCP 통합
  • Neo4j GraphRAG 개발자 가이드
  • 무료 Neo4j GraphAcademy 강좌
  • Google Cloud 및 Neo4j: Knowledge Graph, 에이전트, MCP 및 Natural Language 인터페이스의 교차점에서 팀 구성
  • Agent
  • GraphRAG
  • kyc

에이치시스템즈LogTree는 Neo4j 기반 GraphRAG 플랫폼으로, 데이터를 자동으로 지식그래프화하고 자연어 질의로 즉시 답을 제공합니다.

👉 에이치시스템즈 홈페이지

반응형

+ Recent posts