Agentic AIC#verifiedVerified

Evaluator-Optimizer Agent Pattern in C#

An iterative refinement loop where an 'Evaluator' provides granular feedback on an 'Optimizer’s' output until quality thresholds are met.

How to Implement the Evaluator-Optimizer Agent Pattern in C#

1Step 1: Define the Feedback record and interfaces

public record Feedback(bool IsPass, string Critique, double Score);

public interface IOptimizer
{
    Task<string> GenerateAsync(string task);
    Task<string> RefineAsync(string current, string feedback);
}

public interface IEvaluator
{
    Task<Feedback> CheckAsync(string output);
}

2Step 2: Implement the iterative refinement loop

public static class RefinementLoop
{
    private const int MaxIterations = 5;

    public static async Task<string> RunAsync(
        string task, IOptimizer optimizer, IEvaluator evaluator)
    {
        var currentOutput = await optimizer.GenerateAsync(task);

        for (var i = 0; i < MaxIterations; i++)
        {
            var feedback = await evaluator.CheckAsync(currentOutput);

            if (feedback.IsPass)
                return currentOutput;

            currentOutput = await optimizer.RefineAsync(
                currentOutput, feedback.Critique);
        }

        return currentOutput;
    }
}

Evaluator-Optimizer Agent Pattern Architecture

hourglass_empty

Rendering diagram...

lightbulb

Evaluator-Optimizer Agent Pattern in the Real World

Think of a student writing an essay (Optimizer) and a teacher grading it with detailed feedback (Evaluator). The student revises based on the red-ink comments and resubmits. This cycle repeats until the essay meets the teacher’s standards—or the deadline (max iterations) is reached.