Github | Npm | Dokumente
Jetzt mit Chatgpt API -Unterstützung! Siehe Verwendung mit Chatgpt -API . (Flüstere bald!)
Diese Bibliothek gibt OpenAI -API -Antworten nur als Streams zurück. Nicht-Stream-Endpunkte wie edits usw. sind einfach ein Stream mit nur einem Chunk-Update.
OPENAI_API_KEY von process.env . Verwendet standardmäßig ReadableStream für Browser, Edge Runtime und Node 18+, wobei eine NodeJS.Readable Version bei openai-streams/node verfügbar ist.
yarn add openai-streams
# -or-
npm i --save openai-streams await OpenAI (
/** 'completions', 'chat', etc. */
ENDPOINT ,
/** max_tokens, temperature, messages, etc. */
PARAMS ,
/** apiBase, apiKey, mode, controller, etc */
OPTIONS
) ; Setzen Sie die Variable OPENAI_API_KEY Env (oder übergeben Sie die Option { apiKey } ).
Die Bibliothek wird werfen, wenn sie keinen API -Schlüssel finden kann. Ihr Programm lädt dies zur Laufzeit von process.env.OPENAI_API_KEY standardmäßig. Sie können dies jedoch mit der Option { apiKey } überschreiben.
Wichtig: Für die Sicherheit sollten Sie dies nur aus einem process.env laden.
await OpenAI (
"completions" ,
{
/* endpoint params */
} ,
{ apiKey : process . env . MY_SECRET_API_KEY }
) ; Rufen Sie die API über await OpenAI(endpoint, params, options?) .
Der params -Typ wird basierend auf dem endpoint , den Sie bereitstellen, dh für den Endpoint "edits" , import('openai').CreateEditRequest
Beispiel mit dem raw -Streaming -Modus:
await OpenAI (
"chat" ,
{
messages : [
/* ... */
] ,
} ,
{ mode : "raw" }
) ; Dies funktioniert auch im Browser, aber Sie benötigen Benutzer, um ihre OpenAI -Taste einzufügen und über die Option { apiKey } einzugeben.
import { OpenAI } from "openai-streams" ;
export default async function handler ( ) {
const stream = await OpenAI ( "completions" , {
model : "text-davinci-003" ,
prompt : "Write a happy sentence.nn" ,
max_tokens : 100 ,
} ) ;
return new Response ( stream ) ;
}
export const config = {
runtime : "edge" ,
} ; Wenn Sie keine Edge-Laufzeit verwenden oder aus einem anderen Grund Node.js-Streams konsumieren möchten, verwenden Sie openai-streams/node :
import type { NextApiRequest , NextApiResponse } from "next" ;
import { OpenAI } from "openai-streams/node" ;
export default async function test ( _ : NextApiRequest , res : NextApiResponse ) {
const stream = await OpenAI ( "completions" , {
model : "text-davinci-003" ,
prompt : "Write a happy sentence.nn" ,
max_tokens : 25 ,
} ) ;
stream . pipe ( res ) ;
} Siehe das Beispiel in example/src/pages/api/hello.ts .
Standardmäßig erhalten Sie mit mode = "tokens" nur die Nachrichtendeltas. Verwenden Sie für vollständige Ereignisse mode = "raw" .
Siehe: https://platform.openai.com/docs/guides/chat/Introduction
const stream = await OpenAI ( "chat" , {
model : "gpt-3.5-turbo" ,
messages : [
{
role : "system" ,
content : "You are a helpful assistant that translates English to French." ,
} ,
{
role : "user" ,
content : 'Translate the following English text to French: "Hello world!"' ,
} ,
] ,
} ) ; Im tokens -Modus erhalten Sie nur die Antwortbrocken, die so aussehen (getrennt mit Newlines zur Illustration):
Hello
!
How
can
I
assist
you
today
?
Verwenden Sie mode = "raw" für den Zugriff auf Roheignisse.
for await (const chunk of yieldStream(stream)) { ... } . Wir empfehlen, diesem Muster zu folgen, wenn Sie es intuitiv finden.