LLM.js ist der schnellste Weg, große Sprachmodelle in JavaScript zu verwenden. Es handelt sich um eine einzige einfache Schnittstelle zu Hunderten beliebter LLMs:
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
Merkmale
OpenAI
, Google
, Anthropic
, Mistral
, Groq
, Llamafile
, Ollama
, Together
)temperature
, max_tokens
, seed
, ...)llm
-Befehl für Ihre Shell Installieren Sie LLM.js
von NPM:
npm install @themaximalist/llm.js
Das Einrichten von LLMs ist einfach – stellen Sie einfach sicher, dass Ihr API-Schlüssel in Ihrer Umgebung festgelegt ist
export OPENAI_API_KEY=...
export ANTHROPIC_API_KEY=...
export MISTRAL_API_KEY=...
export GOOGLE_API_KEY=...
export GROQ_API_KEY=...
export TOGETHER_API_KEY=...
Stellen Sie bei lokalen Modellen wie „llamafile“ und „Ollama“ sicher, dass eine Instanz ausgeführt wird.
Der einfachste Weg, LLM.js
aufzurufen, ist als async function
.
const LLM = require ( "@themaximalist/llm.js" ) ;
await LLM ( "hello" ) ; // Response: hi
Dadurch wird eine einmalige Anfrage ausgelöst und kein Verlauf gespeichert.
Initialisieren Sie eine LLM-Instanz, um den Nachrichtenverlauf aufzubauen.
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
Streaming bietet ein besseres Benutzererlebnis, indem es sofort Ergebnisse zurückgibt, und es ist so einfach wie die Übergabe von {stream: true}
als Option.
const stream = await LLM ( "the color of the sky is" , { stream : true } ) ;
for await ( const message of stream ) {
process . stdout . write ( message ) ;
}
Manchmal ist es hilfreich, den Stream in Echtzeit zu verwalten und ihn auch zu verarbeiten, wenn er vollständig ist. Zum Beispiel die Bereitstellung von Echtzeit-Streaming im Chat und das anschließende Parsen semantischer Codeblöcke am Ende.
LLM.js
macht dies mit einer optionalen stream_handler
Option einfach.
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"]
Anstatt den Stream als Generator zurückzugeben, wird er an stream_handler
übergeben. Die Antwort von LLM.js
ist die gesamte Antwort, die wie gewohnt analysiert oder verarbeitet werden kann.
LLM.js
unterstützt das JSON-Schema für OpenAI und LLaMa. Sie können JSON mit jedem LLM-Modell anfordern, aber die Verwendung des JSON-Schemas erzwingt die Ausgaben.
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" } ) ;
Verschiedene Modelle verwenden unterschiedliche Formate (JSON-Schema, BNFS), daher konvertiert LLM.js
automatisch zwischen diesen.
Beachten Sie, dass das JSON-Schema immer noch ungültiges JSON erzeugen kann, beispielsweise wenn es max_tokens
überschreitet.
Erstellen Sie mit llm.system(input)
Agenten, die sich auf bestimmte Aufgaben spezialisieren.
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)
Beachten Sie, dass OpenAI darauf hingewiesen hat, dass Systemeingabeaufforderungen möglicherweise nicht so effektiv sind wie Benutzereingabeaufforderungen, die LLM.js
mit llm.user(input)
unterstützt.
LLM.js
unterstützt einfache Zeichenfolgen-Eingabeaufforderungen, aber auch den vollständigen Nachrichtenverlauf. Dies ist besonders hilfreich, um LLMs präziser zu steuern.
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
Das OpenAI-Nachrichtenformat wird verwendet und im laufenden Betrieb für bestimmte Dienste konvertiert, die ein anderes Format verwenden (wie Google, Mixtral und LLaMa).
LLM.js
unterstützt die beliebtesten großen Sprachmodelle, einschließlich
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
kann den LLM-Anbieter anhand des Modells erraten, oder Sie können ihn explizit angeben.
// 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" } ) ;
Die Möglichkeit, schnell zwischen LLMs wechseln zu können, verhindert, dass Sie sich darauf einlassen.
LLM.js
wird mit einigen hilfreichen Parsern geliefert, die mit jedem LLM funktionieren. Diese unterscheiden sich von der typischen JSON-Formatierung mit tool
und schema
, die einige LLMs (z. B. von OpenAI) unterstützen.
JSON-Analyse
const colors = await LLM ( "Please return the primary colors in a JSON array" , {
parser : LLM . parsers . json
} ) ;
// ["red", "green", "blue"]
Parsen von Markdown-Codeblöcken
const story = await LLM ( "Please return a story wrapped in a Markdown story code block" , {
parser : LLM . parsers . codeBlock ( "story" )
} ) ;
// A long time ago...
XML-Analyse
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>....
Hinweis: OpenAI funktioniert am besten mit Markdown und JSON, während Anthropic am besten mit XML-Tags funktioniert.
Die LLM.js
-API bietet eine einfache Schnittstelle zu Dutzenden großer Sprachmodelle.
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
} ) ;
Dieselbe API wird in der Kurzschnittstelle von LLM.js
unterstützt und als Funktion aufgerufen:
await LLM ( input , options ) ;
Eingabe (erforderlich)
input
<string>
oder Array
: Eingabeaufforderung für LLM. Kann eine Textzeichenfolge oder ein Array von Objekten im Message History
sein.Optionen
Alle Konfigurationsparameter sind optional. Einige Konfigurationsoptionen sind nur bei bestimmten Modellen verfügbar und werden unten aufgeführt.
service
<string>
: Zu verwendender LLM-Dienst. Der Standardwert ist llamafile
.model
<string>
: Explizites LLM zur Verwendung. Standardmäßig wird service
Standardmodell verwendet.max_tokens
<int>
: Maximale Länge der Token-Antwort. Kein Standard.temperature
<float>
: „Kreativität“ eines Modells. 0
führt normalerweise zu deterministischeren Ergebnissen, und höhere Werte ab 1
führen zu weniger deterministischen Ergebnissen. Kein Standard.seed
<int>
: Erhalten Sie deterministischere Ergebnisse. Kein Standard. Unterstützt von openai
, llamafile
und mistral
.stream
<bool>
: Ergebnisse sofort zurückgeben, anstatt auf die vollständige Antwort zu warten. Der Standardwert ist false
.stream_handler
<function>
: Optionale Funktion, die aufgerufen wird, wenn ein Stream neuen Inhalt empfängt. Der Funktion wird der String-Block übergeben.schema
<object>
: JSON-Schemaobjekt zur Steuerung von LLM zur Generierung von JSON. Kein Standard. Unterstützt von openai
und llamafile
.tool
<object>
: Weisen Sie LLM an, ein Tool zu verwenden, das für explizitere JSON-Schemas und die Erstellung dynamischer Apps nützlich ist. Kein Standard. Unterstützt von openai
.parser
<function>
: Behandelt die Formatierung und Struktur des zurückgegebenen Inhalts. Kein Standard.messages
<array>
: Array des Nachrichtenverlaufs, verwaltet von LLM.js
– kann aber referenziert und geändert werden.options
<object>
: Optionskonfiguration, die beim Start festgelegt wurde, aber dynamisch geändert werden kann.async send(options=<object>)
Sendet den aktuellen Message History
mit den angegebenen options
an den aktuellen LLM
. Diese lokalen Optionen überschreiben die globalen Standardoptionen.
Die Antwort wird automatisch zum Message History
hinzugefügt.
await llm . send ( options ) ;
async chat(input=<string>, options=<object>)
Fügt die input
zum aktuellen Message History
hinzu und send
Anrufe mit den aktuellen options
.
Gibt die Antwort direkt an den Benutzer zurück und aktualisiert gleichzeitig Message History
.
const response = await llm . chat ( "hello" ) ;
console . log ( response ) ; // hi
abort()
Bricht einen laufenden Stream ab. Löst einen AbortError
aus.
user(input=<string>)
Fügt eine Nachricht vom user
zum Message History
hinzu.
llm . user ( "My favorite color is blue. Remember that" ) ;
system(input=<string>)
Fügt eine Nachricht vom system
zum Message History
hinzu. Dies ist normalerweise die erste Nachricht.
llm . system ( "You are a friendly AI chat bot..." ) ;
assistant(input=<string>)
Fügt eine Nachricht vom assistant
zum Message History
hinzu. Dies ist typischerweise eine Reaktion der KI oder eine Möglichkeit, eine zukünftige Reaktion zu steuern.
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>
: Liste der Standard LLM.js
Parser<blockType>
)( <content>
) <function>
– Analysiert einen Markdown-Codeblock<content>
) <function>
– Analysiert den gesamten JSON- oder einen Markdown-JSON-Codeblock<tag>
)( <content>
) <function>
– Analysieren Sie das XML-Tag aus dem AntwortinhaltserviceForModel(model)
Geben Sie den LLM service
für ein bestimmtes Modell zurück.
LLM . serviceForModel ( "gpt-4-turbo-preview" ) ; // openai
modelForService(service)
Gibt das Standard-LLM für einen service
zurück.
LLM . modelForService ( "openai" ) ; // gpt-4-turbo-preview
LLM . modelForService ( LLM . OPENAI ) ; // gpt-4-turbo-preview
Antwort
LLM.js
gibt Ergebnisse von llm.send()
und llm.chat()
zurück, typischerweise den String-Inhalt vom LLM, der Ihre Eingabeaufforderung vervollständigt.
await LLM ( "hello" ) ; // "hi"
Wenn Sie jedoch schema
und tools
verwenden, gibt LLM.js
normalerweise ein JSON-Objekt zurück.
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"] }
Und durch die Übergabe von {stream: true}
in options
gibt LLM.js
einen Generator zurück und beginnt sofort mit der Bereitstellung von Ergebnissen.
const stream = await LLM ( "Once upon a time" , { stream : true } ) ;
for await ( const message of stream ) {
process . stdout . write ( message ) ;
}
Die Antwort basiert auf dem, was Sie vom LLM verlangen, und LLM.js
versucht immer, das offensichtlich Richtige zu tun.
Die Message History
API in LLM.js
ist genau das gleiche wie das OpenAI-Nachrichtenverlaufsformat.
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
Optionen
role
<string>
: Wer sagt den content
? user
, system
oder assistant
content
<string>
: Textinhalt der Nachricht LLM.js
bietet einen nützlichen llm
Befehl für Ihre Shell. llm
ist eine bequeme Möglichkeit, Dutzende von LLMs aufzurufen und ohne Programmierung auf die volle Leistungsfähigkeit von LLM.js
zuzugreifen.
Greifen Sie global darauf zu, indem Sie über NPM installieren
npm install @themaximalist/llm.js -g
Dann können Sie den Befehl llm
von überall in Ihrem Terminal aufrufen.
> llm the color of the sky is
blue
Nachrichten werden in Echtzeit zurückgesendet, sodass alles sehr schnell geht.
Sie können auch einen --chat
initiieren, um den Nachrichtenverlauf zu speichern und Ihre Konversation fortzusetzen ( Ctrl-C
zum Beenden).
> llm remember the codeword is blue. say ok if you understand --chat
OK, I understand.
> what is the codeword ?
The codeword is blue.
Oder ändern Sie das LLM ganz einfach im Handumdrehen:
> llm the color of the sky is --model claude-v2
blue
Siehe Hilfe zu 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
und llm
verwenden das debug
NPM-Modul mit dem Namespace llm.js
Zeigen Sie Debug-Protokolle an, indem Sie die Umgebungsvariable DEBUG
festlegen.
> 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
verfügt über zahlreiche Tests, die als Leitfaden für die Verwendung dienen können.
Der Einsatz von LLMs in der Produktion kann aufgrund der Nachverfolgung des Verlaufs, der Ratenbegrenzung, der Verwaltung von API-Schlüsseln und der Berechnung der Gebühren schwierig sein.
Model Deployer ist eine API vor LLM.js
– die all diese Details und mehr verwaltet.
Die Verwendung ist einfach: Geben Sie modeldeployer
als Dienst und Ihren API-Schlüssel von Model Deployer als model
an.
await LLM ( "hello world" , { service : "modeldeployer" , model : "api-key" } ) ;
Sie können auch bestimmte Einstellungen einrichten und optional einige auf dem Client überschreiben.
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
kann ohne Model Deployer verwendet werden, aber wenn Sie LLMs in der Produktion bereitstellen, ist es eine hervorragende Möglichkeit, sie zu verwalten.
LLM.js
wurde intensiv weiterentwickelt, während sich LLMs schnell ändern. Wir haben mit der Festlegung einer stabilen Schnittstelle begonnen und werden die Änderungen hier dokumentieren.
v0.6.6
– Browserunterstützung hinzugefügtv0.6.5
– Llama 3 und Together hinzugefügtv0.6.4
– Groq und abort() hinzugefügtv0.6.3
– JSON/XML/Markdown-Parser und ein Stream-Handler hinzugefügtv0.6.2
– Fehler beim Google-Streaming behobenv0.6.1
– Fehler behoben, um keine leeren Antworten hinzuzufügenv0.6.0
– Anthropic Claude 3 hinzugefügtv0.5.9
– Ollama hinzugefügtv0.5.4
– Google Gemini hinzugefügtv0.5.3
– Mistral hinzugefügtv0.5.0
– Website erstelltv0.4.7
– OpenAI Tools, JSON-Streamv0.3.5
– ModelDeployer hinzugefügtv0.3.2
– Llamafile hinzugefügtv0.2.5
– Anthropic, CLI hinzugefügtv0.2.4
– Chat-Optionenv0.2.2
– Einheitliche LLM()-Schnittstelle, Streamingv0.1.2
– Dokumente, Systemaufforderungv0.0.1
– LLM.js mit OpenAI-Unterstützung erstellt LLM.js
wird derzeit in folgenden Projekten verwendet:
MIT
Erstellt von The Maximalist, sehen Sie sich unsere Open-Source-Projekte an.