Multi-agent analysis for public tenders
An academic MVP: two specialists with separate RAGs and a consolidator with structured output that feeds a dashboard.
Summary
Context
At university, the challenge was to support public-tender analysis: understanding the market before the call for bids, and comparing the candidate companies' documents after it.
Action
I built two specialist agents that are always consulted, a pre-tender one (general data and web) and a post-tender one (company documents), with local Chroma stores separated by sector. A consolidator returns structured output for a dashboard with three charts. Embedding-quota overruns have a fallback.
Result
A working MVP for two sectors (schools and technology), delivered as a UTFPR project.
Lesson
Fan-out to specialists plus a consolidator with a schema is a simple design that solves a lot before you need to think about routers.
Architecture
Long version
Design
- Input: region, material and sector.
- Specialists (always both, no router): pre-tender, with general data and web, and post-tender, with the candidate companies' documents.
- Local RAG: Chroma, with stores separated by sector. Gemini handles embeddings and chat.
- Consolidator: merges the two analyses into structured output that feeds three charts (pre-tender, post-tender and comparative average).
Lessons learned
- Schema on the output. With structured output, the dashboard consumes the LLM result without brittle parsing.
- Separate stores. Separate RAGs keep one context from contaminating another.