Willkommen zur definitiven Anfängeranleitung für das Vercel AI SDK. In einer Welt, in der künstliche Intelligenz die digitale Landschaft rasant verändert, hat sich die Fähigkeit, KI in Webanwendungen zu integrieren, von einer Nischenspezialisierung zu einer Kernkompetenz für moderne Entwickler entwickelt. Diese Anleitung wurde entwickelt, um Sie von einem neugierigen Anfänger zu einem fähigen Entwickler von KI-Anwendungen zu machen.
Lange Zeit war es ein komplexes Unterfangen, die Lücke zwischen einem leistungsstarken Large Language Model (LLM) und einer benutzerfreundlichen Weboberfläche zu schließen. Entwickler mussten sich mit unterschiedlichen Anbieter-APIs auseinandersetzen, komplizierten Zustand verwalten und Funktionen wie Response Streaming manuell implementieren. Das Vercel AI SDK wurde geschaffen, um genau diese Probleme zu lösen. Es ist ein TypeScript-basiertes Toolkit, das eine einheitliche, elegante Abstraktionsschicht über die Komplexität der Erstellung von KI-gestützten Erlebnissen bietet.
Dies ist nicht nur ein Schnellstart. Im Laufe dieses Tutorials werden wir einen vollständigen, funktionsreichen KI-Chatbot von Grund auf neu mit Next.js und Googles Gemini-Modell erstellen. Wir werden weit über ein einfaches "Hello World"-Beispiel hinausgehen. Sie werden lernen:
- Das "Warum": Ein tieferes Verständnis der Kernkonzepte und der architektonischen Muster moderner KI-Anwendungen.
- Das "Wie": Einen detaillierten, schrittweisen Prozess zur Einrichtung Ihres Projekts, zum Schreiben der serverseitigen Logik und zum Erstellen eines ausgefeilten, interaktiven Frontends.
- Erweiterte Fähigkeiten: Wie Sie Ihren Chatbot mit "Tools" ausstatten, um auf Echtzeitinformationen zuzugreifen, und wie Sie komplexe, mehrstufige Interaktionen orchestrieren.
- Praktiken für die Produktionsreife: Wie Sie Ladezustände handhaben, Fehler elegant verwalten und Ihren Code für eine reale Anwendung strukturieren.
Am Ende dieser umfassenden Anleitung werden Sie nicht nur einen funktionierenden, fortschrittlichen Chatbot haben, sondern auch das tiefe konzeptionelle Wissen, das Sie benötigen, um selbstbewusst Ihre eigenen einzigartigen und leistungsstarken KI-gestützten Anwendungen mit dem Vercel AI SDK zu erstellen.
Sie wünschen sich eine integrierte All-in-One-Plattform, auf der Ihr Entwicklerteam mit maximaler Produktivität zusammenarbeiten kann?
Apidog erfüllt alle Ihre Anforderungen und ersetzt Postman zu einem viel günstigeren Preis!
Kapitel 1: Grundlagen und Einrichtung
Jedes großartige Bauwerk braucht ein solides Fundament. In diesem Kapitel richten wir unsere Entwicklungsumgebung ein, installieren die notwendigen Werkzeuge und bringen unsere API-Schlüssel in Ordnung. Wir werden uns auch einen Moment Zeit nehmen, um das "Warum" hinter jeder Entscheidung zu verstehen.
Voraussetzungen
Bevor wir eine einzige Codezeile schreiben, stellen wir sicher, dass Ihr Werkzeugkasten bereit ist.
- Node.js (Version 18 oder neuer): Das Vercel AI SDK und moderne JavaScript-Frameworks wie Next.js setzen auf Funktionen, die in neueren Versionen von Node.js verfügbar sind. Sie können Ihre Version überprüfen, indem Sie
node -v
in Ihrem Terminal ausführen. Wenn Sie es nicht haben, können Sie es von der offiziellen Node.js-Website herunterladen. - Ein Google AI API-Schlüssel: Dieser Schlüssel ist Ihr authentifizierter Pass, um Googles leistungsstarke Gemini-Modellfamilie zu nutzen. Das Vercel AI SDK ist anbieterunabhängig, aber für diese Anleitung konzentrieren wir uns auf Gemini.
- Navigieren Sie zu Google AI Studio.
- Melden Sie sich mit Ihrem Google-Konto an.
- Klicken Sie auf "Get API key" und dann auf "Create API key in new project".
- Kopieren Sie den generierten Schlüssel und speichern Sie ihn vorerst sicher ab. Behandeln Sie diesen Schlüssel wie ein Passwort; geben Sie ihn niemals öffentlich preis.
Schritt 1: Initialisieren des Next.js-Projekts
Wir werden Next.js verwenden, das führende React-Framework für die Erstellung produktionsreifer Anwendungen. Sein App Router-Paradigma integriert sich perfekt in die serverzentrierte Natur von KI-Anwendungen.
Öffnen Sie Ihr Terminal und führen Sie diesen Befehl aus, um ein neues Projekt zu erstellen:
npx create-next-app@latest vercel-ai-tutorial
Der Installer wird Ihnen mehrere Fragen stellen. Verwenden Sie diese Einstellungen, um nahtlos folgen zu können:
- Möchten Sie TypeScript verwenden? Ja (TypeScript ist entscheidend für typensichere KI-Interaktionen)
- Möchten Sie ESLint verwenden? Ja (Für Codequalität)
- Möchten Sie Tailwind CSS verwenden? Ja (Für schnelles Styling unserer Benutzeroberfläche)
- Möchten Sie das Verzeichnis
src/
verwenden? Ja (Eine gängige Konvention zur Codeorganisation) - Möchten Sie App Router verwenden? Ja (Dies ist für diese Anleitung unerlässlich)
- Möchten Sie den Standard-Import-Alias anpassen? Nein (Die Standardwerte sind in Ordnung)
Sobald die Installation abgeschlossen ist, navigieren Sie in Ihr neu erstelltes Projektverzeichnis:
cd vercel-ai-tutorial
Schritt 2: Installieren des Vercel AI SDK
Fügen wir nun die AI SDK-Pakete zu unserem Projekt hinzu.
npm install ai @ai-sdk/react @ai-sdk/google zod
Lassen Sie uns aufschlüsseln, was jedes dieser Pakete tut:
ai
: Dies ist das Herzstück des SDK. Es enthält die Kernfunktionen, die framework-agnostisch sind, wiestreamText
undgenerateObject
, die die direkte Kommunikation mit LLM-Anbietern handhaben.@ai-sdk/react
: Dieses Paket stellt die React-Hooks – insbesondereuseChat
– bereit, die das Erstellen interaktiver Benutzeroberflächen zum Kinderspiel machen. Es abstrahiert die Komplexität von Zustandsverwaltung, Streaming und API-Kommunikation.@ai-sdk/google
: Dies ist ein Anbieterpaket. Es ist der spezifische Adapter, der es dem Kernpaketai
ermöglicht, mit Googles KI-Modellen zu kommunizieren. Wenn Sie OpenAI verwenden möchten, würden Sie stattdessen@ai-sdk/openai
installieren.zod
: Eine leistungsstarke Bibliothek zur Schema-Deklaration und -Validierung. Obwohl sie nicht streng genommen Teil des AI SDK ist, ist sie ein unverzichtbarer Partner für die Definition der Datenstruktur für erweiterte Funktionen wie Tool Calling, um sicherzustellen, dass die Ausgabe der KI vorhersehbar und typensicher ist.
Schritt 3: Sichern Ihres API-Schlüssels
Hardcodieren Sie niemals einen API-Schlüssel in Ihrem Anwendungscode. Dies ist ein großes Sicherheitsrisiko. Der professionelle Standard ist die Verwendung von Umgebungsvariablen. Next.js verfügt über eine integrierte Unterstützung dafür mit .env.local
-Dateien.
Erstellen Sie die Datei im Stammverzeichnis Ihres Projekts:
touch .env.local
Öffnen Sie nun diese neue Datei und fügen Sie Ihren Google AI-Schlüssel hinzu:
# .env.local
# This file is for local development and should NOT be committed to git.
GOOGLE_GENERATIVE_AI_API_KEY=YOUR_GOOGLE_AI_API_KEY
Ersetzen Sie YOUR_GOOGLE_AI_API_KEY
durch den Schlüssel, den Sie zuvor kopiert haben. Next.js lädt diese Datei automatisch und macht den Schlüssel auf dem Server verfügbar, genau dort, wo wir ihn brauchen.
Kapitel 2: Aufbau des Chatbot-Rückgrats
Nachdem unser Projekt eingerichtet ist, ist es an der Zeit, die Kernkomponenten unserer Anwendung zu erstellen: den serverseitigen API-Endpunkt, der mit der KI spricht, und die clientseitige Benutzeroberfläche, mit der Benutzer interagieren werden.
Die Client-Server-Architektur einer KI-App
Unser Chatbot wird aus zwei Hauptteilen bestehen:
- Eine serverseitige API-Route (
/api/chat/route.ts
): Dies ist eine sichere Umgebung, die auf einem Server läuft. Ihre Hauptaufgabe ist es, den Chatverlauf vom Browser des Benutzers zu empfangen, unseren geheimen API-Schlüssel hinzuzufügen, die Anfrage an den Google AI-Dienst weiterzuleiten und dann die Antwort zurück an den Benutzer zu streamen. Die Beibehaltung dieser Logik auf dem Server ist entscheidend für die Sicherheit – sie stellt sicher, dass unser API-Schlüssel niemals öffentlich zugänglich gemacht wird. - Eine clientseitige Benutzeroberfläche (
page.tsx
): Dies ist die React-Komponente, die im Browser des Benutzers läuft. Sie ist verantwortlich für das Rendern des Chatverlaufs, das Erfassen der Benutzereingabe und das Senden dieser Eingabe an unsere API-Route.
Diese Trennung ist grundlegend für den Aufbau sicherer und leistungsfähiger Webanwendungen.
Schritt 4: Erstellen des API-Route-Handlers
Erstellen wir den serverseitigen Endpunkt. Erstellen Sie in Ihrem Verzeichnis src/app
einen neuen Ordner api
und darin einen weiteren Ordner chat
. Erstellen Sie schließlich eine Datei namens route.ts
im Ordner chat
.
Der endgültige Pfad sollte src/app/api/chat/route.ts
sein.
Füllen Sie diese Datei mit dem folgenden Code:
// src/app/api/chat/route.ts
import { google } from '@ai-sdk/google';
import { streamText } from 'ai';
// Vercel-spezifische Konfiguration, um Streaming-Antworten für bis zu 30 Sekunden zu ermöglichen
export const maxDuration = 30;
// Der Haupt-API-Route-Handler
export async function POST(req: Request) {
try {
// Extrahieren Sie das `messages`-Array aus dem Anforderungsbody
const { messages } = await req.json();
// Rufen Sie den KI-Anbieter mit dem Konversationsverlauf auf
const result = await streamText({
model: google('models/gemini-1.5-pro-latest'),
// Das `messages`-Array liefert dem Modell Kontext für die Konversation
messages,
});
// Antworten Sie mit einer Streaming-Antwort
return result.toDataStreamResponse();
} catch (error) {
// Es ist eine gute Praxis, potenzielle Fehler zu behandeln
if (error instanceof Error) {
return new Response(JSON.stringify({ error: error.message }), { status: 500 });
}
return new Response(JSON.stringify({ error: 'An unknown error occurred' }), { status: 500 });
}
}
Lassen Sie uns diese entscheidende Datei analysieren:
export const maxDuration = 30;
: Dies ist eine Vercel-spezifische Einstellung. Serverless-Funktionen haben einen Standard-Timeout. Da KI-Antworten manchmal einen Moment brauchen, um mit der Generierung zu beginnen, verlängern wir den Timeout auf 30 Sekunden, um zu verhindern, dass die Anfrage vorzeitig beendet wird.export async function POST(req: Request)
: Im Next.js App Router erstellt das Exportieren einer async-Funktion, die nach einer HTTP-Methode (wiePOST
) in einerroute.ts
-Datei benannt ist, einen API-Endpunkt.const { messages } = await req.json();
: Das Frontend sendet ein JSON-Objekt in seiner Anfrage, und wir destrukturieren dasmessages
-Array daraus. Dieses Array ist der vollständige Verlauf der Konversation, was für das LLM unerlässlich ist, um eine kontextbezogene Antwort zu liefern.const result = await streamText(...)
: Dies ist der Kernaufruf an das Vercel AI SDK. Wir stellen ihm dasmodel
zur Verfügung, das wir verwenden möchten, und denmessages
-Verlauf. Das SDK handhabt die authentifizierte Anfrage an die Google API im Hintergrund.return result.toDataStreamResponse();
: Dies ist eine leistungsstarke Helferfunktion. Sie nimmt den vonstreamText
zurückgegebenenReadableStream
und wickelt ihn in einResponse
-Objekt mit den korrekten Headern und dem korrekten Format ein, wodurch es für unsere clientseitigen Hooks unglaublich einfach wird, den Stream zu konsumieren.try...catch
: Wir haben unsere Logik in einentry...catch
-Block eingeschlossen, um potenzielle Fehler während des API-Aufrufs elegant zu behandeln und dem Client eine klare Fehlermeldung zurückzugeben.
Schritt 5: Erstellen der Benutzeroberfläche
Nun zum spaßigen Teil: dem Aufbau der Benutzeroberfläche. Dank des @ai-sdk/react
-Pakets ist dies überraschend einfach. Öffnen Sie die Hauptseitendatei unter src/app/page.tsx
und ersetzen Sie ihren gesamten Inhalt durch Folgendes:
// src/app/page.tsx
'use client';
import { useChat } from '@ai-sdk/react';
import { useRef, useEffect } from 'react';
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit, isLoading, error } = useChat();
// Eine Referenz auf den scrollbaren Container der Nachrichten
const messagesContainerRef = useRef<HTMLDivElement>(null);
// Effekt zum Scrollen zum Ende des Nachrichtencontainers, wenn sich Nachrichten ändern
useEffect(() => {
if (messagesContainerRef.current) {
messagesContainerRef.current.scrollTop = messagesContainerRef.current.scrollHeight;
}
}, [messages]);
return (
<div className="flex flex-col h-screen bg-gray-50">
{/* Nachrichtencontainer */}
<div ref={messagesContainerRef} className="flex-1 overflow-y-auto p-8 space-y-4">
{messages.map(m => (
<div
key={m.id}
className={`flex gap-3 ${m.role === 'user' ? 'justify-end' : 'justify-start'}`}
>
{/* Avatar des Benutzers anzeigen */}
{m.role === 'user' && (
<div className="w-10 h-10 rounded-full bg-blue-500 flex items-center justify-center text-white font-bold">U</div>
)}
{/* Nachrichtenblase */}
<div
className={`max-w-xl p-3 rounded-2xl shadow-md whitespace-pre-wrap ${
m.role === 'user'
? 'bg-blue-500 text-white rounded-br-none'
: 'bg-white text-black rounded-bl-none'
}`}
>
<span className="font-bold block">{m.role === 'user' ? 'You' : 'AI Assistant'}</span>
{m.content}
</div>
{/* Avatar der KI anzeigen */}
{m.role !== 'user' && (
<div className="w-10 h-10 rounded-full bg-gray-700 flex items-center justify-center text-white font-bold">AI</div>
)}
</div>
))}
</div>
{/* Eingabeformular */}
<div className="p-4 bg-white border-t">
<form onSubmit={handleSubmit} className="flex items-center gap-4 max-w-4xl mx-auto">
<input
className="flex-1 p-3 border rounded-full focus:outline-none focus:ring-2 focus:ring-blue-500"
value={input}
placeholder="Ask me anything..."
onChange={handleInputChange}
disabled={isLoading}
/>
<button
type="submit"
className="px-6 py-3 bg-blue-500 text-white rounded-full font-semibold hover:bg-blue-600 disabled:bg-blue-300 disabled:cursor-not-allowed"
disabled={isLoading}
>
Send
</button>
</form>
{error && (
<p className="text-red-500 mt-2 text-center">{error.message}</p>
)}
</div>
</div>
);
}
Dies ist eine beträchtliche Menge an Code, aber der größte Teil davon dient der Erstellung einer ausgefeilten Benutzeroberfläche mit Tailwind CSS. Konzentrieren wir uns auf die Logik:
'use client';
: Dies ist unerlässlich. Es markiert diese Komponente als Client-Komponente, was bedeutet, dass sie im Browser ausgeführt wird und Zustand und Effekte verwenden kann.const { ... } = useChat();
: Diese eine Zeile ist die Magie der AI SDK UI-Bibliothek. Sie stellt den gesamten Zustand und die Funktionalität bereit, die wir benötigen:messages
: Das Array der Chat-Nachrichten, das automatisch synchron gehalten wird.input
,handleInputChange
,handleSubmit
: Der Zustand und die Handler für unser Eingabeformular.handleSubmit
verpackt die Nachrichten automatisch und ruft unseren/api/chat
-Endpunkt auf.isLoading
: Ein boolescher Wert, dertrue
ist, während die KI eine Antwort generiert. Wir verwenden dies, um das Formular während des Wartens zu deaktivieren.error
: Ein Fehlerobjekt, das gefüllt wird, wenn unser API-Aufruf fehlschlägt. Wir zeigen dies dem Benutzer an.useRef
unduseEffect
: Dies ist ein Standard-React-Muster, um die Chat-Ansicht automatisch nach unten zu scrollen, wenn neue Nachrichten hinzugefügt werden, um sicherzustellen, dass die neueste Nachricht immer sichtbar ist.
Schritt 6: Ausführen Ihrer Anwendung
Sie haben nun einen vollständigen, gut strukturierten KI-Chatbot erstellt. Starten wir ihn!
npm run dev
Navigieren Sie in Ihrem Browser zu http://localhost:3000
. Sie sollten von einer ausgefeilten Chat-Oberfläche begrüßt werden. Stellen Sie eine Frage. Sie werden sehen, wie Ihre Nachricht sofort erscheint und die Antwort der KI Token für Token gestreamt wird.
Kapitel 3: Erweiterte Fähigkeiten - Verleihen Sie Ihrem Chatbot Superkräfte
Unser Chatbot ist intelligent, aber sein Wissen ist auf seine Trainingsdaten beschränkt. Er kann nicht auf Live-Informationen zugreifen oder Aktionen in der realen Welt ausführen. In diesem Kapitel werden wir ihm "Tools" geben, um diese Einschränkungen zu überwinden.
Was sind Tools?
Ein Tool ist eine Funktion, die Sie definieren und die das LLM ausführen kann. Sie beschreiben das Tool dem Modell, und wenn das Modell der Meinung ist, dass das Tool zur Beantwortung einer Benutzeranfrage notwendig ist, unterbricht es die Textgenerierung und gibt stattdessen ein spezielles "Tool Call"-Objekt aus. Ihr Code führt dann die Funktion mit den vom Modell bereitgestellten Argumenten aus, und das Ergebnis wird an das Modell zurückgesendet. Das Modell verwendet dann diese neuen Informationen, um seine endgültige, genauere Antwort zu generieren.
Geben wir unserem Chatbot zwei Tools:
- Ein Tool, um das aktuelle Wetter für einen Standort abzurufen.
- Ein Tool, um Temperaturen von Fahrenheit in Celsius umzurechnen.
Dadurch kann unser Bot Fragen wie "Wie ist das Wetter in London in Celsius?" beantworten – eine Aufgabe, die mehrere Schritte und externe Daten erfordert.
Schritt 7: Upgrade der API zur Unterstützung von Tools
Wir müssen unsere Tools im streamText
-Aufruf auf dem Server definieren. Öffnen Sie src/app/api/chat/route.ts
und ändern Sie es, um die neue tools
-Definition aufzunehmen.
// src/app/api/chat/route.ts
import { google } from '@ai-sdk/google';
import { streamText, tool } from 'ai';
import { z } from 'zod';
export const maxDuration = 30;
export async function POST(req: Request) {
const { messages } = await req.json();
const result = await streamText({
model: google('models/gemini-1.5-pro-latest'),
messages,
// Definieren Sie die Tools, die das Modell verwenden kann
tools: {
getWeather: tool({
description: 'Get the current weather for a specific location. Always returns temperature in Fahrenheit.',
parameters: z.object({
location: z.string().describe('The city and state, e.g., San Francisco, CA'),
}),
execute: async ({ location }) => {
// In einer echten App würden Sie von einer echten Wetter-API abrufen
console.log(`Fetching weather for ${location}`);
return {
temperature: Math.floor(Math.random() * (100 - 30 + 1) + 30),
high: Math.floor(Math.random() * (100 - 80 + 1) + 80),
low: Math.floor(Math.random() * (50 - 30 + 1) + 30),
conditions: ['Sunny', 'Cloudy', 'Rainy'][Math.floor(Math.random() * 3)],
};
},
}),
convertFahrenheitToCelsius: tool({
description: 'Convert a temperature from Fahrenheit to Celsius.',
parameters: z.object({
temperature: z.number().describe('The temperature in Fahrenheit'),
}),
execute: async ({ temperature }) => {
console.log(`Converting ${temperature}°F to Celsius`);
return {
celsius: Math.round((temperature - 32) * (5 / 9)),
};
},
}),
},
});
return result.toDataStreamResponse();
}
Analysieren wir das tools
-Objekt:
- Jeder Schlüssel (
getWeather
,convertFahrenheitToCelsius
) ist der Name unseres Tools. description
: Dies ist der wichtigste Teil für das Modell. Es liest diese Beschreibung, um zu verstehen, was das Tool tut und wann es verwendet werden sollte. Seien Sie klar und spezifisch.parameters
: Wir verwendenzod
, um die Signatur der Funktion zu definieren. Dies sagt dem Modell genau, welche Argumente es bereitstellen muss.z.string().describe(...)
gibt dem Modell einen Hinweis auf das erwartete Format.execute
: Dies ist die eigentliche serverseitige Funktion, die ausgeführt wird, wenn das Tool aufgerufen wird. Hier simulieren wir API-Aufrufe mit zufälligen Daten, aber Sie könnten dies leicht durch einenfetch
-Aufruf an einen echten Wetterdienst ersetzen.
Schritt 8: Aktivieren von mehrstufigen Tool Calls in der Benutzeroberfläche
Das alleinige Definieren der Tools auf dem Server reicht nicht aus. Standardmäßig stoppt die Konversation, wenn das Modell einen Tool Call durchführt. Wir müssen unserem useChat
-Hook mitteilen, dass er das Ergebnis dieses Tool Calls automatisch an das Modell zurücksenden soll, damit es seine Argumentation fortsetzen und eine endgültige Antwort formulieren kann.
Dies ist unglaublich einfach. Aktualisieren Sie in src/app/page.tsx
die Initialisierung des useChat
-Hooks:
// src/app/page.tsx
// ...
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit, isLoading, error } = useChat({
// Sagen Sie dem Hook, dass er Tool-Ergebnisse automatisch an das Modell zurücksenden soll
experimental_sendExtraToolMessages: true,
});
// ... Rest der Komponente
}
Das ist alles. Die Eigenschaft experimental_sendExtraToolMessages: true
aktiviert den mehrstufigen Tool-Use-Flow.
Schritt 9: Eine bessere Benutzeroberfläche für Tool-Aufrufe
Unsere aktuelle Benutzeroberfläche zeigt nur m.content
an. Wenn ein Tool aufgerufen wird, befinden sich die interessanten Informationen in einer anderen Eigenschaft des Nachrichtenobjekts. Erstellen wir eine dedizierte Komponente, um Tool Calls schön zu rendern.
Zuerst aktualisieren wir die Hauptnachrichtenschleife in src/app/page.tsx
, um diese Aufrufe zu rendern.
// src/app/page.tsx
// ... innerhalb der return-Anweisung der Chat-Komponente
<div ref={messagesContainerRef} className="flex-1 overflow-y-auto p-8 space-y-4">
{messages.map(m => (
<div
key={m.id}
className={`flex gap-3 ${m.role === 'user' ? 'justify-end' : 'justify-start'}`}
>
{/* ... Avatare ... */}
<div
className={`max-w-xl p-3 rounded-2xl shadow-md whitespace-pre-wrap ${
m.role === 'user'
? 'bg-blue-500 text-white rounded-br-none'
: 'bg-white text-black rounded-bl-none'
}`}
>
<span className="font-bold block">{m.role === 'user' ? 'You' : 'AI Assistant'}</span>
{/* Tool-Aufrufe rendern */}
{m.toolInvocations?.map(tool => (
<div key={tool.toolCallId} className="my-2 p-2 bg-gray-100 rounded text-sm text-gray-700">
<p className="font-semibold">Tool Call: `{tool.toolName}`</p>
<pre className="mt-1 p-1 bg-gray-200 rounded text-xs">
{JSON.stringify(tool.args, null, 2)}
</pre>
</div>
))}
{m.content}
</div>
{/* ... Avatare ... */}
</div>
))}
{isLoading && messages[messages.length - 1]?.role === 'assistant' && (
<div className="flex justify-start p-8 space-x-3">
<div className="w-10 h-10 rounded-full bg-gray-700 flex items-center justify-center text-white font-bold">AI</div>
<div className="p-3 rounded-2xl shadow-md bg-white">
<div className="typing-indicator">
<span></span><span></span><span></span>
</div>
</div>
</div>
)}
</div>
// ...
Ich habe auch eine einfache Tippanzeige hinzugefügt, die erscheint, während der Assistent nachdenkt. Sie müssen dafür ein wenig CSS hinzufügen. Fügen Sie in Ihrer Datei src/app/globals.css
Folgendes hinzu:
/* src/app/globals.css */
.typing-indicator span {
height: 8px;
width: 8px;
background-color: #9E9EA1;
border-radius: 50%;
display: inline-block;
animation: a 1.2s infinite ease-in-out;
}
.typing-indicator span:nth-child(1) { animation-delay: -0.4s; }
.typing-indicator span:nth-child(2) { animation-delay: -0.2s; }
@keyframes a {
0%, 60%, 100% { transform: scale(0.2); }
30% { transform: scale(1); }
}
Führen Sie nun die Anwendung erneut aus. Fragen Sie: "Wie ist das Wetter in New York in Celsius?". Sie werden eine faszinierende Kette von Ereignissen in Ihrer Benutzeroberfläche sehen:
- Das Modell wird zuerst das Tool
getWeather
aufrufen. Sie sehen den gerenderten Tool Call in der Benutzeroberfläche. - Das Ergebnis (eine zufällige Temperatur in Fahrenheit) wird an das Modell zurückgesendet.
- Das Modell, das weiß, dass es Celsius benötigt, wird dann das Tool
convertFahrenheitToCelsius
aufrufen und dabei die Temperatur aus dem Ergebnis des ersten Tools als Eingabe verwenden. - Schließlich, mit der Celsius-Temperatur in der Hand, generiert es eine natürlichsprachliche Antwort auf Ihre ursprüngliche Frage.
Dies ist die Kraft des Aufbaus von KI-Agenten, und das Vercel AI SDK macht diese komplexe Orchestrierung bemerkenswert einfach.
Kapitel 4: Wie geht es von hier aus weiter?
Sie haben erfolgreich einen fortschrittlichen, KI-gestützten Chatbot erstellt. Sie sind von einer leeren Leinwand zu einer funktionsreichen Anwendung gelangt, die Antworten streamen, Lade- und Fehlerzustände verarbeiten und Tools nutzen kann, um in einem mehrstufigen Prozess mit externen Daten zu interagieren.
Diese Anleitung hat Ihnen eine starke Grundlage gegeben, aber es ist nur der Anfang. Das Vercel AI SDK hat noch mehr zu bieten. Hier sind einige Wege für Ihre weitere Erkundung:
- Generative UI: Wir haben nur Text und Daten gestreamt. Mit React Server Components ermöglicht Ihnen das AI SDK, dass die KI vollständig geformte, interaktive React-Komponenten generiert und streamt. Stellen Sie sich vor, Sie fragen nach dem Wetter und erhalten stattdessen ein schönes, interaktives Wetter-Widget anstelle von nur Text. Dies ist eine hochmoderne Funktion mit enormem Potenzial.
- Retrieval-Augmented Generation (RAG): Erstellen Sie Chatbots, die über Ihre eigenen privaten Dokumente nachdenken können. Sie können einen Chatbot erstellen, der Fragen zu einer PDF, einer Reihe von Markdown-Dateien oder der internen Wissensdatenbank Ihres Unternehmens beantwortet.
- Erkunden Sie andere Anbieter: Die von uns aufgebaute Architektur ist hochgradig modular. Versuchen Sie, Googles Modell gegen eines von OpenAI oder Anthropic auszutauschen. Es ist oft so einfach wie das Ändern einer Codezeile in Ihrer API-Route, sodass Sie experimentieren und das beste Modell für Ihren spezifischen Anwendungsfall finden können.
- Vercel AI Playground: Der AI Playground ist ein unschätzbares Werkzeug zum Testen von Prompts und zum Vergleichen der Ausgabe, Leistung und Kosten verschiedener Modelle nebeneinander.
Die Zukunft der Webentwicklung ist intelligent, interaktiv und personalisiert. Mit dem Vercel AI SDK verfügen Sie nun über die Werkzeuge und das Wissen, um an vorderster Front dieser Revolution zu stehen. Viel Spaß beim Entwickeln!
Sie wünschen sich eine integrierte All-in-One-Plattform, auf der Ihr Entwicklerteam mit maximaler Produktivität zusammenarbeiten kann?
Apidog erfüllt alle Ihre Anforderungen und ersetzt Postman zu einem viel günstigeren Preis!