I’m building a multi-agent research assistant as part of my thesis, and the system is designed as a nine-agent pipeline where each agent handles a specific stage of the research process.
Agent 1 – Query Processing Agent: Takes the user’s research query and processes it into a structured representation that the downstream agents can use. Its job is to make sure the research request is clear and organized before the workflow begins.
Agent 2 – Literature Retrieval Agent: Searches for relevant research papers based on the processed query. It retrieves candidate papers and manages the retrieval results, helping establish the literature foundation for the rest of the pipeline.
Agent 3 – PDF Analysis Agent: Works with the retrieved research papers and extracts structured information from their PDF contents. This turns unstructured research documents into usable analytical data for later agents.
Agent 4 – Evidence Agent: Extracts scientific evidence from the analyzed papers. It organizes evidence by paper and tracks the supporting information, helping ensure that later conclusions can be traced back to the research sources.
Agent 5 – Method and Limitation Agent: Analyzes the methods used in the papers and identifies their limitations. The goal is to understand not only what previous studies found, but also how they conducted their research and where their approaches may fall short.
Agent 6 – Cross-Paper Comparison Agent: Compares information across multiple papers, bringing together evidence and methodological profiles to identify similarities, differences, and patterns across the literature.
Agent 7 – Research Synthesis Agent: Synthesizes the findings from the preceding analysis into a broader understanding of the research landscape. It helps connect individual paper-level insights into a coherent picture of the existing work.
Agent 8 – Research Gap Discovery Agent: Identifies potential research gaps from the synthesized observations. It validates candidate gaps against their supporting observations and provenance, checks upstream completeness, and preserves usable candidates even when the result is partial rather than treating incomplete inputs as a complete analysis.
Agent 9 – Gap Validation Agent: Evaluates whether the proposed research gaps are sufficiently supported. It checks candidate references against the observations and their source lineage, verifies relevant artifacts and source chunks, invokes a reviewer, and can use bounded adversarial retrieval to challenge the candidates. It then produces structured verdicts and an overall workflow validation status.
One of the most challenging parts of this project is not simply making nine agents work independently. It is making them work together reliably. Each stage depends on the quality and completeness of the previous stages, so I’m also building a shared memory architecture with state management, persistent storage, provenance tracking, and explicit status handling.
The bigger goal is to build a research assistant that does more than retrieve papers or generate summaries. I want it to follow a traceable process from a research question to evidence-based analysis and, ultimately, research gaps that can be critically evaluated.
Still a work in progress, but building and debugging this system has been a great learning experience in agentic AI, orchestration, and reliable multi-agent system design.
The biggest challenge I’m facing right now is LLM reliability. A multi-agent research workflow is a thinking-intensive task, and the quality of the underlying models matters a lot. But I’m running into provider-specific issues with Hugging Face, where model/provider incompatibilities sometimes block agents. What makes it particularly frustrating is that the same setup can work once and then fail on another run. Sometimes one agent works then fails in another run that same agent.
For those of you who have built multi-agent systems with Hugging Face Inference Providers: Are there provider-specific rate limits, usage quotas, or availability restrictions even on paid plans? Is this more likely to be a model–provider compatibility issue, temporary provider availability, or something related to inference limits?
I’d also love to hear how you handle this in production. Do you pin a specific provider, use automatic provider selection with fallbacks, or switch to dedicated inference endpoints? I’m trying to make the pipeline reliable without constantly fighting infrastructure issues instead of focusing on the actual research problem.