<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: boluo</title>
    <description>The latest articles on DEV Community by boluo (@buluo).</description>
    <link>https://dev.to/buluo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4138987%2F11d42b82-4828-41a1-81f4-f7d86612f3a4.png</url>
      <title>DEV Community: boluo</title>
      <link>https://dev.to/buluo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/buluo"/>
    <language>en</language>
    <item>
      <title>GLM-5 gegen Gemini 3.8 Flash: was 19 gemeinsame Aufgaben offenlegen</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Thu, 22 Oct 2026 13:24:42 +0000</pubDate>
      <link>https://dev.to/buluo/glm-5-gegen-gemini-38-flash-was-19-gemeinsame-aufgaben-offenlegen-36o8</link>
      <guid>https://dev.to/buluo/glm-5-gegen-gemini-38-flash-was-19-gemeinsame-aufgaben-offenlegen-36o8</guid>
      <description>&lt;p&gt;&lt;em&gt;Das Titelbild wurde mit KI erstellt.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Das Problem
&lt;/h2&gt;

&lt;p&gt;Zwei Modelle, dieselben 19 Aufgaben. Das Ergebnis lautet 19/19 und 17/19.&lt;/p&gt;

&lt;p&gt;Die Zahl stimmt, und sie ist das Erste, was auffällt. Sie sagt aber nur, &lt;strong&gt;wie viele&lt;/strong&gt; Aufgaben danebengingen, nicht &lt;strong&gt;wie&lt;/strong&gt;. Die beiden Aufgaben, die Gemini 3.8 Flash verfehlt hat, kamen beide mit HTTP 200 zurück und lösten keinen einzigen Fehler aus. Ein Dashboard, das nur Fehlerraten beobachtet, zeigt an dieser Stelle nichts an.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Umgebung
&lt;/h2&gt;

&lt;p&gt;Die 19 Aufgaben verteilen sich auf sechs Bereiche: defekten Code reparieren, von Grund auf implementieren, Werkzeuge aufrufen, Fragen zu einem Repository beantworten, ein Ausgabeformat einhalten, einen Wert in einer langen Datei finden.&lt;/p&gt;

&lt;p&gt;Beide Modelle liefen über denselben Endpunkt mit denselben Anfrageparametern. Pro Aufgabe und Modell ein Durchlauf, insgesamt 38 Aufrufe, alle protokolliert.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;GLM-5&lt;/th&gt;
&lt;th&gt;Gemini 3.8 Flash&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bestanden&lt;/td&gt;
&lt;td&gt;19/19&lt;/td&gt;
&lt;td&gt;17/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Turns pro Aufgabe, Mittel&lt;/td&gt;
&lt;td&gt;2,9&lt;/td&gt;
&lt;td&gt;3,3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Eingabe-Token&lt;/td&gt;
&lt;td&gt;55.258&lt;/td&gt;
&lt;td&gt;27.713&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ausgabe-Token&lt;/td&gt;
&lt;td&gt;11.049&lt;/td&gt;
&lt;td&gt;13.034&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning-Token&lt;/td&gt;
&lt;td&gt;6.444&lt;/td&gt;
&lt;td&gt;9.105&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Laufzeit&lt;/td&gt;
&lt;td&gt;444,5 s&lt;/td&gt;
&lt;td&gt;510,3 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kosten zu Listenpreisen&lt;/td&gt;
&lt;td&gt;$0,0906&lt;/td&gt;
&lt;td&gt;$0,0697&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Ein Durchlauf pro Modell und Aufgabe. Diese Werte beschreiben diese Aufgabenliste, nicht die Modelle allgemein.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Beide Fehlschläge liegen in den zwei einzigen Aufgaben, die eine mehrere hundert Zeilen lange Datei lesen müssen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Schritte
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Aufgabe 1: Der Turn-Deckel hat den Aufruf beendet
&lt;/h3&gt;

&lt;p&gt;Die erste Aufgabe verlangte einen Deploy-Schlüssel, der in einem 402 Zeilen langen Protokoll vergraben lag, bei einem Deckel von sechs Turns.&lt;/p&gt;

&lt;p&gt;GLM-5 fand ihn im vierten Turn und beendete normal. Gemini 3.8 Flash verbrauchte alle sechs Turns und rief noch Werkzeuge auf, als der Deckel erreicht war. Als &lt;code&gt;stop_reason&lt;/code&gt; wurde &lt;code&gt;tool_calls&lt;/code&gt; protokolliert, der finale Text war leer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsrgvfffiwznroedynz9l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsrgvfffiwznroedynz9l.png" alt="Die zwei Aufgaben mit Stoppgrund und Ausgabe" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Abbildung: die beiden Aufgaben mit Stoppgrund und Ausgabe. Die zweite Ausgabe steht im Original.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Das ist keine falsche Antwort. Das ist &lt;strong&gt;keine Antwort&lt;/strong&gt;. Von außen sieht es aus wie eine Aufgabe, die das Modell nicht konnte. Tatsächlich ging ihm mitten in der Arbeit der Platz aus.&lt;/p&gt;

&lt;p&gt;Der Punkt, an dem ich hängen geblieben bin: HTTP 200 heißt &lt;strong&gt;die Anfrage wurde nicht abgelehnt&lt;/strong&gt;, nicht &lt;strong&gt;das Modell ist fertig&lt;/strong&gt;. Das sind zwei verschiedene Dinge, und &lt;code&gt;stop_reason&lt;/code&gt; ist das einzige Feld, das sie trennt.&lt;/p&gt;

&lt;p&gt;Die Konsequenz ändert sich dadurch. Eine falsche Antwort verlangt ein anderes Modell. Eine abgeschnittene Antwort verlangt einen höheren Deckel oder eine aufrufende Schicht, die den Zustand erkennt und erneut versucht.&lt;/p&gt;

&lt;h3&gt;
  
  
  Aufgabe 2: Der Wert stimmt, das Format nicht
&lt;/h3&gt;

&lt;p&gt;Die zweite Aufgabe verlangte den Wert einer Konstante aus einem 883 Zeilen langen Modul, und zwar ausschließlich die Zahl.&lt;/p&gt;

&lt;p&gt;Beide Modelle brauchten zwei Turns. GLM-5 gab &lt;code&gt;17&lt;/code&gt; zurück. Gemini 3.8 Flash gab &lt;code&gt;RETRY_BUDGET 常量值为 17&lt;/code&gt; zurück — den richtigen Wert, eingebettet in einen Satz.&lt;/p&gt;

&lt;p&gt;Die Zahl ist korrekt, das Format nicht. Code, der diese Antwort als Ganzzahl parst, scheitert daran. Ein Mensch, der sie liest, wird sie mit hoher Wahrscheinlichkeit als bestanden markieren. Genau diese Art Fehlschlag verdeckt eine Erfolgsquote vollständig.&lt;/p&gt;

&lt;p&gt;Eine Einschränkung gehört dazu. Die Aufgabenstellung war auf Chinesisch formuliert, der Arbeitssprache der Testumgebung, und die Antwort kam ebenfalls auf Chinesisch zurück. Ob dasselbe Modell unter einer deutschen oder englischen Anweisung ebenfalls einen Satz bildet, beantwortet dieser Durchlauf nicht. Prüfen Sie es in der Sprache, die Sie tatsächlich senden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifikation und Fehlersuche
&lt;/h2&gt;

&lt;p&gt;Beide Fehlschläge teilen eine Eigenschaft: keiner löste einen Fehler aus, und beide standen in Feldern, die die aufrufende Seite ohnehin empfängt. Der Aufwand besteht aus drei Änderungen, nicht aus weiteren Durchläufen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Den Stoppgrund zusammen mit dem Ergebnis lesen.&lt;/strong&gt; Er ist das billigste Signal, das eine abgeschlossene von einer abgeschnittenen Antwort trennt, und in einem Dashboard, das auf Fehlerraten schaut, taucht er nie auf.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Erst die Form prüfen, dann den Inhalt.&lt;/strong&gt; Wenn nachgelagerter Code die Ausgabe parst, ist die Ausgabe ein Vertrag. Eine gescheiterte Prüfung gehört als Fehlschlag gezählt und nicht als Formatierungsproblem durchgewinkt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Das eigene Verhältnis von Eingabe zu Ausgabe messen, bevor Preise verglichen werden.&lt;/strong&gt; In diesem Durchlauf war Gemini 3.8 Flash auf die Gesamtsumme bezogen 23,1 % günstiger. Die beiden Modelle haben aber unterschiedlich viel Eingabe verbraucht. Auf eine gleiche Nutzungsmenge normalisiert stehen $0,0694 gegen $0,0697 — 0,4 % Unterschied, also ein Gleichstand.&lt;/p&gt;

&lt;p&gt;Die Listenpreise trennen die beiden deutlicher als die Rechnung. GLM-5 liegt bei $1,00 pro Million Eingabe-Token und $3,20 pro Million Ausgabe-Token, mit Cache-Eingabe bei $0,20 und ohne Batch-Stufe. Gemini 3.8 Flash liegt bei $0,75 und $3,75, mit Cache-Eingabe bei $0,075 und einer Batch-Stufe von $0,375 und $1,88 für asynchrone Aufträge. Zwei dieser Unterschiede wiegen schwerer als der Grundtarif: Cache-Eingabe ist bei Gemini 3.8 Flash um den Faktor 2,7 günstiger und dürfte bei jeder Last mit langem, wiederkehrendem Präfix den Vergleich bestimmen. Die Batch-Stufe hilft nur, wenn die Arbeit warten kann — dann aber stärker als alles, was die Tokenpreise nahelegen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6f52xbc3u9ho9bmiqucp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6f52xbc3u9ho9bmiqucp.png" alt="Was die 19 Aufgaben tatsächlich gekostet haben" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Abbildung: die gemessenen Tokenmengen zu Listenpreisen.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Turnzahl und Eingabemenge gehören ebenfalls getrennt betrachtet. GLM-5 brauchte weniger Turns (55 gegen 63), verbrauchte aber fast die doppelte Eingabemenge. Pro Turn sind das rund 1.005 gegen rund 440 Token. Wer den Deckel aus dem Mittelwert ableitet, schneidet bei dem Modell, das pro Turn mehr mitführt, ausgerechnet die leseintensivsten Aufgaben ab — genau das ist in Aufgabe 1 passiert.&lt;/p&gt;

&lt;p&gt;Ein weiterer Posten: Reasoning-Token werden zum Ausgabetarif abgerechnet, und Gemini 3.8 Flash hat den höheren Ausgabetarif. In diesem Durchlauf standen 6.444 gegen 9.105 Token, ein Unterschied von 41 %. Ein einzelner Durchlauf reicht allerdings nicht, um daraus ein festes Verhältnis zu machen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zum Austausch
&lt;/h2&gt;

&lt;p&gt;Der Unterschied zwischen den beiden Modellen lag nicht im Ergebnis, sondern in der Art des Scheiterns. 17 der 19 Aufgaben haben beide bestanden. Die zwei abweichenden sind aus verschiedenen Gründen abgewichen: einmal der Turn-Deckel, einmal das Ausgabeformat.&lt;/p&gt;

&lt;p&gt;Die Stichprobe umfasst 19 Aufgaben. Eine einzelne Aufgabe verschiebt die Quote um mehr als fünf Prozentpunkte. Lesen Sie diese Ergebnisse deshalb als Richtung für eigene Tests, nicht als zitierfähiges Resultat. Auch die Kontextleistung lässt sich hier nicht beurteilen: Das längste Dokument hatte rund 14.000 Token, die veröffentlichten Grenzen liegen bei 200.000 und 1.000.000. Ein Fenster tatsächlich zu füllen ist ein anderer Test. Gemessen wurde ausschließlich Texteingabe.&lt;/p&gt;

&lt;p&gt;Wenn Sie die beiden Modelle für eine konkrete Aufgabe vergleichen wollen, hilft ein Blick auf die &lt;a href="https://crazyrouter.com/en/models/google/gemini-3-8-flash" rel="noopener noreferrer"&gt;Modellseite von Gemini 3.8 Flash&lt;/a&gt; beim Eingrenzen, bevor Sie den eigenen Test aufsetzen. Die Preise sind Listenpreise mit Stand 22. Oktober 2026 und enthalten keine Cache- oder Batch-Rabatte.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>testing</category>
      <category>llm</category>
    </item>
    <item>
      <title>Gelangen wichtige Informationen nach außen, wenn ich KI benutze? Was das Dokument selbst schon mitbringt</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Thu, 22 Oct 2026 10:13:44 +0000</pubDate>
      <link>https://dev.to/buluo/gelangen-wichtige-informationen-nach-aussen-wenn-ich-ki-benutze-was-das-dokument-selbst-schon-2pbb</link>
      <guid>https://dev.to/buluo/gelangen-wichtige-informationen-nach-aussen-wenn-ich-ki-benutze-was-das-dokument-selbst-schon-2pbb</guid>
      <description>&lt;p&gt;&lt;em&gt;Ein Blick in die versteckten Bestandteile einer Bürodatei&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Eigene Darstellung. Das Bild zeigt keine Messergebnisse eines bestimmten Dienstes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Wer eine Datei in ein KI-Werkzeug zieht, will meist etwas über den Inhalt wissen. Die zweite Frage kommt später: Was ist von der Datei selbst noch mitgegangen? Eine Bürodatei ist kein Blatt Papier, sondern ein Archiv, und darin liegen Teile, die im Fenster nicht auftauchen.&lt;/p&gt;

&lt;p&gt;Die Frage, ob wichtige Informationen nach außen gelangen, hat zwei Hälften. Die erste betrifft das Modell: Es ist zustandslos, es merkt sich die Datei nicht, und der eingesandte Text verändert keine Parameter. Die zweite Hälfte betrifft alles davor. Und dort entscheidet sich der größere Teil, weil ein Dokument schon vor dem Absenden Dinge mitbringt, die niemand eingetippt hat. Der geprüfte Ausschnitt ist deshalb bewusst klein: nur die Datei, noch vor jeder Anfrage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Umgebung und Vorgehen
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bestandteil&lt;/th&gt;
&lt;th&gt;Festlegung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prüfobjekt&lt;/td&gt;
&lt;td&gt;eine Word-Datei und eine Excel-Mappe, für diesen Test erzeugt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sichtbarer Inhalt&lt;/td&gt;
&lt;td&gt;Angebotsnummer, Kundenname, Ansprechpartner, Telefonnummer, Betrag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zusätzliche Bestandteile&lt;/td&gt;
&lt;td&gt;ein Kommentar, eine nachverfolgte Änderung, Autorenangaben, ein ausgeblendetes Blatt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Werkzeug zum Erzeugen&lt;/td&gt;
&lt;td&gt;Python 3 mit &lt;code&gt;python-docx&lt;/code&gt; und &lt;code&gt;openpyxl&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Werkzeug zum Lesen&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;zipfile&lt;/code&gt; aus der Standardbibliothek&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ort der Prüfung&lt;/td&gt;
&lt;td&gt;lokal, vor jeder Anfrage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Datum&lt;/td&gt;
&lt;td&gt;22. Oktober 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Die Testdateien sind absichtlich unauffällig. Im geöffneten Fenster zeigen sie einen Absatz mit einer Angebotsnummer und einen Betrag. Alles Weitere wird erst sichtbar, wenn man die Datei als Archiv öffnet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schritt 1: Die Datei als Archiv lesen
&lt;/h2&gt;

&lt;p&gt;Sowohl &lt;code&gt;.docx&lt;/code&gt; als auch &lt;code&gt;.xlsx&lt;/code&gt; sind ZIP-Archive mit einer festgelegten Ordnerstruktur. &lt;code&gt;zipfile&lt;/code&gt; listet die Teile auf, ohne dass ein Büroprogramm beteiligt ist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;zipfile&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;zipfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ZipFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;beispiel-angebot.docx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;namelist&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Die Testdatei besteht aus 18 Teilen. Die meisten sind unauffällig: Formatvorlagen, Schriftdefinitionen, Beziehungsdateien. Interessant sind vier Einträge, nämlich &lt;code&gt;docProps/core.xml&lt;/code&gt;, &lt;code&gt;word/comments.xml&lt;/code&gt;, &lt;code&gt;word/document.xml&lt;/code&gt; und, in der Excel-Mappe, &lt;code&gt;xl/workbook.xml&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schritt 2: Die vier Bestandteile einzeln prüfen
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Autorenangaben.&lt;/strong&gt; &lt;code&gt;docProps/core.xml&lt;/code&gt; enthält unter anderem &lt;code&gt;dc:creator&lt;/code&gt; und &lt;code&gt;cp:lastModifiedBy&lt;/code&gt;. Das sind keine technischen Kennungen, sondern Namen. In der Testdatei steht &lt;code&gt;M. Keller&lt;/code&gt; als Ersteller und &lt;code&gt;S. Brandt&lt;/code&gt; als letzte Bearbeitung.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kommentare.&lt;/strong&gt; Liegt &lt;code&gt;word/comments.xml&lt;/code&gt; im Archiv, hängen Kommentare an der Datei. Sie stehen nicht im Fließtext und werden beim Kopieren des sichtbaren Absatzes nicht mitgenommen, beim Hochladen der Datei aber sehr wohl. Im Test lautet der Kommentar: „Betrag bitte gegen die Kalkulation prüfen, alter Wert war 138000 EUR."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Änderungsverlauf.&lt;/strong&gt; Bei eingeschalteter Nachverfolgung steht in &lt;code&gt;word/document.xml&lt;/code&gt; neben dem sichtbaren Text eine &lt;code&gt;&amp;lt;w:ins&amp;gt;&lt;/code&gt;- und eine &lt;code&gt;&amp;lt;w:del&amp;gt;&lt;/code&gt;-Auszeichnung. Entscheidend ist der Inhalt der Löschung: Sie wird als &lt;code&gt;&amp;lt;w:delText&amp;gt;&lt;/code&gt; gespeichert und trägt den alten Wert weiter, obwohl er im Fenster nicht mehr zu sehen ist. In der Testdatei ist das die Zahl &lt;code&gt;138000 EUR&lt;/code&gt;, also dieselbe Zahl, die auch im Kommentar steht.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blattzustände.&lt;/strong&gt; In der Excel-Mappe steht in &lt;code&gt;xl/workbook.xml&lt;/code&gt; zu jedem Blatt ein Zustand. Zwei Blätter der Testdatei sind ausgeblendet: &lt;code&gt;Intern&lt;/code&gt; mit dem Zustand &lt;code&gt;hidden&lt;/code&gt; und &lt;code&gt;Kalkulation&lt;/code&gt; mit dem Zustand &lt;code&gt;veryHidden&lt;/code&gt;. Das erste lässt sich über das Einblenden-Menü zurückholen, das zweite trägt den Zustand, der dort nicht auftaucht. Im Blatt &lt;code&gt;Intern&lt;/code&gt; stehen Kundenname, Ansprechpartner und Telefonnummer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frhrcw0k2bqw4js5o0h70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frhrcw0k2bqw4js5o0h70.png" alt="Vier Bestandteile, die im Archiv liegen und im Fenster nicht auftauchen" width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Eigene Darstellung der vier Bestandteile. Das Bild zeigt keine Messergebnisse eines bestimmten Dienstes.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifikation: was das Auslesen ergeben hat
&lt;/h2&gt;

&lt;p&gt;Das folgende Protokoll stammt aus einem Lauf gegen die beiden Testdateien:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Datei: beispiel-angebot.docx  (18 Teile im Archiv)
  docProps/core.xml      Ersteller: M. Keller
  docProps/core.xml      zuletzt geändert von: S. Brandt
  word/comments.xml      1 Kommentar(e), Autor: S. Brandt | Text: Betrag bitte gegen die Kalkulation prüfen, alter Wert war 13
  word/document.xml      2 überarbeitete Stellen (1 Einfügung, 1 Löschung, gelöscht: 138000 EUR)
Datei: beispiel-liste.xlsx  (14 Teile im Archiv)
  xl/workbook.xml        "Angebot" sichtbar | "Intern" verborgen | "Kalkulation" sehr verborgen
  xl/comments1.xml       1 Zellnotiz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Drei Beobachtungen daraus:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Der gelöschte Betrag &lt;code&gt;138000 EUR&lt;/code&gt; steht weiterhin in der Datei. Wer im Fenster nachsieht, findet ihn nicht.&lt;/li&gt;
&lt;li&gt;Die Namen der Bearbeitenden sind Teil der Datei, obwohl sie niemand in den Text geschrieben hat.&lt;/li&gt;
&lt;li&gt;Das ausgeblendete Blatt &lt;code&gt;Intern&lt;/code&gt; enthält genau die Angaben, die bei einer Weitergabe niemand mitsenden wollte.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngfp730gkvx3dx4p8msg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngfp730gkvx3dx4p8msg.png" alt="Was das Fenster zeigt und was im Archiv steht" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Eigene Darstellung des Vergleichs. Das Bild zeigt keine Messergebnisse eines bestimmten Dienstes.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fehlersuche: vier Muster, die sich wiederholen
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nur den sichtbaren Text prüfen.&lt;/strong&gt; Der Absatz im Fenster ist sauber. Das Archiv ist es nicht.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Änderungen weder annehmen noch verwerfen.&lt;/strong&gt; Nachverfolgte Änderungen verschwinden nicht dadurch, dass man die Nachverfolgung ausschaltet. Erst das Annehmen oder Verwerfen entfernt Löschungen aus dem XML.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Den Kommentar übersehen, obwohl er den alten Wert trägt.&lt;/strong&gt; Im Test steht die Zahl, die aus dem Text entfernt wurde, im Kommentar daneben.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ausgeblendete Blätter für gelöscht halten.&lt;/strong&gt; &lt;code&gt;hidden&lt;/code&gt; und &lt;code&gt;veryHidden&lt;/code&gt; sind Zustände, keine Löschung. Die Daten liegen weiter im Archiv.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was ich nicht geprüft habe
&lt;/h2&gt;

&lt;p&gt;Das Protokoll zeigt, was in den Dateien steht. Es zeigt nicht, was ein bestimmter Dienst davon liest, wie lange er es speichert und ob er es zum Verbessern von Modellen verwendet. Das sind drei getrennte Fragen, und für die letzten beiden ist dieses Protokoll kein Beleg.&lt;/p&gt;

&lt;p&gt;Ungeprüft ist auch der Weg über einen PDF-Export. Ob dort ebenfalls Autorenangaben stehen bleiben, habe ich nicht gemessen und behaupte es deshalb nicht.&lt;/p&gt;

&lt;p&gt;Und das Protokoll sagt nichts über das Modell selbst. Dass es sich die Datei nicht merkt, folgt daraus, wie es arbeitet, nicht aus diesem Lauf.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was vor dem Senden hilft
&lt;/h2&gt;

&lt;p&gt;Die Prüfung lässt sich in einen Satz fassen: Was im Fenster steht, ist nicht alles, was die Datei enthält. Wer mehrere Werkzeuge im Einsatz hat, findet die Einstellungen zu Reichweite und Endpunkt bei jedem Werkzeug an anderer Stelle; ein Beispiel für eine solche Einrichtung ist die &lt;a href="https://crazyrouter.com/en/integrations/codex" rel="noopener noreferrer"&gt;Codex-CLI-Anleitung&lt;/a&gt;. Für den Aufruf selbst lässt sich ein einheitlicher Endpunkt setzen. Ich nutze dafür &lt;a href="https://crazyrouter.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=de-doc-metadata&amp;amp;utm_content=boluo_devto_de-doc-metadata" rel="noopener noreferrer"&gt;Crazyrouter&lt;/a&gt;, weil sich damit das Modell wechseln lässt, ohne die aufrufende Stelle anzufassen.&lt;/p&gt;

&lt;p&gt;Wichtig bleibt der zweite Teil des Satzes: Ein Gateway liegt auf derselben Strecke und liest denselben Text. Crazyrouter steht dabei auf demselben Weg wie jede andere Zwischenstation. Es ändert die Bedingungen, unter denen Kopien entstehen, nicht die Tatsache, dass sie entstehen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Austausch
&lt;/h2&gt;

&lt;p&gt;Wer schon einmal eine Datei verschickt und erst danach gemerkt hat, dass ein Kommentar oder ein ausgeblendetes Blatt mitgegangen ist: An welcher Stelle prüft ihr das inzwischen?&lt;/p&gt;




&lt;p&gt;Quellenstand: 22. Oktober 2026. Die Testdateien wurden an diesem Tag erzeugt und ausgelesen; das Protokoll oben ist die Ausgabe dieses Laufs. Speicherfristen und Trainingsbedingungen unterscheiden sich je Anbieter und sind dort zu prüfen, wo die Anfrage tatsächlich landet.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Claude Sonnet 5.5: Wofür es sich eignet und woran man die Kosten erkennt</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Thu, 22 Oct 2026 08:26:05 +0000</pubDate>
      <link>https://dev.to/buluo/claude-sonnet-55-wofur-es-sich-eignet-und-woran-man-die-kosten-erkennt-2e34</link>
      <guid>https://dev.to/buluo/claude-sonnet-55-wofur-es-sich-eignet-und-woran-man-die-kosten-erkennt-2e34</guid>
      <description>&lt;p&gt;Ein Modell antwortet in der halben Zeit, und die Rechnung für dieselbe Aufgabe wird trotzdem höher. Das ist kein Widerspruch, sondern eine Folge davon, wie Token abgerechnet werden: Der Preis pro Token ist nur die eine Hälfte, die andere Hälfte ist die Länge der Ausgabe. Claude Sonnet 5.5 ist am 28. September 2026 erschienen und ändert am Listenpreis nichts — die Kosten pro Aufgabe können sich trotzdem in beide Richtungen bewegen. Drei Aufgaben zeigen, woran das liegt und welche Einstellungen beim Aufruf dazugehören.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was offiziell feststeht
&lt;/h2&gt;

&lt;p&gt;Anthropic nennt für Sonnet 5.5 drei Angaben: über 30 Prozent schneller, bis zu 30 Prozent geringere Kosten pro Aufgabe, und einen unveränderten Preis von 2 US-Dollar pro Million Eingabe-Token und 10 US-Dollar pro Million Ausgabe-Token. Das Lesen aus dem Cache sinkt von 0,20 auf 0,10 US-Dollar pro Million Token, der Batch-Preis liegt bei 1 und 5 US-Dollar. In den Claude-Anwendungen ist „Medium" die Standardstufe für den Rechenaufwand.&lt;/p&gt;

&lt;p&gt;Zwei Einschränkungen gehören dazu. Erstens bleibt Opus 5.5 nach Angaben des Anbieters bei komplexen, offen formulierten Aufgaben deutlich stärker. Zweitens ist &lt;code&gt;claude-sonnet-5-5&lt;/code&gt; ein eigenes Modell und keine Versionsnummer von &lt;code&gt;claude-sonnet-5&lt;/code&gt;. Wer die Zeichenkette in der Konfiguration ändert, vollzieht eine Migration und kein Update.&lt;/p&gt;

&lt;h2&gt;
  
  
  Der Aufbau der Messung
&lt;/h2&gt;

&lt;p&gt;Drei Aufgaben wurden je einmal über einen OpenAI-kompatiblen Endpunkt aufgerufen: dasselbe Modell, derselbe Aufgabentyp, keine Vorgabe einer Aufwandsstufe. Aufgezeichnet wurden die ausgegebenen Token, die Länge der Antwort, die Dauer und die daraus berechneten Kosten. Das Kontextfenster liegt bei einer Million Token, die Eingabe kann Text und Bilder enthalten.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6e84qsj9n863rzu52rmr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6e84qsj9n863rzu52rmr.png" alt="Ausgabe-Token und Kosten von drei Aufgaben" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Für die Einordnung ist wichtig, was hier nicht gemessen wurde: Es gab keine Wiederholung, keinen Vergleich unter kontrollierten Bedingungen und keine Bewertung der Antwortqualität. Die drei Zeilen sind ein Hinweis darauf, wo man im eigenen Projekt nachsehen sollte — keine belastbare Kennzahl.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drei Aufgaben, drei Ergebnisse
&lt;/h2&gt;

&lt;p&gt;Die erste Aufgabe war eng gefasst: aus sechs Zeilen eines Fehlerprotokolls ein JSON mit festem Schema. Sonnet 5.5 gab 410 Token aus, Sonnet 5 im gleichen Aufbau 682. Die Antworten waren mit 805 und 793 Zeichen nahezu gleich lang. Die Ersparnis entstand also nicht durch Weglassen, sondern durch früheres Aufhören.&lt;/p&gt;

&lt;p&gt;Die zweite Aufgabe verlangte eine Markdown-Tabelle aus fünf Betriebsnotizen. Hier standen 628 Token gegen 911. Auch hier war das Ergebnis vollständig, nur der Weg dorthin kürzer.&lt;/p&gt;

&lt;p&gt;Die dritte Aufgabe kippte das Bild. Es ging um das Umschreiben einer Zahlungs-Retry-Routine, und im Prompt stand „nichts weglassen". Sonnet 5.5 gab 5.753 Token aus, Sonnet 5 nur 4.012 — rund 43 Prozent mehr. Die Antwort war mit 6.924 Zeichen auch sichtbar länger, die Rechnung stieg von 0,0405 auf 0,0579 US-Dollar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Woran das Modell erkennt, dass es fertig ist
&lt;/h2&gt;

&lt;p&gt;Der Unterschied zwischen den drei Fällen liegt nicht in der Qualität, sondern in der Abbruchbedingung. Bei der JSON-Aufgabe gibt es ein eindeutiges Ende: die schließende Klammer. Das Modell kann aufhören, sobald die Struktur steht, und die erste Antwort war entsprechend kurz.&lt;/p&gt;

&lt;p&gt;Bei der Tabelle gibt es ebenfalls ein sichtbares Ziel — die letzte Zeile. Auch dort endet die Ausgabe früh.&lt;/p&gt;

&lt;p&gt;Bei der Code-Aufgabe gibt es kein solches Signal. „Nichts weglassen" lässt sich nicht überprüfen, und ein Modell, das eine Anweisung wörtlich nimmt, produziert mehr Text statt weniger. Genau dort entsteht die längere Ausgabe, und mit ihr die höhere Rechnung.&lt;/p&gt;

&lt;p&gt;Praktisch heißt das: Die Kosten pro Aufgabe hängen davon ab, ob die Aufgabe eine prüfbare Abbruchbedingung hat. Aufgaben mit festem Ziel werden kürzer beantwortet, offene Aufgaben nicht zwangsläufig.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beim Aufruf festlegen, was festlegbar ist
&lt;/h2&gt;

&lt;p&gt;Weil die Ausgabelänge den Ausschlag gibt, sollte der Aufruf sie begrenzen, statt sich auf eine Voreinstellung zu verlassen. Ein Aufruf über den OpenAI-kompatiblen Pfad sieht so aus:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API_BASE_URL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;antwort&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-5-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;# eigenes Modell, nicht claude-sonnet-5
&lt;/span&gt;    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                     &lt;span class="c1"&gt;# Obergrenze für die Ausgabe
&lt;/span&gt;    &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;aufgabe&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;antwort&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completion_tokens&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# die Zahl, die die Rechnung bestimmt
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Drei Punkte gehören in jede Umstellung. Erstens die Modellkennung: &lt;code&gt;claude-sonnet-5-5&lt;/code&gt;, &lt;code&gt;claude-sonnet-5&lt;/code&gt; und &lt;code&gt;claude-sonnet-4-6&lt;/code&gt; sind drei getrennte Modelle. Zweitens eine eigene Obergrenze für die Ausgabe, damit eine offene Formulierung die Rechnung nicht nach oben zieht. Drittens die Stufe für den Rechenaufwand, sofern sie im eigenen Aufruf gesetzt wird — offizielle Dokumentation nennt „Medium" nur als Vorgabe der Anwendungen; ob und wie sich die Stufe auf der API-Seite abschalten lässt, geht daraus nicht hervor.&lt;/p&gt;

&lt;p&gt;Modellkennung, Kontextlänge und der aktuelle Preis pro Million Token lassen sich vor der Umstellung auf der &lt;a href="https://crazyrouter.com/en/models/anthropic/claude-sonnet-5-5?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=sonnet55-model-intro-2026&amp;amp;utm_content=boluo_devto_sonnet55-model-intro-2026" rel="noopener noreferrer"&gt;Crazyrouter-Modellseite zu Claude Sonnet 5.5&lt;/a&gt; abgleichen. Bei einem Anbieter mit Gruppenrabatt weichen die effektiven Sätze vom Listenpreis ab; maßgeblich bleibt die eigene Abrechnung.&lt;/p&gt;

&lt;h2&gt;
  
  
  Offizielle Werte und ihre Grenzen
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9i1ef5myghy35iddeavp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9i1ef5myghy35iddeavp.png" alt="Offizielle Benchmarks und offizielle Preise" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Die vom Anbieter veröffentlichten Werte zeigen das erwartete Bild: Sonnet 5.5 liegt in der Nähe von Opus 5.5 und deutlich über Sonnet 5. Beim Terminal-Bench 4.0 stehen 70,6 Prozent gegen 10,3 Prozent, beim FrontierCode 1.1 (Main) 46,2 gegen 54,4 Prozent, beim GDPval-AA v2.1 1844 gegen 1846 Punkte. Diese Zahlen sind Herstellerangaben und wurden hier nicht unabhängig reproduziert.&lt;/p&gt;

&lt;p&gt;Bemerkenswerter als die Spitzenwerte ist der Spalt zwischen Sonnet 5.5 und Opus 5.5 im lang laufenden Coding — dort bleibt der Unterschied bestehen. Für die Auswahl heißt das: Wo eine Aufgabe eine klare Abbruchbedingung hat, ist Sonnet 5.5 die günstigere Wahl. Wo eine Aufgabe offen formuliert ist und über längere Strecken korrekt bleiben muss, bleibt Opus 5.5 die sicherere Wahl.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wann der Wechsel trägt
&lt;/h2&gt;

&lt;p&gt;Ein Wechsel lohnt sich, wenn die eigenen Aufgaben eine prüfbare Abbruchbedingung haben — strukturierte Ausgabe, feste Felder, klar umrissene Umformungen. Dort sinken Ausgabelänge und Dauer, ohne dass die Antwort dünner wird.&lt;/p&gt;

&lt;p&gt;Ein Wechsel trägt nicht, wenn die Aufgabe offen formuliert ist und die Vollständigkeit der Antwort im Vordergrund steht. Dort kann die neue Version mehr Text produzieren als die alte, und die Rechnung folgt der Ausgabe.&lt;/p&gt;

&lt;p&gt;Wer umstellt, sollte zuerst die eigene Aufgabe messen, nicht den Preis pro Token. Die Zahl, die zählt, steht in &lt;code&gt;usage.completion_tokens&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Quellen: Ankündigung und Modellseite zu Claude Sonnet 5.5 (Anthropic, veröffentlicht am 28. September 2026), geprüft am 22. Oktober 2026. Token-, Kosten-, Zeit- und Zeichenangaben stammen aus je einem Aufruf pro Aufgabe am 22. Oktober 2026 über einen OpenAI-kompatiblen Endpunkt. Vier Angaben ließen sich aus der öffentlichen Dokumentation nicht bestätigen und werden hier nicht als Tatsache verwendet: die Obergrenze der Ausgabe-Token, das Datum des Wissensstands, die Frage, ob sich erweitertes Denken abschalten lässt, und die Standardstufe für den Rechenaufwand auf der API-Seite.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>api</category>
    </item>
    <item>
      <title>Vier Modelle, ein Endpunkt: erst messen, dann vergleichen</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Wed, 21 Oct 2026 09:34:09 +0000</pubDate>
      <link>https://dev.to/buluo/vier-modelle-ein-endpunkt-erst-messen-dann-vergleichen-35lj</link>
      <guid>https://dev.to/buluo/vier-modelle-ein-endpunkt-erst-messen-dann-vergleichen-35lj</guid>
      <description>&lt;h1&gt;
  
  
  Vier Modelle, ein Endpunkt: erst messen, dann vergleichen
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Was ich protokolliere, bevor ich überhaupt über Modellwahl rede — und warum die Reihenfolge den Unterschied macht.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ein Monat lang habe ich dieselben Aufgaben abwechselnd an vier Modelle gegeben: DeepSeek V4-Pro, Qwen3.8 Max, GLM-5 und Gemini 3.8 Flash. Alle vier hängen an demselben OpenAI-kompatiblen Endpunkt, der Wechsel ist ein String.&lt;/p&gt;

&lt;p&gt;Am Anfang wollte ich eine Rangliste. Am Ende hatte ich eine Liste von Messgrößen — und die war deutlich nützlicher. Dieser Text beschreibt die Messgrößen, nicht die Rangliste.&lt;/p&gt;

&lt;h2&gt;
  
  
  Das Problem
&lt;/h2&gt;

&lt;p&gt;Wenn man Modelle nach Gefühl vergleicht, passiert Folgendes: Man merkt sich den einen Fall, der hängen geblieben ist, und hält ihn für ein Muster.&lt;/p&gt;

&lt;p&gt;Bei mir war das ein Modell, das „langsam" wirkte. Nach zwei Wochen mit Protokoll stellte sich heraus, dass es pro Antwort nicht langsamer war — es brauchte nur mehr Runden pro Aufgabe. Und jede Runde schickt den bisherigen Gesprächsverlauf erneut mit. Die gefühlte Langsamkeit war in Wahrheit eine Multiplikation.&lt;/p&gt;

&lt;p&gt;Ohne Protokoll hätte ich weiter das falsche Modell beschuldigt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Umgebung
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Punkt&lt;/th&gt;
&lt;th&gt;Wert&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Modelle&lt;/td&gt;
&lt;td&gt;DeepSeek V4-Pro, Qwen3.8 Max, GLM-5, Gemini 3.8 Flash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zugriff&lt;/td&gt;
&lt;td&gt;Ein OpenAI-kompatibler Endpunkt, Modellwechsel über den Namen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zeitraum&lt;/td&gt;
&lt;td&gt;Oktober 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preise&lt;/td&gt;
&lt;td&gt;Öffentliche, nutzungsbasierte Preise pro 1 Mio. Token&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Die Preise sind der einzige Teil, der sauber vergleichbar ist, weil ihn alle Anbieter veröffentlichen.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DeepSeek V4-Pro: $0.67 Eingabe / $2.00 Ausgabe&lt;/li&gt;
&lt;li&gt;GLM-5: $1.00 / $3.20&lt;/li&gt;
&lt;li&gt;Gemini 3.8 Flash: $0.75 / $3.75&lt;/li&gt;
&lt;li&gt;Qwen3.8 Max: $2.00 / $6.00&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fys6dgfnvdvhm8rxskezx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fys6dgfnvdvhm8rxskezx.png" alt="Eingabe- und Ausgabepreise der vier Modelle pro eine Million Token" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Die Ausgabe kostet bei allen vier Modellen das Drei- bis Vierfache der Eingabe. Wer Token zu einer Summe addiert, versteckt genau den Anteil, der die Rechnung bestimmt.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Zwei Dinge fallen auf. Erstens: &lt;strong&gt;die Ausgabe ist drei- bis viermal so teuer wie die Eingabe&lt;/strong&gt; — bei jedem der vier. Zweitens: &lt;strong&gt;der teuerste Ausgabepreis liegt beim Dreifachen des günstigsten.&lt;/strong&gt; Das klingt viel, ist aber weniger, als die eigene Rundenzahl bewegen kann.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcwcr1or25ytbvp981pdp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcwcr1or25ytbvp981pdp.png" alt="Preis für gecachte Eingabe im Vergleich zur normalen Eingabe" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bei wiederholten Fragen zum selben langen Dokument entscheidet der Cache-Treffer mehr als die Modellwahl.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Gecachte Eingabe liegt bei Gemini 3.8 Flash bei $0.075, also einem Zehntel. Bei Qwen3.8 Max kostet das Cache-Lesen $0.25. Wer dasselbe lange Dokument mehrfach befragt, für den ist die Cache-Trefferquote wichtiger als die Wahl zwischen diesen vier. Die aktuellen Sätze stehen &lt;a href="https://crazyrouter.com/en/pricing/glm-5" rel="noopener noreferrer"&gt;in der Preisübersicht&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Schritte
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Schritt 1: vier Felder protokollieren.&lt;/strong&gt; Mehr braucht es nicht, um die meisten Fehlurteile zu vermeiden:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anzahl der Runden pro Aufgabe&lt;/li&gt;
&lt;li&gt;tatsächliche Zeichenzahl der sichtbaren Antwort&lt;/li&gt;
&lt;li&gt;Finish-Grund&lt;/li&gt;
&lt;li&gt;Anzahl der Reasoning-Token&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Diese vier Spalten haben alles ergeben, was in diesem Text steht.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schritt 2: die Einheit festlegen.&lt;/strong&gt; Nicht „eine Antwort", sondern „eine abgeschlossene Aufgabe". Sonst vergleicht man Antworten, die unterschiedlich viel Arbeit enthalten.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schritt 3: dieselbe echte Aufgabe mehrfach laufen lassen.&lt;/strong&gt; Nicht eine Aufgabe, sondern mehrere Durchläufe. Eine einzelne Aufgabe liefert das Glück dieser einen Aufgabe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schritt 4: Geld pro abgeschlossener Aufgabe vergleichen.&lt;/strong&gt; Nicht Token, nicht Tokenpreis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schritt 5: den Leerfall getrennt zählen.&lt;/strong&gt; Eine Antwort mit Erfolgsstatus und Länge null gehört in eine eigene Zählung. In der allgemeinen Fehlerquote verschwindet sie zwischen echten Fehlern und echten Erfolgen — und genau dort ist sie unsichtbar.&lt;/p&gt;

&lt;p&gt;Das klingt nach fünf Schritten, ist aber eine Stunde Arbeit. Der Aufwand liegt nicht im Messen, sondern darin, sich vorher zu einigen, was „abgeschlossen" bedeutet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Verifikation
&lt;/h2&gt;

&lt;p&gt;Was dabei herauskam, in der Reihenfolge, in der es mich überrascht hat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Die Rundenzahl multipliziert.&lt;/strong&gt; Ein Modell brauchte im Schnitt 4,1 Runden pro Aufgabe, ein anderes 2,9. Bei ähnlicher Pro-Antwort-Zeit ergibt das fast den Faktor 1,8 — und die Gesamtzeit wuchs um den Faktor 2,49. Die Runden sind der Hebel, nicht die Latenz einer Antwort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Die Kostenlücke war kleiner als gedacht.&lt;/strong&gt; Aus einer einzelnen Aufgabe hatte ich einmal „zehnmal teurer" abgeleitet. Über einen echten Stapel gemessen blieb ein Unterschied von 21 Prozent. Eine einzelne Messung ergibt keinen Multiplikator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ein stiller Ausfall.&lt;/strong&gt; Eine Aufgabe verlangte, eine Zeile in einem 400-Zeilen-Log zu finden. Ein Modell lief sechs Runden, verbrauchte 42.766 Eingabe-Token und gab einen leeren String zurück. Die API meldete normalen Abschluss. Kein Fehler, keine Ausnahme, kein Retry, kein Alarm — nur die Rechnung.&lt;/p&gt;

&lt;p&gt;Eine falsche Antwort erzeugt ein Ereignis, das jemand liest. Ein leerer Erfolg erzeugt eine Rechnung. Deshalb gehört „Erfolg mit Antwortlänge null" in eine eigene Alarmkategorie und nicht in die Fehlerquote, wo er weggemittelt wird.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Fehlersuche
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Der Parser, der still kaputtgeht.&lt;/strong&gt; Mein erster Filter nahm den Text zwischen schließendem und öffnendem Marker. Das liest sich richtig und versagt leise: Bei einer Antwort, die einen Block öffnet und nie schließt, behandelt der Parser die &lt;strong&gt;gesamte Antwort&lt;/strong&gt; als Fließtext. Begründung und Antwort verschmelzen — schlechter als gar kein Filter.&lt;/p&gt;

&lt;p&gt;Meiner tat das monatelang und schrieb irgendwann einen kompletten Begründungsblock in eine Datenbankspalte, die eine Antwort hätte enthalten sollen. Gefunden habe ich es durch Zufall.&lt;/p&gt;

&lt;p&gt;Die Regel daraus: &lt;strong&gt;Ein nicht terminierter Marker muss einen lauten Fehler auslösen, niemals einen Fallback.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Der Fehler, der wie ein Ergebnis aussieht.&lt;/strong&gt; Eine leere Antwort mit Erfolgsstatus sieht in jedem Dashboard wie eine schnelle, günstige Anfrage aus. Sie ist weder schnell noch günstig; sie hat nur nichts geliefert.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Diskussion
&lt;/h2&gt;

&lt;p&gt;Was ich heute mache: erst prüfen, ob der eigene Code die Ausgabe überhaupt lesen kann, dann die Rundenzahl auf der eigenen Aufgabe messen, dann den Fehlerfall ansehen — und erst danach über Fähigkeiten reden.&lt;/p&gt;

&lt;p&gt;Der wichtigste Effekt war übrigens nicht die Zahl, sondern die Reihenfolge. Solange ich mit einer Rangliste angefangen habe, habe ich jede Abweichung als Eigenschaft des Modells gelesen. Mit Protokoll wurde daraus eine Frage an meinen eigenen Aufruf: Warum sechs Runden statt zwei? Warum kein Abbruch bei leerer Antwort? Diese Fragen waren beantwortbar. „Welches Modell ist besser" war es nicht.&lt;/p&gt;

&lt;p&gt;Was dieser Text &lt;strong&gt;nicht&lt;/strong&gt; ist: eine Rangliste.&lt;/p&gt;

&lt;p&gt;Von den vier Modellen lief &lt;strong&gt;nur eines&lt;/strong&gt; in einem wiederholten, kontrollierten Durchlauf auf meiner Seite. Der Fall mit den sechs Runden und der leeren Antwort stammt aus diesem Lauf und ist eine echte Beobachtung. Alles andere ist, was mir im Alltag mit allen vier aufgefallen ist — schwächere Evidenz, und ich benenne sie als solche.&lt;/p&gt;

&lt;p&gt;Die vier Protokollfelder übertragen sich unabhängig vom Modell. Sie sind billiger als jede Vergleichsstudie und liefern genau die Zahlen, die eine Modellentscheidung tatsächlich braucht. Die Frage, die vorher zu beantworten ist, lautet nicht „welches Modell ist besser", sondern „was messe ich eigentlich".&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Vier Modelle, ein Endpunkt: erst messen, dann vergleichen</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Wed, 21 Oct 2026 08:40:46 +0000</pubDate>
      <link>https://dev.to/buluo/vier-modelle-ein-endpunkt-erst-messen-dann-vergleichen-5hem</link>
      <guid>https://dev.to/buluo/vier-modelle-ein-endpunkt-erst-messen-dann-vergleichen-5hem</guid>
      <description>&lt;p&gt;&lt;em&gt;Was ich protokolliere, bevor ich überhaupt über Modellwahl rede — und warum die Reihenfolge den Unterschied macht.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ein Monat lang habe ich dieselben Aufgaben abwechselnd an vier Modelle gegeben: DeepSeek V4-Pro, Qwen3.8 Max, GLM-5 und Gemini 3.8 Flash. Alle vier hängen an demselben OpenAI-kompatiblen Endpunkt, der Wechsel ist ein String.&lt;/p&gt;

&lt;p&gt;Am Anfang wollte ich eine Rangliste. Am Ende hatte ich eine Liste von Messgrößen — und die war deutlich nützlicher. Dieser Text beschreibt die Messgrößen, nicht die Rangliste.&lt;/p&gt;

&lt;h2&gt;
  
  
  Das Problem
&lt;/h2&gt;

&lt;p&gt;Wenn man Modelle nach Gefühl vergleicht, passiert Folgendes: Man merkt sich den einen Fall, der hängen geblieben ist, und hält ihn für ein Muster.&lt;/p&gt;

&lt;p&gt;Bei mir war das ein Modell, das „langsam" wirkte. Nach zwei Wochen mit Protokoll stellte sich heraus, dass es pro Antwort nicht langsamer war — es brauchte nur mehr Runden pro Aufgabe. Und jede Runde schickt den bisherigen Gesprächsverlauf erneut mit. Die gefühlte Langsamkeit war in Wahrheit eine Multiplikation.&lt;/p&gt;

&lt;p&gt;Ohne Protokoll hätte ich weiter das falsche Modell beschuldigt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Umgebung
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Punkt&lt;/th&gt;
&lt;th&gt;Wert&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Modelle&lt;/td&gt;
&lt;td&gt;DeepSeek V4-Pro, Qwen3.8 Max, GLM-5, Gemini 3.8 Flash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zugriff&lt;/td&gt;
&lt;td&gt;Ein OpenAI-kompatibler Endpunkt, Modellwechsel über den Namen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zeitraum&lt;/td&gt;
&lt;td&gt;Oktober 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preise&lt;/td&gt;
&lt;td&gt;Öffentliche, nutzungsbasierte Preise pro 1 Mio. Token&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Die Preise sind der einzige Teil, der sauber vergleichbar ist, weil ihn alle Anbieter veröffentlichen.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DeepSeek V4-Pro: $0.67 Eingabe / $2.00 Ausgabe&lt;/li&gt;
&lt;li&gt;GLM-5: $1.00 / $3.20&lt;/li&gt;
&lt;li&gt;Gemini 3.8 Flash: $0.75 / $3.75&lt;/li&gt;
&lt;li&gt;Qwen3.8 Max: $2.00 / $6.00&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fys6dgfnvdvhm8rxskezx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fys6dgfnvdvhm8rxskezx.png" alt="Eingabe- und Ausgabepreise der vier Modelle pro eine Million Token" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Die Ausgabe kostet bei allen vier Modellen das Drei- bis Vierfache der Eingabe. Wer Token zu einer Summe addiert, versteckt genau den Anteil, der die Rechnung bestimmt.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Zwei Dinge fallen auf. Erstens: &lt;strong&gt;die Ausgabe ist drei- bis viermal so teuer wie die Eingabe&lt;/strong&gt; — bei jedem der vier. Zweitens: &lt;strong&gt;der teuerste Ausgabepreis liegt beim Dreifachen des günstigsten.&lt;/strong&gt; Das klingt viel, ist aber weniger, als die eigene Rundenzahl bewegen kann.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcwcr1or25ytbvp981pdp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcwcr1or25ytbvp981pdp.png" alt="Preis für gecachte Eingabe im Vergleich zur normalen Eingabe" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bei wiederholten Fragen zum selben langen Dokument entscheidet der Cache-Treffer mehr als die Modellwahl.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Gecachte Eingabe liegt bei Gemini 3.8 Flash bei $0.075, also einem Zehntel. Bei Qwen3.8 Max kostet das Cache-Lesen $0.25. Wer dasselbe lange Dokument mehrfach befragt, für den ist die Cache-Trefferquote wichtiger als die Wahl zwischen diesen vier. Die aktuellen Sätze stehen &lt;a href="https://crazyrouter.com/en/pricing/glm-5" rel="noopener noreferrer"&gt;in der Preisübersicht&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Schritte
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Schritt 1: vier Felder protokollieren.&lt;/strong&gt; Mehr braucht es nicht, um die meisten Fehlurteile zu vermeiden:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anzahl der Runden pro Aufgabe&lt;/li&gt;
&lt;li&gt;tatsächliche Zeichenzahl der sichtbaren Antwort&lt;/li&gt;
&lt;li&gt;Finish-Grund&lt;/li&gt;
&lt;li&gt;Anzahl der Reasoning-Token&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Diese vier Spalten haben alles ergeben, was in diesem Text steht.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schritt 2: die Einheit festlegen.&lt;/strong&gt; Nicht „eine Antwort", sondern „eine abgeschlossene Aufgabe". Sonst vergleicht man Antworten, die unterschiedlich viel Arbeit enthalten.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schritt 3: dieselbe echte Aufgabe mehrfach laufen lassen.&lt;/strong&gt; Nicht eine Aufgabe, sondern mehrere Durchläufe. Eine einzelne Aufgabe liefert das Glück dieser einen Aufgabe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schritt 4: Geld pro abgeschlossener Aufgabe vergleichen.&lt;/strong&gt; Nicht Token, nicht Tokenpreis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schritt 5: den Leerfall getrennt zählen.&lt;/strong&gt; Eine Antwort mit Erfolgsstatus und Länge null gehört in eine eigene Zählung. In der allgemeinen Fehlerquote verschwindet sie zwischen echten Fehlern und echten Erfolgen — und genau dort ist sie unsichtbar.&lt;/p&gt;

&lt;p&gt;Das klingt nach fünf Schritten, ist aber eine Stunde Arbeit. Der Aufwand liegt nicht im Messen, sondern darin, sich vorher zu einigen, was „abgeschlossen" bedeutet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Verifikation
&lt;/h2&gt;

&lt;p&gt;Was dabei herauskam, in der Reihenfolge, in der es mich überrascht hat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Die Rundenzahl multipliziert.&lt;/strong&gt; Ein Modell brauchte im Schnitt 4,1 Runden pro Aufgabe, ein anderes 2,9. Bei ähnlicher Pro-Antwort-Zeit ergibt das fast den Faktor 1,8 — und die Gesamtzeit wuchs um den Faktor 2,49. Die Runden sind der Hebel, nicht die Latenz einer Antwort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Die Kostenlücke war kleiner als gedacht.&lt;/strong&gt; Aus einer einzelnen Aufgabe hatte ich einmal „zehnmal teurer" abgeleitet. Über einen echten Stapel gemessen blieb ein Unterschied von 21 Prozent. Eine einzelne Messung ergibt keinen Multiplikator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ein stiller Ausfall.&lt;/strong&gt; Eine Aufgabe verlangte, eine Zeile in einem 400-Zeilen-Log zu finden. Ein Modell lief sechs Runden, verbrauchte 42.766 Eingabe-Token und gab einen leeren String zurück. Die API meldete normalen Abschluss. Kein Fehler, keine Ausnahme, kein Retry, kein Alarm — nur die Rechnung.&lt;/p&gt;

&lt;p&gt;Eine falsche Antwort erzeugt ein Ereignis, das jemand liest. Ein leerer Erfolg erzeugt eine Rechnung. Deshalb gehört „Erfolg mit Antwortlänge null" in eine eigene Alarmkategorie und nicht in die Fehlerquote, wo er weggemittelt wird.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Fehlersuche
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Der Parser, der still kaputtgeht.&lt;/strong&gt; Mein erster Filter nahm den Text zwischen schließendem und öffnendem Marker. Das liest sich richtig und versagt leise: Bei einer Antwort, die einen Block öffnet und nie schließt, behandelt der Parser die &lt;strong&gt;gesamte Antwort&lt;/strong&gt; als Fließtext. Begründung und Antwort verschmelzen — schlechter als gar kein Filter.&lt;/p&gt;

&lt;p&gt;Meiner tat das monatelang und schrieb irgendwann einen kompletten Begründungsblock in eine Datenbankspalte, die eine Antwort hätte enthalten sollen. Gefunden habe ich es durch Zufall.&lt;/p&gt;

&lt;p&gt;Die Regel daraus: &lt;strong&gt;Ein nicht terminierter Marker muss einen lauten Fehler auslösen, niemals einen Fallback.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Der Fehler, der wie ein Ergebnis aussieht.&lt;/strong&gt; Eine leere Antwort mit Erfolgsstatus sieht in jedem Dashboard wie eine schnelle, günstige Anfrage aus. Sie ist weder schnell noch günstig; sie hat nur nichts geliefert.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Diskussion
&lt;/h2&gt;

&lt;p&gt;Was ich heute mache: erst prüfen, ob der eigene Code die Ausgabe überhaupt lesen kann, dann die Rundenzahl auf der eigenen Aufgabe messen, dann den Fehlerfall ansehen — und erst danach über Fähigkeiten reden.&lt;/p&gt;

&lt;p&gt;Der wichtigste Effekt war übrigens nicht die Zahl, sondern die Reihenfolge. Solange ich mit einer Rangliste angefangen habe, habe ich jede Abweichung als Eigenschaft des Modells gelesen. Mit Protokoll wurde daraus eine Frage an meinen eigenen Aufruf: Warum sechs Runden statt zwei? Warum kein Abbruch bei leerer Antwort? Diese Fragen waren beantwortbar. „Welches Modell ist besser" war es nicht.&lt;/p&gt;

&lt;p&gt;Was dieser Text &lt;strong&gt;nicht&lt;/strong&gt; ist: eine Rangliste.&lt;/p&gt;

&lt;p&gt;Von den vier Modellen lief &lt;strong&gt;nur eines&lt;/strong&gt; in einem wiederholten, kontrollierten Durchlauf auf meiner Seite. Der Fall mit den sechs Runden und der leeren Antwort stammt aus diesem Lauf und ist eine echte Beobachtung. Alles andere ist, was mir im Alltag mit allen vier aufgefallen ist — schwächere Evidenz, und ich benenne sie als solche.&lt;/p&gt;

&lt;p&gt;Die vier Protokollfelder übertragen sich unabhängig vom Modell. Sie sind billiger als jede Vergleichsstudie und liefern genau die Zahlen, die eine Modellentscheidung tatsächlich braucht. Die Frage, die vorher zu beantworten ist, lautet nicht „welches Modell ist besser", sondern „was messe ich eigentlich".&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>observability</category>
      <category>testing</category>
    </item>
    <item>
      <title>KI-Desktop-Apps: 16 offizielle Download-Seiten geprüft</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Wed, 21 Oct 2026 06:52:42 +0000</pubDate>
      <link>https://dev.to/buluo/ki-desktop-apps-16-offizielle-download-seiten-gepruft-45cb</link>
      <guid>https://dev.to/buluo/ki-desktop-apps-16-offizielle-download-seiten-gepruft-45cb</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxldwdmv3g6tzqghuq2zb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxldwdmv3g6tzqghuq2zb.png" alt="Titelbild: 16 offizielle Download-Seiten, geprüft am 21. Oktober 2026" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wer nach „KI-App für den PC herunterladen" sucht, landet selten auf der Seite des Herstellers. Die ersten Treffer sind meist Sammlungen, die den Installer mit einer Browser-Erweiterung bündeln. In einigen Fällen ist es nicht das gesuchte Produkt, in anderen überhaupt kein Produkt.&lt;/p&gt;

&lt;p&gt;Deshalb habe ich die offiziellen Download-Seiten direkt geöffnet: 13 chinesische Anbieter plus Claude und Codex von Anthropic und OpenAI. 16 Einträge, ein Nachmittag. Das Ergebnis ist eine Liste – und ein Hinweis darauf, wann ein einzelner API-Endpunkt sinnvoller ist als eine weitere Installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Umgebung
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Punkt&lt;/th&gt;
&lt;th&gt;Wert&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Betriebssystem&lt;/td&gt;
&lt;td&gt;Windows 11 (macOS nur anhand der Herstellerangaben)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;v24.21.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;2.1.306 (npm)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex CLI&lt;/td&gt;
&lt;td&gt;0.163.0 (npm)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prüfdatum&lt;/td&gt;
&lt;td&gt;21. Oktober 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Methode&lt;/td&gt;
&lt;td&gt;jede offizielle Download-Seite direkt geöffnet, Angaben notiert&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Das Problem
&lt;/h2&gt;

&lt;p&gt;Jeder Hersteller macht den ersten Schritt leicht. Doubao zeigt einen einzelnen Knopf „Download Doubao Desktop". Wenxin stellt die Schaltflächen für macOS und Windows nebeneinander in den ersten Bildschirm. DeepSeek liefert direkte Binaries.&lt;/p&gt;

&lt;p&gt;Der zweite Schritt – die Arbeit auf ein anderes Modell zu verlagern – hat keinen Knopf. Die Modellwahl steckt im Client. Wer eine andere Antwort will, installiert eine andere Anwendung und akzeptiert einen anderen Verlauf, eine andere Dateigrenze und eine andere Abrechnung.&lt;/p&gt;

&lt;p&gt;Das heißt nicht, dass die Clients schlecht sind. Sie sind dafür gebaut, benutzt zu werden. Die Reibung entsteht erst, wenn man das Modell wechseln will und nicht die Oberfläche.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schritt 1: die offiziellen Seiten
&lt;/h2&gt;

&lt;p&gt;„Ja" bedeutet: auf der offiziellen Seite steht ein Download-Einstieg oder eine Angabe zum Betriebssystem. „Unbestätigt" bedeutet: am Prüftag stand dort nichts Lesbares – &lt;strong&gt;nicht&lt;/strong&gt;, dass das Produkt nicht existiert.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Produkt&lt;/th&gt;
&lt;th&gt;Anbieter&lt;/th&gt;
&lt;th&gt;Form&lt;/th&gt;
&lt;th&gt;Windows&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;th&gt;Einstieg&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Doubao&lt;/td&gt;
&lt;td&gt;ByteDance&lt;/td&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.doubao.com/download" rel="noopener noreferrer"&gt;doubao.com/download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen&lt;/td&gt;
&lt;td&gt;Alibaba&lt;/td&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.qianwen.com/download" rel="noopener noreferrer"&gt;qianwen.com/download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wenxin (Wenxiaoyan)&lt;/td&gt;
&lt;td&gt;Baidu&lt;/td&gt;
&lt;td&gt;Chat, Dokumente&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.wenxiaoyan.com/pc" rel="noopener noreferrer"&gt;wenxiaoyan.com/pc&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tencent Yuanbao&lt;/td&gt;
&lt;td&gt;Tencent&lt;/td&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Unbestätigt&lt;/td&gt;
&lt;td&gt;&lt;a href="https://yuanbao.tencent.com/download" rel="noopener noreferrer"&gt;yuanbao.tencent.com/download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quark&lt;/td&gt;
&lt;td&gt;Alibaba&lt;/td&gt;
&lt;td&gt;Browser&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.quark.cn/" rel="noopener noreferrer"&gt;quark.cn&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek Harness&lt;/td&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;Coding-Agent&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Ja (Apple Silicon, macOS 13+)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.deepseek.com/download/" rel="noopener noreferrer"&gt;deepseek.com/download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi Code&lt;/td&gt;
&lt;td&gt;Moonshot AI&lt;/td&gt;
&lt;td&gt;Coding-Agent (Desktop + CLI + IDE)&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.kimi.com/code" rel="noopener noreferrer"&gt;kimi.com/code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MiniMax Code&lt;/td&gt;
&lt;td&gt;MiniMax&lt;/td&gt;
&lt;td&gt;Coding- und Office-Agent&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;&lt;a href="https://agent.minimax.cn/download" rel="noopener noreferrer"&gt;agent.minimax.cn/download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;StepFun&lt;/td&gt;
&lt;td&gt;StepFun&lt;/td&gt;
&lt;td&gt;Desktop-Assistent&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.stepfun.com/download" rel="noopener noreferrer"&gt;stepfun.com/download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tencent ima&lt;/td&gt;
&lt;td&gt;Tencent&lt;/td&gt;
&lt;td&gt;Wissensdatenbank&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Unbestätigt&lt;/td&gt;
&lt;td&gt;&lt;a href="https://ima.qq.com/" rel="noopener noreferrer"&gt;ima.qq.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WPS AI&lt;/td&gt;
&lt;td&gt;Kingsoft&lt;/td&gt;
&lt;td&gt;in der Office-Suite&lt;/td&gt;
&lt;td&gt;mit WPS&lt;/td&gt;
&lt;td&gt;Unbestätigt&lt;/td&gt;
&lt;td&gt;&lt;a href="https://ai.wps.cn/" rel="noopener noreferrer"&gt;ai.wps.cn&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tiangong&lt;/td&gt;
&lt;td&gt;Kunlun&lt;/td&gt;
&lt;td&gt;Skywork Desktop&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Unbestätigt&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.tiangong.cn/" rel="noopener noreferrer"&gt;tiangong.cn&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatGLM&lt;/td&gt;
&lt;td&gt;Zhipu&lt;/td&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;Unbestätigt&lt;/td&gt;
&lt;td&gt;Unbestätigt&lt;/td&gt;
&lt;td&gt;&lt;a href="https://chatglm.cn/" rel="noopener noreferrer"&gt;chatglm.cn&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Desktop&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Chat mit Datei- und Desktop-Funktionen&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;&lt;a href="https://claude.com/download" rel="noopener noreferrer"&gt;claude.com/download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Terminal-Tool&lt;/td&gt;
&lt;td&gt;plattformübergreifend&lt;/td&gt;
&lt;td&gt;plattformübergreifend&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.npmjs.com/package/@anthropic-ai/claude-code" rel="noopener noreferrer"&gt;npm: @anthropic-ai/claude-code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex CLI&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;Terminal-Tool&lt;/td&gt;
&lt;td&gt;plattformübergreifend&lt;/td&gt;
&lt;td&gt;plattformübergreifend&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.npmjs.com/package/@openai/codex" rel="noopener noreferrer"&gt;npm: @openai/codex&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Von den 13 chinesischen Produkten nennen 8 beide Systeme, 4 nur Windows, 1 keines von beiden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schritt 2: die beiden Terminal-Tools
&lt;/h2&gt;

&lt;p&gt;Claude Code und Codex CLI sind keine Desktop-Anwendungen, sondern npm-Pakete. Node.js zuerst installieren, dann:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @anthropic-ai/claude-code   &lt;span class="c"&gt;# 2.1.306&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @openai/codex               &lt;span class="c"&gt;# 0.163.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Danach im Projektordner &lt;code&gt;claude&lt;/code&gt; oder &lt;code&gt;codex&lt;/code&gt; starten. Es gibt keine GUI; die Ausgabe besteht aus Datei-Diffs und Kommandoergebnissen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schritt 3: Modellliste über einen Endpunkt
&lt;/h2&gt;

&lt;p&gt;Wenn das Modell ein Konfigurationswert sein soll statt einer Installationsentscheidung, reicht ein OpenAI-kompatibler Endpunkt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.crazyrouter.com/v1/models &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$CRAZYROUTER_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Die Antwort enthielt &lt;strong&gt;169 Modelle&lt;/strong&gt; unter einer Basis-URL. Anschließend habe ich genau drei davon mit demselben Prompt aufgerufen:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Modell&lt;/th&gt;
&lt;th&gt;HTTP&lt;/th&gt;
&lt;th&gt;Antwortzeit&lt;/th&gt;
&lt;th&gt;finish_reason&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;deepseek-v4.1-flash&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;1942 ms&lt;/td&gt;
&lt;td&gt;stop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gemini-3.1-flash-lite&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;2534 ms&lt;/td&gt;
&lt;td&gt;stop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;glm-5.3-flash&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;5978 ms&lt;/td&gt;
&lt;td&gt;stop&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Die übrigen 166 Modelle wurden nicht aufgerufen, die Bild-, Video- und Audio-Endpunkte nicht getestet. &lt;strong&gt;Eine lange Liste belegt die Abdeckung, nicht die Funktion jedes Eintrags.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9we7ujz958x9afvodql0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9we7ujz958x9afvodql0.png" alt="Abbildung 1: Ergebnis der Modellliste – 169 Modelle mit Verteilung nach Anbieter" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifikation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;16 Einträge auf den offiziellen Seiten gefunden, keine Sammlung, kein Mirror&lt;/li&gt;
&lt;li&gt;8 Produkte mit beiden Systemen, 4 mit Windows, 1 ohne Angabe&lt;/li&gt;
&lt;li&gt;3 von 169 Modellen tatsächlich aufgerufen, alle HTTP 200&lt;/li&gt;
&lt;li&gt;Versionen aus der npm-Registry, nicht aus der Erinnerung&lt;/li&gt;
&lt;li&gt;Preise: nicht geprüft, daher kein Preisvergleich&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fztvjlr5nb6tsg7ipydk2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fztvjlr5nb6tsg7ipydk2.png" alt="Abbildung 2: Modellwechsel über einen Endpunkt, drei Anbieter" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Typische Fehler
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DeepSeek sind zwei Produkte.&lt;/strong&gt; Auf der Seite „DeepSeek クライアント" stehen nur iOS und Android. Die Desktop-Variante heißt Harness. Eine Suchanfrage unterscheidet das nicht.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WPS AI hat keinen eigenen Installer.&lt;/strong&gt; Die Funktionen liegen in WPS Office; erst WPS installieren.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;„Unbestätigt" ist keine Absage.&lt;/strong&gt; Bei Zhipu war der Seitentext an zwei Versuchen nicht lesbar. Deshalb steht dort „unbestätigt" und nicht „nein".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gleicher Anbieter, anderes Produkt.&lt;/strong&gt; Tencent Yuanbao ist ein Chat-Client, Tencent ima eine Wissensdatenbank über eigene Dateien.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eine Messung ist keine Stabilitätsaussage.&lt;/strong&gt; Beim Abruf der Modellliste antwortete der China-Endpunkt in 337 ms, der internationale in 526 ms. Das ist eine einzelne Beobachtung; Latenz beim Auflisten sagt nichts über die Generierung.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was hier fehlt
&lt;/h2&gt;

&lt;p&gt;Kein Preisvergleich: Preise wurden nicht geprüft, eine Kostenaussage wäre erfunden. Keine Rangliste nach Bedienkomfort: dafür müsste man jede Anwendung wochenlang benutzen und nicht einen Nachmittag lang Download-Seiten lesen. Und keine Aussage über die Qualität der Modelle, weil dieselbe Frage mit anderem Prompt zu einem anderen Ergebnis führt. Was bleibt, ist der Teil, der heute überprüfbar ist: sechzehn offizielle Einstiege, die jeweils genannten Systeme und die Versionsnummern aus der npm-Registry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zusammenfassung
&lt;/h2&gt;

&lt;p&gt;Für Chat und Dokumente reicht ein Client. Für Arbeit im lokalen Projekt sind die Terminal-Tools zuständig. Wenn das Modell selbst die Variable ist, wird der Endpunkt zur Konfiguration statt zur Installation – dafür ist ein Gateway wie &lt;a href="https://crazyrouter.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=cn-llm-desktop-clients-2026&amp;amp;utm_content=boluo_devto_cn-llm-desktop-clients-2026" rel="noopener noreferrer"&gt;Crazyrouter&lt;/a&gt; gedacht. Wer vorher sehen will, was abgedeckt ist, kann &lt;a href="https://crazyrouter.com/en/integrations/cursor" rel="noopener noreferrer"&gt;Cursor-Anbindung&lt;/a&gt; und &lt;a href="https://crazyrouter.com/en/models/task/coding" rel="noopener noreferrer"&gt;AI-Coding-Modelle&lt;/a&gt; ohne Konto öffnen.&lt;/p&gt;

&lt;p&gt;Alle Einträge, Systemangaben und Versionen wurden am 21. Oktober 2026 geprüft. Herstellerseiten ändern sich; vor der Installation erneut nachsehen. Der Entwurf entstand mit KI-Unterstützung, die genannten Fakten wurden jedoch wie beschrieben direkt überprüft.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tools</category>
      <category>api</category>
      <category>windows</category>
    </item>
    <item>
      <title>Gemini 2.5 Flash-Lite für die Lokalisierung einer App einordnen</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Tue, 20 Oct 2026 14:35:26 +0000</pubDate>
      <link>https://dev.to/buluo/gemini-25-flash-lite-fur-die-lokalisierung-einer-app-einordnen-1fbj</link>
      <guid>https://dev.to/buluo/gemini-25-flash-lite-fur-die-lokalisierung-einer-app-einordnen-1fbj</guid>
      <description>&lt;h1&gt;
  
  
  Gemini 2.5 Flash-Lite für die Lokalisierung einer App einordnen
&lt;/h1&gt;

&lt;p&gt;Ein Hinweis in einer App kann sprachlich korrekt sein und trotzdem das Falsche versprechen. Aus einer Möglichkeit wird eine Zusage. Eine Einschränkung verschwindet. Oder der Text klingt natürlich, passt aber nicht mehr auf den Bildschirm.&lt;/p&gt;

&lt;p&gt;Wenn ich Gemini 2.5 Flash-Lite für eine mehrsprachige App einordne, interessiert mich deshalb die Arbeit zwischen Ausgangstext und Veröffentlichung. Wo hilft ein Textentwurf? Was muss die Redaktion entscheiden? Und welche Informationen darf eine neue Sprachfassung keinesfalls verändern?&lt;/p&gt;

&lt;p&gt;Meine Überlegungen beruhen auf der dokumentierten Modellfunktion. Eine eigene Untersuchung seiner Übersetzungsqualität in verschiedenen Sprachen liegt diesem Artikel nicht zugrunde. Ich beschreibe eine mögliche Aufgabenverteilung für Produktteams, die ihre Texte vor der Freigabe prüfen können.&lt;/p&gt;

&lt;h2&gt;
  
  
  Welche Rolle das Modell übernehmen könnte
&lt;/h2&gt;

&lt;p&gt;Gemini 2.5 Flash-Lite ist ein Google-Modell mit Schwerpunkt auf Kosteneffizienz. Über eine API, also eine Schnittstelle für andere Programme, lässt es sich in eine Anwendung einbinden. Das Modell ist dabei eine Komponente. Die Oberfläche, die Auswahl der Texte und die Freigabe müssen aus der umgebenden Anwendung kommen.&lt;/p&gt;

&lt;p&gt;Als Kandidaten sehe ich kurze Hilfetexte, Produktbeschreibungen und Hinweise zu bekannten Funktionen. Das Modell könnte vorhandene Aussagen umformulieren, kürzen oder einen Entwurf für eine weitere Sprache vorschlagen. Ob diese Entwürfe für die benötigte Sprache gut genug sind, bleibt eine offene Qualitätsfrage.&lt;/p&gt;

&lt;p&gt;Die &lt;a href="https://ai.google.dev/gemini-api/docs/models/gemini-2.5-flash-lite" rel="noopener noreferrer"&gt;offizielle Modellbeschreibung&lt;/a&gt; nennt Text, Bilder, Audio, Video und PDF als Eingaben. Die Ausgabe ist Text. Für die Lokalisierung würde ich zunächst mit einem freigegebenen Ausgangstext arbeiten. Ein Bildschirmbild kann zusätzlichen Kontext liefern, ersetzt aber keine eindeutige Beschreibung der Funktion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Der Kontext gehört vor den Entwurf
&lt;/h2&gt;

&lt;p&gt;Unter Lokalisierung verstehe ich mehr als das Austauschen einzelner Wörter. Ein Text muss für die Menschen passen, die ihn in einer bestimmten Situation lesen. Eine Fehlermeldung braucht andere Formulierungen als die Beschreibung einer neuen Funktion.&lt;/p&gt;

&lt;p&gt;Ich würde deshalb vorab festhalten, wo der Text erscheint und welche Handlung er erklärt. Dazu gehören die Zielsprache, die gewünschte Anrede und der Ton. Auch die Information, ob sich der Hinweis an neue oder erfahrene Nutzer richtet, kann die Formulierung beeinflussen.&lt;/p&gt;

&lt;p&gt;Ein kleines, verbindliches Begriffsverzeichnis wäre für mich Teil dieser Vorbereitung. Darin steht etwa, wie eine Funktion in der jeweiligen Sprache heißt. Die Vorgabe hilft, verschiedene Bezeichnungen für dieselbe Funktion zu vermeiden. Dass das Modell sie zuverlässig einhält, würde ich daraus allerdings noch nicht ableiten.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1b8ouby01mnewtm4v4t6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1b8ouby01mnewtm4v4t6.png" alt="Vorgeschlagener Ablauf: Ausgangstext und Sprachkontext vorbereiten, einen Entwurf erstellen und ihn redaktionell sowie in der App prüfen" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Eigene Darstellung eines möglichen Arbeitsablaufs; keine gemessene Übersetzungsleistung.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Für wiederkehrende Hinweise würde ich bereits freigegebene Übersetzungen weiterverwenden. Ein neuer Entwurf ist vor allem dann interessant, wenn neuer Inhalt entsteht oder eine Formulierung überarbeitet werden muss. Sonst schafft die ständige Neugenerierung zusätzliche Varianten, die jemand vergleichen und pflegen muss.&lt;/p&gt;

&lt;h2&gt;
  
  
  Welche Informationen unverändert bleiben müssen
&lt;/h2&gt;

&lt;p&gt;Die wichtigste Grenze verläuft für mich zwischen sprachlicher Anpassung und sachlicher Änderung. Satzbau und Anrede dürfen zur Zielsprache passen. Funktionsumfang, Preise, Fristen und Bedingungen müssen zur freigegebenen Quelle passen.&lt;/p&gt;

&lt;p&gt;Besonders aufmerksam wäre ich bei Aussagen über Verfügbarkeit und Verbindlichkeit. Ein möglicher Liefertermin darf in der Sprachfassung nicht wie eine Garantie klingen. Eine optionale Funktion darf nicht als fester Bestandteil jedes Angebots erscheinen. Das sind Prüfaufgaben für die Redaktion, keine beobachteten Fehler dieses Modells.&lt;/p&gt;

&lt;p&gt;Solche Unterschiede lassen sich nicht allein daran erkennen, ob ein Text flüssig klingt. Ich würde den Entwurf direkt neben den Ausgangstext legen und sachliche Aussagen einzeln abgleichen. Fehlt dort eine Information, sollte die Sprachfassung sie nicht ergänzen, um vollständiger zu wirken.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobwbjee98wxxmv1m9ioo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobwbjee98wxxmv1m9ioo.png" alt="Zwei Prüfbereiche der Lokalisierung: Produktfakten erhalten und sprachliche Form an die Zielgruppe anpassen" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Eigene Darstellung der redaktionellen Trennung zwischen Inhalt und Formulierung.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Für rechtlich verbindliche Bedingungen würde ich einen eigenen Freigabeweg vorsehen. Wer diese Verantwortung trägt, muss den Inhalt beurteilen können. Eine günstige Textausgabe liefert dafür keine zusätzliche fachliche Absicherung.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Sprachprüfung braucht auch den Bildschirm
&lt;/h2&gt;

&lt;p&gt;Eine sprachkundige Person sollte prüfen, ob die Formulierung die Bedeutung erhält und in der Zielsprache natürlich wirkt. Ich würde ihr den Verwendungszweck mitgeben. Ohne diesen Kontext kann selbst eine sorgfältige Korrektur den Ton der Anwendung verfehlen.&lt;/p&gt;

&lt;p&gt;Danach würde ich die Fassung an der vorgesehenen Stelle ansehen. Zeilenumbrüche, verfügbare Breite und die Nähe zu anderen Bedienelementen beeinflussen die Verständlichkeit. Die Lesbarkeit in einem Dokument sagt wenig darüber aus, ob ein Hinweis in einer schmalen mobilen Ansicht funktioniert.&lt;/p&gt;

&lt;p&gt;Wenn der Text gekürzt werden muss, würde ich benennen, welche Aussage erhalten bleiben soll. Eine bloße Aufforderung zu mehr Kürze kann genau die Bedingung verdrängen, die der Nutzer kennen muss. Die endgültige Fassung gehört anschließend wieder in dieselbe redaktionelle Prüfung.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mit Produktänderungen muss die Sprachfassung mitziehen
&lt;/h2&gt;

&lt;p&gt;Eine veröffentlichte Sprachfassung sollte einer bestimmten Version des Ausgangstextes zugeordnet bleiben. Ändert sich das Produktversprechen, müssen die betroffenen Übersetzungen erneut geprüft werden. Das ist eine Aufgabe der Textverwaltung rund um das Modell.&lt;/p&gt;

&lt;p&gt;Ich würde kenntlich machen, ob ein Text neu, redaktionell freigegeben oder durch eine Änderung überholt ist. Eine frühere Freigabe gilt für einen bestimmten Inhalt. Sie sollte nicht automatisch auf den nächsten Entwurf übertragen werden, nur weil die meisten Wörter gleich geblieben sind.&lt;/p&gt;

&lt;p&gt;Auch ein geänderter Funktionsname kann mehrere Stellen betreffen. Deshalb würde ich bei einer Überarbeitung das Begriffsverzeichnis und die betroffenen Ansichten zusammen betrachten. Sonst ist die einzelne Übersetzung verständlich, während die App dieselbe Funktion an anderer Stelle anders nennt.&lt;/p&gt;

&lt;p&gt;Für die nächste Überarbeitung würde ich die zuletzt freigegebene Fassung erhalten. Damit kann die Redaktion erkennen, welche Änderung aus dem Produkt kommt und welche nur die Formulierung betrifft. Der Modellvorschlag bekommt so einen nachvollziehbaren Platz in der Textpflege.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was ich bei Kosten und Zugang vergleichen würde
&lt;/h2&gt;

&lt;p&gt;Am 20. Oktober 2026 nennt Googles &lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;Preisliste&lt;/a&gt; für die reguläre kostenpflichtige API 0,10 US-Dollar je Million Eingabetokens für Text, Bilder und Video. Textausgaben kosten 0,40 US-Dollar je Million Tokens, einschließlich der Tokens für Denkprozesse. Tokens sind die Einheiten, in denen das Modell Inhalte verarbeitet; sie entsprechen nicht einfach einer festen Zahl von Wörtern.&lt;/p&gt;

&lt;p&gt;Für eine Textfunktion würde ich neben dieser Abrechnung den Aufwand der Redaktion betrachten. Ein Entwurf spart nur dann Arbeit, wenn Prüfung und Korrektur im Verhältnis dazu überschaubar bleiben. Aus dem niedrigen Tokenpreis allein lässt sich dieser Nutzen nicht berechnen.&lt;/p&gt;

&lt;p&gt;Als weiteren Zugang kann man einen Dienst wie Crazyrouter betrachten. Dessen &lt;a href="https://crazyrouter.com/en/pricing/gemini-2-5-flash-lite" rel="noopener noreferrer"&gt;Preisübersicht für Gemini 2.5 Flash-Lite&lt;/a&gt; ist eine Anlaufstelle für den Vergleich. Abrechnung und unterstützte Funktionen würde ich beim tatsächlich gewählten Anbieter kontrollieren. Googles Grundpreis ist keine Zusage über die Rechnung eines anderen Dienstes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Für welche Teams ich den Einsatz erwägen würde
&lt;/h2&gt;

&lt;p&gt;Ich würde Flash-Lite für kleine Produktteams prüfen, die regelmäßig kurze Texte für mehrere Sprachen vorbereiten. Dazu passen Entwickler interner Textwerkzeuge und Redaktionen, die freigegebene Quellen sowie sprachkundige Prüfer haben. Der mögliche Nutzen liegt im Entwurf und in der Überarbeitung wiederkehrender Texte.&lt;/p&gt;

&lt;p&gt;Wer eine neue Sprache ohne jede fachkundige Kontrolle veröffentlichen möchte, hat damit die entscheidende Lücke noch nicht geschlossen. Auch sensible Bedingungen oder zentrale Produktzusagen brauchen einen passenden Freigabeprozess.&lt;/p&gt;

&lt;p&gt;Meine Empfehlung wäre deshalb, die Zuständigkeiten vor der Integration festzulegen: Das Modell schlägt eine Formulierung vor, die Redaktion verantwortet Bedeutung und Ton, das Produktteam prüft die Anzeige. Für Teams mit dieser Aufteilung ist Gemini 2.5 Flash-Lite ein plausibler Kandidat. Seine Eignung für die konkreten Zielsprachen bleibt gesondert zu beurteilen.&lt;/p&gt;




&lt;p&gt;Quellenstand: 20. Oktober 2026. Modellfunktionen und Grundpreise stammen aus der Google-Dokumentation. Die grundlegenden Modelldaten wurden zusätzlich mit den öffentlichen Daten von models.dev und OpenRouter abgeglichen.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Zwei Arten zu scheitern: Der eine meldet einen Fehler, der andere schweigt</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Tue, 20 Oct 2026 14:20:00 +0000</pubDate>
      <link>https://dev.to/buluo/zwei-arten-zu-scheitern-der-eine-meldet-einen-fehler-der-andere-schweigt-36jm</link>
      <guid>https://dev.to/buluo/zwei-arten-zu-scheitern-der-eine-meldet-einen-fehler-der-andere-schweigt-36jm</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgu1niuiyhczstzjlfuog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgu1niuiyhczstzjlfuog.png" alt="Zwei Arten zu scheitern" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Titelbild zur Veranschaulichung, kein Screenshot einer Produktoberfläche.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Jede Benchmark-Tabelle der Welt zählt dasselbe: richtig oder falsch. Das ist die falsche Achse.&lt;/p&gt;

&lt;p&gt;Denn wie ein Modell scheitert, ist praktisch wichtiger als wie oft. Ein Fehler, der eine Ausnahme wirft, kostet dich eine Stunde. Ein Fehler, der still bleibt, kostet dich einen Monat – weil du nicht weißt, dass du einen hast.&lt;/p&gt;

&lt;p&gt;Ich habe zwei Modelle durch 19 Aufgaben geschickt und dabei beide Sorten gesehen. Dieser Beitrag handelt nicht davon, welches besser ist. Er handelt davon, wie unterschiedlich sie kaputtgehen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vier Arten zu scheitern
&lt;/h2&gt;

&lt;p&gt;Nicht jede Niete ist gleich. Nach diesem Durchlauf sortiere ich so:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Falsch geantwortet.&lt;/strong&gt; Das Modell liefert eine Antwort, sie ist inhaltlich daneben. Unangenehm, aber sichtbar. Test rot, Mensch schaut drauf, fertig.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Richtig geantwortet, unbrauchbar formatiert.&lt;/strong&gt; Die Antwort stimmt, der Parser kommt trotzdem nicht dran. Ebenfalls sichtbar: Die Verarbeitung wirft einen Fehler, irgendwo leuchtet etwas rot. Kostet Bereinigungscode, aber kein Vertrauen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Abgeschnitten.&lt;/strong&gt; Die Ausgabe endet mitten im Satz, weil das Token-Limit greift. Sichtbar, weil der Abbruchgrund mitgeliefert wird – sofern man ihn liest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Kein finaler Antworttext.&lt;/strong&gt; Das Modell verbraucht Ressourcen, ruft weiter Werkzeuge auf und erreicht das Rundenlimit, ohne eine lesbare Antwort zu liefern. In den API-Daten steht dabei &lt;code&gt;tool_calls&lt;/code&gt;, kein API-Fehler. Wer nur den äußeren Jobstatus prüft, kann den fehlenden Antworttext trotzdem übersehen.&lt;/p&gt;

&lt;p&gt;Die vierte Sorte ist die gefährliche.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fprmj09w2iwtv63n72nyx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fprmj09w2iwtv63n72nyx.png" alt="Wohin die 19 Aufgaben gegangen sind" width="799" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;19 Aufgaben, je ein Durchlauf, 20. Oktober 2026.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Warum die vierte Sorte gefährlich ist
&lt;/h2&gt;

&lt;p&gt;In meinem Durchlauf hat genau das ein Modell getan. Aufgabe: In einem 400-Zeilen-Protokoll steht ein Schlüssel in Zeile 288.&lt;/p&gt;

&lt;p&gt;Das eine Modell fand ihn und gab den Wert zurück. Das andere verbrauchte sechs Runden ausschließlich mit Dateizugriffen, las &lt;strong&gt;42766 Eingabe-Token&lt;/strong&gt; und gab am Ende &lt;strong&gt;keine einzige Zeile&lt;/strong&gt; aus.&lt;/p&gt;

&lt;p&gt;Betrachte die Rechnung:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Die sechs Runden endeten mit &lt;code&gt;tool_calls&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Die Ausführung erreichte das Rundenlimit&lt;/li&gt;
&lt;li&gt;Es gab keinen API-Fehler, aber auch keinen finalen Antworttext&lt;/li&gt;
&lt;li&gt;Ohne Prüfung von Stop-Grund und Rundenlimit kann der äußere Job trotzdem als beendet erscheinen&lt;/li&gt;
&lt;li&gt;Verbraucht wurden 42766 Eingabe-Token&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvswe3430k2bnwggsa04n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvswe3430k2bnwggsa04n.png" alt="Der stille Ausfall in Zahlen" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bezahlt und nicht geliefert: 42766 Eingabe-Token gegen null Zeichen Ausgabe.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Wenn deine Überwachung nur den äußeren Jobstatus betrachtet, kann der Abbruch unauffällig bleiben. Für deine Nutzer ist die Funktion trotzdem kaputt.&lt;/p&gt;

&lt;p&gt;Und in jeder Benchmark-Tabelle steht dafür: eine Aufgabe nicht bestanden. Genau eine Zeile, gleichwertig mit „falsch geraten". Die Tabelle unterscheidet nicht zwischen „hat falsch geantwortet" und „hat aufgehört zu existieren".&lt;/p&gt;

&lt;h2&gt;
  
  
  Der laute Fehler auf der anderen Seite
&lt;/h2&gt;

&lt;p&gt;Die Formatfehler waren eine andere Sorte als der stille Abbruch. Bei M3 enthielt &lt;code&gt;content&lt;/code&gt; Denktext vor der verlangten Ausgabe; dadurch scheiterten alle drei Aufgaben mit striktem Format an der ursprünglichen Prüfung. Bei der nachträglichen Sichtung waren die Inhalte von zwei Antworten passend, aber die dritte Antwort blieb in einem nicht geschlossenen Denkblock und lässt sich nicht verlässlich als Antwort werten.&lt;/p&gt;

&lt;p&gt;Ein Parserfehler ist immerhin sichtbar: Er landet im Log und lässt sich gezielt untersuchen. V4-Pro zeigte in der langen Log-Aufgabe das Gegenstück: sechs Runden Dateizugriffe und am Ende keine Antwortzeile. Das sind unterschiedliche beobachtete Fehlerbilder, aber aus je einem kleinen Ausschnitt folgt keine allgemeine Rangfolge der Fehlerrisiken.&lt;/p&gt;

&lt;p&gt;Die gewichteten Werte von 0,850 und 0,950 fassen die ursprünglichen Prüfergebnisse dieser 19 Aufgaben zusammen. Sie zeigen weder, dass eine der drei Formatantworten nach Bereinigung sicher bestanden hätte, noch, welches Modell insgesamt zuverlässiger ist.&lt;/p&gt;

&lt;p&gt;Dabei wäre der Aufwand gering. Für eine Fehlerarten-Statistik braucht man genau zwei zusätzliche Felder pro Datensatz: den Abbruchgrund und die Anzahl der tatsächlich gelieferten Zeichen. Beides steht in jeder API-Antwort, ohne Zusatzaufruf. Dass es in praktisch keiner Vergleichstabelle auftaucht, liegt nicht daran, dass es schwierig wäre, sondern daran, dass die Tabelle nach Trefferquote sortiert ist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wie man stille Ausfälle sichtbar macht
&lt;/h2&gt;

&lt;p&gt;Ein stiller Ausfall ist kein Modellproblem, das man wegkonfigurieren kann. Es ist ein Überwachungsproblem. Drei Dinge reichen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Erstens: Leere Antworten separat zählen.&lt;/strong&gt; Nicht als Fehlschlag, sondern als eigene Kategorie. Ein Fehlschlag sagt „hat nicht geklappt". Ein leerer Erfolg sagt „ist durchgelaufen und hat nichts produziert" – das ist ein anderer Alarm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zweitens: Rundenlimit und Stop-Grund gemeinsam protokollieren.&lt;/strong&gt; Ein Turn-Limit schützt vor endlosen Schleifen und zeigt, wenn ein Modell innerhalb des Budgets nicht fertig wurde. Logge &lt;code&gt;finish_reason&lt;/code&gt; wie &lt;code&gt;tool_calls&lt;/code&gt; zusammen mit dem Erreichen der Grenze, getrennt von einer falschen Antwort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drittens: Die Rechnung als Signal nutzen.&lt;/strong&gt; Wenn eine Aufgabe ein Mehrfaches des üblichen Token-Verbrauchs kostet und trotzdem kein Ergebnis liefert, ist das ein Muster, kein Zufall. Ein Verhältnis aus Ausgabe-Token zu verbrauchten Token, das gegen null geht, ist ein messbarer stiller Ausfall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was das für die Auswahl heißt
&lt;/h2&gt;

&lt;p&gt;Wenn du ein Team für API-Betrieb oder SRE leitest, sagt dieser Test nicht, welches Modell insgesamt zuverlässiger ist. Er zeigt aber, welche Prüfungen in deinen Produktionspfad gehören: leere Antworten zählen, &lt;code&gt;stop&lt;/code&gt;-Grund und Turn-Limit loggen und eine Ausführung mit &lt;code&gt;tool_calls&lt;/code&gt; am Rundenlimit nicht als fertige Antwort behandeln.&lt;/p&gt;

&lt;p&gt;Für ein Produkt, das strikte JSON-Ausgaben braucht, ist V4-Pro der bessere Kandidat für einen ersten Pilot: Es bestand hier alle drei Formatprüfungen. Für nächtliche Batch-Verarbeitung mit engem Budget ist M3 einen eigenen Kostentest wert; in diesem Lauf lag die Gesamtrechnung rund 17,6 Prozent niedriger. Beide Hinweise stammen aus 19 einmalig ausgeführten Aufgaben und sind keine allgemeine Rangliste.&lt;/p&gt;

&lt;p&gt;Für lange Logs und Dokumente gibt es hier keinen Sieger. Beide Modelle bestanden jeweils eine von zwei Aufgaben, und zwar unterschiedliche. Wer solche Dokumente verarbeitet, sollte ein eigenes Set typischer Fälle mehrfach testen und Kosten pro verwertbarem Ergebnis vergleichen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drei Felder, die ich ab jetzt mitschreibe
&lt;/h2&gt;

&lt;p&gt;Der Aufwand dafür ist minimal, der Unterschied groß:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Den Abbruchgrund&lt;/strong&gt; jeder Antwort – nicht nur „hat geklappt" oder „hat nicht geklappt"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Die Anzahl gelieferter Zeichen&lt;/strong&gt; – auch dann, wenn die Antwort als erfolgreich gilt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ob das Rundenlimit erreicht wurde&lt;/strong&gt; – getrennt von einem inhaltlichen Fehlschlag&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Diese drei Felder kosten keinen zusätzlichen Aufruf. Zusammen machen sie sichtbar, ob eine Ausführung eine Antwort geliefert, das Rundenlimit erreicht oder nur weitere Werkzeuge angefordert hat.&lt;/p&gt;

&lt;p&gt;Die Trefferquote sagt dir, wie gut ein Modell ist. Sie sagt dir nicht, ob du es merkst, wenn es aufhört zu funktionieren.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Hinweis: Zahlen aus einem Durchlauf am 20. Oktober 2026 mit 19 Aufgaben und zwei Modellen. Der Beitrag vergleicht keine Trefferquoten, sondern Fehlermodi.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>python</category>
    </item>
    <item>
      <title>DeepSeek Harness: API-Protokoll für externe Modelle wählen und Fehler eingrenzen</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Tue, 20 Oct 2026 08:59:29 +0000</pubDate>
      <link>https://dev.to/buluo/deepseek-harness-api-protokoll-fur-externe-modelle-wahlen-und-fehler-eingrenzen-27ff</link>
      <guid>https://dev.to/buluo/deepseek-harness-api-protokoll-fur-externe-modelle-wahlen-und-fehler-eingrenzen-27ff</guid>
      <description>&lt;h2&gt;
  
  
  Das Problem
&lt;/h2&gt;

&lt;p&gt;Beim Einrichten eines externen Modells in DeepSeek Harness füllt man die API-Adresse aus, fügt den Schlüssel ein, prüft die Modell-ID — und steht dann vor einem Dropdown ohne jede Erklärung: &lt;strong&gt;OpenAI Chat Completions&lt;/strong&gt;, &lt;strong&gt;OpenAI Responses&lt;/strong&gt;, &lt;strong&gt;Anthropic Messages&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Wählt man die falsche Option, kommt ein Fehler, der nicht verrät, welche der drei gemeint war. Ein &lt;code&gt;401&lt;/code&gt; sieht aus wie ein falscher Schlüssel, ein &lt;code&gt;404&lt;/code&gt; wie eine falsche Adresse, und ein &lt;code&gt;400&lt;/code&gt; wie ein Tippfehler im Feldnamen.&lt;/p&gt;

&lt;p&gt;Dieser Beitrag zeigt, was sich hinter den drei Optionen tatsächlich unterscheidet, wie man sie in drei Schritten auseinanderhält und was bei einem Test am 20. Oktober 2026 herauskam.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kurzfassung
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unklar?&lt;/strong&gt; OpenAI Chat Completions wählen. Die meisten Anbieter implementieren dieses Format.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Der Anbieter bietet nur &lt;code&gt;/v1/messages&lt;/code&gt; an&lt;/strong&gt;, oder es wird ein Claude-natives Werkzeug angebunden: Anthropic Messages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responses&lt;/strong&gt; nur dann, wenn nachweislich serverseitige Funktionen wie Kontextspeicherung oder eingebaute Werkzeuge vorhanden sind.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Umgebung
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Punkt&lt;/th&gt;
&lt;th&gt;Wert&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Betriebssystem&lt;/td&gt;
&lt;td&gt;Windows 10 / 11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;DeepSeek Harness Desktop, Oberfläche Stand Oktober 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gegenstelle&lt;/td&gt;
&lt;td&gt;beliebiger OpenAI- oder Anthropic-kompatibler Dienst (hier als Beispiel: Crazyrouter)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Basis-URL&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;https://api.crazyrouter.com/v1&lt;/code&gt; — nur bis &lt;code&gt;/v1&lt;/code&gt;, den Rest ergänzt der Client&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testdatum&lt;/td&gt;
&lt;td&gt;20.10.2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modelle&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;deepseek-v4-pro&lt;/code&gt;, &lt;code&gt;claude-opus-4-5&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentifizierung&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Authorization: Bearer&lt;/code&gt;, Schlüssel aus der Umgebungsvariable &lt;code&gt;CRAZYROUTER_API_KEY&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6k5vzal5al5z2tloe4nt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6k5vzal5al5z2tloe4nt.png" alt="Die Protokollauswahl in DeepSeek Harness, Stand Oktober 2026. Das Schlüsselfeld liegt außerhalb des Bildausschnitts." width="790" height="650"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Was sich wirklich unterscheidet
&lt;/h2&gt;

&lt;p&gt;Die drei Optionen sind keine Stufen („einfach“, „fortgeschritten“, „profi“), sondern drei parallele Nachrichtenformate. Vier Dinge ändern sich:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wer den Kontext hält:&lt;/strong&gt; Chat Completions und Messages sind zustandslos, der Client sendet den Verlauf bei jeder Anfrage erneut. Responses kann ihn serverseitig speichern.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wo die Systemanweisung liegt:&lt;/strong&gt; im ersten Element von &lt;code&gt;messages&lt;/code&gt;, im Feld &lt;code&gt;instructions&lt;/code&gt; oder im Feld &lt;code&gt;system&lt;/code&gt; auf oberster Ebene.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wie Werkzeugaufrufe zurückkommen:&lt;/strong&gt; &lt;code&gt;tool_calls&lt;/code&gt;, &lt;code&gt;function_call&lt;/code&gt; oder &lt;code&gt;tool_use&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wo der Text steht:&lt;/strong&gt; in &lt;code&gt;choices&lt;/code&gt;, in &lt;code&gt;output&lt;/code&gt; oder in einem &lt;code&gt;content&lt;/code&gt;-Array.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wichtig: „OpenAI“ im Namen bezeichnet das Format, nicht die Modellmarke. Welches Modell antwortet, entscheidet die Modell-ID im Feld darüber.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhqrn8jh3v2aonp73q8qf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhqrn8jh3v2aonp73q8qf.png" alt="Die drei Protokolle im Vergleich: Erinnerungsvermögen, eigene Werkzeuge, wann man sie wählt" width="799" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Schritte
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Felder ausfüllen
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;„Einstellungen → Modelle → Modellanbieter hinzufügen“, dann „Benutzerdefinierte Modell-API“&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provider-ID:&lt;/strong&gt; freier Kleinbuchstabe, nicht mit anderen Einträgen doppelt (Beispiel: &lt;code&gt;crazyrouter&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anzeigename:&lt;/strong&gt; nur zur eigenen Orientierung im Menü&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API-Adresse:&lt;/strong&gt; die Basis-URL des Dienstes, nur bis &lt;code&gt;/v1&lt;/code&gt; — nicht den vollständigen Pfad eintragen&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API-Protokoll:&lt;/strong&gt; im Zweifel &lt;code&gt;OpenAI Chat Completions&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API-Schlüssel:&lt;/strong&gt; der Schlüssel desselben Dienstes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modellkatalog:&lt;/strong&gt; „Verfügbare Modelle abrufen“ oder Modell-ID manuell eintragen&lt;/li&gt;
&lt;li&gt;Speichern, neue Sitzung öffnen, Modell auswählen&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Prüfskript in drei Schritten
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.crazyrouter.com/v1"&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c"&gt;# Beispiel: Crazyrouter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Authorization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;CRAZYROUTER_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Schritt 1: Modellliste — prüft nur Adresse und Schlüssel&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Invoke-RestMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;/models"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ExpandProperty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-First&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Property&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Schritt 2: alle drei Endpunkte abklopfen, nur den Statuscode lesen&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="kr"&gt;foreach&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@(&lt;/span&gt;&lt;span class="s2"&gt;"/chat/completions"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/responses"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/messages"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nv"&gt;$r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Invoke-WebRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$base$p&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Post&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="nt"&gt;-ContentType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"application/json"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{}"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-SkipHttpErrorCheck&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Write-Output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"{0,-20} {1}"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;StatusCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Schritt 3: kleinste mögliche Anfrage&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek-v4-pro"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@(@{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Antworte nur mit OK"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ConvertTo-Json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Depth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;5&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Invoke-RestMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$base&lt;/span&gt;&lt;span class="s2"&gt;/chat/completions"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Post&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-Headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ContentType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"application/json"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ExpandProperty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Schritt 2 funktioniert auch &lt;strong&gt;ohne Schlüssel&lt;/strong&gt;: &lt;code&gt;$headers&lt;/code&gt; weglassen und einen leeren Body senden. Ein &lt;code&gt;401&lt;/code&gt; heißt, die Route existiert; ein &lt;code&gt;404&lt;/code&gt; heißt, sie existiert nicht.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifikation: Ergebnisse vom 20.10.2026
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ohne Schlüssel lässt sich die Existenz der Route prüfen.&lt;/strong&gt; Alle vier echten Pfade antworteten mit &lt;code&gt;401&lt;/code&gt; und dem Text &lt;code&gt;未提供令牌&lt;/code&gt; („kein Token angegeben“); ein absichtlich falscher Pfad antwortete mit &lt;code&gt;404&lt;/code&gt; und &lt;code&gt;Invalid endpoint path&lt;/code&gt;. Der Dienst prüft die Route vor dem Token — deshalb funktioniert dieser Test auch vor der Einrichtung.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alle drei Endpunkte antworteten mit &lt;code&gt;200&lt;/code&gt;.&lt;/strong&gt; Die Antwortzeit lag zwischen zwei und vier Sekunden. Der Unterschied liegt in der Position des Textes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endpunkt&lt;/th&gt;
&lt;th&gt;Modell&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Felder auf oberster Ebene&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/chat/completions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;deepseek-v4-pro&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;&lt;code&gt;choices,id,model,object,usage&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/responses&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;deepseek-v4-pro&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;&lt;code&gt;output,output_text,status,object&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/messages&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;claude-opus-4-5&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;&lt;code&gt;content,stop_reason,type,role,usage&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg08sal11ei5etulrea70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg08sal11ei5etulrea70.png" alt="Drei Schritte zur Eingrenzung: erst die Route, dann die Felder" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;404&lt;/code&gt; hat zwei Bedeutungen.&lt;/strong&gt; Eine falsche Modell-ID ergibt ebenfalls &lt;code&gt;404&lt;/code&gt;, aber im Body steht &lt;code&gt;model_not_found&lt;/code&gt; samt Modellnamen. Nur der Body unterscheidet „falscher Pfad“ von „falsches Modell“.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Der Dienst ist großzügiger als die Spezifikation.&lt;/strong&gt; Anthropic verlangt &lt;code&gt;max_tokens&lt;/code&gt;; hier wurde auch ohne dieses Feld &lt;code&gt;200&lt;/code&gt; zurückgegeben. &lt;code&gt;x-api-key&lt;/code&gt; &lt;strong&gt;und&lt;/strong&gt; &lt;code&gt;Authorization: Bearer&lt;/code&gt; wurden beide akzeptiert. Die OpenAI-kompatiblen Endpunkte akzeptierten dagegen nur &lt;code&gt;Bearer&lt;/code&gt; — mit &lt;code&gt;x-api-key&lt;/code&gt; kam &lt;code&gt;401&lt;/code&gt;. Regeln lassen sich also nicht ungeprüft von einem Anbieter auf einen anderen übertragen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Werkzeugaufrufe funktionieren in allen drei Formaten, aber unterschiedlich:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protokoll&lt;/th&gt;
&lt;th&gt;Anfrage&lt;/th&gt;
&lt;th&gt;Antwort&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chat Completions&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tools[].function.parameters&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;message.tool_calls[]&lt;/code&gt;, &lt;code&gt;finish_reason=tool_calls&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Messages&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tools[].input_schema&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;content[0].type=tool_use&lt;/code&gt;, &lt;code&gt;stop_reason=tool_use&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tools[].type=function&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;function_call&lt;/code&gt; innerhalb von &lt;code&gt;output[]&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Responses: Die Websuche funktioniert, die Kontextfortsetzung nicht.&lt;/strong&gt; Mit &lt;code&gt;tools=[{"type":"web_search"}]&lt;/code&gt; erschienen fünf &lt;code&gt;web_search_call&lt;/code&gt;-Einträge mit echten Suchergebnissen; &lt;code&gt;instructions&lt;/code&gt; wurde ebenfalls beachtet. Im zweiseitigen Test mit &lt;code&gt;previous_response_id&lt;/code&gt; erinnerte sich das Modell jedoch nicht an die erste Nachricht — die Antwort war von einem Kontrolllauf ohne diesen Parameter nicht zu unterscheiden. Ein akzeptiertes Feld ist kein Beweis für eine implementierte Funktion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fehlersuche
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;401&lt;/strong&gt; — Schlüssel falsch oder am falschen Ort. OpenAI-Format: &lt;code&gt;Authorization: Bearer&lt;/code&gt;. Messages: &lt;code&gt;x-api-key&lt;/code&gt; (manche Dienste akzeptieren auch &lt;code&gt;Bearer&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;404&lt;/strong&gt; — Route fehlt (&lt;code&gt;Invalid endpoint path&lt;/code&gt;) oder Modell-ID falsch (&lt;code&gt;model_not_found&lt;/code&gt;). Immer den Body lesen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;400 / 422&lt;/strong&gt; — Route vorhanden, Anfrage nicht konform. Fehlt &lt;code&gt;model&lt;/code&gt;, kommt &lt;code&gt;Model name is required&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;200, aber wirkungslos&lt;/strong&gt; — eine &lt;code&gt;system&lt;/code&gt;-Anweisung im Anthropic-Stil an einen Chat-Completions-Endpunkt ergibt &lt;code&gt;200&lt;/code&gt;, wird aber ignoriert. Kein Fehler bedeutet nicht, dass die Anweisung greift.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Die Reihenfolge lautet: &lt;strong&gt;Adresse → Schlüssel → Route → Felder.&lt;/strong&gt; Wer alle vier gleichzeitig ändert und dann einen Fehler bekommt, hat nichts gelernt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Austausch
&lt;/h2&gt;

&lt;p&gt;Mich würde interessieren, wie andere Anbieter sich hier verhalten: Akzeptiert euer Dienst ebenfalls beide Authentifizierungs-Header, und funktioniert die Kontextfortsetzung über &lt;code&gt;previous_response_id&lt;/code&gt; tatsächlich? Genau das ist der Punkt, an dem sich Anbieter am stärksten unterscheiden, und der sich nur durch einen eigenen Test klären lässt.&lt;/p&gt;

&lt;p&gt;Für diese Tests nutze ich &lt;a href="https://crazyrouter.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=deepseek-harness-api-protocol&amp;amp;utm_content=boluo_devto_deepseek-harness-api-protocol" rel="noopener noreferrer"&gt;Crazyrouter&lt;/a&gt;: ein Schlüssel für Modelle mehrerer Anbieter, mit getrennten OpenAI- und Anthropic-kompatiblen Einstiegspunkten — praktisch, um die drei Schritte oben im selben Konto zu vergleichen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quellen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://platform.openai.com/docs/" rel="noopener noreferrer"&gt;OpenAI API-Dokumentation&lt;/a&gt; — Felddefinitionen für Chat Completions und Responses&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.anthropic.com/" rel="noopener noreferrer"&gt;Anthropic Messages API&lt;/a&gt; — Anfrage-Header, &lt;code&gt;system&lt;/code&gt;-Feld und Werkzeugblöcke&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.deepseek.com/harness/" rel="noopener noreferrer"&gt;DeepSeek Harness&lt;/a&gt; — Client-Download und Modelleinrichtung&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.crazyrouter.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=deepseek-harness-api-protocol&amp;amp;utm_content=boluo_devto_deepseek-harness-api-protocol__reference" rel="noopener noreferrer"&gt;Crazyrouter-Dokumentation&lt;/a&gt; — OpenAI- und Anthropic-kompatible Zugänge&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>tutorial</category>
      <category>debugging</category>
      <category>ai</category>
    </item>
    <item>
      <title>Claudecode-Desktop-Update: Was sich bei parallelen Aufgaben ändert</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Mon, 19 Oct 2026 10:46:22 +0000</pubDate>
      <link>https://dev.to/buluo/claudecode-desktop-update-was-sich-bei-parallelen-aufgaben-andert-1aa3</link>
      <guid>https://dev.to/buluo/claudecode-desktop-update-was-sich-bei-parallelen-aufgaben-andert-1aa3</guid>
      <description>&lt;p&gt;Eine Funktion ist implementiert, aber der Regressionstest fehlt. Gleichzeitig müsste jemand die Dokumentation prüfen. Beides lässt sich auslagern — solange klar bleibt, welche Dateien bearbeitet werden und wo die Ergebnisse wieder zusammenkommen.&lt;/p&gt;

&lt;p&gt;Genau dafür ist das jüngste Claudecode-Desktop-Update interessant. Die Ankündigung vom 14. Oktober 2026 UTC, in Peking bereits der 15. Oktober, verbindet verschachtelte Sitzungen, Vorschläge für Folgeaufgaben und sichtbarere Fortschritte. Hinzu kommen bequemere Projekteinstiege und gespeicherte Umgebungen.&lt;/p&gt;

&lt;p&gt;Ein Teammitglied beschrieb das als „fast v2“. Ich würde daraus zunächst keine Geschwindigkeitszusage ableiten. Für die Entwicklung ist die konkretere Frage: &lt;strong&gt;Welche Teile einer Aufgabe lassen sich jetzt besser verteilen und anschließend prüfen?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0dnvkelk6b55vv4jn3eu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0dnvkelk6b55vv4jn3eu.png" alt="Konzeptillustration zum Claudecode-Desktop-Update und parallelen Aufgaben" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Mit image2 erstellte Konzeptillustration, kein Screenshot der Anwendung.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Folgeaufgaben und verschachtelte Sitzungen unterscheiden
&lt;/h2&gt;

&lt;p&gt;Die neue Oberfläche zeigt Vorschläge für Arbeiten, die sich aus einer laufenden Aufgabe ergeben. Ein solcher Vorschlag kann eine eigene Sitzung starten. Das ist beispielsweise sinnvoll, wenn bei einem Bugfix auffällt, dass eine Erklärung in der Dokumentation veraltet ist.&lt;/p&gt;

&lt;p&gt;Eine verschachtelte Sitzung hat eine andere Rolle. Wenn Claude mehrere Aufgaben parallel bearbeiten soll, kann es solche Sitzungen anlegen und deren Ergebnisse an die Hauptunterhaltung zurückmelden lassen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2enuxcuano95plqsiduw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2enuxcuano95plqsiduw.gif" alt="Eine vorgeschlagene Folgeaufgabe wird in einer eigenen Claudecode-Sitzung gestartet" width="720" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ein Vorschlag kann zusätzliche Arbeit aus der aktuellen Unterhaltung herauslösen.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Der Unterschied ist praktisch relevant: Eine Folgeaufgabe ist zunächst eine Entscheidung über weiteren Arbeitsumfang. Verschachtelte Sitzungen helfen dagegen, bereits verteilte Arbeit wieder in der Hauptunterhaltung zusammenzuführen.&lt;/p&gt;

&lt;p&gt;Ich würde deshalb nicht jede vorgeschlagene Verbesserung sofort starten. Für einen kleinen Fix kann ein zusätzlicher Umbau schlicht außerhalb des Auftrags liegen. Die Oberfläche erleichtert den Start; sie entscheidet nicht, was zum aktuellen Änderungsumfang gehört.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Vor dem Aufteilen die gemeinsame Schnittstelle festlegen
&lt;/h2&gt;

&lt;p&gt;Nehmen wir als Beispiel eine Funktion, die einen Ladefehler im Frontend verständlicher anzeigen soll. Die gewünschte Fehlermeldung und das Format der Fehlerantwort sind bereits festgelegt.&lt;/p&gt;

&lt;p&gt;Dann lassen sich zwei Prüfaufgaben gut voneinander abgrenzen: Eine Sitzung sucht fehlende Testfälle, eine andere prüft die angezeigten Texte und die Hilfe. Beide können Ergebnisse liefern, ohne die gemeinsame Schnittstelle neu zu entwerfen.&lt;/p&gt;

&lt;p&gt;Ein möglicher Arbeitsauftrag wäre:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Prüfe die Testabdeckung und die Hilfetexte in getrennten Aufgaben. Verändere das vereinbarte Fehlerformat nicht. Melde die gefundenen Lücken und die betroffenen Dateien an diese Unterhaltung zurück.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Das ist ein Formulierungsbeispiel, kein dokumentierter Testlauf. Der wichtige Teil ist die Grenze des Auftrags: Was darf geändert werden, was steht bereits fest und welches Ergebnis soll zurückkommen?&lt;/p&gt;

&lt;p&gt;Wenn dagegen beide Sitzungen das Fehlerformat ändern sollen, ist die gemeinsame Entscheidung noch offen. Mehr Parallelität löst diese Abhängigkeit nicht. In diesem Fall würde ich zuerst die Schnittstelle klären und erst danach unabhängige Arbeiten vergeben.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Separate Unterhaltungen brauchen passende Arbeitsverzeichnisse
&lt;/h2&gt;

&lt;p&gt;Die aktualisierte Startansicht macht kürzlich verwendete Ordner leichter erreichbar. Häufig benötigte Umgebungen lassen sich speichern, darunter Ordnerkombinationen, SSH-Ziele und Cloud-Umgebungen. Das ist besonders beim Wechsel zwischen mehreren Projekten hilfreich.&lt;/p&gt;

&lt;p&gt;Für Git-Projekte stehen Worktrees als getrennte Arbeitsverzeichnisse zur Verfügung. Damit können Sitzungen ihre Dateien bearbeiten, ohne direkt in dieselbe Arbeitskopie zu schreiben. Eine getrennte Unterhaltung allein ist noch keine Aussage darüber, wo ihre Änderungen landen. Vor parallelen Schreibaufgaben lohnt sich deshalb der Blick auf die ausgewählte Umgebung.&lt;/p&gt;

&lt;p&gt;Auch bei sauber getrennten Verzeichnissen bleibt die Integration offen: Zwei Änderungen können sich auf unterschiedliche Annahmen über dieselbe Funktion stützen. Ein konfliktfreier Merge beweist noch nicht, dass das kombinierte Verhalten stimmt.&lt;/p&gt;

&lt;p&gt;Daneben steht die Verbrauchsfrage. Wer Claudecode über einen API-Zugang abrechnet, sollte bei zusätzlichen Aufgaben auch den tatsächlichen Verbrauch prüfen; &lt;a href="https://crazyrouter.com/en/blog/anthropic-billing-guide-claude-api-costs?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=claude_desktop_202610&amp;amp;utm_content=boluo_devto_claude_desktop_202610" rel="noopener noreferrer"&gt;Crazyrouter erklärt die Claude-API-Abrechnung und Nutzungskontrolle&lt;/a&gt;. Diese API-Abrechnung ist von einem Desktop-Abonnement zu unterscheiden. Die neue Aufgabenansicht belegt für sich genommen weder geringere Kosten noch einen niedrigeren Tokenverbrauch.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Fortschritt lesen, dann Änderungen prüfen
&lt;/h2&gt;

&lt;p&gt;Die Seitenleiste macht deutlicher, welche Sitzungen noch arbeiten, welche Aufmerksamkeit benötigen und welche fertig sind. Innerhalb einer Sitzung zeigen laufende Aufgabenlisten den Fortschritt. Rückblickkarten fassen zusammen, was in der Zwischenzeit passiert ist; die Seitenansicht bietet Informationen zu Umgebung, Kontext und Änderungen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5u03tt6lrb9go0p3nj3r.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5u03tt6lrb9go0p3nj3r.gif" alt="Fortschritt und Sitzungszustände in der Claudecode-Seitenleiste" width="720" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Die Statusanzeige hilft bei der Auswahl der nächsten Sitzung, die geprüft werden sollte.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Nach einer Unterbrechung würde ich zuerst eine Sitzung mit offenem Entscheidungsbedarf öffnen. Anschließend lässt sich die Zusammenfassung mit dem tatsächlichen Diff abgleichen: Welche Dateien wurden geändert? Wurde die vereinbarte Grenze eingehalten? Welche Prüfung stützt die Aussage, dass die Aufgabe erledigt ist?&lt;/p&gt;

&lt;p&gt;Diese Reihenfolge hält die Statusanzeige nützlich, ohne sie mit einer technischen Abnahme zu verwechseln. Eine Karte kann den Einstieg in eine Prüfung verkürzen. Sie ersetzt weder die Prüfung der Anforderungen noch das Lesen relevanter Änderungen.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Rückfragen mit &lt;code&gt;/btw&lt;/code&gt; von neuen Anforderungen trennen
&lt;/h2&gt;

&lt;p&gt;Während die Hauptaufgabe läuft, lässt sich mit &lt;code&gt;/btw&lt;/code&gt; eine Nebenunterhaltung öffnen. Unter macOS geht das auch mit &lt;code&gt;Cmd + ;&lt;/code&gt;, unter Windows mit &lt;code&gt;Ctrl + ;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6i6r6haekhj0bvj35ff0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6i6r6haekhj0bvj35ff0.gif" alt="Eine Nebenunterhaltung erklärt die laufende Arbeit, während die Hauptaufgabe weiterläuft" width="720" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Eine kurze Verständnisfrage muss nicht die Hauptunterhaltung verlängern.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Die Funktion gab es bereits vor diesem Update. Sie wird hier im Zusammenhang mit dem überarbeiteten Arbeitsablauf gezeigt und sollte nicht als erstmals im Oktober eingeführte Funktion beschrieben werden.&lt;/p&gt;

&lt;p&gt;Für den Einsatz ist die Richtung des Kontexts entscheidend: Die Nebenunterhaltung kennt die Hauptunterhaltung bis zu diesem Zeitpunkt. Ihre Antworten werden jedoch nicht in den Hauptverlauf zurückgeschrieben.&lt;/p&gt;

&lt;p&gt;„Warum wird hier erneut versucht?“ passt deshalb gut in die Nebenunterhaltung. „Verzichte auf den erneuten Versuch und ändere die Implementierung“ muss als neue Anforderung in die Hauptunterhaltung. Außerdem werden Nebenunterhaltungen nicht auf der Festplatte gespeichert; nach dem Schließen der App lassen sie sich nicht wiederherstellen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was ich beim Update zuerst prüfen würde
&lt;/h2&gt;

&lt;p&gt;Die Desktop-App wird unabhängig von einer separat installierten CLI aktualisiert. Für die Neuerungen also die App aktualisieren und eine neue Sitzung beginnen. In einer lokalen Desktop-Sitzung zeigt &lt;code&gt;/status&lt;/code&gt; die dort verwendete Claudecode-Version.&lt;/p&gt;

&lt;p&gt;Danach reicht ein begrenzter Auftrag mit zwei unabhängig prüfbaren Teilaufgaben. Entscheidend wäre für mich, ob deren Ergebnisse nachvollziehbar zurückkommen und ob sich offene Entscheidungen schneller finden lassen. Ein komplexer Umbau mit mehreren gemeinsam geänderten Schnittstellen wäre dafür ein unnötig unübersichtlicher erster Versuch.&lt;/p&gt;

&lt;p&gt;Das Update verändert vor allem die Organisation der Arbeit. Sein Nutzen lässt sich daran prüfen, ob Aufgaben, Dateien und Rückmeldungen zusammenpassen — und ob am Ende noch klar ist, welche Änderung tatsächlich freigegeben werden kann.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Claude in eine App integrieren: offizielle API oder Gateway?</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Mon, 19 Oct 2026 09:55:36 +0000</pubDate>
      <link>https://dev.to/buluo/claude-in-eine-app-integrieren-offizielle-api-oder-gateway-fe7</link>
      <guid>https://dev.to/buluo/claude-in-eine-app-integrieren-offizielle-api-oder-gateway-fe7</guid>
      <description>&lt;p&gt;&lt;strong&gt;Wie ich Funktionen, Abrechnung und Zuständigkeiten vergleichen würde, bevor ich mich für einen Anbieter entscheide.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzixi0jsv587uh1ay9s93.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzixi0jsv587uh1ay9s93.png" alt="Eine Anwendung mit Claude verbinden, direkt oder über ein Gateway" width="799" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Mit GPT Image 2 erzeugte konzeptionelle Illustration, keine Aufnahme einer Produktoberfläche.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Wenn ich Claude in einer Anwendung verwenden möchte, beginnt meine Entscheidung bei dieser Anwendung. Welche Aufgabe soll sie erledigen? Welche Verbindung unterstützt sie? Erst danach würde ich zwischen der offiziellen API und einem externen Gateway wählen. Ein günstiger Tarif hilft wenig, wenn die Verbindung zwar Text überträgt, aber eine benötigte Funktion fehlt.&lt;/p&gt;

&lt;p&gt;Als Beispiel nehme ich eine gedachte Anwendung, die öffentliche Dokumente zusammenfasst. Sie soll einen Text an Claude schicken und das Ergebnis im eigenen Fenster anzeigen. An diesem einfachen Fall lässt sich erklären, was sich mit dem Anbieterwechsel verändert, ohne gleich eine Konfigurationsdatei öffnen zu müssen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zunächst trenne ich Chat und API
&lt;/h2&gt;

&lt;p&gt;Für eine gelegentliche Frage zu einem Dokument kann die Claude-Website bereits ausreichen. Dort nutze ich ein fertiges Produkt mit seiner Oberfläche, seinen Funktionen und den Grenzen des jeweiligen Plans. Ich würde keine zusätzliche API-Verbindung einrichten, solange mir dadurch kein konkreter Vorteil entsteht.&lt;/p&gt;

&lt;p&gt;Meine Beispielanwendung soll allerdings selbst Anfragen senden. Dafür braucht sie einen unterstützten Zugang und die passende Berechtigung, häufig einen API-Schlüssel. Dieser Schlüssel ist kein Passwort für die Chat-Website. Er gehört zu dem Dienst, der ihn ausstellt, und seine Nutzung wird nach dessen Regeln abgerechnet.&lt;/p&gt;

&lt;p&gt;Ein Guthaben bei einem Drittanbieter schaltet deshalb nicht automatisch einen kostenpflichtigen Claude-Chatplan frei. Ebenso wenig würde ich davon ausgehen, dass ein Chat-Abonnement sämtliche Anfragen einer fremden Anwendung bezahlt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8lqa0j2k30zbo9fe9gs3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8lqa0j2k30zbo9fe9gs3.png" alt="Drei getrennte Zugänge: Chatprodukt, offizielle API und externer Vermittler" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Eigene erklärende Grafik mit chinesischen Beschriftungen: links das Chat-Abonnement, in der Mitte die offizielle API, rechts der Drittanbieter. Konten, Schlüssel und Guthaben sind nicht automatisch austauschbar. Keine Produktaufnahme.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Meine Anforderungen kommen vor der Preisliste
&lt;/h2&gt;

&lt;p&gt;Bei der Dokumenten-App würde ich zunächst festhalten, welche Inhalte sie verarbeiten soll. Reicht normaler Text? Enthalten die Unterlagen Bilder? Wie umfangreich sind sie? Die Antworten betreffen sowohl die Anwendung als auch den gewählten Dienst.&lt;/p&gt;

&lt;p&gt;Eine Modellbezeichnung in einer Liste beantwortet diese Fragen noch nicht. Die App muss die benötigten Daten übertragen können; die konkrete Schnittstelle des Anbieters muss sie unterstützen. Auch die angebotenen Grenzen und die tatsächlich verfügbaren Funktionen können für die Entscheidung relevant sein.&lt;/p&gt;

&lt;p&gt;Ich würde daher zuerst die Verbindungsbeschreibung der App lesen. Akzeptiert sie die offizielle Claude-API? Lässt sich ein anderer Anbieter eintragen? Oder bezahlt man bereits einen integrierten Zugang beim App-Anbieter? Erst mit dieser Information wird ein Preisvergleich sinnvoll.&lt;/p&gt;

&lt;h2&gt;
  
  
  Direktzugang und Gateway ändern die Zuständigkeiten
&lt;/h2&gt;

&lt;p&gt;Bei der offiziellen API würde ich die Spezifikation beim Modellanbieter nachlesen und Verbrauch sowie Abrechnung in dessen Verwaltung prüfen. Für Rückfragen hätte ich die offizielle Unterstützung als Anlaufstelle. Das ist für mich ein Argument, wenn ich eine Anwendung dauerhaft betreiben und Änderungen anhand der ursprünglichen Dokumentation nachvollziehen möchte.&lt;/p&gt;

&lt;p&gt;Diese Klarheit ist keine Verfügbarkeitsgarantie. Auch direkt muss ich prüfen, ob mein Konto die Voraussetzungen erfüllt, welche Modelle freigegeben sind und welche Nutzungsgrenzen gelten. Offizieller Zugang bedeutet nicht unbegrenzten Zugang.&lt;/p&gt;

&lt;p&gt;Ein Gateway nimmt dagegen die Anfrage meiner App entgegen und leitet sie an einen vorgelagerten Modelldienst weiter. Manche Anbieter bündeln Modelle mehrerer Hersteller. Das kann die Verwaltung vereinfachen, wenn ich diese Auswahl tatsächlich benötige: weniger getrennte Konten, eine gemeinsame Abrechnung oder eine passende Zahlungsoption.&lt;/p&gt;

&lt;p&gt;Zum Beispiel zeigt &lt;a href="https://crazyrouter.com/en/models/anthropic" rel="noopener noreferrer"&gt;Crazyrouter eine Übersicht der Claude-Modelle und Preise&lt;/a&gt;. Ich würde sie zum Eingrenzen der Auswahl verwenden und anschließend die benötigten Funktionen sowie die Abrechnungsbedingungen prüfen. Die Übersicht beschreibt das Angebot des Anbieters; sie belegt weder jede Eigenschaft des Dienstes noch die vollständige Funktionsgleichheit mit dem Claude-Chatprodukt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwmvm8q1urh524ajk8zxs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwmvm8q1urh524ajk8zxs.png" alt="Anfrageweg über die offizielle API im Vergleich zum Weg über einen Vermittler" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Eigene schematische Darstellung auf Chinesisch. Links sendet die Anwendung direkt an die offizielle API, rechts zunächst an einen Vermittler und anschließend an den vorgelagerten Dienst. Die Grafik enthält keine Messwerte zu Geschwindigkeit oder Zuverlässigkeit.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Mit dem Gateway bekomme ich auch eine zusätzliche Geschäftsbeziehung. Schlüssel, Guthaben, Rückerstattung und Kundenunterstützung liegen zunächst bei diesem Anbieter. Ich möchte wissen, welche Aufzeichnungen er bei einer fehlgeschlagenen Anfrage bereitstellt und wie er eine unklare Abbuchung erklärt.&lt;/p&gt;

&lt;p&gt;Bei Kundendokumenten kommt eine weitere Prüfung dazu: Welche Daten verarbeitet oder speichert die App, welche das Gateway und welche der Modelldienst? Ich würde die Vorgaben des Auftraggebers vor der Nutzung klären. Der Name des Modells allein beschreibt nicht den vollständigen Weg der Daten.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bereits vorhandene API-Gutschriften würde ich zuerst prüfen
&lt;/h2&gt;

&lt;p&gt;Eine pauschale Aussage wie „Ein Claude-Abo hat niemals etwas mit API-Guthaben zu tun“ wäre zu grob. Nach der am 15. Oktober 2026 geprüften &lt;a href="https://support.claude.com/en/articles/17154008-monthly-api-credits-for-max-and-team-plans" rel="noopener noreferrer"&gt;offiziellen Erläuterung zu monatlichen API-Gutschriften&lt;/a&gt; können berechtigte Max- und Team-Abonnenten solche Gutschriften erhalten. Free, Pro und Enterprise fallen nicht unter dieses konkrete Angebot.&lt;/p&gt;

&lt;p&gt;Dafür wird eine Claude-Console-Organisation verknüpft. Es gelten Bedingungen für den Vertragsstatus und die erforderlichen Rollen; neue Abonnenten müssen sieben Tage in einem berechtigten Plan gewesen sein. Unverbrauchte Gutschriften verfallen zum Ende des Abrechnungszeitraums. Sie erhöhen die Chat-Nutzungsgrenzen nicht und gelten nicht für interaktive Claude-Code-Sitzungen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftr0bmqvlll4zx2lo5o40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftr0bmqvlll4zx2lo5o40.png" alt="Offizielle Hilfe zu den Plänen mit monatlichen API-Gutschriften" width="304" height="672"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Echter Screenshot der offiziellen Hilfeseite vom 15. Oktober 2026, aufgenommen in der chinesischen Sprachversion. Er zeigt die berechtigten Pläne. Die verlinkte englische Seite erläutert Bedingungen und Geltungsbereich.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Für meine App würde ich deshalb prüfen, ob ein vorhandenes Guthaben ihre konkrete Nutzung abdeckt und in welcher Organisation es liegt. Ein Bonus kann eine zusätzliche Einzahlung zunächst unnötig machen. Er ersetzt aber nicht die Prüfung der Verbindung und des Verwendungszwecks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ich rechne pro Aufgabe, nicht pro Klick
&lt;/h2&gt;

&lt;p&gt;Ein Klick auf „Zusammenfassen“ verrät wenig über den Verbrauch. Die App könnte das gesamte Dokument mitsenden, Rückfragen stellen oder mehrere Verarbeitungsschritte ausführen. Für die API-Abrechnung zählen je nach Modell und Tarif unter anderem Eingabe, Ausgabe und gegebenenfalls die Nutzung eines Caches.&lt;/p&gt;

&lt;p&gt;Token sind dabei Verarbeitungseinheiten, keine feste Anzahl deutscher Wörter. Ich würde die angezeigte Wortzahl eines Dokuments daher nicht einfach als abrechenbare Tokenzahl übernehmen. Ebenso wenig lässt sich aus einem günstigen Eingabepreis bereits der Gesamtpreis einer langen Antwort ableiten.&lt;/p&gt;

&lt;p&gt;Mein Vergleich würde dieselbe Aufgabe mit dem passenden Modell zugrunde legen. Ein Rabatt wäre dann interessant, wenn er sich auf die dafür relevanten Kosten auswirkt. Eine vom Anbieter veröffentlichte Gegenüberstellung würde ich mit den aktuellen offiziellen Konditionen abgleichen, bevor ich daraus eine Ersparnis ableite.&lt;/p&gt;

&lt;h2&gt;
  
  
  So würde ich die Entscheidung festhalten
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Frage an meine Anwendung&lt;/th&gt;
&lt;th&gt;Bedeutung für die Auswahl&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unterstützt sie den gewünschten Anbieter?&lt;/td&gt;
&lt;td&gt;Ohne passende Verbindung ist der Tarif kein nutzbares Angebot.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sind alle benötigten Funktionen verfügbar?&lt;/td&gt;
&lt;td&gt;Modellname und tatsächlicher Funktionsumfang müssen getrennt geprüft werden.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kann ich Verbrauch und Fehler zuordnen?&lt;/td&gt;
&lt;td&gt;Ich brauche eine nachvollziehbare Abrechnung und einen klaren Ansprechpartner.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Passt der Datenweg zum Auftrag?&lt;/td&gt;
&lt;td&gt;Auch Anwendung und Vermittler gehören in die Prüfung.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Wenn ich vor allem eine direkte Beziehung zum Modellanbieter und dessen Dokumentation benötige, würde ich die offizielle API bevorzugt prüfen. Wenn mehrere Modellfamilien und eine gebündelte Verwaltung echte Arbeit sparen, gehört ein Gateway in die engere Auswahl. Für reine Gespräche im fertigen Chatprodukt würde ich beide API-Varianten zunächst zurückstellen.&lt;/p&gt;

&lt;p&gt;Ich würde mit einer überschaubaren Aufgabe, nicht vertraulichen Daten und einem begrenzten Budget beginnen. Ziel wäre, eine brauchbare Ausgabe und eine verständliche Verbrauchsaufzeichnung zu erhalten. Ein Anbieterwechsel garantiert weder Schutz vor Kontobeschränkungen noch störungsfreien Betrieb.&lt;/p&gt;

&lt;p&gt;Für mich ist die Auswahl gelungen, wenn ich erklären kann, warum diese Verbindung zu dieser Anwendung passt. Genau diese Begründung bleibt auch dann hilfreich, wenn sich später Preise, Modelle oder Anforderungen ändern.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>api</category>
    </item>
    <item>
      <title>Einstieg in DeepSeek Harness: Desktop-App installieren und eine externe API anbinden</title>
      <dc:creator>boluo</dc:creator>
      <pubDate>Mon, 19 Oct 2026 07:58:11 +0000</pubDate>
      <link>https://dev.to/buluo/einstieg-in-deepseek-harness-desktop-app-installieren-und-eine-externe-api-anbinden-5308</link>
      <guid>https://dev.to/buluo/einstieg-in-deepseek-harness-desktop-app-installieren-und-eine-externe-api-anbinden-5308</guid>
      <description>&lt;p&gt;Vom Download zur Modellauswahl: So würde ich einen Anbieter auswählen, den API-Schlüssel vorbereiten und die Verbindung in der Oberfläche einrichten.&lt;/p&gt;

&lt;p&gt;Bei einem neuen KI-Werkzeug möchte ich zuerst wissen, welche Entscheidungen überhaupt nötig sind. Muss ich ein bestimmtes Konto verwenden? Kann ich einen vorhandenen API-Zugang eintragen? Und an welcher Stelle wähle ich das eigentliche Modell?&lt;/p&gt;

&lt;p&gt;Für DeepSeek Harness würde ich diese Fragen entlang der Einrichtung beantworten. Zuerst kommt die Desktop-App. Danach entscheide ich mich für einen bereits aufgeführten Anbieter oder eine eigene API-Adresse. Erst mit dieser Entscheidung stehen die Angaben fest, die in die Formularfelder gehören.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mit der Desktop-Version anfangen
&lt;/h2&gt;

&lt;p&gt;Der Download steht auf der &lt;a href="https://www.deepseek.com/harness/" rel="noopener noreferrer"&gt;offiziellen Harness-Website&lt;/a&gt;. Unter Windows lade ich das Windows-Installationspaket herunter, öffne es und folge dem Installationsdialog. Anschließend lässt sich die Anwendung starten. Wer macOS nutzt, sollte auf die unterstützte Architektur achten: Der derzeit angebotene Mac-Download ist für Apple Silicon vorgesehen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmza2voqv3qhxcfdgovi8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmza2voqv3qhxcfdgovi8.png" alt="Download der Desktop-Version von DeepSeek Harness" width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Die hier gezeigte Oberfläche stammt von der Windows-Desktop-Version im Oktober 2026. Das Produkt wird noch als Vorschau angeboten; Beschriftungen und Positionen können sich deshalb ändern. Für diesen Weg bleibe ich beim Installationspaket und der grafischen Oberfläche.&lt;/p&gt;

&lt;p&gt;Beim ersten Start kann Harness nach einem offiziellen DeepSeek-API-Schlüssel fragen. Für diese Anleitung wähle ich die Möglichkeit, die Einrichtung später fortzusetzen. Beide Verbindungswege beginnen anschließend in den Modelleinstellungen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die erste Entscheidung betrifft den Anbieter
&lt;/h2&gt;

&lt;p&gt;Über das Kontomenü unten links geht es zu den Einstellungen und zum Bereich für Modelle. Dort öffne ich die Funktion zum Hinzufügen eines Modellanbieters. Zur Auswahl stehen vorkonfigurierte Anbieter und eine benutzerdefinierte Modell-API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgsbd9chzka9vffmv455r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgsbd9chzka9vffmv455r.png" alt="Auswahl zwischen einem aufgeführten Anbieter und einer eigenen Modell-API" width="598" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wenn mein Dienst bereits aufgeführt ist, würde ich diesen Eintrag verwenden. Harness bringt dann die Verbindungskonfiguration und den Modellkatalog mit. Je nach Dienst wird ein API-Schlüssel oder eine Anmeldung beim Anbieter benötigt. Bei mehreren Varianten eines Anbieters orientiere ich mich an der Region und dem Zugang, die zu meinem Konto gehören.&lt;/p&gt;

&lt;p&gt;Eine benutzerdefinierte API ist sinnvoll, wenn ich eine bestimmte Basisadresse selbst angeben möchte. Das kann ein kompatibler API-Dienst oder ein Zugang der eigenen Organisation sein. Dafür trage ich Adresse, Protokoll, Schlüssel und Modell selbst ein.&lt;/p&gt;

&lt;p&gt;Für mich liegt der Unterschied also im Umfang der vorbereiteten Einstellungen. Mehr Felder bedeuten mehr Kontrolle über die Verbindung, aber nicht automatisch ein passenderes Modell. Ich würde die Variante danach auswählen, welche Angaben mein Dienst bereitstellt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Einen vorhandenen Anbieter einrichten: DeepSeek als Beispiel
&lt;/h2&gt;

&lt;p&gt;Auf der &lt;a href="https://platform.deepseek.com/" rel="noopener noreferrer"&gt;DeepSeek-Plattform&lt;/a&gt; registriere ich mich beziehungsweise melde mich an. Unter &lt;a href="https://platform.deepseek.com/api_keys" rel="noopener noreferrer"&gt;API keys&lt;/a&gt; lässt sich ein Schlüssel erstellen. Diesen kopiere ich vollständig, wechsle zurück zu Harness und öffne Einstellungen → Modelle. Dort trage ich ihn in den DeepSeek-Eintrag ein.&lt;/p&gt;

&lt;p&gt;Nach dem Speichern wähle ich in einer neuen Unterhaltung ein Modell aus dieser Anbietergruppe. Zusätzlich gehört für mich ein Blick auf das verfügbare API-Guthaben dazu. Der Schlüssel stellt den Zugang her; die Nutzungsbedingungen und das Guthaben gehören zum API-Konto.&lt;/p&gt;

&lt;p&gt;Bei einem anderen vorhandenen Anbieter wähle ich dessen Eintrag über „Modellanbieter hinzufügen“, trage den zugehörigen Schlüssel ein oder schließe die Anmeldung ab und speichere. Anschließend wähle ich in einer neuen Unterhaltung ein Modell dieses Anbieters.&lt;/p&gt;

&lt;p&gt;Damit ist der Weg über einen vorhandenen Anbieter abgeschlossen. Der folgende Abschnitt einschließlich Modellauswahl gehört ausschließlich zur Alternative mit einer eigenen API-Adresse.&lt;/p&gt;

&lt;h2&gt;
  
  
  Für die eigene Adresse erst den Schlüssel vorbereiten
&lt;/h2&gt;

&lt;p&gt;Als konkretes Beispiel verwende ich Crazyrouter. Mir ist wichtig, die Einrichtung vom Konto bis zum Modelleintrag zusammenhängend zu erklären. So bleibt nachvollziehbar, von welchem Dienst die einzelnen Angaben stammen.&lt;/p&gt;

&lt;p&gt;Über die &lt;a href="https://crazyrouter.com/sign-up?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=deepseek-harness-setup&amp;amp;utm_content=boluo_devto_deepseek-harness-setup_register" rel="noopener noreferrer"&gt;Registrierung bei Crazyrouter&lt;/a&gt; lässt sich ein Konto anlegen. Dazu gehören die aktuell abgefragten Angaben wie Benutzername, Passwort und E-Mail-Adresse sowie die Bestätigungsschritte auf der Seite. Mit einem bestehenden Konto melde ich mich direkt an.&lt;/p&gt;

&lt;p&gt;Danach öffne ich die &lt;a href="https://crazyrouter.com/console/token?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=deepseek-harness-setup&amp;amp;utm_content=boluo_devto_deepseek-harness-setup_token" rel="noopener noreferrer"&gt;Tokenverwaltung&lt;/a&gt; und erstelle einen API-Schlüssel für den Modellzugriff. Ohne aktive Anmeldung führt dieser Link zunächst zur Anmeldeseite.&lt;/p&gt;

&lt;p&gt;Ich würde dem Schlüssel einen eindeutigen Namen wie „Harness Desktop“ geben. So erkenne ich seinen Zweck später in der Verwaltung. Falls eine Gültigkeitsdauer, ein Nutzungslimit oder eine Einschränkung auf bestimmte Modelle gesetzt ist, gehört das zur Auswahl des Schlüssels dazu.&lt;/p&gt;

&lt;h3&gt;
  
  
  In Harness eine erkennbare Verbindung anlegen
&lt;/h3&gt;

&lt;p&gt;Nach dem Erstellen kopiere ich den vollständigen Schlüssel. Zurück in Harness öffne ich Einstellungen → Modelle → Modellanbieter hinzufügen → Benutzerdefinierte Modell-API. Zuerst vergebe ich die Provider ID, beispielsweise crazyrouter, sofern diese Kennung noch frei ist. Als Anzeigenamen verwende ich Crazyrouter.&lt;/p&gt;

&lt;p&gt;Diese beiden Angaben beschreiben den gespeicherten Anbieter. Die ID dient als Kennung der Konfiguration, der Anzeigename als lesbare Bezeichnung im Menü. Möchte ich später nur die sichtbare Bezeichnung ändern, würde ich den Anzeigenamen bearbeiten und die bestehende Kennung beibehalten.&lt;/p&gt;

&lt;p&gt;Danach folgen die eigentlichen Verbindungsdaten. Für dieses Beispiel lautet die API-Adresse &lt;strong&gt;&lt;a href="https://crazyrouter.com/v1" rel="noopener noreferrer"&gt;https://crazyrouter.com/v1&lt;/a&gt;&lt;/strong&gt;. Als Protokoll wähle ich &lt;strong&gt;OpenAI Chat Completions&lt;/strong&gt;. In das Schlüsselfeld kommt der gerade bei Crazyrouter erstellte API-Schlüssel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzs06wqvfzwa0jengga6u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzs06wqvfzwa0jengga6u.png" alt="Verbindungsdaten und Modellbereich der benutzerdefinierten API" width="535" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Die Bezeichnung OpenAI beschreibt an dieser Stelle das Format der Anfragen. Darüber kann auch ein DeepSeek-Modell angesprochen werden, wenn der Dienst dieses Modell mit dem gewählten Format anbietet. Anbieter, Protokoll und Modell sind deshalb drei unterschiedliche Angaben.&lt;/p&gt;

&lt;p&gt;Ich würde die Adresse genau bis zum angegebenen Basispfad eintragen. Einen vollständigen Pfad für eine einzelne Chat-Anfrage muss ich hier nicht ergänzen. Ebenso gehört zu dieser Adresse der Schlüssel des entsprechenden Dienstes; der offizielle DeepSeek-Schlüssel ist für den offiziellen Zugang bestimmt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Das gewünschte Modell aus dem Katalog übernehmen
&lt;/h3&gt;

&lt;p&gt;Harness kann verfügbare Modelle abrufen und zur Auswahl anbieten. Daneben gibt es die Möglichkeit, einen Modelleintrag über seine ID hinzuzufügen. Für das Beispiel nehme ich die ID direkt aus dem Katalog des Anbieters.&lt;/p&gt;

&lt;p&gt;Ich öffne die &lt;a href="https://crazyrouter.com/pricing?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=deepseek-harness-setup&amp;amp;utm_content=boluo_devto_deepseek-harness-setup_models" rel="noopener noreferrer"&gt;Modellübersicht von Crazyrouter&lt;/a&gt;, filtere nach DeepSeek und suche die gewünschte Modellkarte. Über deren Kopiersymbol übernehme ich den Modellbezeichner. Zurück im noch geöffneten Formular der benutzerdefinierten API wähle ich anschließend „Modell hinzufügen“ und füge den Wert in das Feld für die Modell-ID ein.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdvl51ksx5r9alubvp88z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdvl51ksx5r9alubvp88z.png" alt="DeepSeek-Filter und Kopierfunktion im Modellkatalog" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ich bevorzuge das Kopieren, weil die genaue Version Teil des Bezeichners sein kann. Einen übersichtlichen Anzeigenamen kann ich unabhängig davon vergeben. Die Modell-ID bleibt in der Schreibweise erhalten, die der Dienst vorgibt. Preise, Verfügbarkeit und die Freigabe für meinen Schlüssel prüfe ich anhand des aktuellen Angebots.&lt;/p&gt;

&lt;p&gt;Zum Schluss speichere ich den Anbieter und öffne eine neue Unterhaltung. Im Modellmenü wähle ich die Gruppe crazyrouter und darin das hinzugefügte DeepSeek-Modell.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fax51m9zxfpqtonb1t2pp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fax51m9zxfpqtonb1t2pp.png" alt="Auswahl des Modells innerhalb der eingerichteten Anbietergruppe" width="290" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ich achte dabei zuerst auf die Anbietergruppe: Im Beispiel gehört das Modell zur Gruppe crazyrouter. Ein gleichnamiger Eintrag unter DeepSeek würde den offiziellen Zugang auswählen. Nach der Auswahl sehe ich neben dem Eingabefeld nach, welches Modell für die Unterhaltung eingestellt ist.&lt;/p&gt;

&lt;p&gt;Weiterführend: &lt;a href="https://deepseek-harness.github.io/deepseek-harness/guide/providers" rel="noopener noreferrer"&gt;Offizielle Dokumentation zu Modellanbietern in Harness&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>deepseek</category>
      <category>ai</category>
      <category>api</category>
    </item>
  </channel>
</rss>
