 ##  [Fold en Agent i Nushell](/da/node/154) 

    *Indsendt af Lennart den tor, 19 feb 2026 - 10:35*  

  ![reducer-baseret agent](/sites/default/files/styles/wide/public/2026-02/Sk%C3%A6rmbillede%202026-02-19%20kl.%2010.25.52.png.webp?itok=9tGqkPqc)

 

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](https://docujai.com/da/node/153)

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.