System Architecture
Three-Layer Collaboration Model
1. RAG Execution Unit (Sequential Collaboration)
Query Rewriting → Multi-path Retrieval → Answer Generation
Executes a complete RAG workflow independently
2. Checker Agent (Cyclic Collaboration)
- Multi-dimensional scoring (relevance, accuracy, completeness, timeliness)
- Provides improvement suggestions when scores are insufficient
- Supports up to 3 retry attempts
3. Supervissor Agent (Supervisor Collaboration)
- Task decomposition: Breaks complex problems into sub-queries
- Parallel execution: Multiple RAG units process simultaneously
- Result aggregation: Combines sub-answers in to final response
- Quality monitoring: Checks and optimizes final results
Technology Stack
- Java 17+
- Spring Boot 3.4.4
- Spring AI Alibaba 1.1.2.0
- DashScope (Qwen LLM)
- Chroma (Vector Database)
Quick Start
1. Environment Configuration
Set DashScope API Key:
export DASHSCOPE_API_KEY=your-api-key
2. Start Vector Database (Optional)
docker run -d --name chroma -p 8000:8000 chromadb/chroma
3. Run Project
mvn spring-boot:run
API Endpoints
Simple RAG Mode
curl -X POST http://localhost:8081/api/rag/simple \
-H "Content-Type: application/json" \
-d '{"question": "What is Spring AI?"}'
Checker RAG Mode
curl -X POST http://localhost:8081/api/rag/checker \
-H "Content-Type: application/json" \
-d '{"question": "Compare Spring AI and LangChain"}'
Supervisor RAG Mode
curl -X POST http://localhost:8081/api/rag/supervisor \
-H "Content-Type: application/json" \
-d '{"question": "Analyze pros and cons of Spring AI vs LangChain4j"}'
Project Structure
src/main/java/com/example/agenticrag/
├── AgenticRagApplication.java # Main application
├── config/
│ └── GraphConfig.java # Graph configuration
├── controller/
│ └── AgenticRagController.java # API controller
├── service/
│ └── AgenticRagService.java # Business service
└── graph/
├── RagGraph.java # RAG execution graph
├── CheckerGraph.java # Checker graph
├── SupervisorGraph.java # Supervisor graph
├── state/
│ └── RagState.java # State object
└── node/
├── QueryRewriterNode.java # Query rewriting node
├── MultiRetrievalNode.java # Multi-path retrieval node
├── AnswerGeneratorNode.java # Answer generation node
├── ScoringNode.java # Scoring node
├── TaskSplitterNode.java # Task decomposition node
└── ResultMergerNode.java # Result aggregation node
Configuration Details
agentic-rag:
checker:
minimum-score: 80 # Minimum passing score
max-attempts: 3 # Maximum retry attempts
Extension Guide
Adding New Node Types
- Create new node class in
graph/nodepackage - Implement
process(RagState state)method - Add node to graph definition
Adding New Scoring Dimensions
Modify ScoringNode class to include additional scoring criteria
Integrating Other Vector Databases
Update MultiRetrievalNode class to support alternative retrieval methods