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 获得许可。请随意相应地使用它。