NodeLLM hat sich seit seiner Einführung als leistungsstarkes Framework für die Integration von Sprachmodellen in Node.js-Anwendungen etabliert. Mit der jüngsten Version 1.17 setzt das Team nun auf drei zentrale Verbesserungen: MCP-Sampling für serverseitige Inferenz, optimierte parallele Tool-Ausführung und eine durchgängige Steuerung der Tool-Nutzung in der ORM-Integration. Diese Neuerungen adressieren langjährige Pain Points in der Entwicklung agentischer Systeme und erweitern die Möglichkeiten der Framework-Nutzung deutlich.
MCP-Sampling: Spracheigene Inferenz für Server
Die traditionelle MCP-Architektur (Model Context Protocol) folgt einem klaren Muster: Clients fragen Server nach Tools oder Ressourcen, die dann vom Server bereitgestellt werden. NodeLLM 1.17 kehrt diesen Prozess um und führt MCP-Sampling ein. Dabei kann der Server selbst eine LLM-Inferenz beim Client anfordern – etwa für Aufgaben wie Textzusammenfassungen, Klassifizierungen oder das Entwerfen von Antworten. Dies spart nicht nur API-Aufrufe, sondern eliminiert auch die Notwendigkeit separater API-Schlüssel oder Provider-Integrationen auf Serverseite.
Die Implementierung erfolgt über die neue Funktion createLLMSamplingHandler, die eine Verbindung zwischen dem Server und einem konfigurierten LLM herstellt. Das folgende Beispiel zeigt die Einrichtung mit einem OpenAI-Modell:
import { createLLM } from "@node-llm/core";
import { MCP, createLLMSamplingHandler } from "@node-llm/mcp";
const llm = createLLM({ provider: "openai" });
const mcp = await MCP.connect(
{ command: "node", args: ["./sampling-server.mjs"] },
{ sampling: createLLMSamplingHandler(llm, "gpt-4o-mini") }
);
const tools = await mcp.discoverTools();Der Server gibt Tools erst dann frei, wenn der Client während des Handshake-Prozesses explizit Sampling-Unterstützung signalisiert. Für Entwickler, die mehr Kontrolle benötigen, steht eine benutzerdefinierte Handler-Funktion zur Verfügung. Diese erhält die Rohdaten der Anfrage (sampling/createMessage) und kann flexibel entscheiden, wie die Inferenz beantwortet wird – etwa durch Routing nach Modellvorgaben oder das Einbinden eigener Sicherheitsmechanismen.
Parallele Tool-Ausführung: Effizienzsteigerung durch Parallelisierung
Bisher führte NodeLLM Tool-Aufrufe sequenziell aus, selbst wenn mehrere unabhängige Aktionen angefordert wurden. Dies war zwar sicher, führte jedoch zu unnötigen Wartezeiten – etwa bei drei gleichzeitigen Wetterabfragen für verschiedene Städte. Mit der neuen Option toolConcurrency können Entwickler nun parallele Ausführungen aktivieren:
const chat = llm.chat("gpt-4o-mini")
.withTool(WeatherTool)
.withToolConcurrency(true);
await chat.ask("Wie ist das Wetter in Tokio, London und New York?");Die Funktion steht sowohl für Standard-Chats als auch für Streaming- und Agent-Modi zur Verfügung. Agentische Systeme profitieren dabei von reduzierten Latenzzeiten, ohne dass Änderungen an der Tool-Definition erforderlich sind. Dies beschleunigt Workflows erheblich, insbesondere in Szenarien mit vielen unabhängigen Tool-Aufrufen.
Konsistente Callback-Verwaltung: Kein Überschreiben mehr
Ein häufiges Problem in älteren Versionen war das stille Überschreiben von Callbacks, wenn mehrere Handler für denselben Ereignistyp registriert wurden. NodeLLM 1.17 ändert dieses Verhalten und ermöglicht nun das Stapeln von Callbacks. Jeder registrierte Handler wird in der Reihenfolge seiner Registrierung ausgeführt – unabhängig davon, ob es sich um Logging, UI-Aktualisierungen oder Sicherheitsprüfungen handelt.
chat
.onEndMessage((msg) => audit.log(msg))
.onEndMessage(() => ui.refresh())
.beforeRequest(redactPII)
.beforeRequest(logOutboundPrompt);Diese Änderung ist besonders für modulare Anwendungen relevant, in denen verschiedene Komponenten eigene Callbacks registrieren. Bestehende Implementierungen mit einem einzigen Handler bleiben unverändert kompatibel.
ORM-Integration 0.8.0: Tool-Kontrolle in Datenbankanwendungen
Die ORM-Integration von NodeLLM erhält mit Version 0.8.0 eine vollständige Synchronisation mit den Kernfunktionen des Frameworks. Entwickler können nun Tool-Execution-Modi direkt über die ORM steuern, ohne auf die Low-Level-API des Kerns zurückgreifen zu müssen. Dies ist besonders für Anwendungen relevant, die auf Prisma oder andere ORMs setzen.
import { createChat } from "@node-llm/orm/prisma";
import { ToolExecutionMode } from "@node-llm/core";
const chat = await createChat(prisma, { model: "gpt-4o" })
.withToolExecution(ToolExecutionMode.CONFIRM)
.onConfirmToolCall(async (call) => await askUserToApprove(call))
.onToolCallError((call, error) => ({ error: error.message }))
.withToolChoice("get_weather")
.withToolConcurrency(true);Der ToolExecutionMode bietet drei Optionen:
auto(Standard): Tools werden automatisch ausgeführtconfirm: Jeder Tool-Aufruf erfordert eine Benutzerbestätigungdry-run: Tools werden nicht ausgeführt, ideal für Testzwecke
Zusätzlich ermöglicht die ORM-Integration die Persistenz aller Tool-Aktionen, sodass Anwendungen vollständige Transparenz über durchgeführte Operationen erhalten. Die Integration mit Prisma stellt sicher, dass alle Daten konsistent in der Datenbank abgelegt werden.
Monitoring-Erweiterungen: Präzisere Token-Verwaltung
Die Monitoring-Pakete @node-llm/monitor und @node-llm/monitor-otel erhalten in ihren aktuellen Versionen 0.4.2 und 0.1.1 erweiterte Funktionen zur Token-Verwaltung. Neben den klassischen Prompt- und Completion-Tokens werden nun auch Cache-, Reasoning- und Bild-Tokens erfasst. Dies ermöglicht eine detailliertere Kostenkontrolle und Ressourcenplanung, insbesondere in Szenarien mit Prompt-Caching oder multimodalen Modellen.
interface ExtractedTokenUsage {
prompt: number;
completion: number;
cached: number;
cacheCreation: number;
reasoning: number;
image: number;
}Die Daten werden unabhängig von der Herkunft normalisiert, sodass Entwickler konsistente Metriken für verschiedene Anbieter erhalten. Dies ist besonders nützlich, da Anbieter wie OpenAI oder die Vercel AI SDK unterschiedliche Bezeichnungen für ähnliche Token-Typen verwenden.
Nächste Schritte für Entwickler
Die neue Version NodeLLM 1.17 bringt erhebliche Fortschritte für die Entwicklung agentischer Systeme und die Integration von Sprachmodellen in bestehende Anwendungen. MCP-Sampling ermöglicht serverseitige Inferenz, parallele Tool-Ausführung beschleunigt Workflows und die ORM-Integration bietet präzise Kontrolle über Tool-Aktionen. Entwickler sollten die neuen Funktionen nutzen, um effizientere und skalierbarere Lösungen zu implementieren. Die vollständige Liste der Änderungen ist im Commit-Verlauf und den Release Notes auf GitHub dokumentiert.
KI-Zusammenfassung
NodeLLM 1.17, MCP tabanlı LLM'lerde istemci-sunucu akışını tersine çeviren örnekleme desteği sunuyor. Paralel araç çalıştırma, ORM iyileştirmeleri ve callback yönetimiyle geliştirici deneyimini nasıl yükselttiğini keşfedin.