LLM.js es la forma más rápida de utilizar modelos de lenguaje grandes en JavaScript. Es una interfaz única y sencilla para cientos de LLM populares:
gpt-4
, gpt-4-turbo-preview
, gpt-3.5-turbo
gemini-1.5-pro
, gemini-1.0-pro
, gemini-pro-vision
claude-3-opus
, claude-3-sonnet
, claude-3-haiku
, claude-2.1
, claude-instant-1.2
mixtral-8x7b
, llama2-70b
, gemma-7b-it
llama-3-70b
, llama-3-8b
, nous-hermes-2
, ...mistral-medium
, mistral-small
, mistral-tiny
LLaVa-1.5
, TinyLlama-1.1B
, Phi-2
, ...llama-3
, llama-2
, gemma
, dolphin-phi
, ... await LLM ( "the color of the sky is" , { model : "gpt-4" } ) ; // blue
Características
OpenAI
, Google
, Anthropic
, Mistral
, Groq
, Llamafile
, Ollama
, Together
)temperature
, max_tokens
, seed
, ...)llm
para tu shell Instale LLM.js
desde NPM:
npm install @themaximalist/llm.js
Configurar LLM es fácil: solo asegúrese de que su clave API esté configurada en su entorno
export OPENAI_API_KEY=...
export ANTHROPIC_API_KEY=...
export MISTRAL_API_KEY=...
export GOOGLE_API_KEY=...
export GROQ_API_KEY=...
export TOGETHER_API_KEY=...
Para modelos locales como llamafile y Ollama, asegúrese de que se esté ejecutando una instancia.
La forma más sencilla de llamar LLM.js
es como una async function
.
const LLM = require ( "@themaximalist/llm.js" ) ;
await LLM ( "hello" ) ; // Response: hi
Esto genera una solicitud única y no almacena ningún historial.
Inicialice una instancia de LLM para crear un historial de mensajes.
const llm = new LLM ( ) ;
await llm . chat ( "what's the color of the sky in hex value?" ) ; // #87CEEB
await llm . chat ( "what about at night time?" ) ; // #222d5a
La transmisión proporciona una mejor experiencia de usuario al devolver resultados inmediatamente y es tan simple como pasar {stream: true}
como opción.
const stream = await LLM ( "the color of the sky is" , { stream : true } ) ;
for await ( const message of stream ) {
process . stdout . write ( message ) ;
}
A veces es útil manejar la transmisión en tiempo real y también procesarla una vez que esté completa. Por ejemplo, proporcionar transmisión en tiempo real en el chat y luego analizar bloques de código semántico al final.
LLM.js
facilita esto con una opción opcional stream_handler
.
const colors = await LLM ( "what are the common colors of the sky as a flat json array?" , {
model : "gpt-4-turbo-preview" ,
stream : true ,
stream_handler : ( c ) => process . stdout . write ( c ) ,
parser : LLM . parsers . json ,
} ) ;
// ["blue", "gray", "white", "orange", "red", "pink", "purple", "black"]
En lugar de que la secuencia se devuelva como generador, se pasa al stream_handler
. La respuesta de LLM.js
es la respuesta completa, que se puede analizar o manejar normalmente.
LLM.js
admite el esquema JSON para OpenAI y LLaMa. Puede solicitar JSON con cualquier modelo LLM, pero el uso del esquema JSON impondrá las salidas.
const schema = {
"type" : "object" ,
"properties" : {
"colors" : { "type" : "array" , "items" : { "type" : "string" } }
}
}
const obj = await LLM ( "what are the 3 primary colors in JSON format?" , { schema , temperature : 0.1 , service : "openai" } ) ;
Los diferentes modelos utilizan diferentes formatos (esquema JSON, BNFS), por lo que LLM.js
convierte entre ellos automáticamente.
Tenga en cuenta que el esquema JSON aún puede producir JSON no válido, como cuando excede max_tokens
.
Cree agentes que se especialicen en tareas específicas utilizando llm.system(input)
.
const llm = new LLM ( ) ;
llm . system ( "You are a friendly chat bot." ) ;
await llm . chat ( "what's the color of the sky in hex value?" ) ; // Response: sky blue
await llm . chat ( "what about at night time?" ) ; // Response: darker value (uses previous context to know we're asking for a color)
Tenga en cuenta que OpenAI ha sugerido que las indicaciones del sistema pueden no ser tan efectivas como las indicaciones del usuario, que LLM.js
admite con llm.user(input)
.
LLM.js
admite mensajes de cadena simples, pero también un historial de mensajes completo. Esto es especialmente útil para guiar a los LLM de una manera más precisa.
await LLM ( [
{ role : "user" , content : "remember the secret codeword is blue" } ,
{ role : "assistant" , content : "OK I will remember" } ,
{ role : "user" , content : "what is the secret codeword I just told you?" } ,
] ) ; // Response: blue
Se utiliza el formato de mensaje OpenAI y se convierte sobre la marcha para servicios específicos que utilizan un formato diferente (como Google, Mixtral y LLaMa).
LLM.js
admite los modelos de lenguaje grandes más populares, incluidos
gpt-4
, gpt-4-turbo-preview
, gpt-3.5-turbo
gemini-1.0-pro
, gemini-1.5-pro
, gemini-pro-vision
claude-3-sonnet
, claude-3-haiku
, claude-2.1
, claude-instant-1.2
mixtral-8x7b
, llama2-70b
, gemma-7b-it
llama-3-70b
, llama-3-8b
, nous-hermes-2
, ...mistral-medium
, mistral-small
, mistral-tiny
LLaVa 1.5
, Mistral-7B-Instruct
, Mixtral-8x7B-Instruct
, WizardCoder-Python-34B
, TinyLlama-1.1B
, Phi-2
, ...Llama 2
, Mistral
, Code Llama
, Gemma
, Dolphin Phi
, ... LLM.js
puede adivinar el proveedor de LLM según el modelo, o puede especificarlo explícitamente.
// defaults to Llamafile
await LLM ( "the color of the sky is" ) ;
// OpenAI
await LLM ( "the color of the sky is" , { model : "gpt-4-turbo-preview" } ) ;
// Anthropic
await LLM ( "the color of the sky is" , { model : "claude-2.1" } ) ;
// Mistral AI
await LLM ( "the color of the sky is" , { model : "mistral-tiny" } ) ;
// Groq needs an specific service
await LLM ( "the color of the sky is" , { service : "groq" , model : "mixtral-8x7b-32768" } ) ;
// Google
await LLM ( "the color of the sky is" , { model : "gemini-pro" } ) ;
// Ollama
await LLM ( "the color of the sky is" , { model : "llama2:7b" } ) ;
// Together
await LLM ( "the color of the sky is" , { service : "together" , model : "meta-llama/Llama-3-70b-chat-hf" } ) ;
// Can optionally set service to be specific
await LLM ( "the color of the sky is" , { service : "openai" , model : "gpt-3.5-turbo" } ) ;
Ser capaz de cambiar rápidamente entre LLM evita que te quedes atrapado.
LLM.js
viene con algunos analizadores útiles que funcionan con cada LLM. Estos son independientes del formato JSON típico con tool
y schema
que admiten algunos LLM (como los de OpenAI).
Análisis JSON
const colors = await LLM ( "Please return the primary colors in a JSON array" , {
parser : LLM . parsers . json
} ) ;
// ["red", "green", "blue"]
Análisis de bloques de código de rebajas
const story = await LLM ( "Please return a story wrapped in a Markdown story code block" , {
parser : LLM . parsers . codeBlock ( "story" )
} ) ;
// A long time ago...
Análisis XML
const code = await LLM ( "Please write a simple website, and put the code inside of a <WEBSITE></WEBSITE> xml tag" {
parser : LLM . parsers . xml ( "WEBSITE" )
} ) ;
// <html>....
Nota: OpenAI funciona mejor con Markdown y JSON, mientras que Anthropic funciona mejor con etiquetas XML.
La API LLM.js
proporciona una interfaz sencilla para docenas de modelos de lenguajes grandes.
new LLM ( input , { // Input can be string or message history array
service : "openai" , // LLM service provider
model : "gpt-4" , // Specific model
max_tokens : 100 , // Maximum response length
temperature : 1.0 , // "Creativity" of model
seed : 1000 , // Stable starting point
stream : false , // Respond in real-time
stream_handler : null , // Optional function to handle stream
schema : { ... } , // JSON Schema
tool : { ... } , // Tool selection
parser : null , // Content parser
} ) ;
La misma API se admite en la interfaz abreviada de LLM.js
, llamándola como una función:
await LLM ( input , options ) ;
Entrada (obligatoria)
input
<string>
o Array
: solicite LLM. Puede ser una cadena de texto o una matriz de objetos en formato Message History
.Opciones
Todos los parámetros de configuración son opcionales. Algunas opciones de configuración solo están disponibles en ciertos modelos y se especifican a continuación.
service
<string>
: servicio LLM a utilizar. El valor predeterminado es llamafile
.model
<string>
: LLM explícito a utilizar. El valor predeterminado es el modelo predeterminado service
.max_tokens
<int>
: longitud máxima de respuesta del token. Sin incumplimiento.temperature
<float>
: "Creatividad" de un modelo. 0
normalmente da resultados más deterministas, y los valores más altos de 1
y superiores dan resultados menos deterministas. Sin incumplimiento.seed
<int>
: obtiene resultados más deterministas. Sin incumplimiento. Soportado por openai
, llamafile
y mistral
.stream
<bool>
: devuelve resultados inmediatamente en lugar de esperar la respuesta completa. El valor predeterminado es false
.stream_handler
<function>
: función opcional que se llama cuando una transmisión recibe contenido nuevo. A la función se le pasa el fragmento de cadena.schema
<object>
: Objeto de esquema JSON para dirigir LLM para generar JSON. Sin incumplimiento. Soportado por openai
y llamafile
.tool
<object>
: indique a LLM que utilice una herramienta, útil para esquemas JSON más explícitos y para crear aplicaciones dinámicas. Sin incumplimiento. Apoyado por openai
.parser
<function>
: Maneja el formato y la estructura del contenido devuelto. Sin incumplimiento.messages
<array>
: conjunto de historial de mensajes, administrado por LLM.js
, pero se puede hacer referencia a él y modificarlo.options
<object>
: Configuración de opciones que se configuró al inicio, pero que se puede modificar dinámicamente.async send(options=<object>)
Envía el Message History
actual al LLM
actual con options
específicas. Estas opciones locales anularán las opciones predeterminadas globales.
La respuesta se agregará automáticamente al Message History
.
await llm . send ( options ) ;
async chat(input=<string>, options=<object>)
Agrega la input
al Message History
actual y send
llamadas con las options
de anulación actuales.
Devuelve la respuesta directamente al usuario, mientras actualiza Message History
.
const response = await llm . chat ( "hello" ) ;
console . log ( response ) ; // hi
abort()
Aborta una transmisión en curso. Lanza un AbortError
.
user(input=<string>)
Agrega un mensaje del user
al Message History
.
llm . user ( "My favorite color is blue. Remember that" ) ;
system(input=<string>)
Agrega un mensaje del system
al Message History
. Este suele ser el primer mensaje.
llm . system ( "You are a friendly AI chat bot..." ) ;
assistant(input=<string>)
Agrega un mensaje del assistant
al Message History
. Suele ser una respuesta de la IA o una forma de dirigir una respuesta futura.
llm . user ( "My favorite color is blue. Remember that" ) ;
llm . assistant ( "OK, I will remember your favorite color is blue." ) ;
LLAMAFILE
<string>
: llamafile
OPENAI
<string>
: openai
ANTHROPIC
<string>
: anthropic
MISTRAL
<string>
: mistral
GOOGLE
<string>
: google
MODELDEPLOYER
<string>
: modeldeployer
OLLAMA
<string>
: ollama
TOGETHER
<string>
: together
parsers
<object>
: Lista de analizadores LLM.js
predeterminados<blockType>
)( <content>
) <function>
— Analiza un bloque de código Markdown<content>
) <function>
: analiza JSON general o un bloque de código Markdown JSON<tag>
)( <content>
) <function>
— Analiza la etiqueta XML del contenido de la respuestaserviceForModel(model)
Devuelve el service
LLM para un modelo en particular.
LLM . serviceForModel ( "gpt-4-turbo-preview" ) ; // openai
modelForService(service)
Devuelve el LLM predeterminado para un service
.
LLM . modelForService ( "openai" ) ; // gpt-4-turbo-preview
LLM . modelForService ( LLM . OPENAI ) ; // gpt-4-turbo-preview
Respuesta
LLM.js
devuelve resultados de llm.send()
y llm.chat()
, normalmente el contenido de la cadena del LLM que completa su mensaje.
await LLM ( "hello" ) ; // "hi"
Pero cuando utiliza schema
y tools
, LLM.js
normalmente devolverá un objeto JSON.
const tool = {
"name" : "generate_primary_colors" ,
"description" : "Generates the primary colors" ,
"parameters" : {
"type" : "object" ,
"properties" : {
"colors" : {
"type" : "array" ,
"items" : { "type" : "string" }
}
} ,
"required" : [ "colors" ]
}
} ;
await LLM ( "what are the 3 primary colors in physics?" ) ;
// { colors: ["red", "green", "blue"] }
await LLM ( "what are the 3 primary colors in painting?" ) ;
// { colors: ["red", "yellow", "blue"] }
Y al pasar {stream: true}
en options
, LLM.js
devolverá un generador y comenzará a generar resultados de inmediato.
const stream = await LLM ( "Once upon a time" , { stream : true } ) ;
for await ( const message of stream ) {
process . stdout . write ( message ) ;
}
La respuesta se basa en lo que le pide al LLM que haga, y LLM.js
siempre intenta hacer lo obviamente correcto.
La API Message History
en LLM.js
es exactamente igual que el formato del historial de mensajes de OpenAI.
await LLM ( [
{ role : "user" , content : "remember the secret codeword is blue" } ,
{ role : "assistant" , content : "OK I will remember" } ,
{ role : "user" , content : "what is the secret codeword I just told you?" } ,
] ) ; // Response: blue
Opciones
role
<string>
: ¿Quién dice el content
? user
, system
o assistant
content
<string>
: contenido de texto del mensaje LLM.js
proporciona un comando llm
útil para su shell. llm
es una forma conveniente de convocar a docenas de LLM y acceder a todo el poder de LLM.js
sin programación.
Acceda a él globalmente instalándolo desde NPM
npm install @themaximalist/llm.js -g
Luego puede llamar al comando llm
desde cualquier lugar de su terminal.
> llm the color of the sky is
blue
Los mensajes se transmiten en tiempo real, por lo que todo es realmente rápido.
También puedes iniciar un --chat
para recordar el historial de mensajes y continuar tu conversación ( Ctrl-C
para salir).
> llm remember the codeword is blue. say ok if you understand --chat
OK, I understand.
> what is the codeword ?
The codeword is blue.
O cambie fácilmente el LLM sobre la marcha:
> llm the color of the sky is --model claude-v2
blue
Ver ayuda con llm --help
Usage: llm [options] [input]
Large Language Model library for OpenAI, Google, Anthropic, Mistral, Groq and LLaMa
Arguments:
input Input to send to LLM service
Options:
-V, --version output the version number
-m, --model < model > Completion Model (default: llamafile)
-s, --system < prompt > System prompt (default: " I am a friendly accurate English speaking chat bot " ) (default: " I am a friendly accurate English speaking chat bot " )
-t, --temperature < number > Model temperature (default 0.8) (default: 0.8)
-c, --chat Chat Mode
-h, --help display help for command
LLM.js
y llm
usan el módulo npm debug
con el espacio de nombres llm.js
Vea los registros de depuración configurando la variable de entorno DEBUG
.
> DEBUG=llm.js * llm the color of the sky is
# debug logs
blue
> export DEBUG=llm.js *
> llm the color of the sky is
# debug logs
blue
LLM.js
tiene muchas pruebas que pueden servir como guía para ver cómo se usa.
El uso de LLM en producción puede ser complicado debido al historial de seguimiento, la limitación de tarifas, la administración de claves API y la forma de cobrar.
Model Deployer es una API frente a LLM.js
, que maneja todos estos detalles y más.
Usarlo es simple, especifique modeldeployer
como servicio y su clave API de Model Deployer como model
.
await LLM ( "hello world" , { service : "modeldeployer" , model : "api-key" } ) ;
También puede configurar configuraciones específicas y, opcionalmente, anular algunas en el cliente.
await LLM ( "the color of the sky is usually" , {
service : "modeldeployer" ,
model : "api-key" ,
endpoint : "https://example.com/api/v1/chat" ,
max_tokens : 1 ,
temperature : 0
} ) ;
LLM.js
se puede usar sin Model Deployer, pero si está implementando LLM en producción, es una excelente manera de administrarlos.
LLM.js
ha estado bajo un gran desarrollo mientras que los LLM están cambiando rápidamente. Hemos comenzado a decidirnos por una interfaz estable y documentaremos los cambios aquí.
v0.6.6
– Se agregó compatibilidad con el navegadorv0.6.5
— Se agregó Llama 3 y juntosv0.6.4
- Se agregaron Groq y abort()v0.6.3
– Se agregaron analizadores JSON/XML/Markdown y un controlador de transmisiónv0.6.2
— Solucionar error con la transmisión de Googlev0.6.1
- Se corrigió el error para no agregar respuestas vacíasv0.6.0
— Se agregó Anthropic Claude 3v0.5.9
— Añadido Ollamav0.5.4
— Añadido Google Geminiv0.5.3
— Añadido Mistralv0.5.0
— Sitio web creadov0.4.7
— Herramientas OpenAI, transmisión JSONv0.3.5
- ModelDeployer agregadov0.3.2
— Llamafile agregadov0.2.5
- Antrópico agregado, CLIv0.2.4
— Opciones de chatv0.2.2
— Interfaz unificada LLM(), transmisiónv0.1.2
— Documentos, mensaje del sistemav0.0.1
- Creado LLM.js con soporte OpenAI LLM.js
se utiliza actualmente en los siguientes proyectos:
MIT
Creado por The Maximalist, vea nuestros proyectos de código abierto.