<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shampita Bhattacharjee</title>
    <description>The latest articles on DEV Community by Shampita Bhattacharjee (@shampita_bhattacharjee_d5).</description>
    <link>https://dev.to/shampita_bhattacharjee_d5</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4142367%2F5197c10e-d3da-41f8-a1da-fb7b1124d6d8.png</url>
      <title>DEV Community: Shampita Bhattacharjee</title>
      <link>https://dev.to/shampita_bhattacharjee_d5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shampita_bhattacharjee_d5"/>
    <language>en</language>
    <item>
      <title>Building an Agentic Fraud Investigation Agent with TigerGraph</title>
      <dc:creator>Shampita Bhattacharjee</dc:creator>
      <pubDate>Fri, 25 Sep 2026 06:24:41 +0000</pubDate>
      <link>https://dev.to/shampita_bhattacharjee_d5/building-an-agentic-fraud-investigation-agent-with-tigergraph-253i</link>
      <guid>https://dev.to/shampita_bhattacharjee_d5/building-an-agentic-fraud-investigation-agent-with-tigergraph-253i</guid>
      <description>&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;Fraud detection is often treated as a classification problem: a transaction receives a risk score and the system decides whether it is fraudulent.&lt;/p&gt;

&lt;p&gt;Real-world fraud investigation is more complicated.&lt;/p&gt;

&lt;p&gt;A suspicious transaction needs to be investigated in context. An analyst may need to examine the customer's transaction history, connected cards, devices, IP addresses, merchants, previous fraud cases, known fraud patterns, and applicable policies before deciding what should happen next.&lt;/p&gt;

&lt;p&gt;For the TigerGraph Agentic Fraud Investigation Hackathon (HHGOA), we built an Agentic Fraud Investigation Agent that treats a fraud signal as the beginning of an investigation rather than the final answer.&lt;/p&gt;

&lt;p&gt;Our system can:&lt;/p&gt;

&lt;p&gt;Start an investigation from a fraud signal, customer report, or analyst trigger&lt;br&gt;
Retrieve connected evidence from TigerGraph&lt;br&gt;
Detect fraud patterns using graph-based analysis&lt;br&gt;
Search previous investigations for similar cases&lt;br&gt;
Assess fraud probability and uncertainty&lt;br&gt;
Request additional evidence when confidence is insufficient&lt;br&gt;
Reassess the case after receiving new evidence&lt;br&gt;
Recommend the next best action&lt;br&gt;
Apply policy and permission controls&lt;br&gt;
Maintain an investigation audit trail&lt;br&gt;
Write completed cases back into the graph as future case memory&lt;br&gt;
Present the investigation through an analyst dashboard&lt;/p&gt;

&lt;p&gt;The complete implementation is available on GitHub.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Core Idea&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The central idea behind our system is simple:&lt;/p&gt;

&lt;p&gt;A fraud score should trigger an investigation, not automatically determine the outcome.&lt;/p&gt;

&lt;p&gt;The repository explicitly implements an uncertainty-aware investigation loop. The agent starts with an initial assessment, gathers graph evidence, evaluates confidence, requests additional evidence when necessary, and updates its recommendation before closing the investigation.&lt;/p&gt;

&lt;p&gt;This is particularly important because the model risk score is only one signal.&lt;/p&gt;

&lt;p&gt;For example, a high-risk transaction involving a customer's usual device and merchant can mean something very different from a similar score involving a new device and unusual transaction behavior.&lt;/p&gt;

&lt;p&gt;The system therefore combines the initial model score with graph-derived behavioral signals.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;System Architecture&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The overall architecture consists of five major layers:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                ┌──────────────────────┐
                │   Fraud Trigger      │
                │ Risk / Customer /    │
                │ Analyst              │
                └──────────┬───────────┘
                           │
                           ▼
                ┌──────────────────────┐
                │   LangGraph Agent    │
                │ Investigation Loop   │
                └──────────┬───────────┘
                           │
      ┌────────────────────┼────────────────────┐
      │                    │                    │
      ▼                    ▼                    ▼
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;┌────────────────┐   ┌─────────────────┐   ┌───────────────┐&lt;br&gt;
 │  TigerGraph    │   │    GraphRAG     │   │ Case Memory   │&lt;br&gt;
 │                │   │                 │   │               │&lt;br&gt;
 │ Customers      │   │ Policy         │   │ Prior Cases   │&lt;br&gt;
 │ Cards          │   │ Typologies     │   │ Outcomes      │&lt;br&gt;
 │ Transactions   │   │ Regulations    │   │ Relationships │&lt;br&gt;
 │ Devices        │   │ Evidence       │   │               │&lt;br&gt;
 │ IPs            │   │                 │   │               │&lt;br&gt;
 │ Merchants      │   │                 │   │               │&lt;br&gt;
 └───────┬────────┘   └────────┬────────┘   └───────┬───────┘&lt;br&gt;
         │                     │                    │&lt;br&gt;
         └─────────────────────┼────────────────────┘&lt;br&gt;
                               ▼&lt;br&gt;
                    ┌──────────────────────┐&lt;br&gt;
                    │ Risk + Uncertainty   │&lt;br&gt;
                    │ Assessment           │&lt;br&gt;
                    └──────────┬───────────┘&lt;br&gt;
                               │&lt;br&gt;
                     ┌─────────┴─────────┐&lt;br&gt;
                     │                   │&lt;br&gt;
                  Uncertain          Sufficient&lt;br&gt;
                     │                   │&lt;br&gt;
                     ▼                   ▼&lt;br&gt;
              ┌─────────────┐    ┌──────────────┐&lt;br&gt;
              │ Request     │    │ Next Best    │&lt;br&gt;
              │ Evidence    │    │ Action       │&lt;br&gt;
              └──────┬──────┘    └──────┬───────┘&lt;br&gt;
                     │                  │&lt;br&gt;
                     └───────┐  ┌───────┘&lt;br&gt;
                             ▼  ▼&lt;br&gt;
                       ┌──────────────┐&lt;br&gt;
                       │ Policy Engine│&lt;br&gt;
                       └──────┬───────┘&lt;br&gt;
                              │&lt;br&gt;
                   ┌──────────┴──────────┐&lt;br&gt;
                   ▼                     ▼&lt;br&gt;
             Auto Actions          Human Approval&lt;br&gt;
                   │                     │&lt;br&gt;
                   └──────────┬──────────┘&lt;br&gt;
                              ▼&lt;br&gt;
                    ┌────────────────────┐&lt;br&gt;
                    │ Case + Audit Trail │&lt;br&gt;
                    │ Write Back to Graph│&lt;br&gt;
                    └────────────────────┘&lt;/p&gt;

&lt;p&gt;The repository implements this architecture using a LangGraph investigation state machine, TigerGraph queries, GraphRAG grounding, policy controls, case memory, and a Streamlit dashboard.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Technology Stack&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The main technologies used in the implementation are:&lt;/p&gt;

&lt;p&gt;Component   Technology&lt;br&gt;
Agent orchestration LangGraph&lt;br&gt;
LLM integration LangChain&lt;br&gt;
LLM providers   OpenAI / Anthropic / Google Gemini support&lt;br&gt;
Graph database  TigerGraph&lt;br&gt;
TigerGraph Python client    pyTigerGraph&lt;br&gt;
Graph query language    GSQL&lt;br&gt;
Agent graph tools   TigerGraph MCP-compatible layer&lt;br&gt;
Retrieval / grounding   GraphRAG&lt;br&gt;
Backend / agent Python&lt;br&gt;
Dashboard   Streamlit&lt;br&gt;
Visualization   Plotly + NetworkX&lt;br&gt;
Data processing Pandas + NumPy&lt;br&gt;
Validation  Pytest&lt;/p&gt;

&lt;p&gt;The dependency configuration confirms LangGraph, LangChain, provider integrations, pyTigerGraph, Streamlit, Plotly, NetworkX, Pandas, NumPy, Pydantic and Pytest.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Why TigerGraph?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fraud investigations are naturally suited to graph databases because the important information is highly connected.&lt;/p&gt;

&lt;p&gt;Our graph models entities such as:&lt;/p&gt;

&lt;p&gt;Customers&lt;br&gt;
Cards&lt;br&gt;
Transactions&lt;br&gt;
Devices&lt;br&gt;
IP addresses&lt;br&gt;
Merchants&lt;br&gt;
Fraud cases&lt;br&gt;
Fraud patterns&lt;/p&gt;

&lt;p&gt;Instead of looking at a transaction independently, the agent can traverse its relationships and investigate the surrounding context.&lt;/p&gt;

&lt;p&gt;The repository's graph schema and queries are designed specifically for:&lt;/p&gt;

&lt;p&gt;Multi-hop evidence retrieval&lt;br&gt;
Shared-attribute/ring detection&lt;br&gt;
Transaction velocity analysis&lt;br&gt;
Fraud pattern detection&lt;br&gt;
Similar-case retrieval&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GSQL Investigation Queries&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The graph investigation layer provides several types of queries.&lt;/p&gt;

&lt;p&gt;For example, the system can examine:&lt;/p&gt;

&lt;p&gt;Evidence subgraph&lt;/p&gt;

&lt;p&gt;Retrieve the neighbourhood surrounding a suspicious transaction, including related customers, cards, devices, IPs and merchants.&lt;/p&gt;

&lt;p&gt;Card history&lt;/p&gt;

&lt;p&gt;Build a behavioral baseline for the card, including:&lt;/p&gt;

&lt;p&gt;Previous transaction count&lt;br&gt;
Average transaction amount&lt;br&gt;
Maximum amount&lt;br&gt;
Previously used products&lt;br&gt;
Regions&lt;br&gt;
Transaction channels&lt;br&gt;
Transaction velocity&lt;/p&gt;

&lt;p&gt;Look at transactions occurring within a defined time window to identify bursts or testing sequences.&lt;/p&gt;

&lt;p&gt;Device relationships&lt;/p&gt;

&lt;p&gt;Identify other cards that have used the same device profile.&lt;/p&gt;

&lt;p&gt;Regional activity&lt;/p&gt;

&lt;p&gt;Determine whether a card is being used in an unfamiliar region and whether activity in the home region continues simultaneously.&lt;/p&gt;

&lt;p&gt;Recurring transaction detection&lt;/p&gt;

&lt;p&gt;Check whether a disputed transaction resembles the customer's historical recurring payment pattern.&lt;/p&gt;

&lt;p&gt;These investigative operations are exposed through the graph client and correspond to the graph/tool layer available to the agent.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;TigerGraph MCP Integration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We designed the tool layer so that the agent can interact with TigerGraph through either:&lt;/p&gt;

&lt;p&gt;TigerGraph MCP, connected to a real TigerGraph Savanna/Community Edition instance, or&lt;br&gt;
A direct GraphClient implementation used for offline execution and testing.&lt;/p&gt;

&lt;p&gt;The tool names and parameters are intentionally aligned with the installed GSQL query names. This means the investigation logic does not need to change when switching between direct execution and MCP-based access.&lt;/p&gt;

&lt;p&gt;This separation also allowed us to develop and demonstrate the system without requiring every execution environment to have a live TigerGraph cluster.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Offline Mode&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One practical challenge with large fraud datasets is that the complete transaction file is large.&lt;/p&gt;

&lt;p&gt;The implementation therefore supports an offline mode.&lt;/p&gt;

&lt;p&gt;Instead of requiring a live TigerGraph instance, the GraphClient can answer the same investigation questions using the supplied CSV data and Pandas.&lt;/p&gt;

&lt;p&gt;The implementation also loads only the transaction columns required by the investigation rather than loading every column from the original dataset into memory.&lt;/p&gt;

&lt;p&gt;This gives us two execution modes:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;            Investigation Agent
                   │
          ┌────────┴────────┐
          │                 │
          ▼                 ▼
    ONLINE MODE        OFFLINE MODE
          │                 │
    pyTigerGraph       Pandas/CSV
          │                 │
          ▼                 ▼
    TigerGraph          Local Data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;The Investigation Agent&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The core workflow is implemented in agent/investigator.py.&lt;/p&gt;

&lt;p&gt;The investigation proceeds through several stages.&lt;/p&gt;

&lt;p&gt;Step 1 — Trigger&lt;/p&gt;

&lt;p&gt;A fraud signal, customer report, or analyst request starts the investigation.&lt;/p&gt;

&lt;p&gt;Step 2 — Open Case&lt;/p&gt;

&lt;p&gt;The system creates an investigation case and records the trigger.&lt;/p&gt;

&lt;p&gt;Step 3 — Gather Evidence&lt;/p&gt;

&lt;p&gt;The agent queries the graph and gathers:&lt;/p&gt;

&lt;p&gt;Transaction information&lt;br&gt;
Device information&lt;br&gt;
Card history&lt;br&gt;
Transaction bursts&lt;br&gt;
Regional activity&lt;br&gt;
Shared devices&lt;br&gt;
Previous fraud cases&lt;br&gt;
Step 4 — Assess Risk&lt;/p&gt;

&lt;p&gt;The system combines the available signals to calculate a fraud probability, classify the fraud pattern, and identify remaining evidence gaps.&lt;/p&gt;

&lt;p&gt;Step 5 — Initial Next Best Action&lt;/p&gt;

&lt;p&gt;Importantly, the system records the initial recommendation before requesting additional evidence.&lt;/p&gt;

&lt;p&gt;This is required by the benchmark and allows us to demonstrate how the recommendation changes during the investigation.&lt;/p&gt;

&lt;p&gt;Step 6 — Request Additional Evidence&lt;/p&gt;

&lt;p&gt;If the evidence is insufficient, the agent can request actions such as customer validation or step-up authentication.&lt;/p&gt;

&lt;p&gt;Step 7 — Reassess&lt;/p&gt;

&lt;p&gt;The newly received evidence is incorporated into the assessment.&lt;/p&gt;

&lt;p&gt;Step 8 — Final Action&lt;/p&gt;

&lt;p&gt;The system produces a final recommendation.&lt;/p&gt;

&lt;p&gt;Step 9 — Case Memory&lt;/p&gt;

&lt;p&gt;The completed case is written back into the graph so that future investigations can retrieve it.&lt;/p&gt;

&lt;p&gt;This entire flow is implemented in the Investigator workflow.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Uncertainty-Aware Fraud Assessment&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rather than allowing the initial model score to determine the verdict, our assessment layer starts from an uncertain baseline and incorporates multiple independent signals.&lt;/p&gt;

&lt;p&gt;The implementation considers signals such as:&lt;/p&gt;

&lt;p&gt;Model risk score&lt;br&gt;
New device&lt;br&gt;
Proxy connection&lt;br&gt;
Card-testing sequence&lt;br&gt;
Out-of-profile transaction amount&lt;br&gt;
Transaction burst&lt;br&gt;
Out-of-region activity&lt;br&gt;
Shared device&lt;br&gt;
Previous fraud cases&lt;br&gt;
Previous cleared cases&lt;br&gt;
Customer response&lt;br&gt;
Step-up authentication result&lt;/p&gt;

&lt;p&gt;The model score is intentionally treated as a weak prior rather than the final answer. Graph-derived evidence contributes additional weight to the assessment.&lt;/p&gt;

&lt;p&gt;The system also supports several fraud patterns:&lt;/p&gt;

&lt;p&gt;card_testing&lt;br&gt;
card_not_present_fraud&lt;br&gt;
card_not_present_new_device&lt;br&gt;
out_of_region_use&lt;br&gt;
account_takeover&lt;br&gt;
undocumented&lt;br&gt;
none&lt;/p&gt;

&lt;p&gt;An important capability is identifying an undocumented coordinated pattern when shared-device activity connects multiple cards and previous fraud evidence exists.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GraphRAG: Combining Policy and Evidence&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A major part of the architecture is our GraphRAG grounding layer.&lt;/p&gt;

&lt;p&gt;We deliberately do not send raw transaction tables directly to the LLM.&lt;/p&gt;

&lt;p&gt;Instead, the system builds a curated context containing:&lt;/p&gt;

&lt;p&gt;Graph evidence&lt;/p&gt;

&lt;p&gt;Evidence claims retrieved from the knowledge graph, including their provenance.&lt;/p&gt;

&lt;p&gt;Similar cases&lt;/p&gt;

&lt;p&gt;Previously closed investigations and their outcomes.&lt;/p&gt;

&lt;p&gt;Policy information&lt;/p&gt;

&lt;p&gt;Relevant sections from the fraud policy, fraud typologies and SAR guidance.&lt;/p&gt;

&lt;p&gt;The LLM then receives this curated context.&lt;/p&gt;

&lt;p&gt;This allows the LLM to focus on reasoning, synthesis and explanation, while the graph remains responsible for structured investigation and evidence retrieval.&lt;/p&gt;

&lt;p&gt;This separation is an important design principle:&lt;/p&gt;

&lt;p&gt;The LLM reasons over evidence; it does not replace graph analysis.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;LLM Layer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The implementation is provider-agnostic.&lt;/p&gt;

&lt;p&gt;It supports:&lt;/p&gt;

&lt;p&gt;OpenAI&lt;br&gt;
Anthropic&lt;br&gt;
Google Gemini&lt;/p&gt;

&lt;p&gt;through LangChain integrations.&lt;/p&gt;

&lt;p&gt;The LLM is primarily used for:&lt;/p&gt;

&lt;p&gt;Case summaries&lt;br&gt;
Evidence-grounded explanations&lt;br&gt;
SAR narratives&lt;br&gt;
Natural-language synthesis&lt;/p&gt;

&lt;p&gt;The system also has a deterministic fallback.&lt;/p&gt;

&lt;p&gt;If an LLM provider or API key is unavailable, the investigation can still run using structured templates. This makes the benchmark and demonstration pipeline reproducible without making the entire investigation dependent on an external model.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Policy and Permission Engine&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A fraud agent should not have unrestricted authority.&lt;/p&gt;

&lt;p&gt;Our policy engine defines an explicit action catalog.&lt;/p&gt;

&lt;p&gt;Actions include:&lt;/p&gt;

&lt;p&gt;ALLOW_TRANSACTION&lt;br&gt;
DECLINE_TRANSACTION&lt;br&gt;
MONITOR_CARD&lt;br&gt;
WARN_CUSTOMER&lt;br&gt;
VERIFY_WITH_CUSTOMER&lt;br&gt;
STEP_UP_AUTH&lt;br&gt;
BLOCK_CARD&lt;br&gt;
CREATE_CASE&lt;br&gt;
FILE_REPORT&lt;br&gt;
ESCALATE_TO_ANALYST&lt;br&gt;
CLOSE_NO_FRAUD&lt;/p&gt;

&lt;p&gt;The system also assigns approval routes:&lt;/p&gt;

&lt;p&gt;auto&lt;br&gt;
L1&lt;br&gt;
L2&lt;/p&gt;

&lt;p&gt;For example, BLOCK_CARD can be routed to L1 or L2 depending on exposure, while actions such as filing a report or blocking all cards require the higher approval route.&lt;/p&gt;

&lt;p&gt;Actions outside the predefined catalog are rejected by the policy layer.&lt;/p&gt;

&lt;p&gt;This prevents the agent from inventing arbitrary actions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Evidence Requests&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When the agent is uncertain, it does not simply guess.&lt;/p&gt;

&lt;p&gt;It can request additional evidence.&lt;/p&gt;

&lt;p&gt;The implementation currently supports simulated:&lt;/p&gt;

&lt;p&gt;Customer validation&lt;br&gt;
Step-up authentication&lt;/p&gt;

&lt;p&gt;The evidence request is recorded in the case.&lt;/p&gt;

&lt;p&gt;The investigation is then reassessed using the newly obtained information.&lt;/p&gt;

&lt;p&gt;This creates a feedback loop:&lt;/p&gt;

&lt;p&gt;Initial Evidence&lt;br&gt;
       ↓&lt;br&gt;
Risk Assessment&lt;br&gt;
       ↓&lt;br&gt;
Is Evidence Sufficient?&lt;br&gt;
       ↓&lt;br&gt;
     No&lt;br&gt;
       ↓&lt;br&gt;
Request Evidence&lt;br&gt;
       ↓&lt;br&gt;
Receive Response&lt;br&gt;
       ↓&lt;br&gt;
Reassess&lt;br&gt;
       ↓&lt;br&gt;
Next Best Action&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Case Memory&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the most important features of the system is that completed investigations become future knowledge.&lt;/p&gt;

&lt;p&gt;After an investigation is completed, the case is written back into TigerGraph.&lt;/p&gt;

&lt;p&gt;The stored information includes:&lt;/p&gt;

&lt;p&gt;Case ID&lt;br&gt;
Customer&lt;br&gt;
Card&lt;br&gt;
Fraud pattern&lt;br&gt;
Verdict&lt;br&gt;
Status&lt;br&gt;
Fraud probability&lt;br&gt;
Affected transactions&lt;br&gt;
Connected cards&lt;br&gt;
Investigation summary&lt;br&gt;
Outcome&lt;/p&gt;

&lt;p&gt;Future investigations can then search this case memory for similar historical investigations.&lt;/p&gt;

&lt;p&gt;This creates a continuous learning-style workflow:&lt;/p&gt;

&lt;p&gt;New Investigation&lt;br&gt;
       ↓&lt;br&gt;
Graph Evidence&lt;br&gt;
       ↓&lt;br&gt;
Previous Cases&lt;br&gt;
       ↓&lt;br&gt;
Decision&lt;br&gt;
       ↓&lt;br&gt;
Write New Case&lt;br&gt;
       ↓&lt;br&gt;
Future Investigation&lt;br&gt;
       ↓&lt;br&gt;
Previous Cases + New Case&lt;/p&gt;

&lt;p&gt;The system therefore becomes more context-aware as more cases are processed.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Next Best Action&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The system records the next best action at two points:&lt;/p&gt;

&lt;p&gt;Initial&lt;/p&gt;

&lt;p&gt;Before additional evidence is requested.&lt;/p&gt;

&lt;p&gt;Final&lt;/p&gt;

&lt;p&gt;After the additional evidence has been received.&lt;/p&gt;

&lt;p&gt;This is important because the recommended action can change during the investigation.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Initial assessment&lt;br&gt;
        ↓&lt;br&gt;
VERIFY_WITH_CUSTOMER&lt;br&gt;
STEP_UP_AUTH&lt;br&gt;
MONITOR_CARD&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Customer evidence&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Updated assessment&lt;br&gt;
        ↓&lt;br&gt;
BLOCK_CARD&lt;br&gt;
CREATE_CASE&lt;br&gt;
WARN_CUSTOMER&lt;/p&gt;

&lt;p&gt;The dashboard also explicitly displays this initial-versus-final action history.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Analyst Dashboard&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To make the agent's investigation observable, we built a Streamlit analyst dashboard.&lt;/p&gt;

&lt;p&gt;The dashboard provides:&lt;/p&gt;

&lt;p&gt;Case Details&lt;br&gt;
Fraud probability&lt;br&gt;
Fraud pattern&lt;br&gt;
Exposure&lt;br&gt;
Case status&lt;br&gt;
SAR status&lt;br&gt;
Graph tool calls&lt;br&gt;
Investigation latency&lt;br&gt;
Evidence&lt;/p&gt;

&lt;p&gt;Each evidence item is displayed with its source and provenance.&lt;/p&gt;

&lt;p&gt;Investigation Timeline&lt;/p&gt;

&lt;p&gt;The analyst can see the sequence of investigation events.&lt;/p&gt;

&lt;p&gt;Evidence Graph&lt;/p&gt;

&lt;p&gt;The dashboard visualizes connections between:&lt;/p&gt;

&lt;p&gt;Transactions&lt;br&gt;
Cards&lt;br&gt;
Devices&lt;br&gt;
Previous cases&lt;br&gt;
Next Best Action&lt;/p&gt;

&lt;p&gt;The dashboard displays:&lt;/p&gt;

&lt;p&gt;Initial actions&lt;br&gt;
Final actions&lt;br&gt;
What changed&lt;br&gt;
Approval Queue&lt;/p&gt;

&lt;p&gt;Actions requiring L1/L2 approval are presented to the analyst.&lt;/p&gt;

&lt;p&gt;Answer File&lt;/p&gt;

&lt;p&gt;The complete benchmark JSON can also be inspected from the interface.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Example Investigation: HHG-001&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the generated case files demonstrates the full investigation flow.&lt;/p&gt;

&lt;p&gt;For case HHG-001, transaction 3514030 was investigated with an initial risk score of 0.61.&lt;/p&gt;

&lt;p&gt;The system did not immediately treat that score as a fraud verdict.&lt;/p&gt;

&lt;p&gt;Instead, it gathered additional evidence, including graph context and historical cases.&lt;/p&gt;

&lt;p&gt;The investigation then requested additional customer evidence.&lt;/p&gt;

&lt;p&gt;After the evidence was received, the fraud probability increased to 0.81, and the recommended actions were updated accordingly.&lt;/p&gt;

&lt;p&gt;The generated case record contains the evidence, prior cases, initial and final next-best actions, stop reason, tool-call count and latency.&lt;/p&gt;

&lt;p&gt;The repository's case output provides the complete machine-readable investigation record.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Benchmark Execution&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The repository includes a benchmark runner designed around the HHGOA submission format.&lt;/p&gt;

&lt;p&gt;The benchmark runner:&lt;/p&gt;

&lt;p&gt;Reads the case pack&lt;br&gt;
Runs the Investigator on each case&lt;br&gt;
Produces one JSON answer file per case&lt;br&gt;
Records verdict&lt;br&gt;
Records fraud probability&lt;br&gt;
Records fraud pattern&lt;br&gt;
Records exposure&lt;br&gt;
Records SAR decision&lt;br&gt;
Records final actions&lt;/p&gt;

&lt;p&gt;For the official benchmark, the runner can be pointed to the HHGOA dataset containing the 20 evaluation cases.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Engineering for Reproducibility&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A key engineering goal was making the system runnable even without a live TigerGraph cluster or LLM provider.&lt;/p&gt;

&lt;p&gt;The repository therefore provides:&lt;/p&gt;

&lt;p&gt;Offline graph execution&lt;br&gt;
Deterministic fallback narratives&lt;br&gt;
Sample data&lt;br&gt;
Automated tests&lt;br&gt;
Benchmark runner&lt;br&gt;
Streamlit dashboard&lt;/p&gt;

&lt;p&gt;This makes it possible to demonstrate the investigation pipeline end-to-end while retaining a production-style integration path through TigerGraph and MCP.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What We Learned&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The biggest lesson from building this system was that fraud investigation is fundamentally a context and evidence problem.&lt;/p&gt;

&lt;p&gt;A single transaction does not provide enough information.&lt;/p&gt;

&lt;p&gt;Relationships between entities often reveal patterns that are invisible when examining individual records.&lt;/p&gt;

&lt;p&gt;TigerGraph was particularly useful for representing those relationships and performing graph-native investigation.&lt;/p&gt;

&lt;p&gt;We also learned that an agentic system needs more than an LLM.&lt;/p&gt;

&lt;p&gt;The LLM provides reasoning and natural-language synthesis, but reliable investigation requires:&lt;/p&gt;

&lt;p&gt;Structured tools&lt;br&gt;
Explicit policies&lt;br&gt;
Evidence provenance&lt;br&gt;
Uncertainty handling&lt;br&gt;
Approval controls&lt;br&gt;
Case memory&lt;br&gt;
Audit trails&lt;/p&gt;

&lt;p&gt;Our architecture therefore keeps the LLM inside a controlled investigation workflow rather than giving it unrestricted authority.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What We Would Improve&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With more time, we would improve several areas.&lt;/p&gt;

&lt;p&gt;Larger-scale graph retrieval&lt;/p&gt;

&lt;p&gt;The current GraphRAG implementation uses transparent keyword retrieval for policy documents. At larger scale, this could be replaced or extended with TigerGraph vector search.&lt;/p&gt;

&lt;p&gt;More external evidence&lt;/p&gt;

&lt;p&gt;Additional identity, device and financial signals could improve investigations.&lt;/p&gt;

&lt;p&gt;Richer graph algorithms&lt;/p&gt;

&lt;p&gt;More advanced graph algorithms could be added for coordinated fraud rings and entity-level risk propagation.&lt;/p&gt;

&lt;p&gt;Production integrations&lt;/p&gt;

&lt;p&gt;The current action layer contains simulated integrations for actions such as customer messages, freezes, card blocks, SAR filing and CRM updates. These could be replaced with real controlled APIs in a production environment.&lt;/p&gt;

&lt;p&gt;Improved investigation UX&lt;/p&gt;

&lt;p&gt;The Streamlit dashboard could be expanded into a production-grade fraud analyst application with richer case management and collaboration features.&lt;/p&gt;

&lt;p&gt;Performance optimization&lt;/p&gt;

&lt;p&gt;Large-scale investigations could benefit from further optimization of graph queries, retrieval and LLM calls.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;We built an Agentic Fraud Investigation Agent powered by TigerGraph that goes beyond simple fraud classification.&lt;/p&gt;

&lt;p&gt;The system combines:&lt;/p&gt;

&lt;p&gt;TigerGraph + GSQL + LangGraph + GraphRAG + LLMs + Case Memory + Policy Controls + MCP-compatible Tools + Streamlit&lt;/p&gt;

&lt;p&gt;to create an investigation loop that can:&lt;/p&gt;

&lt;p&gt;Detect → Investigate → Gather Evidence → Assess Uncertainty → Request Evidence → Reassess → Recommend Action → Record → Learn from Previous Cases&lt;/p&gt;

&lt;p&gt;The key idea is that an effective fraud investigation agent should not simply answer:&lt;/p&gt;

&lt;p&gt;“Is this transaction fraudulent?”&lt;/p&gt;

&lt;p&gt;Instead, it should be able to ask:&lt;/p&gt;

&lt;p&gt;“What evidence do I have, what am I still uncertain about, what evidence should I gather next, and what action is justified by the available evidence and policy?”&lt;/p&gt;

&lt;p&gt;That is the approach we implemented with TigerGraph.&lt;/p&gt;

&lt;p&gt;Project&lt;/p&gt;

&lt;p&gt;GitHub: TigerGraph Agentic Fraud Investigation — GitHub&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>database</category>
    </item>
  </channel>
</rss>
