Improving AI Search Agents With Co-evolving Feedback
Listen to the summary
Uses a voice available on your device
Audio options
On this page 5 sections
Related concepts 5 concepts
Key Takeaways
- At the 7B scale, CAFE improves upon the strongest baseline (IGPO) by 2.1 EM and 1.3 F1 across seven benchmarks.
- The method significantly increases reliability, reducing the average answer-level hallucination rate from 17.6% to 12.6%.
- Performance plateaus are avoided by using alternating updates for the agent and critic instead of training them in isolation.
- CAFE was validated using Qwen2.5-7/3B-Instruct models and the BrowseComp-Plus dataset.
Summary & Methodology Analysis
CAFE addresses the problem of compound errors in long-horizon search tasks where early mistakes propagate through the trajectory. The methodology relies on a shared-parameter model initialized with recovery demonstrations that preserve error prefixes while injecting corrective feedback. During online reinforcement learning, the system uses a comparative feedback estimate to quantify feedback utility based on the success gap between different rollout strategies, applying feedback-aware advantage shaping to redistribute credit across interventions. This allows the system to guide the agent more effectively through complex, multi-step search environments.
Interactive System Flowchart
Illustrative Implementation
A short sketch of the paper's core idea, not the authors' own code.
# Illustrative sketch (not from the paper)
import torch
# 1. Load shared‑parameter model (e.g., Qwen2.5‑7B)
model = torch.nn.Module() # placeholder for the actual LLM
# 2. Gather failure prefixes and create recovery demonstrations
def make_recovery_demo(failure_prefix):
# keep erroneous prefix, append corrective feedback
return failure_prefix + "[CORRECTIVE FEEDBACK]"
# 3. Online RL step with Comparative Feedback Estimate (CFE)
def online_rl_step(state):
call_rollout = model(state) # with feedback call
skip_rollout = model(state) # without feedback call
# CFE = success_gap(call, skip) – abstracted as a scalar
cfe = compute_success_gap(call_rollout, skip_rollout)
# Feedback‑aware advantage shaping
advantage = cfe * (call_rollout.log_prob - skip_rollout.log_prob)
# Policy gradient update (simplified)
loss = -advantage.mean()
loss.backward()
optimizer.step()
optimizer.zero_grad()
# 4. Offline Rollout‑Derived Preference Optimization (RDPO) for the critic
def offline_rdpo(prefix_success, prefix_failure):
# Preferential loss aligning critic scores with successful prefixes
loss = preference_loss(critic(prefix_success), critic(prefix_failure))
loss.backward()
critic_optimizer.step()
critic_optimizer.zero_grad()
# 5. Alternating training loop
optimizer = torch.optim.Adam(model.parameters(), lr=1e-5)
critic_optimizer = torch.optim.Adam(critic.parameters(), lr=1e-5)
for epoch in range(num_epochs):
# online RL segment
for state in online_batch:
online_rl_step(state)
# collect rollouts for RDPO
success_prefixes, failure_prefixes = collect_prefixes()
offline_rdpo(success_prefixes, failure_prefixes)
// Illustrative sketch (not from the paper)
const tf = require('@tensorflow/tfjs-node');
// 1. Load shared‑parameter model (placeholder for Qwen2.5‑7B)
let model = tf.sequential(); // actual LLM would be loaded here
// 2. Build recovery demonstrations from failure prefixes
function makeRecoveryDemo(failurePrefix) {
// preserve erroneous prefix, append corrective feedback token
return failurePrefix + '[CORRECTIVE FEEDBACK]';
}
// 3. Online RL step with Comparative Feedback Estimate (CFE)
async function onlineRlStep(state) {
const callRollout = model.predict(state); // with feedback call
const skipRollout = model.predict(state); // without feedback call
const cfe = computeSuccessGap(callRollout, skipRollout); // scalar
// Feedback‑aware advantage shaping
const advantage = tf.mul(cfe, tf.sub(callRollout.logProb, skipRollout.logProb));
const loss = tf.neg(tf.mean(advantage));
const grads = tf.variableGrads(() => loss);
optimizer.applyGradients(grads.grads);
tf.dispose([loss, advantage, grads]);
}
// 4. Offline RDPO to update the critic
async function offlineRdpo(successPrefixes, failurePrefixes) {
const posScore = critic.predict(successPrefixes);
const negScore = critic.predict(failurePrefixes);
const loss = preferenceLoss(posScore, negScore);
const grads = tf.variableGrads(() => loss);
criticOptimizer.applyGradients(grads.grads);
tf.dispose([loss, grads]);
}
// 5. Alternating training loop
const optimizer = tf.train.adam(1e-5);
const criticOptimizer = tf.train.adam(1e-5);
for (let epoch = 0; epoch < NUM_EPOCHS; epoch++) {
// online RL segment
for (const state of onlineBatch) {
await onlineRlStep(state);
}
// collect rollouts for RDPO
const { successPrefixes, failurePrefixes } = collectPrefixes();
await offlineRdpo(successPrefixes, failurePrefixes);
}
Cross-Examination & FAQs
A deeper dive clarifying mechanics, constraints, and baseline evaluations.
Q1. What is the primary contribution of CAFE?
CAFE is a framework for self-improving search agents that uses co-evolving feedback to enhance performance and reduce hallucinations.
Q2. Does CAFE improve upon existing search methods?
Yes, at the 7B scale, it outperforms the strongest baseline (IGPO) by 2.1 EM and 1.3 F1 on seven agentic search benchmarks.
Q3. How does CAFE affect model accuracy?
It improves reliability by reducing the average answer-level hallucination rate from 17.6% to 12.6%.
Q4. Why is alternating the update of the agent and critic important?
One-sided ablations show that improving only the agent or only the critic independently eventually plateaus, whereas alternating the two updates continues to drive performance improvements.
Q5. What specific models and datasets were used for evaluation?
The authors used Qwen2.5-7/3B-Instruct models and evaluated across seven agentic SearchQA benchmarks along with BrowseComp-Plus.
Q6. What happens to feedback as the agent learns?
Because online policy updates shift the agent's state and failure distributions, feedback learned from earlier trajectories may lose relevance over time.
Q7. How does the system handle failed trajectories offline?
The authors use rollout-derived preference optimization to update the critic using prefix-matched successful and failed trajectories to reduce outcome confounding.
Q8. Does the paper specify the exact memory or compute requirements?
No, the paper does not specify the computational resource requirements.
Q9. What role does the BrowseComp-Plus dataset play?
It is used as an additional evaluation source to measure the performance of the CAFE framework.