How to Integrate LlamaIndex for retail banking with Supabase for RAG
Combining LlamaIndex for retail banking with Supabase gives you a clean RAG backend for customer support, policy lookup, and internal banking ops. LlamaIndex handles ingestion, chunking, retrieval, and query orchestration; Supabase gives you Postgres storage with auth, row-level security, and a simple vector store path for production.
For retail banking, that means you can answer questions from product PDFs, fee schedules, KYC policies, loan guides, and call-center playbooks without hardcoding logic into the agent.
Prerequisites
- •Python 3.10+
- •A Supabase project with:
- •
SUPABASE_URL - •
SUPABASE_SERVICE_ROLE_KEY
- •
- •A Postgres database in Supabase with the
vectorextension enabled - •OpenAI API key or another embedding/model provider supported by LlamaIndex
- •Installed packages:
- •
llama-index - •
llama-index-vector-stores-supabase - •
supabase - •
python-dotenv
- •
- •Banking content ready for ingestion:
- •PDFs
- •DOCX files
- •Markdown policy docs
- •FAQ text
Install the core dependencies:
pip install llama-index llama-index-vector-stores-supabase supabase python-dotenv
Integration Steps
- •Set up your environment and clients.
Use environment variables so your agent can run in dev, staging, and prod without code changes.
import os
from dotenv import load_dotenv
load_dotenv()
SUPABASE_URL = os.environ["SUPABASE_URL"]
SUPABASE_SERVICE_ROLE_KEY = os.environ["SUPABASE_SERVICE_ROLE_KEY"]
OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]
Initialize the Supabase client and LlamaIndex settings:
from supabase import create_client
from llama_index.core import Settings
supabase = create_client(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY)
Settings.chunk_size = 512
Settings.chunk_overlap = 64
- •Create or connect to a Supabase table for vectors.
LlamaIndex can write embeddings into Supabase through its vector store integration. The table must be ready before ingestion.
from supabase import create_client
supabase = create_client(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY)
# Example: create the table manually in SQL editor first.
# Table name used below: banking_docs
table_name = "banking_docs"
print(f"Using Supabase table: {table_name}")
If you want to validate that the table exists from Python:
result = supabase.table("banking_docs").select("id").limit(1).execute()
print(result.data)
- •Load retail banking documents and build nodes.
Use LlamaIndex readers to ingest policy documents, product guides, and knowledge base articles.
from llama_index.core import SimpleDirectoryReader
documents = SimpleDirectoryReader(
input_dir="./banking_docs",
recursive=True,
).load_data()
print(f"Loaded {len(documents)} documents")
Convert them into nodes so retrieval is chunk-based instead of document-based:
from llama_index.core.node_parser import SentenceSplitter
splitter = SentenceSplitter(chunk_size=512, chunk_overlap=64)
nodes = splitter.get_nodes_from_documents(documents)
print(f"Created {len(nodes)} nodes")
- •Store embeddings in Supabase using LlamaIndex’s vector store adapter.
This is the key integration point. LlamaIndex generates embeddings; Supabase stores them in Postgres with vector search.
from llama_index.vector_stores.supabase import SupabaseVectorStore
from llama_index.core import StorageContext, VectorStoreIndex
vector_store = SupabaseVectorStore(
postgres_connection_string=f"postgresql://postgres:{os.environ['SUPABASE_DB_PASSWORD']}@db.{os.environ['SUPABASE_PROJECT_REF']}.supabase.co:5432/postgres",
collection_name="banking_docs",
)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex(nodes=nodes, storage_context=storage_context)
If you already have embeddings stored in Supabase and just want to reconnect later:
index = VectorStoreIndex.from_vector_store(vector_store=vector_store)
- •Query the index from your AI agent.
Build a retriever-backed query engine that your agent can call during customer interactions.
query_engine = index.as_query_engine(similarity_top_k=3)
response = query_engine.query(
"What documents do I need to open a joint savings account?"
)
print(response)
For retail banking workflows, add a stricter prompt layer so answers stay grounded in policy text:
from llama_index.core.prompts import PromptTemplate
qa_prompt = PromptTemplate(
"You are a retail banking assistant. Answer only from the provided context.\n"
"If the answer is not in context, say you don't know.\n\n"
"Context:\n{context_str}\n\nQuestion:\n{query_str}\n\nAnswer:"
)
query_engine = index.as_query_engine(text_qa_template=qa_prompt)
Testing the Integration
Run a retrieval test against a known policy question. You want to confirm three things: ingestion worked, Supabase stored vectors, and LlamaIndex can retrieve relevant chunks.
test પ્રશ્ન? # invalid?
Use this instead:
test_query_engine = index.as_query_engine(similarity_top_k=2)
result = test_query_engine.query("What is the fee for an international wire transfer?")
print(str(result))
Expected output should look like this:
The international wire transfer fee is $25 per transaction.
Additional correspondent bank fees may apply depending on destination.
If you get an empty or irrelevant answer:
- •check that embeddings were inserted into the correct Supabase table
- •verify your chunk size is not too large
- •confirm the docs actually contain the answer text
- •inspect RLS policies if queries work locally but fail in deployed environments
Real-World Use Cases
- •
Customer support copilot
- •Answer questions about account opening, debit card replacement, overdrafts, and wire transfers from approved banking content only.
- •
Branch staff assistant
- •Let employees query internal SOPs for KYC checks, AML escalation paths, and loan application requirements.
- •
Product FAQ agent
- •Power an AI assistant on your retail banking website that explains savings accounts, mortgage basics, credit card terms, and fee schedules with grounded answers.
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