LLumiverse هي واجهة عالمية للتفاعل مع نماذج اللغات الكبيرة، لنظام Typescript/Javascript البيئي. يوفر مكتبة معيارية خفيفة الوزن للتفاعل مع نماذج LLM المختلفة ومنصات التنفيذ.
إنه يركز فقط على تجريد LLMs ومنصات التنفيذ الخاصة بها، ولا يوفر قوالب سريعة، أو RAG، أو سلاسل، مما يتيح لك اختيار أفضل أداة للوظيفة.
منصات LLM التالية مدعومة في الإصدار الحالي:
مزود | انتهاء | محادثة | قائمة النماذج | متعدد الوسائط | الكون المثالى |
---|---|---|---|---|---|
AWS الأساس | ✅ | ✅ | ✅ | ✅ | ✅ |
أزور أوبن إيه آي | ✅ | ✅ | ✅ | ✅ | ✅ |
جوجل فيرتكس الذكاء الاصطناعي | ✅ | ✅ | لا يوجد | ✅ | حسب الطلب |
جروك | ✅ | ✅ | ✅ | لا يوجد | لا يوجد |
HuggingFace الاستدلال نقاط النهاية | ✅ | ✅ | لا يوجد | لا يوجد | لا يوجد |
آي بي إم واتسون إكس | ✅ | ✅ | ✅ | لا يوجد | حسب الطلب |
ميسترال منظمة العفو الدولية | ✅ | ✅ | ✅ | لا يوجد | حسب الطلب |
OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ |
تكرار | ✅ | ✅ | ✅ | لا يوجد | ✅ |
معا منظمة العفو الدولية | ✅ | ✅ | ✅ | لا يوجد | حسب الطلب |
يمكن بسهولة إضافة إمكانات ومنصة جديدة عن طريق إنشاء برنامج تشغيل جديد للنظام الأساسي.
@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"
} ) ;
في هذا المثال، سنقوم بإنشاء مثيل لبرنامج تشغيل Bedrock باستخدام بيانات الاعتماد من ملف بيانات الاعتماد المشتركة (على سبيل المثال ~/.aws/credentials). تعرف على المزيد حول كيفية إعداد بيانات اعتماد 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
ولكن له أسبقية أكبر على الرسائل الأخرى. وبالتالي، فإنه سيتجاوز أي رسالة user
أو system
تقول شيئًا يتعارض مع رسالة safety
.
من أجل تنفيذ موجه، نحتاج أيضًا إلى تحديد نموذج مستهدف، مع إعطاء معرف النموذج المعروف بواسطة LLM الهدف. يمكننا أيضًا تحديد خيارات التنفيذ مثل temperature
و max_tokens
وما إلى ذلك.
في المثال التالي، نفترض مرة أخرى أننا قمنا بالفعل بإنشاء مثيل لبرنامج التشغيل، وهو متاح كمتغير driver
.
ونفترض أيضًا أن معرف النموذج الذي نريد استهدافه متاح كمتغير model
. للحصول على قائمة بالنماذج الموجودة (ومعرفاتها) يمكنك إدراج النموذج كما وضحنا في المثال السابق
فيما يلي مثال لمعرفات الطرازات حسب نوع برنامج التشغيل:
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
. إذا لم تكن عمليات التضمين مدعومة بعد، فسوف يؤدي أسلوب generatorEmbeddings إلى حدوث خطأ.
فيما يلي مثال على استخدام برنامج التشغيل vertexai
. لكي يعمل المثال، تحتاج إلى تحديد متغير env 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 2.0. لا تتردد في استخدامه وفقا لذلك.