All work
AI

Nova — AI legal chatbot for Vietnamese securities

GraphRAG chatbot for Vietnamese securities and law — LLM dependency at 5% or less, no answers without evidence

Nova — AI legal chatbot for Vietnamese securities screenshot 1
View larger

Context

NOVA is a GraphRAG chatbot for Vietnam's securities and legal domain, designed over 4,781 legal document nodes with LLM query dependency held at 5% or less so it never answers without evidence. We developed a legal and financial information chatbot for customers and employees of Shinhan Securities Vietnam (SSV). Financial and legal answers must be accurate and accompanied by evidence, while investment recommendations must be blocked for regulatory reasons.

Problem

General-purpose LLM chatbots generate plausible but incorrect answers and cannot provide supporting legal provisions. Having an LLM generate database queries directly also poses significant risks to security, cost, and accuracy.

What we did

  • Designed a GraphRAG architecture combining a Neo4j knowledge graph, vector search, and Claude API.
  • Split query generation into 3 stages—template matching, parameter DSL, and LLM Text2Cypher—to reduce LLM dependency to 5% or less.
  • Applied hallucination detection (grounding score) and 3-stage investment recommendation blocking logic to the pipeline.
  • Externalized domain logic into YAML packages so another industry could be supported without code changes.
  • Designed a financial ontology with 17 nodes and 21 relationships, combining FinQA, FIBO, and FinDKG.

Results

MetricValueNotes
Legal document nodes4,781 recordsNeo4j LegalDocument
Legal embeddings20,094 recordsmultilingual-e5-large, approximately 174 minutes
Unit tests122/122 passedBased on the domain package refactoring
Text2Cypher dependency5% or lessTemplates 80% · DSL 15%
Workbench API32 endpointsOntology · pipeline · metrics · feedback
On-premise payback period9~10 monthsEstimated initial investment ₩100M, annual savings ₩130M

Timeline · Scale · Stack

  • Timeline: Design began in 2026-03 → legal embeddings and on-premise proposal in 2026-05
  • Scale: 7 Docker Compose containers (Neo4j 5 · Redis 7 · PostgreSQL 16 · API · worker · beat · Nginx), 18 PostgreSQL tables
  • Stack: Python · FastAPI · Neo4j · PostgreSQL+pgvector · Redis · Claude API · Docker · GraphRAG

What this case shows

In domains where errors are unacceptable, we use the LLM only as the final step in retrieval and assembly. We do not provide answers that cannot be accompanied by evidence.

Project details

Category
AI
As of

July 15, 2026

Reading time

2 min read

Tech stack
PythonFastAPINeo4jPostgreSQLpgvectorClaude AIRedisDockerGraphRAG