Introductie van Strands Decider 2B: een klein, open source beslissingsmodel
Strands Decider 2B is een klein, open source beslissingsmodel dat is geoptimaliseerd voor snelle experimenten, lokale ontwikkeling en innovatie.
Eerder dit jaar kondigden we strands-labs aan, een plek om in de praktijk aan de slag te gaan met geavanceerde benaderingen van agentische AI. Vandaag voegen we daar Strands Decider 2B aan toe: een klein beslissingsmodel dat is geoptimaliseerd voor snelle experimenten, lokale ontwikkeling en innovatie.
Wat is een beslissingsmodel?
Strands Decider behoort tot een nieuwe klasse van beslissingsmodellen, of 'systeem-1-modellen'. Dit type model heeft veel aandacht gekregen sinds de lancering van Jev door TypeSafe AI eerder deze maand. In tegenstelling tot Large Language Models (LLM's), die willekeurige output kunnen genereren, zijn beslissingsmodellen ontworpen om te kiezen uit sets van opties.
Voorbeelden van taken voor beslissingsmodellen:
- Keuzes: "Gaat de zin 'zet de lampen aan' over het koffieapparaat? Ja of nee."
- Classificatie: "In welke taal is de zin 'sihamba ngokushesha' geschreven? Engels, Zulu of Nederlands."
- Numerieke scores: "Heeft de zin 'dit is het beste document dat ik ooit heb gelezen' een positieve sentimentwaarde? Geef een score tussen 0 en 1."
Voor- en nadelen
In ruil voor deze verminderde flexibiliteit zijn beslissingsmodellen sneller en krachtiger bij een bepaalde modelgrootte. Ze produceren altijd een antwoord uit de geselecteerde opties en kunnen met een zeer lage latentie draaien.
De keerzijde is dat deze benadering (waarbij alle outputs in één parallelle pass worden gegenereerd) het model significant minder geschikt maakt voor het oplossen van complexe problemen dan redeneermodellen. Vanwege het onvermogen om tekst te genereren, is het ongeschikt voor coderen, chatbots, het samenvatten van documenten en andere gangbare LLM-taken.
Voordelen voor agentische workflows
Beslissingsmodellen geven elke beslissing een kwalitatieve betrouwbaarheidsscore (bijv. "Hoe zeker ben ik dat dit ja/nee-antwoord correct is?"), iets wat niet beschikbaar is via de inference-API's van frontier LLM's. Daarnaast is het zeer efficiënt om meerdere vragen over dezelfde prompt te stellen.
Deze eigenschappen maken ze perfect voor de agentische workflows die veel ontwikkelaars bouwen met de Strands Harness SDK en de onlangs gelanceerde Strands harness. We verwachten dat deze klasse modellen zal leiden tot veel interessante innovaties in agentische AI.
Strands Decider 2B is onze eerste bijdrage hieraan. Het is een model met 2 miljard parameters, geschikt om op een lokale CPU of GPU te draaien, en kan antwoorden op relevante vragen leveren in tientallen milliseconden. De nauwkeurigheid en kalibratie zijn concurrerend met andere modellen in deze klasse. We hebben strands-decider-2b als open source uitgebracht op GitHub, met de weights op Hugging Face, inclusief alle trainingsdata en scripts.
Modelarchitectuur
Het kernidee is dat we een vooraf getrainde LLM-torso (Qwen3.5-2B) nemen en de LM-head verwijderen, waardoor het vermogen om tekst te genereren verdwijnt. De LM-head wordt vervangen door een pointer head die de antwoorden die door de torso worden aangeboden voor elke optie scoort. Dit gebeurt door de hidden state op elke optiepositie te scoren tegen de hidden state op de <answer> positie. Deze head is relatief klein, met net iets meer dan een miljoen parameters. De torso is gefinetuned met een rank-16 LoRA-adapter.
(Referentie: Figuur 1: De Strands Decider 2B architectuur)
Dit is de tweede grote iteratie van de architectuur. De eerste versie gebruikte een slot head, maar daarvan bleek de prestatie significant slechter. Het model dat we vandaag uitbrengen is versie 19 (v19). Alle wijzigingen per versie zijn gedocumenteerd in de repository.
Prestaties
Bij modellen van dit type kijken we naar drie prestatiedoelen:
- Nauwkeurigheid (Accuracy): Hoe goed beantwoordt het model vragen?
- Kalibratie (Calibration): Hoe betrouwbaar zijn de betrouwbaarheidsscores?
- Latentie (Latency): Hoe snel kan het model beslissingen nemen?
Nauwkeurigheid en kalibratie
We hebben de eerste twee gemeten met de publieke set van JevBench (voor nauwkeurigheid) en de Brier-score (voor kalibratie). Strands Decider 2B presteert goed: het staat 3e van de 33 modellen in de 2B-klasse, en 1e van de 30 wanneer modellen die net boven de 2B uitkomen worden uitgesloten.
(Referentie: Figuur 2: Nauwkeurigheid en kalibratie over het trainingsverloop op de publieke set van JevBench)
Latentie
Strands Decider 2B kan lokale beslissingen nemen met een mediane latentie van ongeveer 115ms op gangbare hardware. De tijd die nodig is voor een beslissing hangt ongeveer lineair samen met de taakgrootte.
- Nvidia RTX 3090: Mediane latentie van ca. 115ms.
- M3 MacBook: Mediane latentie voor kleine taken van ca. 153ms.
(Referentie: Figuur 3: Beslissingslatentie als functie van taakgrootte in tokens, gemeten op een Nvidia RTX 3090 tegen v18 van het model)
Waarom 2 miljard parameters (2B)?
We hebben gekozen voor een klein model om twee redenen:
- Experimenteren: Je kunt
strands-decider-2bgebruiken en trainen op hardware die je al hebt, wat het risico verlaagt en de snelheid verhoogt. - De 'sweet spot': Twee miljard parameters lijken het ideale punt te zijn: klein genoeg voor experimenten, maar groot genoeg om betekenisvol werk te verrichten. Zo lost Strands Decider 100% van de eenvoudige taken op JevBench correct op.
Toepassingen van Strands Decider
We zien vroege successen bij het gebruik van deze klasse modellen voor:
- Model routing
- Tool selectie
- Evaluaties
- Guardrails
- Geheugen- en contextbeheer
- Beleidsclassificatie (policy classification)
Daarnaast zijn er interessante innovaties rondom hybride agents: LLM's worden gebruikt voor de moeilijkste beslissingen, terwijl beslissingsmodellen de eenvoudige, routinematige beslissingen nemen, wat de kosten en latentie verlaagt. Ook worden ze gebruikt in combinatie met vaste workflow-talen, of voor het spelen van games, het automatiseren van taken en het navigeren door doolhoven.
Aan de slag
De eenvoudigste manier om te beginnen is via de strands-decider CLI:
pip install strands-decider
Een keuzevraag stellen
Je kunt het model vragen een keuze te maken op basis van een bepaalde status en een vraag:
strands-decider ask StrandsAgents/strands-decider-2B-hobson-v19 \
--state "Help! Mijn uitbetalingen mislukken al 3 dagen!" \
--choice "Welk team moet dit afhandelen?=billing,sales,retail"
Voorbeeld output:
choice_0 -> billing (confidence 0.768)
billing 0.845
retail 0.091
sales 0.064
In deze output is te zien dat het model 'billing' voorspelt als het antwoord met de hoogste waarschijnlijkheidsscore.
Integratie in een Strands agent
In de repository staan voorbeelden van het gebruik van strands-decider-2b binnen een Strands agent (onder examples/strands/). De agent draait lokaal, maakt verbinding met een lokale Strands Decider en gebruikt het standaard LLM van Amazon Bedrock.
In een specifiek demo-scenario heeft de agent een get_weather tool. De agent is geprogrammeerd om zeer enthousiast te zijn; als een gebruiker vraagt "Wat is het weer?" zonder een locatie te noemen, raadt de agent een stad en roept de tool aan.
Voordat die aanroep echter wordt uitgevoerd, leest strands-decider-2b het gesprek en de voorgestelde tool-aanroep en beantwoordt twee ja/nee-vragen:
- Zijn de argumentwaarden gebaseerd op feiten die de gebruiker daadwerkelijk heeft verstrekt?
- Is het te vroeg om deze tool nu aan te roepen, voordat er verduidelijking wordt gevraagd aan de gebruiker?
Code voorbeeld:
QUESTIONS = {
"args_grounded": Decider.noul(
"Are the tool's argument values grounded in facts the user actually provided?",
{
"true": "every argument value traces back to something the user said",
"false": "an argument value was guessed or invented, not stated by the user",
},
),
"premature": Decider.noul(
"Is it premature to call this tool now, before clarifying with the user?",
{
"true": "the assistant should ask a clarifying question before calling the tool",
"false": "there is nothing left to clarify; calling now is appropriate",
},
),
}
Het interventiesysteem
Dit patroon is onderdeel van het interventiesysteem van Strands. We gebruiken de InterventionHandler met een beforetoolcall methode. Deze keert een getypeerde actie terug:
- Proceed: Doorgaan.
- Deny: Weigeren.
- Confirm: Stoppen en een mens om bevestiging vragen.
- Guide: De beurt teruggeven aan het model met feedback, in plaats van de aanroep volledig te blokkeren.
Omdat dit een Python-klasse is, kan de logica variëren van een beslissingsmodel tot een Cedar-policy of een andere agent. Het belangrijkste punt is dat een beslissing die zo 'goedkoop' (snel en efficiënt) is, kan worden geplaatst in een processtap waar een volledige LLM-aanroep nooit mogelijk zou zijn.
Conclusie
Je kunt strands-decider-2b vandaag downloaden, gebruiken of als basis gebruiken voor eigen projecten. Alle data, code (GitHub) en snapshots (Hugging Face) zijn beschikbaar. Ga experimenteren!
Groetjes,