Mahamudul Hasan Rubel
HomeAboutProjectsSkillsExperienceBlogPhotosContact
Mahamudul Hasan Rubel

Senior Software Engineer crafting high-performance web applications and SaaS platforms.

Navigation

  • Home
  • About
  • Projects
  • Skills
  • Experience
  • Blog
  • Photos
  • Contact

Get in Touch

Available for senior/lead roles and consulting.

bd.mhrubel@gmail.comHire Me

© 2026 Mahamudul Hasan Rubel. All rights reserved.

Built with using Next.js 16 & Tailwind v4

Back to Blog
AI/MLJune 21, 20264 min read

LLM agents self-correction: Building Recursive Feedback Loops

LLM agents self-correction relies on recursive feedback loops to catch and fix errors before they reach your users. Learn to build resilient workflows.

LLMAgentsPythonPrompt EngineeringAI EngineeringAIRAG
Wooden letter tiles spelling 'feedback' on a green rack, representing communication and evaluation.

Last month, I was debugging an agentic workflow that kept failing to parse a specific date format in a user's request. Instead of hard-coding a dozen regex patterns, I realized I needed a system that could "see" its own mistakes and try again. By implementing LLM agents self-correction via a recursive feedback loop, we managed to reduce our failure rate from roughly 15% to under 2% for complex tasks.

When you're building production AI, you can't rely on the model getting it right the first time every time. You need a mechanism that treats the output as a draft, validates it, and forces the model to iterate when it misses the mark.

Why you need a feedback loop

Most developers start by chaining prompts together, hoping the model stays on track. But as complexity grows, the probability of hallucination or syntax errors increases exponentially. If you're struggling with output stability, you should check out my previous thoughts on getting reliable structured output from an LLM in production.

A feedback loop isn't just about "retry logic." It’s about passing the error back into the context window with a clear instruction on how to fix the specific failure.

Designing the recursive flow

Abstract view of a dark and intricate fractal structure showcasing complex geometry and depth.

The core idea is to treat the LLM as a function that takes (input, history, error_message) and returns (output, success_bool). Here is the basic flow:

  1. Generation: The agent produces an output.
  2. Validation: A validator (like a Pydantic schema or a custom function) checks the output.
  3. Correction: If validation fails, the error is fed back to the agent with the original prompt.
  4. Recursion: The agent attempts the task again, now aware of its previous error.

We first tried a simple "try-catch" block that just retried the same prompt. It failed because the model didn't know why it failed, so it kept repeating the same mistake. We eventually switched to a schema-aware validator. If you haven't yet, look into structured output: implementing deterministic JSON schema validation to make this part of the process much cleaner.

Code implementation

Here’s a simplified version of what I’m running in production using a basic Python loop.

PYTHON
def generate_with_correction(prompt, validator, max_retries=3):
    current_prompt = prompt
    for i in range(max_retries):
        response = call_llm(current_prompt)
        is_valid, error = validator(response)
        
        if is_valid:
            return response
        
        # Inject the error back into the next turn
        current_prompt = f"{prompt}\n\nPrevious attempt failed with: {error}. Please fix."
        
    raise Exception("Max retries reached")

This pattern is surprisingly robust. By explicitly telling the model "you failed because of X," you’re using LLM agents self-correction to guide the reasoning process.

When to stop the recursion

One trap I fell into was an infinite loop where the model would get stuck in a "correction cycle" that never converged. You have to put a hard limit on retries—usually 2 or 3 is plenty. If it can't get it right by the third try, it’s usually time to escalate to a human or fail gracefully.

Also, be mindful of your token usage. Every loop iteration costs money. If your validator is too strict or your prompt is too vague, you’re burning tokens on cycles that aren't actually improving the output. You might want to integrate LLM guardrails for production: input validation and output filtering to catch obvious failures before they even trigger a re-run.

Lessons learned in the trenches

I'm still tinkering with the "correction prompt." Sometimes, simply appending "Fix this error" isn't enough. I've found that providing a "reasoning field" where the model explains its correction before outputting the final result significantly improves the success rate.

Also, don't forget that these loops work best when you have clear LLM agents self-correction triggers. If your validation logic is fuzzy, the agent will get confused by feedback that isn't actionable. Keep your validators deterministic and your error messages descriptive.

What I'm still figuring out is how to handle "style" corrections versus "syntax" corrections. Syntax is easy to validate; style is subjective. I'm currently experimenting with using a second, smaller model as a "judge" to evaluate the quality of the output before accepting it. It's more expensive, but for high-stakes tasks, the extra latency—usually around 300ms—is a trade-off I'm willing to make.

Have you tried implementing these loops in your own projects? I'd be curious to hear if you've found a better way to handle the "re-prompting" phase without bloating the context window.

Back to Blog

Similar Posts

Upward angle view of classic historic buildings against a clear blue sky, showcasing urban architecture.
AI/MLJune 21, 20264 min read

LLM Cost Control: Mastering Dynamic Context Window Management

LLM cost control is vital for production RAG pipelines. Learn how to implement dynamic context window management to optimize token usage and reduce latency.

Read more
Selective focus close-up of the word justice in a dictionary, emphasizing concept clarity.
AI/ML
June 21, 2026
4 min read

Optimizing RAG Retrieval: A Practical Guide to Semantic Reranking

Master semantic reranking to improve your RAG retrieval accuracy. Learn how to implement cross-encoders to filter noisy search results and boost precision.

Read more
Detailed image of a modern industrial control panel featuring multiple connectors and buttons.
AI/MLJune 20, 20265 min read

LLM Guardrails for Production: Input Validation and Output Filtering

LLM guardrails are essential for production AI. Learn how to implement reliable input validation and output filtering to keep your LLM apps safe and secure.

Read more