Prime Intellect 发布 Verifiers v1:面向 Agent 强化学习的可组合环境栈
Prime Intellect Releases Verifiers v1: Composable Tasksets, Harnesses, and Runtimes for Agentic RL Training and Evaluations
Prime Intellect launched verifiers 0.2.0. It previews a rewritten core, shipped under the new verifiers.v1 namespace. Modern evaluations now run coding agents with tools, compaction, and subagents. Accordingly, v1 rebuilds environments to run these agentic workloads at scale. What is verifiers v1? First, consider what verifiers is: Prime Intellect’s environment stack for agentic reinforcement learning and evaluations. Previously, an environment bundled its data, agent logic, and infrastructure together. In contrast, v1 breaks that bundle into three composable pieces. A taskset defines the work: the data, tools, and scoring. A harness solves the task and produces a rollout. That harness can be a ReAct loop, a CLI agent, or your own. The rollout then runs inside a runtime, either local or in a sandbox. Because the pieces decouple, any taskset runs under any compatible harness. How the Architecture Works? With those pieces defined, the next question is how they communicate. The central piece is the verifiers-managed interception server. It sits between the agent’s runtime and the inference server. Specifically, it proxies requests to, and responses from, inference. Meanwhile, it records the trace, sets sampling parameters, and can rewrite tool responses. That rewriting helps mitigate reward hacks during training. For scale, each server multiplexes a constant number of rollouts, defaulting to 32. A pool then scales elastically with observed concurrency. The server also owns a client that relays those requests. During evaluation, an EvalClient acts as a blind HTTP proxy. During training, a TrainClient wraps renderers for faithful token-in RL training. Because harnesses speak different dialects, verifiers supports three as of now. These are OpenAI Chat Completions, OpenAI Responses, and Anthropic Messages. A dialect adapter normalizes each wire format into canonical vf.types. Consequently, your scoring logic stays independent of the agent tested. Run rollout</button> <button id="vf-reset" class="vf-ghost">Reset</button> <span class="vf-lab">Harness dialect:</span> <select id="vf-dialect"> <option value="Chat">OpenAI Chat Completions</option> <option value="Resp">OpenAI Responses</option> <option value="Msg">Anthropic Messages</option> </select> </div> <div class="vf-stage"> <div class="vf-row" style="margin-bottom:14px"> <div class="vf-node vf-taskset" id="n-taskset"> <div class="vf-nt">Taskset</div> <div class="vf-nd">what · data · tools · scoring</div> </div> </div> <div class="vf-runtime-wrap"> <span class="vf-runtime-tag">RUNTIME · where (subprocess · Docker · sandbox)</span> <div class="vf-row" id="vf-flow"> <div class="vf-node vf-harness" id="n-harness"> <div class="vf-nt">Harness</div> <div class="vf-nd">how · Codex · Terminus 2 · ReAct</div> </div> <div class="vf-arrow">→</div> <div class="vf-node vf-intercept" id="n-intercept"> <div class="vf-nt">Interception Server</div> <div class="vf-nd">proxy · records trace</div> </div> <div class="vf-arrow">→</div> <div class="vf-node vf-infer" id="n-infer"> <div class="vf-nt">Inference Server</div> <div class="vf-nd">vLLM · model</div> </div> <div class="vf-packet" id="vf-packet">req</div> </div> </div> <div class="vf-status" id="vf-status">Press “Run rollout” to send a request through the interception server.</div> </div> <div class="vf-grid"> <div class="vf-panel"> <h3>Trace · message graph (v1)</h3> <div class="vf-hint">Each message is a unique node. Size grows linearly in turns.</div> <div class="vf-graph" id="vf-graph"> <div class="vf-empty">No messages recorded yet.</div> </div> </div> <div class="vf-panel"> <h3>Trace size: v0 vs v1</h3> <div class="vf-hint">Drag to change turns. v0 repeats prompt-completion pairs; v1 stores unique nodes.</div> <div class="vf-chart"> <svg viewBox="0 0 260 150" id="vf-svg"> <line x1="30" y1="130" x2="255" y2="130" stroke="#dfe6ef" stroke-width="1.5"/> <line x1="30" y1="10" x2="30" y2="130" stroke="#dfe6ef" stroke-width="1.5"/> <path id="vf-v0" fill="none" stroke="#d1477a" stroke-width="2.5"/> <path id="vf-v1" fill="none" stroke="#0b8f8f" stroke-width="2.5"/> <text x="140" y="147" font-size="9" fill="#94a3b8" text-anchor="middle">turns →</text> </svg> </div> <div class="vf-legend"> <span><i style="background:#d1477a"></i> v0 · quadratic</span> <span><i style="background:#0b8f8f"></i> v1 · linear</span> </div> <div class="vf-slider-row"> <span>Turns</span> <input type="range" id="vf-turns" min="4" max="60" value="24"> <span id="vf-turns-val" style="width:26px;text-align:right">24</span> </div> </div> </div> <div class="vf-foot"> Illustrative demo of the verifiers v1 architecture · Built by <b>Marktechpost</b> </div> </div> <script> (function(){ var root=document.getElementById("vfv1-demo"); var packet=document.getElementById("vf-packet"); var status=document.getElementById("vf-status"); var graph=document.getElementById("vf-graph"); var runBtn=document.getElementById("vf-run"); var resetBtn=document.getElementById("vf-reset"); var dialectSel=document.getElementById("vf-dialect"); var nHarness=document.getElementById("n-harness"); var nIntercept=document.getElementById("n-intercept"); var nInfer=document.getElementById("n-infer"); var flow=document.getElementById("vf-flow"); var turn=0, running=false; var msgs=[]; // recorded nodes var dialectLabel={Chat:"Chat",Resp:"Resp",Msg:"Msg"}; function pos(el){ // center x relative to flow var f=flow.getBoundingClientRect(); var r=el.getBoundingClientRect(); return (r.left - f.left) + r.width/2 - 32; } function clearActive(){ [nHarness,nIntercept,nInfer].forEach(function(n){n.classList.remove("vf-active");}); } function movePacket(fromEl,toEl,ms,label,isResp){ return new Promise(function(res){ packet.textContent=label; packet.classList.toggle("vf-resp",!!isResp); packet.style.transition="none"; packet.style.left=pos(fromEl)+"px"; packet.style.opacity="1"; void packet.offsetWidth; packet.style.transition="left "+ms+"ms cubic-bezier(.45,.05,.35,1)"; packet.style.left=pos(toEl)+"px"; setTimeout(res,ms); }); } function addNode(role,label,color){ if(msgs.length===0){ graph.innerHTML=""; } var d=document.createElement("div"); d.className="vf-msg"; d.innerHTML='<span class="vf-dot" style="background:'+color+'">&
原文超出正文长度上限,此处截断——上游还有内容,完整版见上方「原文 ↗」。
更进一步:量化金融体系
看懂新闻只是起点——沿量化金融路径,把它变成能交付的工程能力