For the last two years, the RAG (Retrieval-Augmented Generation) concept has become increasingly popular by combining the power of LLMs with the ability to build AI systems that can operate over specific enterprise knowledge bases. However, simple so-called Naive RAG architectures have limitations and in many cases are not as effective as they could be. In this workshop, we'll discuss some of these limitations and take a quick look at existing RAG improvement strategies -exploring how the effectiveness of RAG can be optimized across the Ingestion, Retrieval, and Augmentation phases. One of the most well-known and effective optimization strategies is Agentic RAG. After establishing the theoretical foundation, through live coding and detailed code explanation, you'll see how Spring AI's familiar programming model makes it straightforward to build intelligent AI systems. We'll explore how to build an Agentic RAG system using Spring AI that can autonomously decide when and how to gather needed information from different data sources as vector databases, relational databases, and API calls. The process will follow incremental steps for continuous software improvement. Step 1: We'll create a Naive RAG by implementing the RAG ETL pipeline, then implement the Retrieve, Augment, and Generation phases following some of the best practices of separation of concerns and layered architecture. Step 2: Once we've verified that our Naive RAG works well, we'll transform it into an Agentic RAG by adding an agent in the Retrieval phase. This agent will be able to make intelligent decisions based on the nature of the user's question about which data source to query - vector database, relational database, or API calls. Step 3: (if time permits): We'll evolve the system into a distributed architecture by integrating with MCP (Model Context Protocol) servers. Instead of using local tools for data retrieval, the agent will communicate with three separate MCP servers, each responsible for gathering information from its own data source with its own specialized retrieval logic. By the end, you'll have a working blueprint for an AI application that doesn't just retrieve documents - it reasons about when retrieval is necessary, synthesizes information from multiple sources, and integrates seamlessly with your existing Spring Boot ecosystem.
Talk Level:
INTERMEDIATE
Bio:
Jordan Jovkov is a Team Lead / Senior Software Developer.
He entered programming in 1993 and quickly realized that this would be his career passion. During high school, he was part of the school's informatics team and took part in olympiads and competitions.
He has worked as a developer, team leader, and responsible person for certain projects. He has participated in the development and maintenance of critical projects for Bulgarian government institutions.
He has delivered lectures at DEV.BG and SoftUni. He has also been a teaching assistant at the Technical University of Sofia, as well as at the Java Academy of the Bulgarian Java User Group.
He has experience in the whole software development lifecycle. In a previous company, he was a key figure in the process of training new colleagues in the Java team. Beyond the technical aspects, he also enjoys working with people. In this regard, he has experience managing small teams, communicating with other IT departments, organizing collaboration with other IT companies, as well as installing and supporting software for clients.
He always strives to follow good practices and create quality software products.