I agent.nu udforskede vi brugen af generate til at opbygge en LLM-agent. Dette mønster er en udfoldelse: startende fra et frø gror du en strøm af værdier. Det er perfekt til UI-centrerede agenter, hvor du vil streame "tanker" til brugeren, efterhånden som de opstår.
Du kan læse mere om det her: En meget enkel og en smule bedre måde at skabe en AI-agent på ved hjælp af nushell generate i stedet for en normal agent-loop | docujAI
Men hvad hvis du ser en agents opgave som en enkelt transformation af en prompt til en færdig samtale-log? Det er en fold.
reduce-mønsteret
Nushells reduce-kommando (ofte kaldet fold i andre funktionelle sprog) bruges normalt til matematik (summering af en liste) eller sammensmeltning af poster. Det er dog også en kraftfuld måde at styre tilstandsbaserede loops med en fast maksimal dybde.
I agent_reduce.nu behandler vi samtaleloggen som akkumulatoren:
1..$max_turns | reduce --fold $initial_history {|turn, history|
let last_msg = $history | last
# Logik for tidlig afslutning
if ($last_msg.role == "model" and (not_calling_tools $last_msg)) {
$history
} else {
let next_step = call_llm $history
$history | append $next_step
}
}
Hvorfor bruge reduce?
1. Resultatet er konteksten
Mens generate returnerer en strøm af beskeder, returnerer reduce den endelige tilstand. Hvis du bygger et værktøj, der har brug for den komplette transskription til at gemme i en database eller sende til en anden funktion, giver reduce dig den i én ren pakke.
2. Indbyggede sikkerhedsbarrierer
Agenter kan lejlighedsvis "hallucinere" loops eller sidde fast i værktøjsopkaldscykler. Ved at folde over et interval som 1..10 får du en hård grænse for iterationer gratis. Du behøver ikke manuelt at inkrementere en tæller eller kontrollere en dybdevariabel; sekvensen giver grænsen.
3. Klarere hensigt for batchbehandling
Hvis din agent kører som et baggrundsjob (f.eks. opsummering af 100 dokumenter), er du ligeglad med den mellemliggende strøm. Du er interesseret i den endelige log. reduce gør denne hensigt eksplicit: "Tag disse potentielle ture og kondenser dem til et resultat."
Hvilken skal du vælge?
- Brug
generate, hvis du bygger en interaktiv agent (CLI, Chatbot), hvor processen er lige så vigtig som resultatet. - Brug
reduce, hvis du bygger en datapipeline-agent, hvor agenten bare er en kompleks funktion, der mapper input til output.
Nushell giver dig valget. Uanset om du udfolder en strøm eller folder en log, kan du holde din AI-logik funktionel, uforanderlig og enkel.