LLumiverse は、Typescript/JavaScript エコシステム向けの大規模言語モデルと対話するためのユニバーサル インターフェイスです。さまざまな LLM モデルおよび実行プラットフォームと対話するための軽量のモジュラー ライブラリを提供します。
LLM とその実行プラットフォームの抽象化のみに焦点を当てており、ジョブに最適なツールを選択できるようにするプロンプト テンプレート、RAG、またはチェーンは提供しません。
現在のバージョンでは、次の LLM プラットフォームがサポートされています。
プロバイダー | 完了 | チャット | モデルリスト | マルチモーダル | 微調整 |
---|---|---|---|---|---|
AWS の基盤 | ✅ | ✅ | ✅ | ✅ | ✅ |
Azure OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ |
Google バーテックス AI | ✅ | ✅ | 該当なし | ✅ | リクエストに応じて |
グロク | ✅ | ✅ | ✅ | 該当なし | 該当なし |
HuggingFace 推論エンドポイント | ✅ | ✅ | 該当なし | 該当なし | 該当なし |
IBMワトソンX | ✅ | ✅ | ✅ | 該当なし | リクエストに応じて |
ミストラルAI | ✅ | ✅ | ✅ | 該当なし | リクエストに応じて |
OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ |
複製する | ✅ | ✅ | ✅ | 該当なし | ✅ |
一緒にAI | ✅ | ✅ | ✅ | 該当なし | リクエストに応じて |
新しい機能とプラットフォームは、プラットフォーム用の新しいドライバーを作成することで簡単に追加できます。
@llumiverse/core
および@llumiverse/drivers
をインストールします。 npm install @llumiverse/core @llumiverse/drivers
@llumiverse/core
をインストールするだけで済みます。 npm install @llumiverse/core
@llumiverse/core
をインストールするだけで済みます。 npm install @llumiverse/core
まず、対話するターゲット LLM プラットフォームのドライバー インスタンスをインスタンス化する必要があります。各ドライバーは、インスタンス化時に独自のパラメーターのセットを受け入れます。
import { OpenAIDriver } from "@llumiverse/drivers" ;
// create an instance of the OpenAI driver
const driver = new OpenAIDriver ( {
apiKey : "YOUR_OPENAI_API_KEY"
} ) ;
この例では、共有認証情報ファイル (つまり ~/.aws/credentials) の認証情報を使用して Bedrock ドライバーをインスタンス化します。ノードで AWS 認証情報を設定する方法について詳しくは、こちらをご覧ください。
import { BedrockDriver } from "@llumiverse/drivers" ;
const driver = new BedrockDriver ( {
region : 'us-west-2'
} ) ;
次の例が機能するには、 GOOGLE_APPLICATION_CREDENTIALS
環境変数を定義する必要があります。
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" ,
} ) ;
ドライバーをインスタンス化すると、使用可能なモデルをリストできます。一部のドライバーは、一致するモデルを検索するためにlistModel
メソッドの引数を受け入れます。たとえばreplicate
などの一部のドライバーでは、事前に選択されたモデルのセットがリストされています。他のモデルをリストするには、テキスト クエリを引数として指定して検索を実行する必要があります。
次の例では、 driver
変数として使用できるドライバーがすでにインスタンス化されていると想定しています。
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 } ]` ) ;
}
プロンプトを実行するには、LLumiverse 形式でプロンプトを作成し、それをドライバーのexecute
メソッドに渡す必要があります。
プロンプト形式は、OpenAI プロンプト形式と非常によく似ています。これはcontent
とrole
プロパティを含むメッセージの配列です。役割は"user" | "system" | "assistant" | "safety"
。
safety
役割はsystem
と似ていますが、他のメッセージよりも優先されます。したがって、 safety
メッセージに反することを言っているuser
またはsystem
メッセージは無効になります。
プロンプトを実行するには、ターゲット LLM が認識しているモデル ID を指定して、ターゲット モデルを指定する必要もあります。 temperature
、 max_tokens
などの実行オプションを指定することもできます。
次の例でも、 driver
変数として使用できるドライバーがすでにインスタンス化されていると仮定しています。
また、ターゲットにしたいモデル ID がmodel
変数として利用できることを前提としています。既存のモデル (およびその ID) のリストを取得するには、前の例で示したようにモデルをリストします。
ドライバーの種類に応じたモデル ID の例を次に示します。
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 ) ;
この例では、プロンプトを実行し、ターゲット LLM プラットフォームから返された結果をストリーミングしてコンソールに表示します。
一部のモデルはストリーミングに対応していないので注意してください。その場合、ドライバーは応答全体に対応する単一のテキスト チャンクを使用してストリーミングをシミュレートします。
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 ドライバーは、指定されたテキストのベクトル埋め込みを生成するメソッドを公開します。 v0.10.0 の時点で埋め込みをサポートするドライバーはbedrock
、 openai
、 vertexai
です。埋め込みがまだサポートされていない場合、generateEmbeddings メソッドはエラーをスローします。
ここでは、 vertexai
ドライバーの使用例を示します。この例が機能するには、gcloud プロジェクトにアクセスできるようにGOOGLE_APPLICATION_CREDENTIALS
環境変数を定義する必要があります。
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 ) ;
結果オブジェクトには、 values
プロパティとしてのベクトル、埋め込みの生成に使用されるmodel
、およびオプションのtoken_count
(定義されている場合は入力テキストのトークン数) が含まれます。ドライバーによっては、結果に追加のプロパティが含まれる場合があります。
また、使用する特定のモデルを指定したり、ドライバーでサポートされている他のパラメーターを渡すこともできます。
例:
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 ) ;
task_type
パラメーターは、textembedding-gecko モデルに固有です。
貢献は大歓迎です!詳細については、CONTRIBUTING.md を参照してください。
Llumivers は、Apache License 2.0 に基づいてライセンスされています。状況に応じてご自由にお使いください。