The plumbing behind the AI analyst
A Java/Spring Boot blueprint for building research agents that don't hallucinate their sources away.

What it does
FinSight-AI ingests financial filings, reports, and market data, then generates versioned equity-research briefs with cited evidence. It is deliberately backend-heavy: the project is a recipe for the infrastructure around an LLM agent, not just another chat wrapper. A runnable dashboard exposes the workflow state machine, report traces, and RAG evaluation metrics.
The interesting bit
The system treats trust as a caching problem. Reports are keyed to dataSnapshotHash and reportVersion, not loose prompt strings, so you know whether an answer is stale. Redis Lua single-flight leases with fencing tokens prevent duplicate task execution, and the UI surfaces idempotency keys, lease owners, and attempt counts instead of hiding them in logs.
Key highlights
- Recoverable agent workflow with explicit stages: ingestion → metrics → indexing → intelligence build → AI report generation
- Redis Lua single-flight + fencing tokens for concurrency control, with local fallback locks
- PostgreSQL/pgvector hybrid retrieval (JSONB, full-text, embeddings) with deduplicated evidence chunks
- RAG evaluation suite: hit rate, evidence coverage, hallucination risk, conclusion consistency, confidence calibration
- Deterministic fallback analysis when Ollama is unavailable, so demos don’t break
- Full Docker Compose stack including RabbitMQ, Elasticsearch, MinIO, and a FastAPI Python sidecar
Caveats
- The AI sidecar defaults to rule-based fallback unless you install and run Ollama with
qwen2.5:7b; LLM-backed analysis is optional, not the default - 8 GB RAM recommended for the full stack; this is not a lightweight single-container demo
- The project includes explicit “resume and interview notes” documentation, signaling it is partly a portfolio piece
Verdict
Worth studying if you are building production RAG pipelines and need patterns for idempotency, evidence tracing, and evaluation. Skip it if you want a drop-in stock-picking tool; the value is in the architecture, not the trading signals.