In jüngster Zeit nutzen immer mehr Menschen die API von OpenAI, um ihre eigenen Chatbots und Geschäftsassistenten zu erstellen.
In diesem Artikel zeigen wir Ihnen, wie Sie Next.js (App -Router) und Rückenwind -CSS
Openai-Endpunkt von Chat/Fertigstellungen
, um ein Chatgpt-ähnliches Gesprächserlebnis in Ihrem Browser auf einfache Weise zu ermöglichen.
diejenigen, die es ein bisschen mühsam finden, selbst Code zu schreiben oder
eine Vorlage mit einer Benutzeroberfläche zu wünschen, die schnell funktioniert, verkaufen wir auch Vorlagen auf den folgenden Plattformen .
Die in diesem Artikel eingeführten Vorlagen sind jetzt im Verkauf!
Diese Chatbot UI -Vorlage steht auf mehreren Plattformen zum Verkauf.
Die Struktur ist perfekt für diejenigen, die etwas ausprobieren möchten, das zuerst funktioniert: "Ich möchte es sofort verwenden, ohne eine Umgebung zu erstellen" oder "Ich möchte den gesamten Code überprüfen".
- Das klare Tippgefühl, das einzigartig für das kapazitive berührungslose System ist!
- Das erste drahtlos kompatible Gerät von REALFORCE! Auch mit Kabelverbindung erhältlich!
- Im Gegensatz zum HHKB weist das japanische Tastaturlayout keine Macken auf und ist für jeden einfach zu verwenden!
- Ausgestattet mit einem Daumenrad ist horizontales Scrollen ganz einfach!
- Es verfügt außerdem über eine hervorragende Geräuschreduzierung, wodurch es leise und komfortabel ist!
- Das Scrollen kann zwischen Hochgeschwindigkeitsmodus und Ratschenmodus umgeschaltet werden!
Über die verwendete Technologie
Diese Chatbot -Benutzeroberfläche wurde mit den folgenden Technologien erstellt:
- Next.js (App Router -Konfiguration)
-
Mit einem React-basierten Framework können Sie einheitliche Seiten und API-Routen erstellen. Ich verwende eine App -Router -Konfiguration ab
SRC/App
- Rückenwind -CSS
-
Ein Utility-First CSS-Framework, mit dem Sie Ihre Designs effizient mit Klassen organisieren können. Erstellen Sie schnell eine reaktionsschnelle und einfache Benutzeroberfläche
- OpenAI -API (CHAT -Abschluss)
-
Dies ist ein Mechanismus für die Interaktion mit GPT-basierten Modellen mit dem
/v1/chat/completions
zwischen UmgebungsvariablenGPT-4,1-Mini
undGPT-3,5-Turbo
zu wechseln - API -Routen + abrufen
-
Ich schreibe die Serververarbeitung, die zwischen dem Browser und der OpenAI -API mit der nächsten.js -API -Root (
/API /CHAT
Clients mitFetch ("/api/chat")
Erstellen Sie einen OpenAI -API -Schlüssel
Dieses Mal werden wir die OpenAI -API verwenden, daher müssen wir einen OpenAI -API -Schlüssel erstellen.
Sie werden im OpenAI -API -Dashboard zu API -Schlüssel weitergeleitet. Wählen Sie "neue geheime Schlüssel erstellen".

Sie können das Projekt ausgewählt haben, wie Sie es mögen, und Berechtigungen für das Modell, das Sie verwenden möchten, oder alle auszuwählen, um es zu generieren.

Sobald die Erstellung abgeschlossen ist, wird eine Zeichenfolge, die mit "SK" beginnt, erstellt, sodass wir sie danach verwenden.
Bitte achten Sie darauf, dass dieser Schlüssel nicht gehen.
Umweltkonstruktion
Erstellen Sie zunächst eine Entwicklungsumgebung für Next.js.
Ein Projekt erstellen
Ich werde ein Projekt erstellen.
Grundsätzlich denke ich, dass es in Ordnung ist, alles bei den Standardeinstellungen zu lassen, aber es ist in Ordnung, solange Sie es bei Bedarf ändern können.
(In diesem Projekt wird Tailwind -CSS verwendet. Es ist daher am besten, es auf Ja einzustellen. Der Standard ist ja.)
$ npx create-next-sapp@neuesten My-chatbot --Typescript müssen die folgenden Pakete installieren: create-text-app@15.4.4 OK, um fortzufahren? (y) y ✔ Möchten Sie Eslint verwenden? … Nein / Ja ✔ Möchten Sie Rückenwind -CSS verwenden? … Nein / Ja ✔ Möchten Sie Ihren Code in einem SRC / ` -Verzeichnis? … Nein / Ja ✔ Möchten Sie App -Router verwenden? (Empfohlen)… Nein / Ja ✔ Möchten Sie Turbopack für `Next Dev` verwenden? … Nein / Ja ✔ möchten Sie den Import -Alias (`@ /*` standardmäßig) anpassen? … Nein / Ja Erstellen einer neuen nächsten.js-App in / my-chatbot. Verwenden von NPM. Initialisieren des Projekts mit Vorlage: App -TW Installieren von Abhängigkeiten: - React - React -Dom - Als nächstes installieren Sie DevDependencies: - TypeScript - @Typen/Knoten - @Typen/React - @typen/react -dom - @tailwindcss/postcss - Tailwindcss - Eslint - Eslint -config. 14S 137 Pakete suchen nach Finanzmitteln. NPM Fund "für Details gefunden 0 Schwachstellen initialisiert ein Git -Repository. Erfolg! Erstellt My-chatbot at /my-chatbot npm notal npm notal neue minorversion von npm verfügbar! 11.0.0 -> 11.5.1 NPM Hinweis ChangeLog: https://github.com/npm/cli/releases/v11.5.1 NPM Hinweis zum Aktualisieren von Ausführen:
Wenn "Erfolg! My-chatbot at /my-chatbot erstellt" erscheint, ist die Projekterstellung vollständig.
Wenn Sie das Projekt erstellt haben, verschieben Sie das Verzeichnis.
CD My-Chatbot
Stellen Sie die OpenAI -API -Schlüssel ein
Erstellen Sie eine .env
im Stamm
Openai_api_key = sk -... openai_model = gpt-4.1-mini system_prompt = Sie sind ein hilfreicher Assistent.
Kurzbeschreibung:
- OpenAI_API_KEY: Private Schlüssel, der für den OpenAI -API -Zugriff erforderlich ist (ausgestellt durch ein persönliches Konto)
- OpenAI_Model: Der zu verwendende Modellname. Abhängig von dem Zweck,
GPT-3,5-Turbo
,GPT-4,1-Mini
usw. - SYSTEM_PROMPT: Erste Nachricht, in der die Persönlichkeit und Rolle der KI angibt (effektiv, wenn der Chat beginnt)
Starten Sie den Entwicklungsserver
Durch das Ausführen des folgenden Befehls wird die Vorlage gestartet:
NPM Run Dev
Implementierung der Benutzeroberfläche (CHAT -Bildschirm)
Die Chat -Benutzeroberfläche SRC/App/page.tsx
konsolidiert
Die Gesamtmenge des Quellcodes lautet wie folgt:
"Client verwenden"; importieren {usestate, useref, useEffect} aus "react"; // Wiederverwendbare Chat -Schnittstelle mit OpenAI -API // Wiederverwendbare Chat -Schnittstelle mit OpenAI -API -Ausfunktion Standardfunktion home () {const [input, setInput] = usestate (""); const [message, setMessages] = usustate <{Rolle: "Benutzer" | "Assistent"; Inhalt: String} []> ([]); const [laden, setloading] = usustate (false); const chatendref = useref<HTMLDivElement> (NULL); // Meldungsübermittlung an die API verwandeln // Der Prozess des Sendens einer Nachricht an die API const sendMessage = async () => {if (! Input.trim ()) return; // Benutzernachricht zum Chat -History hinzufügen // Benutzernachricht zu History const newMessages = [... Nachrichten, {Rolle: "Benutzer", Inhalt: Eingabe} als const,]; setMessages (NewMessages); setInput (""); setloading (true); // Nachricht an Backend-API-Route senden // Nachricht an Backend API Endpoint const res = warte fetch ("/api/chat", {methode: "post", header: {"content-type": "application/json"}, body: json.stringify ({message: input}),}); const data = warte res.json (); // Assistent auf den Chat -History addieren // Assistent auf History SetMessages (PREV) => [... prev, {Rolle: "Assistant", Inhalt: Data.Repry},]); setloading (false); }; // scrollen Sie zum Ende der Chat -Ansicht zum Update // scrollen Sie zum Ende der Chat -Ansicht, wenn eine Nachricht aktualisiert wird. zurückkehren ( <main className="h-screen flex items-center justify-center bg-gray-100 text-gray-800"><div className="flex flex-col w-full max-w-3xl h-[90vh] border-x border-gray-300 bg-white"> {/ * Header */} {/ * Header */}<header className="p-4 border-b text-lg font-semibold"> Chatbot-Chatgpt</header> {/ * Chat -Meldung Anzeige */} {/ * Chat -Meldung Anzeigebereich */} <div className="flex-1 overflow-y-auto p-6 space-y-4 scrollbar-thin scrollbar-thumb-gray-400 scrollbar-track-gray-100"> {messages.map ((msg, idx) => ( <div key={idx} className={`flex ${ msg.role === "user" ? "justify-end" : "justify-start" }`} ><div className={`max-w-xl px-4 py-2 rounded-lg text-sm whitespace-pre-wrap ${ msg.role === "user" ? "bg-blue-600 text-white" : "bg-gray-100 text-gray-900" }`} > {msg.content}</div></div> ))} {/ * Typern beim Laden */} {/ * Anzeige während des Ladens */} {Laden && (( <div className="flex justify-start"><div className="bg-gray-100 text-gray-700 px-4 py-2 rounded-lg text-sm animate-pulse"> Denken...</div></div> )}<div ref={chatEndRef} /></div> {/ * Eingabebereich */} {/ * Eingabefeld */}<footer className="border-t p-4"><div className="flex gap-2"><input value={input} onChange={(e) => setInput (e.target.Value)} Onkeydown = {(e) => e.Key === "ENTER" && sendMessage ()} classname = "Flex-Grow P-2 Border Runded Focus: Umriss-None-Fokus: Ring Focus: Border-BLUE-300" Placeholder = "Typ Ihre Botschaft Typ ..." /> Sends Sends Send-Send-Send <button onClick={sendMessage} className="bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700 transition" >-Send-</button> Botschaft.</div></footer></div></main> ); }
Nachrichtenstatusverwaltung
const [input, setInput] = usustate (""); const [message, setMessages] = usustate <{Rolle: "Benutzer" | "Assistent"; Inhalt: String} []> ([]); const [laden, setloading] = usustate (false);
Kurzbeschreibung:
- Eingabe: Eingabewert des Textfelds halten
- Nachrichten: Vorheriger Chat -Verlauf (Benutzer- und Assistenzgespräche)
- Laden: Ob eine Antwort aus der API
Senden Sie die Verarbeitung und API -Anruf
const sendMessage = async () => {if (! input.trim ()) return; const newMessages = [... Nachrichten, {Rolle: "Benutzer", Inhalt: Eingabe}]; setMessages (NewMessages); setInput (""); setloading (true); const res = acait fetch ("/api/chat", {methode: "post", header: {"content-type": "application/json"}, body: json.stringify ({message: input}),}); const data = warte res.json (); setMessages ((prev) => [... prev, {Rolle: "Assistant", Inhalt: data.reply}]); setloading (false); };
Kurzbeschreibung:
- Senden Sie Nachrichten an die API, während Sie Benutzereingaben zum Verlauf hinzufügen
- Wenn Sie eine Antwort erhalten, fügen Sie sie der Geschichte als
Assistent
Chat -Bildschirmlayout (Formatierung mit Rückenwind)
<div className="flex-1 overflow-y-auto p-6 space-y-4">{messages.map ((msg, idx) => ( <div key={idx} className={`flex ${msg.role === "user" ? "justify-end" : "justify-start"}`}><div className={`max-w-xl px-4 py-2 rounded-lg text-sm whitespace-pre-wrap ${ msg.role === "user" ? "bg-blue-600 text-white" : "bg-gray-100 text-gray-900" }`}> {msg.content}</div></div> ))} {laden && ( <div className="flex justify-start"><div className="bg-gray-100 text-gray-700 px-4 py-2 rounded-lg text-sm animate-pulse"> Denken...</div></div> )}</div>
Kurzbeschreibung:
- Benutzer- und Assistentenmeldungen werden links und rechts angezeigt
- Wenn Sie auf eine Antwort warten, wird "Thinking ..." angezeigt, um ein Gesprächsgefühl zu erzeugen.
Eingabefeld und Schaltfläche senden
<footer className="border-t p-4"><div className="flex gap-2"><input value={input} onChange={(e) => setInput (e.target.value)} ondkeydown = {(e) => e.key === "ENTER" && sendMessage ()} classname = "Flex-Grow P-2 Border Runded Focus: Umriss-none" placeholder = "Geben Sie Ihre Nachricht ein ..." /> <button onClick={sendMessage} className="bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700 transition" >Senden</button></div></footer>
Kurzbeschreibung:
- Spezifikationen, die mit der Eingabetaste oder der Taste auf der Tastatur gesendet werden können
- Mit dem Tailwind-CSS haben wir eine einfache und leicht zu lesende Form erstellt.
Serverseitige Implementierung (OpenAI-API-Integration)
Die Chat -Interaktion umfasst einen Client, der eine Anfrage an
/api /chat
dann werden die Antworten an die Chat -API von OpenAI auf dem Server zurückgegeben.
Die Gesamtmenge des serverseitigen Quellcodes lautet wie folgt:
// src/app/api/chat/route.ts import {nexTrequest, nexTesponse} aus "next/server"; // Handler für Chat -Anfragen posten // Handler posten, der Chat -Anfragen asynchronisierte Funktionen postet (req: nexTrequest) {const {message} = warte req.json (); // Rufen Sie die OpenAI-API mit der serverseitigen Geheimschlüssel und den Parametern an // system_prompt definiert die Persönlichkeit, den Ton oder das Verhalten des Assistenten. // Öffnen Sie mit serverseitigem privatem Schlüssel und Parametern API // System_prompt Gibt die Persönlichkeit, das Sprechen und das Verhalten des Assistenten an. const response = actait fetch ("https://api.openai.com/v1/chat/completions", {methode: "post", Header: {Autorisierung: "Bearer $ {process.env.openai_api_api_key}`, "content-type": "application/json,},},},},}, Body: Json: Json.Stringify (": "Json",},}, Body: Jon.Stringify (":" json ",},},},}, body: jon.string process.env.openai_model ||. const data = warte auf response.json (); // Fehlerantwort von OpenAI verwandeln // Fehlerantwort von OpenAI // Fehlerantwort von OpenAI if (Data.Error) {console.Error (Data.Error); return nexTesponse.json ({Antwort: "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut."}, {Status: 500}); } // Assistent zurücksenden Antwort // Assistent zurücksenden Antwort zurückkehren nexTesponse.json ({Antwort: Data.choices [0] .Message.Content}); }
Grundlegende Konfiguration der Route.ts
importieren {nexTrequest, nexTesponse} aus "next/server"; Exportieren Sie die asynchronisierende Funktion post (req: nexTrequest) {const {message} = warte req.json ();
Kurzbeschreibung:
- API -Routen beschränkten sich auf
Postmethoden
- Empfängt die von der Client -Seite gesendete Nachrichtenbehörde
Anfragen nach OpenAI -API
const response = actait fetch ("https://api.openai.com/v1/chat/completions", {methode: "post", Header: {Autorisierung: "Bearer $ {process.env.openai_api_api_key}`, "content-type": "application/json,},},},},}, Body: Json: Json.Stringify (": "Json",},}, Body: Jon.Stringify (":" json ",},},},}, body: jon.string process.env.openai_model ||. const data = warte auf response.json ();
Kurzbeschreibung:
-
API -Schlüssel
,Modellnamen
undEingabeaufforderungen
dynamisch aus Umgebungsvariablen - Erstellen Sie ein
Nachrichten
, um an ein GPT -Modell zu senden
Antwortverarbeitung und Fehlerbehandlung
if (data.Error) {console.Error (data.Error); return nexTesponse.json ({Antwort: "Ein Fehler ist aufgetreten."}, {Status: 500}); } return nexTesponse.json ({Antwort: Data.choices [0] .Message.Content}); }
Kurzbeschreibung:
- Wenn die OpenAI -API fehlschlägt, geben Sie den Fehler in die Konsole aus
- Wenn Sie eine Antwort erfolgreich erhalten, senden Sie die Assistenznachricht als
Antwort
[Bonus] Dinge zu beachten
mit .EnV
verwalten,
damit sie niemals entlarvt werden Wenn Ihre API -Taste durchgesickert ist, entfernen Sie die API -Taste aus dem OpenAI -Dashboard.
Der Modellname ist eine Umgebungsvariable. Bitte ersetzen Sie sie nach dem Zweck.
Die Menge an Geld variiert je nach Modell. Seien Sie daher bei der Auswahl eines Modells vorsichtig.
Informationen zum Vorlagenverkauf
Die in diesem Artikel eingeführte Chatbot -Benutzeroberfläche wird auch als Vorlage verkauft, die für kommerzielle Zwecke verwendet werden kann
Warum Vorlagen verkaufen?
Wir haben dies für diejenigen vorbereitet, die die folgenden Bedürfnisse erleben:
- "Auch wenn Sie den Schritten befolgen, funktioniert die Umgebung nicht ..."
- "Ich möchte nur mit einem bewegenden Beispiel beginnen."
- "Ich habe mir meinen Blog angesehen und fand ihn nützlich, also möchte ich ihn mit dem Ziel kaufen, zu unterstützen und zu spenden."
Sogar diejenigen, die es nicht gewohnt sind, das Spiel zu entwickeln, können mit minimalem Aufwand schnell starten und es schnell ausprobieren
Beispiele für die Verwendung von Vorlagen (Anpassungsideen)
Diese Vorlage ist perfekt für die persönliche Entwicklung und Lernzwecke.
Zum Beispiel empfehlen wir, Folgendes zu ändern und zu erweitern:
- Fügen Sie API -Antworten Geschichte und Kontext
- Versuchen Sie, den Input -Historie auf den lokalen Speicher
- Versuchen Sie, eine Funktion zum Ausgabe von Chat -Protokollen zu PDF oder CSV
- Sprachlesung und Bildgenerierung können interessant sein
Es ist auch eine gute Praxis, es auf "serieller Basis" für Programmieranfänger auszuprobieren.
Was ist in der Vorlage enthalten
enthält
den gesamten Quellcode für das hier eingeführte Projekt Daher müssen Sie Ihr eigenes Projekt nicht von Grund auf neu erstellen oder konfigurieren, und Sie können es sofort starten .
- Chat -Benutzeroberfläche mit Next.js (App -Router)
- Serverseitige Implementierung mit API-Integration
- Clean Code Struktur mit Kommentaren
- Einfach und einfach zu verbessern, um das Design mithilfe von Rückenwind -CSS zu verbessern
- Docker Startup-Konfigurationsdateien (
DockerFile
,Docker-compose.yml
)
Die in diesem Artikel eingeführten Vorlagen sind jetzt im Verkauf!
Diese Chatbot UI -Vorlage steht auf mehreren Plattformen zum Verkauf.
Die Struktur ist perfekt für diejenigen, die etwas ausprobieren möchten, das zuerst funktioniert: "Ich möchte es sofort verwenden, ohne eine Umgebung zu erstellen" oder "Ich möchte den gesamten Code überprüfen".
Zusammenfassung
eine einfache Chatbot -Benutzeroberfläche mit der OpenAI -API und in Next.js. erstellt
Rückblick auf die Punkte:
- Mit der Chat-API können Sie hochwertige Chatbots mit nur ein wenig Code erstellen
- Tailwind CSS + Next.js App -Router erleichtert es einfach, zu erweitern und wiederzuverwenden
- Mit Vorlagen können Sie den Betrieb schnell überprüfen, indem Sie den Umgebungskonstruktion weglassen.
Es ist nicht nur als Starter für Entwicklung und persönliche Projekte geeignet, sondern wird auch als Grundlage für das Hinzufügen von einzigartigen Funktionen und die Anpassung der Benutzeroberfläche empfohlen.