Reinforcing Multi-Turn Reasoning in LLM Agents via Turn-Level Credit Assignment
May 20, 2025 ยท View on GitHub
This repository contains the code in our work: "Reinforcing Multi-Turn Reasoning in LLM Agents via Turn-Level Credit Assignment"

Installation
Install Python environment
conda create -n verifier_env python=3.11 -y
source activate verifier_env
pip install -e .
pip install flash-attn --no-build-isolation
Install Java environment (if needed)
apt-get remove --purge openjdk* -y
apt-get update
apt-get install -y openjdk-21-jdk
java -version
You can run bash quick_start_install.sh for a quick start installation.
Download Wiki search index
python verifiers/tools/local_wiki_search.py
Multi-Turn Agent Overview
Tool Env: verifiers/envs/tool_env.py
Search Tool: verifiers/tools/local_wiki_search.py
System Prompt: verifiers/prompts/system_prompts.py
Reward Functions: verifiers/rubric/triviaqa_rubric.py
- Turn-Level Rewards:
- tool execution:
tool_execution_reward_func - search result answer presence:
exist_answer_in_search_results
- tool execution:
- Outcome Rewards:
- final anwer presence:
exist_answer_reward_func - exact match:
exact_match_reward_func - xml format:
parser.get_format_reward_func - xml tage usage:
parser.get_xml_reward_func
- final anwer presence:
Trainers:
- GRPO: original GRPO with trajectory-level advantage estimation
- GRPO-OR: GRPO using only outcome rewards
- GRPO-MR: GRPO using merged outcome and turn-level rewards
- MT-GRPO: GPRO variant with turn-level advantage estimation using both outcome and turn-level rewards
Usage
Run MT-GRPO
# bash scripts/run_mt_grpo.sh
accelerate launch --config-file configs/zero3.yaml --num-processes 7 \
verifiers/examples/triviaqa_search.py \
--model_name "Qwen/Qwen2.5-7B" \
--num_gpus 8 \
--learning_rate 1e-6 \
--num_generations 21 \
--per_device_train_batch_size 12 \
--grad_accum_steps 4 \
--num_iterations 2 \
--max_steps 300 \
--beta 0 \
--trainer "mt_grpo" \
--turn_advantage_coef 1 \
Run GRPO-OR
# bash scripts/run_grpo_or.sh
accelerate launch --config-file configs/zero3.yaml --num-processes 7 \
verifiers/examples/triviaqa_search.py \
--model_name "Qwen/Qwen2.5-7B" \
--num_gpus 8 \
--learning_rate 1e-6 \
--num_generations 21 \
--per_device_train_batch_size 12 \
--grad_accum_steps 4 \
--num_iterations 2 \
--max_steps 300 \
--beta 0 \
--trainer "grpo" \
--no_turn_reward \
Run GRPO-MR
# bash scripts/run_grpo_mr.sh
accelerate launch --config-file configs/zero3.yaml --num-processes 7 \
verifiers/examples/triviaqa_search.py \
--model_name "Qwen/Qwen2.5-7B" \
--num_gpus 8 \
--learning_rate 1e-6 \
--num_generations 21 \
--per_device_train_batch_size 12 \
--grad_accum_steps 4 \
--num_iterations 2 \
--max_steps 300 \
--beta 0 \
--trainer "grpo" \
Acknowledgement
Our code implementation is built upon the open-source project verifiers.
Citation
If you find our work useful in your research please consider citing our paper:
@article{zeng2025reinforcing,
title={Reinforcing Multi-Turn Reasoning in LLM Agents via Turn-Level Credit Assignment},
author={Zeng, Siliang and Wei, Quan and Brown, William and Frunza, Oana and Nevmyvaka, Yuriy and Hong, Mingyi},
journal={arXiv preprint arXiv:2505.11821},
year={2025}
}