Was macht langchain-middleware?
RUFE DIESE FÄHIGKEIT AUF, wenn du eine Mensch-im-Kreis-Bestätigung, benutzerdefinierte Middleware oder strukturierte Ausgabe benötigst. Behandelt:
HumanInTheLoopMiddlewarefür menschliche Genehmigung gefährlicher Tool-Aufrufe- Erstellung benutzerdefinierter Middleware mit Hooks
Command-Resume-Muster- Strukturierte Ausgabe mit Pydantic/Zod
Mensch-im-Kreis (Human-in-the-Loop)
Die HumanInTheLoopMiddleware hält die Ausführung des Agenten an, wenn ein Tool aufgerufen wird, das eine menschliche Genehmigung erfordert. Der Agent sendet eine Anfrage an den Benutzer mit einer Beschreibung der auszuführenden Aktion. Der Benutzer kann die Aktion genehmigen, ablehnen oder Änderungen vorschlagen. Nach der Genehmigung wird die Ausführung fortgesetzt.
Verwendung:
from langchain.middleware import HumanInTheLoopMiddleware
middleware = HumanInTheLoopMiddleware(
agent=my_agent,
dangerous_tools=["delete_file", "exec_shell_command"],
prompt_template="Möchten Sie diese Aktion ausführen: {action}?",
)
Benutzerdefinierte Middleware mit Hooks
Du kannst eigene Middleware-Komponenten erstellen, die in den Lebenszyklus des Agenten eingreifen. Verwende Hooks wie before_tool_call, after_tool_call, before_llm_call und after_llm_call, um Logging, Zugriffskontrolle oder Datenvalidierung durchzuführen.
Beispiel:
class LoggingMiddleware:
async def before_tool_call(self, tool_name, args):
print(f"Tool {tool_name} wird mit {args} aufgerufen")
return args # oder modifiziere die Argumente
async def after_tool_call(self, tool_name, result):
print(f"Tool {tool_name} gab {result} zurück")
return result
Command-Resume-Muster
Verwende das Command-Muster, um unterbrochene Workflows nach einer Pause (z. B. menschlicher Bestätigung) fortzusetzen. Der Agent kann einen Command-Datensatz mit einem resume-Token speichern. Nach der Bestätigung wird der Datensatz geladen und der Workflow ab dieser Stelle fortgesetzt.
Beispiel:
from langchain.command import Command, Resume
# Speichere einen Command
command = Command(
tool="delete_file",
args={"path": "/tmp/test.txt"},
resume=Resume(
token="abc123",
context={"user": "max"}
)
)
# Später fortsetzen
resume = Resume.load(token="abc123")
agent.resume(resume)
Strukturierte Ausgabe mit Pydantic/Zod
Erzwinge strukturierte, typsichere Ausgaben von KI-Modellen mithilfe von Pydantic (Python) oder Zod (TypeScript). Definiere ein Schema, das die erwartete Ausgabe beschreibt. Der Agent extrahiert die Antwort des Modells in dieses Schema.
Beispiel in Python mit Pydantic:
from pydantic import BaseModel
class MeetingScheduler(BaseModel):
title: str
date: str
duration_minutes: int
participants: list[str]
result = agent.structured_output(MeetingScheduler, prompt="Erstelle eine Besprechungseinladung für morgen um 14:00 Uhr mit Alice und Bob zum Thema "Projekt-Update".")
print(result.title) # "Projekt-Update"
Beispiel in TypeScript mit Zod:
import { z } from "zod";
const MeetingScheduler = z.object({
title: z.string(),
date: z.string(),
duration_minutes: z.number(),
participants: z.array(z.string()),
});
const result = await agent.structuredOutput(MeetingScheduler, "Erstelle eine Besprechungseinladung für morgen um 14:00 Uhr mit Alice und Bob zum Thema "Projekt-Update".");
console.log(result.title); // "Projekt-Update"
Plattformunterstützung
Diese Fähigkeit ist für LangChain und kompatible KI-Agentenframeworks (Claude Code, Cursor, Codex, VSCode Agents, etc.) konzipiert.