s01
Die Agent-Schleife
Tools & AusführungBash is All You Need
84 LOC1 ToolsSingle-tool agent loop
The minimal agent kernel is a while loop + one tool
[ s01 ] s02 > s03 > s04 > s05 > s06 | s07 > s08 > s09 > s10 > s11 > s12
"Eine Schleife und Bash ist alles, was Sie brauchen" -- ein Tool + eine Schleife = ein Agent.
Problem
Ein Sprachmodell kann über Code nachdenken, aber es kann die echte Welt nicht berühren -- es kann keine Dateien lesen, Tests ausführen oder Fehler überprüfen. Ohne eine Schleife erfordert jeder Tool-Aufruf, dass Sie Ergebnisse manuell kopieren und einfügen. Sie werden zur Schleife.
Lösung
+--------+ +-------+ +---------+
| User | ---> | LLM | ---> | Tool |
| prompt | | | | execute |
+--------+ +---+---+ +----+----+
^ |
| tool_result |
+----------------+
(loop until stop_reason != "tool_use")
Eine Exit-Bedingung kontrolliert den gesamten Fluss. Die Schleife läuft, bis das Modell aufhört, Tools aufzurufen.
Wie es funktioniert
- Der Benutzer-Prompt wird zur ersten Nachricht.
messages.append({"role": "user", "content": query})
- Senden Sie Nachrichten + Tool-Definitionen an das LLM.
response = client.messages.create(
model=MODEL, system=SYSTEM, messages=messages,
tools=TOOLS, max_tokens=8000,
)
- Fügen Sie die Assistant-Antwort hinzu. Überprüfen Sie
stop_reason-- wenn das Modell kein Tool aufgerufen hat, sind wir fertig.
messages.append({"role": "assistant", "content": response.content})
if response.stop_reason != "tool_use":
return
- Führen Sie jeden Tool-Aufruf aus, sammeln Sie Ergebnisse, fügen Sie als Benutzer-Nachricht hinzu. Zurück zu Schritt 2.
results = []
for block in response.content:
if block.type == "tool_use":
output = run_bash(block.input["command"])
results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": output,
})
messages.append({"role": "user", "content": results})
Zusammengefasst in einer Funktion:
def agent_loop(query):
messages = [{"role": "user", "content": query}]
while True:
response = client.messages.create(
model=MODEL, system=SYSTEM, messages=messages,
tools=TOOLS, max_tokens=8000,
)
messages.append({"role": "assistant", "content": response.content})
if response.stop_reason != "tool_use":
return
results = []
for block in response.content:
if block.type == "tool_use":
output = run_bash(block.input["command"])
results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": output,
})
messages.append({"role": "user", "content": results})
Das ist der gesamte Agent in weniger als 30 Zeilen. Alles andere in diesem Kurs baut darauf auf -- ohne die Schleife zu ändern.
Was sich geändert hat
| Komponente | Vorher | Nachher |
|---|---|---|
| Agent-Schleife | (keine) | while True + stop_reason |
| Tools | (keine) | bash (ein Tool) |
| Nachrichten | (keine) | Akkumulierende Liste |
| Kontrollfluss | (keine) | stop_reason != "tool_use" |
Ausprobieren
python agents/s01_agent_loop.py
Erstellen Sie eine Datei namens hello.py, die "Hello, World!" ausgibtListen Sie alle Python-Dateien in diesem Verzeichnis aufWas ist der aktuelle Git-Zweig?Erstellen Sie ein Verzeichnis namens test_output und schreiben Sie 3 Dateien hinein
