GitHub | NPM | Documento
¡Ahora con el soporte de la API de ChatGPT! Vea el uso con la API CHATGPT . (¡Susurro próximamente!)
Esta biblioteca devuelve respuestas de API de OpenAI como transmisiones solamente. Los puntos finales que no son de transmisión como edits , etc. son simplemente una transmisión con solo una actualización de fragmentos.
OPENAI_API_KEY desde process.env . Utiliza ReadableStream de forma predeterminada para el navegador, el tiempo de ejecución de borde y el nodo 18+, con una versión NodeJS.Readable disponible en openai-streams/node .
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
) ; Establezca la variable de env OPENAI_API_KEY (o pase la opción { apiKey } ).
La biblioteca lanzará si no puede encontrar una tecla API. Su programa cargará esto en tiempo de ejecución desde process.env.OPENAI_API_KEY de forma predeterminada, pero puede anular esto con la opción { apiKey } .
IMPORTANTE: Para la seguridad, solo debe cargar esto desde un process.env .
await OpenAI (
"completions" ,
{
/* endpoint params */
} ,
{ apiKey : process . env . MY_SECRET_API_KEY }
) ; Llame a la API a través de await OpenAI(endpoint, params, options?) .
El tipo params se inferirá en función del endpoint que proporcione, es decir, para el punto final "edits" , import('openai').CreateEditRequest .
Ejemplo con modo de transmisión raw :
await OpenAI (
"chat" ,
{
messages : [
/* ... */
] ,
} ,
{ mode : "raw" }
) ; Esto también funcionará en el navegador, pero necesitará usuarios para pegar su tecla OpenAI y pasarla a través de la opción { apiKey } .
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" ,
} ; Si no puede usar un tiempo de ejecución de borde o desea consumir transmisiones Node.js por otro motivo, use 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 ) ;
} Vea el ejemplo en example/src/pages/api/hello.ts .
De forma predeterminada, con mode = "tokens" , recibirá solo los deltas de mensaje. Para eventos completos, use mode = "raw" .
Ver: 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!"' ,
} ,
] ,
} ) ; En modo tokens , solo recibirá los fragmentos de respuesta, que se ven así (separados con nuevas líneas para la ilustración):
Hello
!
How
can
I
assist
you
today
?
Use mode = "raw" para acceder a eventos RAW.
for await (const chunk of yieldStream(stream)) { ... } . Recomendamos seguir este patrón si lo encuentra intuitivo.