How to Integrate LangGraph for investment banking with Redis for production AI
LangGraph gives you the orchestration layer for multi-step banking workflows: approvals, exception handling, branching logic, and audit-friendly state transitions. Redis gives you low-latency shared state, caching, and durable-ish session storage for agents that need to survive retries, restarts, and concurrent requests.
Together, they let you build production AI systems for investment banking that can hold workflow state across steps, store intermediate outputs like deal notes or risk flags, and resume execution without rebuilding context from scratch.
Prerequisites
- •Python 3.10+
- •A Redis instance running locally or in your cloud environment
- •
langgraphinstalled - •
redisPython client installed - •Access to your model provider if your LangGraph nodes call an LLM
- •A clear state schema for your banking workflow, such as:
- •deal id
- •analyst notes
- •compliance flags
- •approval status
- •last processed node
Install the dependencies:
pip install langgraph redis pydantic
Integration Steps
- •
Define the workflow state
In investment banking, state needs to be explicit. You want every node to read and write a predictable structure so you can trace what happened during a deal review or credit memo flow.
from typing import TypedDict, Optional, List
class DealState(TypedDict):
deal_id: str
analyst_notes: str
compliance_flags: List[str]
approval_status: str
redis_key: Optional[str]
- •
Connect to Redis and create a helper for persistence
Use Redis as the shared store for workflow snapshots or node outputs. For production systems, keep keys namespaced by environment and deal id.
import json
import redis
r = redis.Redis(
host="localhost",
port=6379,
db=0,
decode_responses=True,
)
def save_state_to_redis(key: str, state: dict) -> None:
r.set(key, json.dumps(state))
def load_state_from_redis(key: str) -> dict:
raw = r.get(key)
return json.loads(raw) if raw else {}
- •
Build a LangGraph workflow with nodes that read/write Redis
LangGraph’s
StateGraphis the right fit here. Each node can update the current state while persisting checkpoints or business-critical outputs into Redis.
from langgraph.graph import StateGraph, END
def ingest_deal(state: DealState) -> DealState:
redis_key = f"deal:{state['deal_id']}:state"
save_state_to_redis(redis_key, state)
return {**state, "redis_key": redis_key}
def run_compliance_check(state: DealState) -> DealState:
flags = []
if "restricted" in state["analyst_notes"].lower():
flags.append("restricted_language_detected")
updated = {**state, "compliance_flags": flags}
save_state_to_redis(state["redis_key"], updated)
return updated
def approve_or_escalate(state: DealState) -> DealState:
status = "escalate" if state["compliance_flags"] else "approved"
updated = {**state, "approval_status": status}
save_state_to_redis(state["redis_key"], updated)
return updated
builder = StateGraph(DealState)
builder.add_node("ingest_deal", ingest_deal)
builder.add_node("run_compliance_check", run_compliance_check)
builder.add_node("approve_or_escalate", approve_or_escalate)
builder.set_entry_point("ingest_deal")
builder.add_edge("ingest_deal", "run_compliance_check")
builder.add_edge("run_compliance_check", "approve_or_escalate")
builder.add_edge("approve_or_escalate", END)
graph = builder.compile()
- •
Invoke the graph with a real deal payload
This is where the integration becomes useful. Your app can submit a deal review request, let LangGraph orchestrate the steps, and use Redis as the shared persistence layer for later inspection or retries.
initial_state: DealState = {
"deal_id": "IB-2026-001",
"analyst_notes": "Client wants help with a restricted sector acquisition.",
"compliance_flags": [],
"approval_status": "pending",
"redis_key": None,
}
result = graph.invoke(initial_state)
print(result)
- •
Use Redis to resume or inspect workflow state
In production you will need to recover from failures or inspect what happened after an analyst escalates a case. Pull the latest snapshot from Redis by key.
snapshot = load_state_from_redis("deal:IB-2026-001:state")
print(snapshot)
if snapshot.get("approval_status") == "escalate":
print("Route to human reviewer")
Testing the Integration
Run this end-to-end test to verify both LangGraph execution and Redis persistence are working.
test_state: DealState = {
"deal_id": "TEST-1001",
"analyst_notes": "No restricted language here.",
"compliance_flags": [],
"approval_status": "pending",
"redis_key": None,
}
output = graph.invoke(test_state)
saved = load_state_from_redis("deal:TEST-1001:state")
print("GRAPH OUTPUT:", output)
print("REDIS SNAPSHOT:", saved)
Expected output:
GRAPH OUTPUT: {'deal_id': 'TEST-1001', 'analyst_notes': 'No restricted language here.', 'compliance_flags': [], 'approval_status': 'approved', 'redis_key': 'deal:TEST-1001:state'}
REDIS SNAPSHOT: {'deal_id': 'TEST-1001', 'analyst_notes': 'No restricted language here.', 'compliance_flags': [], 'approval_status': 'approved', 'redis_key': 'deal:TEST-1001:state'}
Real-World Use Cases
- •
Deal screening workflows
Use LangGraph to route incoming M&A or financing requests through compliance checks, sector restrictions, and human approval gates while Redis stores each intermediate decision. - •
Investment memo generation
Break memo creation into research, summarization, risk analysis, and final drafting nodes. Store source extracts and draft versions in Redis so analysts can resume work without losing context. - •
Trade exception handling
Build an agent that detects exceptions in trade instructions, persists exception metadata in Redis, and uses LangGraph branching logic to escalate only when rules are violated.
Keep learning
- •The complete AI Agents Roadmap — my full 8-step breakdown
- •Free: The AI Agent Starter Kit — PDF checklist + starter code
- •Work with me — I build AI for banks and insurance companies
By Cyprian Aarons, AI Consultant at Topiax.
Want the complete 8-step roadmap?
Grab the free AI Agent Starter Kit — architecture templates, compliance checklists, and a 7-email deep-dive course.
Get the Starter Kit