Boss Fight: Research Agent
Das Szenario
Abschnitt betitelt „Das Szenario“Du baust einen Research Agent — ein Terminal-Programm, das autonom zu einem Thema recherchiert, Ergebnisse zusammenfasst und sie nach menschlicher Freigabe speichert. Der Agent kombiniert alle fuenf Bausteine aus Level 3.
Dein Agent soll sich so anfuehlen:
Recherchiere: Welche neuen Features hat TypeScript 5.8?
[TOOL] search("TypeScript 5.8 features") → 3 Ergebnisse gefunden
[TOOL] search("TypeScript 5.8 release notes") → 2 Ergebnisse gefunden
[TOOL] summarize(...) → Zusammenfassung erstellt
--- Approval Request ---Agent will saveResults("/tmp/research-typescript-5.8.txt") ausführen.Erlauben? (y/n): yGenehmigt.
[TOOL] saveResults("/tmp/research-typescript-5.8.txt") → Datei gespeichert
=== Ergebnis ===TypeScript 5.8 bringt folgende neue Features: ...(3 Schritte, 4 Tool Calls, 847 Tokens)Dieses Projekt verbindet alle fuenf Bausteine:
Anforderungen
Abschnitt betitelt „Anforderungen“-
Search Tool (Challenge 3.1 oder 3.4) — Der Agent hat ein
search-Tool, das zu einem Thema Informationen findet. Du kannst es als lokales Tool mit simulierten Ergebnissen bauen oder als MCP Tool (Bonus) anbinden. -
Summarize Tool (Challenge 3.1) — Ein
summarize-Tool, das gesammelte Informationen in Key Points zusammenfasst. -
Save Results Tool mit Approval (Challenge 3.5) — Ein
saveResults-Tool mitneedsApproval: true, das die Ergebnisse in eine Datei speichert. Der User muss im Terminal bestaetigen. -
Agentic Loop (Challenge 3.3) — Der Agent nutzt
stopWhen: stepCountIs(n)und entscheidet autonom, welche Tools er in welcher Reihenfolge aufruft. -
Formatierte Ausgabe (Challenge 3.2) — Jeder Tool Call und jedes Tool Result wird formatiert im Terminal angezeigt. Der User sieht in Echtzeit, was der Agent tut.
-
System Prompt — Der Agent hat eine definierte Rolle: “Du bist ein Research Agent. Recherchiere gruendlich, fasse zusammen und speichere die Ergebnisse.”
-
Agent-Verlauf — Am Ende wird eine Zusammenfassung angezeigt: Anzahl Schritte, alle Tool Calls, Token-Verbrauch.
-
Interaktive Eingabe — Der User gibt das Recherche-Thema im Terminal ein. “exit” beendet das Programm.
Datei: boss-fight-3.ts | Ausfuehren: npx tsx boss-fight-3.ts
Starter-Code
Abschnitt betitelt „Starter-Code“import { generateText, tool, stepCountIs } from 'ai';import { anthropic } from '@ai-sdk/anthropic';import { z } from 'zod';import * as readline from 'readline';
// TODO: System Prompt definieren
// TODO: searchTool definieren (lokal oder MCP)
// TODO: summarizeTool definieren
// TODO: saveResultsTool definieren (mit needsApproval: true)
// TODO: askUser() Hilfsfunktion für Terminal-Approval
// TODO: Hauptfunktion:// 1. User-Input lesen (readline)// 2. Agent-Loop:// a) generateText aufrufen// b) result.content auf 'tool-approval-request' Parts prüfen// c) User im Terminal fragen (askUser)// d) tool-approval-response bauen und zu messages pushen// e) generateText erneut aufrufen bis keine Approval Requests mehr// 3. Tool Events formatiert ausgeben (onStepFinish)// 4. Agent-Verlauf anzeigen (Schritte, Tool Calls, Tokens)Bewertungskriterien
Abschnitt betitelt „Bewertungskriterien“Dein Boss Fight ist bestanden, wenn:
- Mindestens 3 Tools definiert (search, summarize, saveResults)
-
saveResultshatneedsApproval: true— User wird vor dem Speichern gefragt -
stopWhen: stepCountIs(n)begrenzt die Schritte - Approval Loop:
result.contentwird auftool-approval-requestgeprueft, User wird gefragt,tool-approval-responsewird gebaut - Agent nutzt Tools autonom in sinnvoller Reihenfolge (erst suchen, dann zusammenfassen, dann speichern)
- Jeder Tool Call wird formatiert im Terminal angezeigt (Name, Parameter, Ergebnis)
- Am Ende: Zusammenfassung mit Schritten, Tool Calls und Token-Verbrauch
- Programm laeuft interaktiv und reagiert auf User-Eingaben
Hinweise
Abschnitt betitelt „Hinweise“Hinweis 1: Tool-Beschreibungen sind entscheidend
Die description der Tools beeinflusst stark, in welcher Reihenfolge das LLM sie nutzt. Formuliere die Beschreibungen so, dass klar wird: search ist für Informationsbeschaffung, summarize für Zusammenfassung von gesammelten Daten, und saveResults für das Speichern am Ende. Der System Prompt kann die Reihenfolge zusätzlich lenken: “Recherchiere zuerst, fasse dann zusammen, speichere am Ende.”
Hinweis 2: onStepFinish für Live-Ausgabe
Nutze onStepFinish für die formatierte Ausgabe waehrend der Agent-Ausfuehrung. In diesem Callback hast Du Zugriff auf stepNumber, toolCalls, toolResults und usage. Du kannst dort jeden Tool Call mit seinem Ergebnis formatiert ins Terminal schreiben.
Hinweis 3: Approval bei Ablehnung
Wenn der User einen Tool Call ablehnt (approved: false im tool-approval-response Objekt), bekommt das LLM die Information, dass der Tool Call abgelehnt wurde. Es kann dann darauf reagieren — z.B. die Ergebnisse trotzdem als Text ausgeben, ohne sie zu speichern. Teste beide Pfade: Genehmigung und Ablehnung.