LLumiverse 是用於與 Typescript/Javascript 生態系統的大型語言模型互動的通用介面。它提供了一個輕量級的模組化庫,用於與各種LLM模型和執行平台進行互動。
它只專注於抽象 LLM 及其執行平台,不提供提示範本、RAG 或鏈,讓您可以選擇最適合工作的工具。
目前版本支援以下LLM平台:
提供者 | 完成 | 聊天 | 型號列表 | 多式聯運 | 微調 |
---|---|---|---|---|---|
AWS 基岩 | ✅ | ✅ | ✅ | ✅ | ✅ |
Azure 開放人工智慧 | ✅ | ✅ | ✅ | ✅ | ✅ |
谷歌頂點人工智慧 | ✅ | ✅ | 不適用 | ✅ | 按要求 |
格羅克 | ✅ | ✅ | ✅ | 不適用 | 不適用 |
HuggingFace 推理端點 | ✅ | ✅ | 不適用 | 不適用 | 不適用 |
IBM沃森X | ✅ | ✅ | ✅ | 不適用 | 按要求 |
米斯特拉爾人工智慧 | ✅ | ✅ | ✅ | 不適用 | 按要求 |
開放人工智慧 | ✅ | ✅ | ✅ | ✅ | ✅ |
複製 | ✅ | ✅ | ✅ | 不適用 | ✅ |
一起人工智慧 | ✅ | ✅ | ✅ | 不適用 | 按要求 |
透過為平台創建新的驅動程序,可以輕鬆添加新的功能和平台。
@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"
中的任何一個。 "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
驅動程式的範例。為了讓範例正常運作,您需要定義GOOGLE_APPLICATION_CREDENTIALS
環境變數才能存取您的 gcloud 項目
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 獲得許可。請隨意相應地使用它。