Train LLMs for long-context reasoning using KeyChain synthesis: convert short multi-hop QA into long-context tasks by embedding UUID chains in distractor documents, enabling 16K→128K generalization.
Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
Train LLMs for long-context reasoning using KeyChain synthesis: convert short multi-hop QA into long-context tasks by embedding UUID chains in distractor documents, enabling 16K→128K generalization.
Technique: KeyChain Synthesis for Long-Context RL Training
Standard RL training for reasoning uses short-context tasks (e.g., 2-4 hops). Scaling to long contexts requires massive data, but LoongRL introduces KeyChain synthesis: automatically convert short multi-hop tasks into challenging long-context tasks by embedding a chain of UUIDs that must be traced through hundreds of irrelevant documents.
The method induces models to learn planning, retrieval, reasoning, and verification patterns without requiring expensive long-context annotation. Models trained at 16K context length effectively handle 128K-length tasks, and smaller models (7B) achieve performance comparable to frontier models (o3-mini, DeepSeek-R1).
Core Concept
LoongRL operates on three principles:
KeyChain Synthesis: Generate long-context tasks by embedding UUID chains in document collections
Efficient Data Generation: No manual long-context annotations needed; synthetic tasks are free to generate
Generalization: Models trained on 16K context handle 8× longer contexts without fine-tuning
The insight is that the structure of the task (finding a chain through noise) naturally encourages the reasoning patterns needed for long-context understanding.
Architecture Overview
Task Synthesizer: Convert short QA tasks into long-context KeyChain variants
Document Generator: Create distractor documents with planted UUID chain
RL Trainer: Standard RL loop with synthetic long-context tasks
Verifier: Check if model correctly traced chain and answered question
Curriculum Scheduler: Gradually increase context length during training
Implementation Steps
The core innovation is KeyChain synthesis. This example shows how to generate tasks and train on them.
f"""
Document: Research Paper Abstract
Title: Important Study on Machine Learning
Question embedded here: {self.question}
Reference ID: {uuid_id}
Next step: Search for documents referencing {self.chain[step_idx + 1] if step_idx + 1 < len(self.chain) else"final answer"}
Content: Lorem ipsum dolor sit amet...
"""
elif
len
self
1
# Last document contains answer
f"""
Document: Conclusion Summary
Previous Reference: {self.chain[step_idx - 1]}
Current ID: {uuid_id}
ANSWER TO THE QUESTION: {self.answer}
This document provides the final answer after following the chain.
"""
else
# Intermediate documents link chain
f"""
Document: Supporting Material
Previous Step: {self.chain[step_idx - 1]}
Current Reference: {uuid_id}
Next Reference: {self.chain[step_idx + 1]}
This document connects the reasoning chain.
"""
# Add distractors (irrelevant documents)
self
len
self
for
in
range
f"""
Document: Unrelated Content
ID: {uuid.uuid4()}
This is a completely unrelated document that should be skipped.
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
"""
# Shuffle documents
# Combine into context
"\n\n---\n\n"
# Truncate/pad to desired context length
if
len
self
self
elif
len
self
# Pad with irrelevant content
"Extra information: "
100
self
len
self
self
f"""
You have {len(documents)} documents. Your task is to:
1. Find the UUID chain: {self.chain[0]} -> {self.chain[1]} -> ... -> {self.chain[-1]}
2. Trace through documents using the references
3. Answer the question: {self.question}
Documents:
{context[:self.context_length]}
Answer:
"""
return
self
class
LongContextRLTrainer
"""
RL trainer for long-context reasoning using KeyChain tasks.
"""
def
__init__
self, model, tokenizer
self
self
def
create_keychain_dataset
self,
short_qa_pairs: List[Tuple[str, str]],
num_context_lengths: int = 4
List
"""
Convert short QA pairs into long-context KeyChain tasks.
Generate variants at different context lengths.
"""
4000
8000
16000
32000
# Progressive difficulty
for
in
for
in
int
150
# ~150 tokens per doc
return
def
train_step
self, task: KeyChainTask
Dict
"""
Single training step: model attempts KeyChain task.
"""
self
# Generate response
self
200
0.7
# Verify: did model correctly trace chain AND answer question?
all
in
for
in
in
# Reward: both chain tracing and correct answer necessary
float
and
# RL loss (simplified DPO-style)
# Reward maximization
return
"reward"
"chain_correct"
"answer_correct"
"response_length"
len
self
def
train_long_context_reasoning
model,
tokenizer,
short_qa_pairs: List[Tuple[str, str]],
num_epochs: int = 3,
context_length_start: int = 4000,
context_length_end: int = 16000
"""
Train model on progressively longer contexts using KeyChain synthesis.
"""
The key insight is that UUID chain tracing induces the exact reasoning patterns needed for long-context understanding: planning (find first UUID), retrieval (locate next UUID), reasoning (interpret content), verification (confirm chain).
Practical Guidance
Training Context
Test Context
Generalization
4K
4K
Baseline
8K
16K
2× extrapolation
16K
64K
4× extrapolation
16K
128K
8× extrapolation
When to Use:
Need long-context reasoning without expensive annotation
Models training on 16K, deploy on 128K contexts
Synthetic data generation is acceptable (no domain-specific docs required)