LLumiverse는 Typescript/Javascript 생태계를 위한 대규모 언어 모델과 상호 작용하기 위한 범용 인터페이스입니다. 다양한 LLM 모델 및 실행 플랫폼과 상호 작용하기 위한 경량 모듈식 라이브러리를 제공합니다.
이는 LLM 및 해당 실행 플랫폼 추상화에만 중점을 두고 즉각적인 템플릿이나 RAG 또는 체인을 제공하지 않으므로 작업에 가장 적합한 도구를 선택할 수 있습니다.
현재 버전에서는 다음 LLM 플랫폼이 지원됩니다.
공급자 | 완성 | 채팅 | 모델 목록 | 다중 모드 | 미세 조정 |
---|---|---|---|---|---|
AWS 기반암 | ✅ | ✅ | ✅ | ✅ | ✅ |
Azure OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ |
구글 버텍스 AI | ✅ | ✅ | 해당 없음 | ✅ | 요청에 따라 |
그로크 | ✅ | ✅ | ✅ | 해당 없음 | 해당 없음 |
HuggingFace 추론 엔드포인트 | ✅ | ✅ | 해당 없음 | 해당 없음 | 해당 없음 |
IBM 왓슨X | ✅ | ✅ | ✅ | 해당 없음 | 요청에 따라 |
미스트랄 AI | ✅ | ✅ | ✅ | 해당 없음 | 요청에 따라 |
오픈AI | ✅ | ✅ | ✅ | ✅ | ✅ |
뒤로 젖히다 | ✅ | ✅ | ✅ | 해당 없음 | ✅ |
함께하는 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에 따라 라이센스가 부여됩니다. 그에 따라 자유롭게 사용하십시오.