<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Comparison on kenji.blog</title><link>http://kenji.blog/de/tags/comparison/</link><description>Recent content in Comparison on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>de</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/de/tags/comparison/index.xml" rel="self" type="application/rss+xml"/><item><title>Ein umfassender Vergleich der APIs von ChatGPT, Gemini und Claude: Welche sollten Sie wählen?</title><link>http://kenji.blog/de/p/chatgpt-gemini-claude-api-comparison/</link><pubDate>Fri, 11 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/de/p/chatgpt-gemini-claude-api-comparison/</guid><description>&lt;img src="http://kenji.blog/p/chatgpt-gemini-claude-api-comparison/img/eyecatch.jpg" alt="Featured image of post Ein umfassender Vergleich der APIs von ChatGPT, Gemini und Claude: Welche sollten Sie wählen?" />&lt;h1 id="ein-umfassender-vergleich-der-apis-von-chatgpt-gemini-und-claude-welche-sollten-sie-wählen">Ein umfassender Vergleich der APIs von ChatGPT, Gemini und Claude: Welche sollten Sie wählen?
&lt;/h1>&lt;p>Die Entwicklung der KI-Technologie ist bemerkenswert, insbesondere im Bereich der großen Sprachmodelle (LLM: Large Language Model). Hier liefern sich OpenAIs ChatGPT (GPT-Serie), Googles Gemini und Anthropics Claude einen erbitterten Dreikampf um die Vorherrschaft. Im Jahr 2026 veröffentlichen diese Unternehmen im Monats-, wenn nicht gar Wochentakt, neue Modelle und API-Funktionen. Für Entwickler und IT-Architekten von Unternehmen ist die Frage, „welche API in das Produkt integriert werden soll“, zu einer äußerst wichtigen Entscheidung geworden, die über den Erfolg eines Projekts bestimmen kann.&lt;/p>
&lt;p>In diesem Artikel werden wir die APIs dieser drei großen KI-Anbieter nicht nur durch eine bloße Aufzählung von Spezifikationen vergleichen und erläutern, sondern auch aus der Perspektive von Entwicklern tiefgreifend auf Aspekte wie Architekturdesign, detaillierte Preisstrukturen, mathematische Analyse der Latenz (Verzögerung), konkrete Implementierungsbeispiele in Python und Node.js sowie die neuesten Methoden zur Kostenoptimierung wie Prompt Caching eingehen.&lt;/p>
&lt;p>Wir hoffen, dass dieser Artikel ein vollständiger Leitfaden für Sie als Leser wird, um die optimale LLM-API für Ihren speziellen Anwendungsfall auszuwählen und skalierbare, kosteneffiziente KI-Anwendungen zu entwickeln.&lt;/p>
&lt;hr>
&lt;h2 id="1-philosophie-und-designkonzept-der-einzelnen-llm-apis">1. Philosophie und Designkonzept der einzelnen LLM-APIs
&lt;/h2>&lt;p>Bei der Auswahl der Technologie ist es zunächst von entscheidender Bedeutung zu verstehen, mit welcher Philosophie die einzelnen Unternehmen ihre Modelle und APIs entwickeln.&lt;/p>
&lt;h3 id="11-openai-chatgpt">1.1 OpenAI (ChatGPT)
&lt;/h3>&lt;p>OpenAI verfolgt die Mission, „Künstliche Allgemeine Intelligenz (AGI) zu verwirklichen“, und treibt stets den De-facto-Standard der Branche voran. Sie bieten vielfältige Modelle, die auf verschiedene Anwendungsfälle zugeschnitten sind, wie z. B. GPT-4o, GPT-4o-mini und die auf Inferenzen spezialisierten o1-Modelle. Das Ökosystem ist am ausgereiftesten und verfügt über die größte Fülle an offiziellen und inoffiziellen Bibliotheken und Dokumentationen.&lt;/p>
&lt;h3 id="12-google-gemini">1.2 Google (Gemini)
&lt;/h3>&lt;p>Google vertritt den „AI First“-Ansatz und nutzt die Skalierbarkeit seiner eigenen Infrastruktur (TPU-Netzwerk) als seine stärkste Waffe. Gemini 1.5 Pro/Flash zeichnet sich vor allem durch sein überwältigendes Kontextfenster (Kontextlänge) von bis zu 2 Millionen Token aus, mit dem es lange Dokumente und mehrstündige Videos oder Audios in einem Durchgang verarbeiten kann. Die starke Integration mit der Google Cloud (Vertex AI) ist auch für Unternehmen äußerst attraktiv.&lt;/p>
&lt;h3 id="13-anthropic-claude">1.3 Anthropic (Claude)
&lt;/h3>&lt;p>Anthropic ist ein von ehemaligen OpenAI-Mitgliedern gegründetes Unternehmen, das einen einzigartigen Sicherheitsansatz namens „Constitutional AI (Verfassungsgemäße KI)“ anwendet. Claude 3.5 Sonnet und Opus erfreuen sich aufgrund ihrer hohen Schlussfolgerungsfähigkeit, ihrer Fähigkeiten zur Codegenerierung und vor allem wegen ihrer „menschenähnlichen, natürlichen Konversation“ und dem „Mangel an Halluzinationen“ bei vielen Entwicklern begeisterter Unterstützung.&lt;/p>
&lt;hr>
&lt;h2 id="2-ein-detaillierter-spezifikationsvergleich-der-modellfamilien">2. Ein detaillierter Spezifikationsvergleich der Modellfamilien
&lt;/h2>&lt;p>Wir vergleichen die Spezifikationen der wichtigsten Modelle im Jahr 2026.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Anbieter&lt;/th>
&lt;th>Hauptmodell&lt;/th>
&lt;th>Maximale Kontextlänge&lt;/th>
&lt;th>Hauptstärken&lt;/th>
&lt;th>Empfohlene Anwendungsfälle&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>OpenAI&lt;/strong>&lt;/td>
&lt;td>GPT-4o&lt;/td>
&lt;td>128K&lt;/td>
&lt;td>Geschwindigkeit, visuelle Erkennung, Sprachunterstützung&lt;/td>
&lt;td>Interaktive Apps, allgemeine Aufgaben&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>OpenAI&lt;/strong>&lt;/td>
&lt;td>o1-preview&lt;/td>
&lt;td>128K&lt;/td>
&lt;td>Fortgeschrittenes logisches Denken, Mathematik, Programmieren&lt;/td>
&lt;td>Erstellung komplexer Algorithmen, Forschungszwecke&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Google&lt;/strong>&lt;/td>
&lt;td>Gemini 1.5 Pro&lt;/td>
&lt;td>2.000K&lt;/td>
&lt;td>Verarbeitung sehr langer Texte, Multimodal (Video/Audio)&lt;/td>
&lt;td>Analyse riesiger Codebasen, Videozusammenfassung&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Google&lt;/strong>&lt;/td>
&lt;td>Gemini 1.5 Flash&lt;/td>
&lt;td>2.000K&lt;/td>
&lt;td>Geringe Latenz, hoher Durchsatz, extrem niedrige Kosten&lt;/td>
&lt;td>Echtzeitverarbeitung, Stapelverarbeitung riesiger Datenmengen&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Anthropic&lt;/strong>&lt;/td>
&lt;td>Claude 3.5 Sonnet&lt;/td>
&lt;td>200K&lt;/td>
&lt;td>Programmierfähigkeiten, natürliche Textgenerierung&lt;/td>
&lt;td>Unterstützung bei der Softwareentwicklung, fortschrittlicher Kundensupport&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Anthropic&lt;/strong>&lt;/td>
&lt;td>Claude 3.5 Haiku&lt;/td>
&lt;td>200K&lt;/td>
&lt;td>Ultraschnelle Reaktion, Kosteneffizienz&lt;/td>
&lt;td>Edge AI, Echtzeit-Chatbots&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="3-ein-tieferer-blick-in-die-architektur-hinter-den-kulissen-von-api-anfragen">3. Ein tieferer Blick in die Architektur: Hinter den Kulissen von API-Anfragen
&lt;/h2>&lt;p>Welche Prozesse laufen im Backend ab, wenn ein API-Aufruf für ein LLM getätigt wird? Um die Leistung zu optimieren, muss man diese Architektur verstehen.&lt;/p>
&lt;p>Das folgende Mermaid-Diagramm zeigt das Gesamtbild vom Senden einer API-Anfrage durch den Client bis zur Rückgabe der Token im Streaming-Verfahren.&lt;/p>
&lt;div class="mermaid">graph TD
A["Client-Anwendung"] -->|HTTP/REST oder gRPC| B["API-Gateway"]
B --> C["Load Balancer"]
C --> D["Inferenz-Cluster"]
D --> E["Tokenizer (BPE / SentencePiece)"]
E --> F["KV Cache &amp; Attention-Mechanismus"]
F --> G["Transformer-Blöcke (Forward Pass)"]
G --> H["Output-Layer (Logits)"]
H --> I["Sampler (Temperature, Top-p, Top-k)"]
I --> J["Detokenizer"]
J -->|Streaming-Antwort (Chunk)| A&lt;/div>
&lt;h3 id="31-tokenisierungs-algorithmen-tokenization">3.1 Tokenisierungs-Algorithmen (Tokenization)
&lt;/h3>&lt;p>Der in die API eingegebene Text wird intern in Einheiten namens „Token“ unterteilt.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>OpenAI (tiktoken)&lt;/strong>: Verwendet Byte-Pair Encoding (BPE). Es komprimiert besonders im Englischen äußerst effizient, aber bei nicht-alphabetischen Sprachen wie Japanisch neigt die Anzahl der Token dazu, stark anzusteigen.&lt;/li>
&lt;li>&lt;strong>Google (Gemini)&lt;/strong>: Verwendet SentencePiece (Unigram Language Model). Es ist stark in Mehrsprachigkeit und neigt dazu, selbst japanische Texte mit einer relativ geringen Anzahl von Token darstellen zu können.&lt;/li>
&lt;li>&lt;strong>Anthropic (Claude)&lt;/strong>: Verwendet eine angepasste Version von BPE. Die Mehrsprachigkeit wurde verbessert, und ab Claude 3 hat sich die Token-Effizienz für Japanisch ebenfalls drastisch verbessert.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="4-mathematische-analyse-von-latenz-und-leistung">4. Mathematische Analyse von Latenz und Leistung
&lt;/h2>&lt;p>In Echtzeitanwendungen wirkt sich die Latenz direkt auf das Benutzererlebnis (UX) aus. Die Latenz einer LLM-API, $T_{total}$, lässt sich mathematisch wie folgt modellieren:&lt;/p>
$$ T_{total} = T_{network} + T_{TTFT} + (N \times T_{TPOT}) $$
&lt;p>Hier haben die einzelnen Variablen die folgenden Bedeutungen:&lt;/p>
&lt;ul>
&lt;li>$T_{network}$: Die Round-Trip-Time (RTT) des Netzwerks.&lt;/li>
&lt;li>$T_{TTFT}$ (Time To First Token): Die Zeit, bis das erste Zeichen generiert wird. Sie hängt stark von den Berechnungskosten der Attention ab, die proportional zum Quadrat der Prompt-Länge (Anzahl der Eingabe-Token) steigen.&lt;/li>
&lt;li>$N$: Die Gesamtzahl der ausgegebenen Token.&lt;/li>
&lt;li>$T_{TPOT}$ (Time Per Output Token): Die Generierungszeit pro Token. Da es sich um ein autoregressives Modell handelt, wird es seriell in Abhängigkeit von der vorherigen Ausgabe berechnet.&lt;/li>
&lt;/ul>
&lt;h3 id="41-berechnungskomplexität-des-self-attention-mechanismus">4.1 Berechnungskomplexität des Self-Attention-Mechanismus
&lt;/h3>&lt;p>Die Berechnungskomplexität der Self-Attention in der Transformer-Architektur steigt quadratisch mit der Eingabesequenzlänge $L$.&lt;/p>
$$ \text{Complexity} = O(L^2 \cdot d) $$
&lt;p>Hierbei ist $d$ die Dimensionalität des Einbettungsvektors (Embedding Vector). Aufgrund dieser Einschränkung verschlechtert sich $T_{TTFT}$ normalerweise drastisch, wenn der Prompt länger wird.
Googles Gemini 1.5 hat jedoch innovative Optimierungsarchitekturen wie „Ring Attention“ und „Block-wise Compute“ eingeführt, wodurch es gelingt, das erste Token in einer realistischen Zeit (wenige Sekunden bis Dutzende von Sekunden) zu generieren, selbst wenn ein langer Text von 2 Millionen Token eingegeben wird.&lt;/p>
&lt;hr>
&lt;h2 id="5-preisstrukturen-und-strategien-zur-kostenoptimierung">5. Preisstrukturen und Strategien zur Kostenoptimierung
&lt;/h2>&lt;p>Die API-Kosten werden grundsätzlich basierend auf der Anzahl der Eingabe- und Ausgabe-Token berechnet.&lt;/p>
$$ Cost = (Tokens_{in} \times Rate_{in}) + (Tokens_{out} \times Rate_{out}) $$
&lt;p>Allerdings haben die neuesten APIs neue Mechanismen eingeführt, um die Kosten drastisch zu senken.&lt;/p>
&lt;h3 id="51-prompt-caching-prompt-caching">5.1 Prompt-Caching (Prompt Caching)
&lt;/h3>&lt;p>Es verursacht enorme Kosten, wenn man jedes Mal extrem lange System-Prompts oder riesige Mengen an Dokumenten, die über RAG (Retrieval-Augmented Generation) abgerufen wurden, sendet. Um dem entgegenzuwirken, bieten die Anbieter eine Caching-Funktion an.&lt;/p>
&lt;p>Bei Anthropic (Claude) und Google (Gemini) können durch das Caching bestimmter Textblöcke die Eingabekosten erheblich (um bis zu 90 %) gesenkt werden.&lt;/p>
&lt;p>Das Kostenmodell bei Verwendung von Cache sieht wie folgt aus:&lt;/p>
$$ Cost_{cached} = (Tokens_{cache\_write} \times Rate_{cache\_write}) + (Tokens_{cache\_read} \times Rate_{cache\_read}) + (Tokens_{out} \times Rate_{out}) $$
&lt;p>Hierbei ist $Rate_{cache\_read}$ auf etwa 10 % bis 25 % des normalen $Rate_{in}$ festgelegt. Dadurch wurde es möglich, einen Chatbot kostengünstig zu betreiben, während ihm eine Codebasis von Zehntausenden von Zeilen permanent als Hintergrundwissen zur Verfügung steht.&lt;/p>
&lt;h3 id="52-batch-api-batch-api">5.2 Batch-API (Batch API)
&lt;/h3>&lt;p>Für Aufgaben, bei denen keine Echtzeitfähigkeit erforderlich ist (z. B. Log-Analyse, massenhafte Datenklassifizierung), bieten OpenAI und Anthropic eine Batch-API an. Dies ist ein leistungsstarker Mechanismus, bei dem Anfragen gebündelt gesendet werden und man die Ergebnisse innerhalb von 24 Stunden erhält, dafür aber nur den halben Preis (50 % Rabatt) der normalen API-Kosten extrinsisch zahlt.&lt;/p>
&lt;hr>
&lt;h2 id="6-entwicklererfahrung-dx-und-sdk-vergleich">6. Entwicklererfahrung (DX) und SDK-Vergleich
&lt;/h2>&lt;p>Wir vergleichen die von den einzelnen Unternehmen angebotenen SDKs (Software Development Kits) unter dem Gesichtspunkt der Entwicklungseffizienz.&lt;/p>
&lt;h3 id="61-openai-api">6.1 OpenAI API
&lt;/h3>&lt;p>Es ist am weitesten verbreitet und auch die Unterstützung durch Bibliotheken von Drittanbietern (LangChain, LlamaIndex usw.) ist am schnellsten. Darüber hinaus garantiert die Funktion „Structured Outputs“ (strukturierte Ausgaben), dass Antworten zu 100 % konform mit einem JSON-Schema zurückgegeben werden, was die Systemintegration extrem vereinfacht.&lt;/p>
&lt;h3 id="62-anthropic-api-claude">6.2 Anthropic API (Claude)
&lt;/h3>&lt;p>Die SDK-Schnittstelle ist sehr ausgereift und Typdefinitionen in TypeScript sind beispielsweise äußerst benutzerfreundlich. Insbesondere die Struktur der Message-API ist intuitiv, und auch multimodale Anfragen, die mehrere Bilder enthalten, lassen sich einfach implementieren.&lt;/p>
&lt;h3 id="63-google-gemini-api">6.3 Google Gemini API
&lt;/h3>&lt;p>Es gibt zwei Zugangswege: über Google Cloud Vertex AI und über AI Studio (Google Gen AI SDK), was Anfänger möglicherweise etwas verwirren kann. Das Vertex AI SDK für Unternehmen ist jedoch vollständig in das IAM (Identitäts- und Zugriffsmanagement) der GCP integriert und ermöglicht den Aufbau einer sicheren Entwicklungsumgebung.&lt;/p>
&lt;hr>
&lt;h2 id="7-praxis-implementierung-eines-integrationstests-mehrerer-apis-mit-python">7. Praxis! Implementierung eines Integrationstests mehrerer APIs mit Python
&lt;/h2>&lt;p>Hier werden wir mit Python ein Skript implementieren, das gleichzeitig asynchrone Anfragen an die drei APIs von OpenAI, Anthropic und Gemini sendet und deren Latenz vergleicht.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">asyncio&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">openai&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AsyncOpenAI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">anthropic&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AsyncAnthropic&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">google.generativeai&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">genai&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Initialisierung der Clients&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">openai_client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AsyncOpenAI&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">environ&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;OPENAI_API_KEY&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">anthropic_client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AsyncAnthropic&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">environ&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;ANTHROPIC_API_KEY&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">genai&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">configure&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">environ&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;GEMINI_API_KEY&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">prompt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;Bitte erklären Sie für Anfänger verständlich die Grundlagen von Quantencomputern und deren Auswirkungen auf aktuelle Kryptographietechnologien.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">fetch_openai&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">openai_client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">chat&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">completions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;gpt-4o&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[{&lt;/span>&lt;span class="s2">&amp;#34;role&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;user&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;content&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">prompt&lt;/span>&lt;span class="p">}],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_tokens&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1024&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">elapsed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;OpenAI (GPT-4o)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">elapsed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">choices&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">content&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">fetch_anthropic&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">anthropic_client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">messages&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;claude-3-5-sonnet-20240620&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[{&lt;/span>&lt;span class="s2">&amp;#34;role&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;user&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;content&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">prompt&lt;/span>&lt;span class="p">}],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_tokens&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1024&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">elapsed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;Anthropic (Claude 3.5 Sonnet)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">elapsed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">content&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">fetch_gemini&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">genai&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">GenerativeModel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;gemini-1.5-pro&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Nutzung der asynchronen Methode des Gemini Python SDKs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">generate_content_async&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">prompt&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">elapsed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;Google (Gemini 1.5 Pro)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">elapsed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Sende Anfragen an die jeweiligen LLM-APIs...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Ausführung der drei APIs parallel&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">results&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">asyncio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gather&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fetch_openai&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fetch_anthropic&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fetch_gemini&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">provider&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">latency&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">text&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">results&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;--- &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">provider&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Latency: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">latency&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">.2f&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> seconds&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Response (Excerpt): &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">[:&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">...&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">asyncio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">main&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Durch Ausführen dieses Skripts können Sie in einer realen Netzwerkumgebung leicht messen, welches Modell am schnellsten (bei Minimierung von $T_{total}$) antwortet.&lt;/p>
&lt;hr>
&lt;h2 id="8-implementierung-von-tool-calling-function-calling-mit-nodejs">8. Implementierung von Tool Calling (Function Calling) mit Node.js
&lt;/h2>&lt;p>Um ein LLM nicht nur als simplen Chatbot, sondern als „KI-Agenten“ fungieren zu lassen, der mit externen Systemen interagiert, ist Tool Calling (oder Function Calling) unerlässlich. Das folgende Beispiel zeigt, wie man mit Node.js (TypeScript) die OpenAI-API dazu bringt, eine Wetter-API aufzurufen.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="nx">OpenAI&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;openai&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">openai&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">OpenAI&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">apiKey&lt;/span>: &lt;span class="kt">process.env.OPENAI_API_KEY&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">async&lt;/span> &lt;span class="kd">function&lt;/span> &lt;span class="nx">runAgent() {&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">tools&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">function&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">name&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;get_weather&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">description&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;Ruft das aktuelle Wetter für die angegebene Stadt ab.&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">parameters&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;object&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">properties&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">location&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;string&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">description&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;Name der Stadt (z. B. Tokio, New York)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">required&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;location&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="nx">openai&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">chat&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">completions&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">create&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">model&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;gpt-4o&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">messages&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[{&lt;/span> &lt;span class="nx">role&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;user&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;content&amp;#34;&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;Wie ist das Wetter heute in Tokio? Brauche ich einen Regenschirm?&amp;#34;&lt;/span> &lt;span class="p">}],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">tools&lt;/span>: &lt;span class="kt">tools&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">tool_choice&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;auto&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">response&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">choices&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">message&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">message&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">tool_calls&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">toolCall&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">message&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">tool_calls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sb">`Das LLM hat einen Tool-Aufruf angefordert: Funktionsname = &lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">toolCall&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="kd">function&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">args&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">JSON&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">parse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">toolCall&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="kd">function&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">arguments&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sb">`Argumente: &lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">args&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">location&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Hier wird der Prozess zum Aufrufen der eigentlichen Wetter-API (z. B. OpenWeatherMap) implementiert
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// const weather = await fetchWeatherFromAPI(args.location);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Das abgerufene Ergebnis wird wieder an das LLM übergeben, um die endgültige Antwort generieren zu lassen
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">runAgent&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="k">catch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Claude 3.5 Sonnet und Gemini 1.5 Pro verfügen ebenfalls über gleichwertige Tool-Calling-Funktionen, und obwohl es leichte Unterschiede in der Art und Weise gibt, wie Schemata definiert werden, ist der grundlegende Ablauf derselbe.&lt;/p>
&lt;hr>
&lt;h2 id="9-rag-vs-long-context-window-welches-sollte-verwendet-werden">9. RAG vs. Long Context Window: Welches sollte verwendet werden?
&lt;/h2>&lt;p>Eine der größten Debatten in der Enterprise-KI-Architektur ist derzeit die Frage, „ob man RAG (Retrieval-Augmented Generation) nutzen sollte, um externes Wissen einzubeziehen, oder ob man alles einem riesigen Kontextfenster (Long Context) überlassen sollte.“&lt;/p>
&lt;h3 id="vorteile-und-herausforderungen-von-rag-retrieval-augmented-generation">Vorteile und Herausforderungen von RAG (Retrieval-Augmented Generation)
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Vorteile&lt;/strong>: Die Kosten sind niedrig (da nur die benötigten Chunks in den Prompt eingefügt werden) und die Quelle der Antwort lässt sich leicht identifizieren.&lt;/li>
&lt;li>&lt;strong>Herausforderungen&lt;/strong>: Da es auf der Genauigkeit der semantischen Suche beruht, eignet es sich nicht für komplexe Schlussfolgerungsaufgaben, bei denen der Kontext über mehrere Dokumente verstreut ist (z. B. „Analysieren Sie chronologisch die Grundursache für die Verzögerung von Projekt A anhand aller Besprechungsprotokolle des letzten Jahres“).&lt;/li>
&lt;/ul>
&lt;h3 id="long-context-z-b-2-millionen-token-von-gemini-15-pro">Long Context (z. B. 2 Millionen Token von Gemini 1.5 Pro)
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Vorteile&lt;/strong>: Kein Informationsverlust durch die Suche. Selbst im „Needle In A Haystack (NIAH)“-Test (Die Nadel im Heuhaufen suchen) können Modelle wie Gemini 1.5 Pro oder Claude 3.5 Sonnet Informationen mit einer Genauigkeit von über 99 % extrahieren.&lt;/li>
&lt;li>&lt;strong>Herausforderungen&lt;/strong>: Der Token-Verbrauch ist enorm, was die Kosten in die Höhe treibt, und die Latenz ($T_{TTFT}$) nimmt zu.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Fazit&lt;/strong>: Die Best Practice für das Jahr 2026 ist ein &lt;strong>„Hybrid-Ansatz“&lt;/strong>. Für alltägliche Q&amp;amp;As wird RAG mit einer Vektordatenbank eingesetzt. Für spezialisierte Aufgaben, die komplexe Analysen oder Code-Reviews des gesamten Systems erfordern, wird hingegen Long Context in Kombination mit Prompt-Caching verwendet. Dieses Design ist heute der Mainstream.&lt;/p>
&lt;hr>
&lt;h2 id="10-vergleich-der-multimodalen-verarbeitungsfähigkeiten">10. Vergleich der multimodalen Verarbeitungsfähigkeiten
&lt;/h2>&lt;p>KI-Anwendungen der nächsten Generation erfordern die Fähigkeit, nicht nur Text, sondern auch Bilder, Audiodaten und Videos direkt zu verstehen.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant User as "Benutzer"
participant Client as "Frontend-App"
participant API as "LLM-API (Multimodal)"
User->>Client: Video &amp; Text-Prompt hochladen
Client->>API: Video Bytes/URI + Text senden
Note over API: Video aufteilen &amp; Audio trennen
Note over API: Multimodales Embedding-Modell
API-->>Client: Textzusammenfassung &amp; Zeitstempel zurückgeben
Client-->>User: Erkenntnisse anzeigen&lt;/div>
&lt;ul>
&lt;li>&lt;strong>OpenAI (GPT-4o)&lt;/strong>: Bietet eine extrem hohe Bilderkennungsgenauigkeit und eignet sich hervorragend zum Lesen von handgezeichneten Skizzen oder komplexen Graphen. Die native Sprachinteraktion mit extrem geringer Latenz (einige hundert Millisekunden) über die Realtime-API ist ebenfalls sehr leistungsstark.&lt;/li>
&lt;li>&lt;strong>Google (Gemini 1.5 Pro)&lt;/strong>: &lt;strong>Ist bei der Videoanalyse unübertroffen.&lt;/strong> Man kann eine einstündige Videodatei (Frames + Audio) direkt eingeben und punktgenaue Fragen stellen wie: „Wie lautet der Titel des Dokuments, das die Person am rechten Bildschirmrand bei Minute 12:45 in der Hand hält?“.&lt;/li>
&lt;li>&lt;strong>Anthropic (Claude 3.5 Sonnet)&lt;/strong>: Die Fähigkeiten zur Bilderkennung (Vision) sind auf dem gleichen Niveau wie bei GPT-4o und äußerst beeindruckend. Es zeigt eine beispiellose Stärke bei der Unterstützung der Frontend-Entwicklung, etwa wenn man einen Screenshot einer Benutzeroberfläche übergibt und anfordert: „Generiere den React-Komponentencode für diesen Bildschirm“.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="11-sicherheit-und-compliance-auf-unternehmensniveau">11. Sicherheit und Compliance auf Unternehmensniveau
&lt;/h2>&lt;p>Wenn Unternehmen LLM-APIs in Produktionsumgebungen einsetzen, sind die größten Bedenken: „Werden unsere Daten zum Trainieren der KI verwendet?“ und „Werden Compliance-Anforderungen erfüllt?“.&lt;/p>
&lt;p>Alle drei Unternehmen haben klar erklärt, dass die über die API gesendeten Daten (Prompts und Antworten) &lt;strong>nicht zum Trainieren der Modelle verwendet werden (Zero Data Retention / No Training on Customer Data)&lt;/strong> (*Dies gilt nicht für die kostenlosen Web-Chat-UIs für Verbraucher).&lt;/p>
&lt;p>Wenn ein noch höheres Sicherheitsniveau erforderlich ist:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>OpenAI&lt;/strong>: Durch die Nutzung des Azure OpenAI Service stehen die Enterprise-Grade-Sicherheit von Microsoft, SLAs und geschlossene Netzwerkverbindungen über Azure Private Link zur Verfügung.&lt;/li>
&lt;li>&lt;strong>Google&lt;/strong>: Durch die Nutzung von Google Cloud Vertex AI sind eine strikte Netzwerktrennung mithilfe von VPC Service Controls und der Datenschutz durch CMEK (Customer-Managed Encryption Keys) möglich.&lt;/li>
&lt;li>&lt;strong>Anthropic&lt;/strong>: Durch die Nutzung über AWS Bedrock oder Google Cloud Vertex AI kann man von der robusten Sicherheitsinfrastruktur der Cloud-Anbieter profitieren.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="12-fazit-der-ultimative-leitfaden-zur-auswahl-nach-anwendungsfall">12. Fazit: Der ultimative Leitfaden zur Auswahl nach Anwendungsfall
&lt;/h2>&lt;p>Wir haben bisher einen vielseitigen Vergleich angestellt, aber die endgültige Antwort auf die Frage „Welche API sollte man wählen?“ hängt letztendlich vom Anwendungsfall ab.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Komplexe Softwareentwicklung / Codegenerierung / Fortgeschrittenes logisches Denken&lt;/strong>:
&lt;strong>👑 Gewinner: Claude 3.5 Sonnet (Anthropic)&lt;/strong>
Es bietet derzeit die beste Leistung beim Verstehen von Code-Kontexten, beim Refactoring und bei der Erstellung von natürlichem, menschenähnlichem Text. Auch die Benutzerfreundlichkeit der API und die Kosteneffizienz durch Prompt-Caching sind hervorragend.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Analyse von extrem langen Dokumenten / Stapelverarbeitung von Video und Audio&lt;/strong>:
&lt;strong>👑 Gewinner: Gemini 1.5 Pro (Google)&lt;/strong>
Das Kontextfenster von 2 Millionen Token ist eine einzigartige Waffe. Bei Aufgaben, die ein Verständnis des Gesamtbildes der Daten erfordern, wie z. B. die Analyse von Hunderten Seiten langen PDF-Handbüchern oder die Zusammenfassung von stundenlangen Besprechungsaufzeichnungen, ist Gemini unübertroffen.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Vielseitigkeit / Ausführungsgeschwindigkeit / Stabile strukturierte Ausgaben (JSON)&lt;/strong>:
&lt;strong>👑 Gewinner: GPT-4o / GPT-4o-mini (OpenAI)&lt;/strong>
Es erledigt alle Aufgaben einwandfrei und bietet die umfangreichste Unterstützung für Tools von Drittanbietern. Das OpenAI-Ökosystem ist unverzichtbar, wenn man ein zuverlässiges JSON-Parsing mithilfe von Structured Outputs benötigt oder extrem fortgeschrittenes logisches Denken mit dem o1-Modell erfordert.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h3 id="empfehlung-für-multimodell-routing">Empfehlung für Multimodell-Routing
&lt;/h3>&lt;p>Anstatt sich auf eine einzige API zu verlassen (Vendor-Lock-in), ist die zukünftige Richtung eine Architektur des &lt;strong>„LLM-Routings“&lt;/strong>, bei der Modelle je nach Schwierigkeitsgrad und Wichtigkeit der Aufgabe dynamisch umgeschaltet werden.
Beispielsweise kann man auf einfache Fragen von Benutzern mit dem kostengünstigen und schnellen &lt;code>GPT-4o-mini&lt;/code> oder &lt;code>Gemini 1.5 Flash&lt;/code> antworten. Nur wenn festgestellt wird, dass eine komplexe Verarbeitung erforderlich ist, greift man als Fallback für die Aufgabe auf &lt;code>Claude 3.5 Sonnet&lt;/code> zurück. So lässt sich das optimale Gleichgewicht zwischen Kosten und Leistung erreichen.&lt;/p>
&lt;p>Die Entwicklung der KI ist unaufhaltsam. Verstehen Sie die Stärken und Schwächen der einzelnen APIs sowie die Besonderheiten ihrer Architektur genau, um flexible und flexibel skalierbare KI-Anwendungen zu entwickeln.&lt;/p></description></item></channel></rss>