Dev News Daily ENDE

Spring AI 2.1 speichert Nachrichten als geordnete Teile, Reasoning bleibt erhalten

Spring AI 2.1 ändert sein zentrales Datenmodell: Jede Nachricht hält ihren Inhalt jetzt als geordnete Liste von Message Parts, erklärt das Spring-Team in einem Beitrag vom 28. Oktober. Ein Part ist ein Stück einer Modellantwort — ein Textabschnitt, ein Reasoning-Block, ein Tool-Aufruf — abgebildet aus dem, was Anbieter Content Blocks (Anthropic, Bedrock), Parts (Gemini), Items (OpenAI Responses) oder Chunks (Mistral) nennen.

Der Grund sind Reasoning-Modelle. Claude signiert seine Thinking-Blöcke, Gemini hängt Thought-Signaturen an Funktionsaufrufe, und OpenAIs Responses API liefert verschlüsselte Reasoning-Items; alle erwarten sie bei der nächsten Anfrage unverändert und in derselben Reihenfolge zurück. Fehlen sie oder sind vertauscht, droht ein HTTP 400 oder ein Modell, das sein früheres Reasoning stillschweigend verliert. Vor 2.1 lagen Text, Tool-Aufrufe und Medien in getrennten Feldern, undurchsichtige Daten in anbieterspezifischen Metadaten, beim Streaming blieb oft nur das letzte Fragment des Denkens übrig, und der JDBC-Chatspeicher sicherte nur Text und Nachrichtentyp.

MessagePart ist ein Sealed Interface mit sechs Record-Implementierungen. Undurchsichtige Nutzdaten wie eine Anthropic-Signatur werden als OpaquePayload(provider, kind, data) mitgeführt und nur an den erzeugenden Anbieter zurückgespielt; was ein Modell nicht versteht, wird zu einem UnknownPart und unverändert weitergegeben. Mit 2.1.0-RC1 erzeugen und verarbeiten OpenAI Responses, Anthropic, Google GenAI, OpenAI Chat Completions, Ollama, Bedrock Converse, DeepSeek und Mistral Parts, und ein neuer Session-Speicher sichert sie. Bestehende Konstruktoren und Builder funktionieren weiter, getText(), getToolCalls() und getMedia() werden zu Sichten auf die Parts; anpassen muss man vor allem Code, der Reasoning über anbieterspezifische Typen las.

Spring AI 2.1 speichert Nachrichten als geordnete Teile, Reasoning bleibt erhalten
Spring AI 2.1 speichert Nachrichten als geordnete Teile, Reasoning bleibt erhalten — Dev News Daily

Was das bedeutet

Die drei Regeln des Beitrags — Reihenfolge halten, wörtlich zurückspielen, Parts statt Text speichern — gelten für jedes Framework, das mit Reasoning-Modellen spricht, nicht nur für Spring. Teams, die Gesprächsverläufe als reinen Text speichern, werden genau dort nachlassende Tool-Nutzung über mehrere Runden sehen, ohne offensichtliche Fehlermeldung. 2.1 befindet sich im Stadium des Release Candidate.

Geschrieben von Victoria Shinder.