Väike kliendipiir
Märkige use client'iga ainult interaktiivne vestlusmoodul, selle asemel et terve leht või paigutus brauserisse viia.
Kasutage paketti @openstaticfish/chattybox kitsas kliendipiiris, samal ajal kui ülejäänud App Routeri rakendus jääb serveris renderdatuks. ChattyBox haldab teabeotsingut, viiteid, vestlusi ja skaleerimist.
Illustratiivne vestlus — mitte reaalajas vestlus.
ChattyBox roomab teie olemasolevat veebisaiti, dokumentatsiooni, abikeskust, CMS-i või teadmistebaasi ning manustab seejärel vestlusroboti, mis vastab teie enda avaldatud sisu, mitte mudeli üldise mälu põhjal.
Paigaldage @openstaticfish/chattybox Next.js-i rakendusse.
Lisage avalik vidina API-võti ja API URL NEXT_PUBLIC keskkonnamuutujatena.
Looge vestluse oleku ja brauserisuhtluse jaoks kliendikomponent.
Importige see kliendikomponent Server Componenti lehelt või paigutusest.
Kolmeastmeline käivitamine
Hoidke SDK-d kliendi servas, kus toimub vestlussuhtlus, ja säilitage ülejäänud rakenduses Server Components.
Kasutage neid kontrollpunkte, et otsustada, kas ChattyBox peaks asuma teie dokumentide platvormi kõrval, asendama eraldi assistendi või jääma testimiseks isoleerituks.
Märkige use client'iga ainult interaktiivne vestlusmoodul, selle asemel et terve leht või paigutus brauserisse viia.
Kasutage brauseris turvalist lubatud origin'idega projektivõtit; ärge avaldage halduskrediite NEXT_PUBLIC muutujate kaudu.
Kuvage sõnumid ja viited oma navigeerimises, kontopaneelil, dokumentatsioonikestas või tugiteenuse töövoos.
Ärge lisage marsruuditöötlejaid ainult hallatud brauseri-API vahendamiseks, kui teie tootel puudub konkreetne serveripoolne vajadus.
SDK kasutab fetchi ja brauseris nähtavaid projektikrediite, seega lähtestage see kliendimoodulis. Ärge pange saladusi ega haldus-API-sid NEXT_PUBLIC muutujatesse.
'use client';
import { useState, type FormEvent } from 'react';
import { Chattybox, ChattyboxError, type ChatResponse } from '@openstaticfish/chattybox';
const chattybox = new Chattybox({
apiKey: process.env.NEXT_PUBLIC_CHATTYBOX_API_KEY!,
baseUrl: process.env.NEXT_PUBLIC_CHATTYBOX_API_URL!,
});
export function Chat() {
const [question, setQuestion] = useState('');
const [answer, setAnswer] = useState<ChatResponse | null>(null);
const [pending, setPending] = useState(false);
const [error, setError] = useState('');
async function ask(event: FormEvent<HTMLFormElement>) {
event.preventDefault();
const message = question.trim();
if (pending || !message || message.length > 2000) return;
setPending(true);
setError('');
try {
setAnswer(await chattybox.sendMessage({
message,
// Same ID includes up to 12 recent saved messages, not the full transcript.
conversationId: answer?.conversationId,
}));
setQuestion('');
} catch (failure) {
setError(failure instanceof ChattyboxError
? failure.status + ': ' + failure.message
: 'Chat could not be completed.');
} finally {
setPending(false);
}
}
const sources = answer?.sources.filter((source) => {
try { return ['https:', 'http:'].includes(new URL(source).protocol); }
catch { return false; }
}) ?? [];
return (
<section aria-label="Chat">
<form onSubmit={ask}>
<label>Question
<input value={question} maxLength={2000} disabled={pending}
onChange={(event) => setQuestion(event.target.value)} />
</label>
<button type="submit" disabled={pending || !question.trim()}>
{pending ? 'Sending...' : 'Send'}
</button>
</form>
{error && <p role="alert">{error}</p>}
<div aria-live="polite" aria-busy={pending}>
<p style={{ whiteSpace: 'pre-wrap' }}>{answer?.message}</p>
{sources.length > 0 && <ul aria-label="Sources">
{sources.map((source, index) => <li key={index}>
<a href={source} target="_blank" rel="noopener noreferrer">{source}</a>
</li>)}
</ul>}
</div>
</section>
);
}
// Import and render <Chat /> from your page or layout. This shows the latest answer, not a saved transcript.
// No automatic retries: see the SDK retry-safety guide before adding retries.Jah. Kasutage seda interaktiivse vestluse oleku jaoks kliendikomponendis ja kuvage komponent App Routeri lehelt või paigutusest.
Tavalise brauseriintegratsiooni jaoks mitte. Avalikud vidinavõtmed on mõeldud kliendis kasutamiseks ja neid saab piirata lubatud origin'idega.
Avalik vidinavõti tuvastab projekti, kuid ei ole halduskrediit. Piirake see tootmis- ja eelvaate-origin'idega ning ärge kunagi avaldage administraatori saladusi.
Jah. Majutatud vidina paigaldusjuhend näitab next/scripti lahendust, kui eelistate kohandatud SDK-liidese asemel hooldatud kasutajaliidest.
Krediitkaarti pole vaja
Tasuta pakett. Kaarti pole vaja.