LLumiverse เป็นอินเทอร์เฟซสากลสำหรับการโต้ตอบกับโมเดลภาษาขนาดใหญ่ สำหรับระบบนิเวศของ Typescript/Javascript มีไลบรารีโมดูลาร์น้ำหนักเบาสำหรับการโต้ตอบกับโมเดล LLM และแพลตฟอร์มการดำเนินการต่างๆ
โดยมุ่งเน้นที่นามธรรม LLM และแพลตฟอร์มการดำเนินการเท่านั้น และไม่มีการสร้างเทมเพลตหรือ 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"
ใดก็ได้ "user" | "system" | "assistant" | "safety"
.
บทบาท safety
จะคล้ายกับ system
แต่มีความสำคัญมากกว่าข้อความอื่นๆ ดังนั้นมันจะแทนที่ข้อความของ user
หรือ system
ที่พูดอะไรที่ขัดแย้งกับข้อความ safety
เพื่อดำเนินการพร้อมท์ เราต้องระบุโมเดลเป้าหมายด้วย โดยระบุรหัสโมเดลที่ LLM เป้าหมายรู้จัก นอกจากนี้เรายังอาจระบุตัวเลือกการดำเนินการเช่น 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 เปิดเผยวิธีการสร้างการฝังเวกเตอร์สำหรับข้อความที่กำหนด ไดรเวอร์ที่รองรับการฝังตั้งแต่เวอร์ชัน 0.10.0 ได้แก่ bedrock
, openai
, vertexai
หากการฝังยังไม่รองรับเมธอด GenerateEmbeddings จะแสดงข้อผิดพลาด
นี่คือตัวอย่างการใช้ไดรเวอร์ 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 License 2.0 รู้สึกอิสระที่จะใช้มันตามนั้น