LLumiverse ist eine universelle Schnittstelle für die Interaktion mit großen Sprachmodellen für das Typescript/Javascript-Ökosystem. Es bietet eine leichtgewichtige modulare Bibliothek für die Interaktion mit verschiedenen LLM-Modellen und Ausführungsplattformen.
Es konzentriert sich ausschließlich auf die Abstraktion von LLMs und ihren Ausführungsplattformen und bietet keine Prompt-Vorlagen, RAGs oder Ketten, sodass Sie das beste Tool für die Aufgabe auswählen können.
Folgende LLM-Plattformen werden in der aktuellen Version unterstützt:
Anbieter | Fertigstellung | Chatten | Modellliste | Multimodal | Feinabstimmung |
---|---|---|---|---|---|
AWS-Grundgestein | ✅ | ✅ | ✅ | ✅ | ✅ |
Azure OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ |
Google Vertex AI | ✅ | ✅ | N / A | ✅ | Auf Wunsch |
Groq | ✅ | ✅ | ✅ | N / A | N / A |
HuggingFace-Inferenzendpunkte | ✅ | ✅ | N / A | N / A | N / A |
IBM WatsonX | ✅ | ✅ | ✅ | N / A | Auf Wunsch |
Mistral-KI | ✅ | ✅ | ✅ | N / A | Auf Wunsch |
OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ |
Replizieren | ✅ | ✅ | ✅ | N / A | ✅ |
Gemeinsam KI | ✅ | ✅ | ✅ | N / A | Auf Wunsch |
Neue Funktionen und Plattformen können einfach hinzugefügt werden, indem ein neuer Treiber für die Plattform erstellt wird.
@llumiverse/core
und @llumiverse/drivers
npm install @llumiverse/core @llumiverse/drivers
@llumiverse/core
installieren npm install @llumiverse/core
@llumiverse/core
installieren npm install @llumiverse/core
Zunächst müssen Sie eine Treiberinstanz für die Ziel-LLM-Plattform instanziieren, mit der Sie ebenfalls interagieren möchten. Jeder Treiber akzeptiert bei der Instanziierung seinen eigenen Parametersatz.
import { OpenAIDriver } from "@llumiverse/drivers" ;
// create an instance of the OpenAI driver
const driver = new OpenAIDriver ( {
apiKey : "YOUR_OPENAI_API_KEY"
} ) ;
In diesem Beispiel instanziieren wir den Bedrock-Treiber mithilfe von Anmeldeinformationen aus der Shared Credentials-Datei (z. B. ~/.aws/credentials). Erfahren Sie mehr darüber, wie Sie AWS-Anmeldeinformationen im Knoten einrichten.
import { BedrockDriver } from "@llumiverse/drivers" ;
const driver = new BedrockDriver ( {
region : 'us-west-2'
} ) ;
Damit das folgende Beispiel funktioniert, müssen Sie eine Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS
definieren.
import { VertexAIDriver } from "@llumiverse/drivers" ;
const driver = new VertexAIDriver ( {
project : 'YOUR_GCLOUD_PROJECT' ,
region : 'us-central1'
} ) ;
import { ReplicateDriver } from "@llumiverse/drivers" ;
const driver = new ReplicateDriver ( {
apiKey : "YOUR_REPLICATE_API_KEY"
} ) ;
import { TogetherAIDriver } from "@llumiverse/drivers" ;
const driver = new TogetherAIDriver ( {
apiKey : "YOUR_TOGETHER_AI_API_KEY"
} ) ;
import { HuggingFaceIEDriver } from "@llumiverse/drivers" ;
const driver = new HuggingFaceIEDriver ( {
apiKey : "YOUR_HUGGINGFACE_API_KEY" ,
endpoint_url : "YOUR_HUGGINGFACE_ENDPOINT" ,
} ) ;
Sobald Sie einen Treiber instanziiert haben, können Sie die verfügbaren Modelle auflisten. Einige Treiber akzeptieren ein Argument für die listModel
-Methode, um nach passenden Modellen zu suchen. Einige Treiber wie zum Beispiel replicate
listen einen vorab ausgewählten Satz von Modellen auf. Um andere Modelle aufzulisten, müssen Sie eine Suche durchführen, indem Sie eine Textabfrage als Argument angeben.
Im folgenden Beispiel gehen wir davon aus, dass wir bereits einen Treiber instanziiert haben, der als driver
zur Verfügung steht.
import { AIModel } from "@llumiverse/core" ;
// instantiate the desired driver
const driver = createDriverInstance ( ) ;
// list available models on the target LLM. (some drivers may require a search parameter to discover more models)
const models : AIModel [ ] = await driver . listModels ( ) ;
console . log ( '# Available Models:' ) ;
for ( const model of models ) {
console . log ( ` ${ model . name } [ ${ model . id } ]` ) ;
}
Um eine Eingabeaufforderung auszuführen, müssen wir eine Eingabeaufforderung im LLumiverse-Format erstellen und sie an die execute
des Treibers übergeben.
Das Eingabeaufforderungsformat ist dem OpenAI-Eingabeaufforderungsformat sehr ähnlich. Es handelt sich um ein Array von Nachrichten mit einer content
und einer role
. Die Rollen können beliebig sein "user" | "system" | "assistant" | "safety"
.
Die safety
ähnelt der system
, hat jedoch eine größere Priorität gegenüber den anderen Meldungen. Dadurch werden alle user
oder system
überschrieben, die im Widerspruch zur safety
stehen.
Um eine Eingabeaufforderung auszuführen, müssen wir auch ein Zielmodell angeben, vorausgesetzt, eine Modell-ID ist dem Ziel-LLM bekannt. Wir können auch Ausführungsoptionen wie temperature
, max_tokens
usw. angeben.
Im folgenden Beispiel gehen wir wiederum davon aus, dass wir bereits einen Treiber instanziiert haben, der als driver
zur Verfügung steht.
Außerdem gehen wir davon aus, dass die Modell-ID, auf die wir abzielen möchten, als model
verfügbar ist. Um eine Liste der vorhandenen Modelle (und ihrer IDs) zu erhalten, können Sie das Modell wie im vorherigen Beispiel gezeigt auflisten
Hier ist ein Beispiel für Modell-IDs je nach Fahrertyp:
gpt-3.5-turbo
arn:aws:bedrock:us-west-2::foundation-model/cohere.command-text-v14
text-bison
meta/llama-2-70b-chat:02e509c789964a7ea8736978a43525956ef40397be9033abf9fd2badfe68c9e3
mistralai/Mistral-7B-instruct-v0.1
aws-mistral-7b-instruct-v0-1-015
import { PromptRole , PromptSegment } from "@llumiverse/core" ;
// instantiate the desired driver
const driver = createDriverInstance ( ) ;
const model = "the-model-id" ; // change with your desired model ID
// create the prompt.
const prompt : PromptSegment [ ] = [
{
role : PromptRole . user ,
content : 'Please, write a short story about winter in Paris, in no more than 512 characters.'
}
]
// execute a model and wait for the response
console . log ( `n# Executing prompt on ${ model } model: ${ prompt } ` ) ;
const response = await driver . execute ( prompt , {
model ,
temperature : 0.6 ,
max_tokens : 1024
} ) ;
console . log ( 'n# LLM response:' , response . result )
console . log ( '# Response took' , response . execution_time , 'ms' )
console . log ( '# Token usage:' , response . token_usage ) ;
In diesem Beispiel führen wir eine Eingabeaufforderung aus und streamen das Ergebnis, um es auf der Konsole anzuzeigen, während es von der Ziel-LLM-Plattform zurückgegeben wird.
Beachten Sie , dass einige Modelle kein Streaming unterstützen. In diesem Fall simuliert der Treiber ein Streaming mit einem einzelnen Textblock, der der gesamten Antwort entspricht.
import { PromptRole , PromptSegment } from "@llumiverse/core" ;
// instantiate the desired driver
const driver = createDriverInstance ( ) ;
const model = "the-model-id" ; // change with your desired model ID
// create the prompt.
const prompt : PromptSegment [ ] = [
{
role : PromptRole . user ,
content : 'Please, write a short story about winter in Paris, in no more than 512 characters.'
}
]
// execute the prompt in streaming mode
console . log ( `n# Executing prompt on model ${ model } in streaming mode: ${ prompt } ` ) ;
const stream = await driver . stream ( prompt , {
model ,
temperature : 0.6 ,
max_tokens : 1024
} ) ;
// print the streaming response as it comes
for await ( const chunk of stream ) {
process . stdout . write ( chunk ) ;
}
// when the response stream is consumed we can get the final response using stream.completion field.
const streamingResponse = stream . completion ! ;
console . log ( 'n# LLM response:' , streamingResponse . result )
console . log ( '# Response took' , streamingResponse . execution_time , 'ms' )
console . log ( '# Token usage:' , streamingResponse . token_usage ) ;
LLumiverse-Treiber stellen eine Methode zum Generieren von Vektoreinbettungen für einen bestimmten Text bereit. Treiber, die Einbettungen ab Version 0.10.0 unterstützen, sind bedrock
, openai
, vertexai
. Wenn Einbettungen noch nicht unterstützt werden, gibt die Methode „generateEmbeddings“ einen Fehler aus.
Hier ist ein Beispiel für die Verwendung des vertexai
Treibers. Damit das Beispiel funktioniert, müssen Sie eine Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS
definieren, um auf Ihr gcloud-Projekt zugreifen zu können
import { VertexAIDriver } from "@llumiverse/drivers" ;
const driver = new VertexAIDriver ( {
project : 'your-project-id' ,
region : 'us-central1' // your zone
} ) ;
const r = await vertex . generateEmbeddings ( { content : "Hello world!" } ) ;
// print the vector
console . log ( 'Embeddings: ' , v . values ) ;
Das Ergebnisobjekt enthält den Vektor als values
, das zum Generieren der Einbettungen verwendete model
und einen optionalen token_count
, der, sofern definiert, die Tokenanzahl des Eingabetextes ist. Abhängig vom Treiber kann das Ergebnis zusätzliche Eigenschaften enthalten.
Sie können auch ein bestimmtes zu verwendendes Modell angeben oder andere vom Treiber unterstützte Parameter übergeben.
Beispiel:
import { VertexAIDriver } from "@llumiverse/drivers" ;
const driver = new VertexAIDriver ( {
project : 'your-project-id' ,
region : 'us-central1' // your zone
} ) ;
const r = await vertex . generateEmbeddings ( {
content : "Hello world!" ,
model : "textembedding-gecko@002" ,
task_type : "SEMANTIC_SIMILARITY"
} ) ;
// print the vector
console . log ( 'Embeddings: ' , v . values ) ;
Der Parameter task_type
ist spezifisch für das textembedding-gecko-Modell.
Beiträge sind willkommen! Weitere Informationen finden Sie unter CONTRIBUTING.md.
Llumivers ist unter der Apache-Lizenz 2.0 lizenziert. Fühlen Sie sich frei, es entsprechend zu verwenden.