Floneum ทำให้ง่ายต่อการพัฒนาแอพพลิเคชั่นที่ใช้โมเดล AI ที่ผ่านการฝึกอบรมมาก่อน มีสองโครงการหลักใน monorepo นี้:
Kalosm เป็นอินเทอร์เฟซที่ง่ายสำหรับรุ่นที่ผ่านการฝึกอบรมมาก่อนในสนิมที่ด้านหลัง floneum มันทำให้ง่ายต่อการโต้ตอบกับรุ่นที่ผ่านการฝึกอบรมภาษาเสียงและภาพ
Kalosm รองรับรุ่นที่หลากหลาย นี่คือรายการของโมเดลที่รองรับในปัจจุบัน:
| แบบอย่าง | รูปแบบ | ขนาด | คำอธิบาย | ที่ได้รับปริมาณ | Cuda + Metal เร่งความเร็ว | ตัวอย่าง |
|---|---|---|---|---|---|---|
| ลาม่า | ข้อความ | 1B-70B | รูปแบบภาษาวัตถุประสงค์ทั่วไป | ลามะ 3 แชท | ||
| ผิดพลาด | ข้อความ | 7-13b | รูปแบบภาษาวัตถุประสงค์ทั่วไป | แชท mistral | ||
| พี | ข้อความ | 2b-4b | รูปแบบภาษาที่เน้นการใช้เหตุผลขนาดเล็ก | phi 3 แชท | ||
| กระซิบ | เสียง | 20MB-1GB | รูปแบบการถอดเสียง | การถอดความเสียงกระซิบสด | ||
| Rwuerstchen | ภาพ | 5GB | รูปแบบการสร้างภาพ | การสร้างภาพ Rwuerstchen | ||
| ทรีธี | ภาพ | 3GB | รูปแบบการจดจำอักขระออพติคอล | การจดจำข้อความ | ||
| แบ่งส่วนอะไรก็ได้ | ภาพ | 50MB-400MB | รูปแบบการแบ่งส่วนภาพ | การแบ่งส่วนภาพ | ||
| เบิร์ต | ข้อความ | 100MB-1GB | รูปแบบการฝังข้อความ | การค้นหาความหมาย |
Kalosm ยังรองรับสาธารณูปโภคที่หลากหลายเกี่ยวกับรุ่นที่ผ่านการฝึกอบรมมาก่อน เหล่านี้รวมถึง:
Kalosm ใช้ไลบรารีการเรียนรู้ของเครื่องเทียนเพื่อเรียกใช้โมเดลใน Pure Rust รองรับโมเดลเชิงปริมาณและเร่งความเร็วพร้อมประสิทธิภาพในการเทียบเท่ากับ llama.cpp :
MISTRAL 7B
| เครื่องเร่งความเร็ว | Kalosm | llama.cpp |
|---|---|---|
| โลหะ (M2) | 39 t/s | 27 T/s |
Kalosm รองรับการสร้างที่มีโครงสร้างด้วยตัวแยกวิเคราะห์โดยพลการ มันใช้เอ็นจิ้นตัวแยกวิเคราะห์แบบกำหนดเองและการเร่งความเร็วและการเร่งโครงสร้างที่ตระหนักถึงโครงสร้างเพื่อให้การสร้างโครงสร้างเร็วกว่าการสร้างข้อความที่ไม่สามารถควบคุมได้ คุณสามารถใช้สนิมชนิดใดก็ได้และเพิ่ม #[derive(Parse, Schema)] เพื่อให้สามารถใช้งานได้กับรุ่นที่มีโครงสร้าง:
use kalosm :: language :: * ;
/// A fictional character
# [ derive ( Parse , Schema , Clone , Debug ) ]
struct Character {
/// The name of the character
# [ parse ( pattern = "[A-Z][a-z]{2,10} [A-Z][a-z]{2,10}" ) ]
name : String ,
/// The age of the character
# [ parse ( range = 1 ..= 100 ) ]
age : u8 ,
/// A description of the character
# [ parse ( pattern = "[A-Za-z ]{40,200}" ) ]
description : String ,
}
# [ tokio :: main ]
async fn main ( ) {
// First create a model. Chat models tend to work best with structured generation
let model = Llama :: phi_3 ( ) . await . unwrap ( ) ;
// Then create a task with the parser as constraints
let task = Task :: builder_for :: < [ Character ; 10 ] > ( "You generate realistic JSON placeholders for characters" )
. build ( ) ;
// Finally, run the task
let mut stream = task . run ( "Create a list of random characters" , & model ) ;
stream . to_std_out ( ) . await . unwrap ( ) ;
let character = stream . await . unwrap ( ) ;
println ! ( "{character:?}" ) ;
}นอกเหนือจาก Regex คุณสามารถให้ไวยากรณ์ของคุณเองเพื่อสร้างข้อมูลที่มีโครงสร้าง สิ่งนี้ช่วยให้คุณ จำกัด การตอบสนองต่อโครงสร้างใด ๆ ที่คุณต้องการรวมถึงโครงสร้างข้อมูลที่ซับซ้อนเช่น JSON, HTML และ XML
quickstart นี้จะช่วยให้คุณทำงานด้วย chatbot ง่าย ๆ เริ่มต้นกันเถอะ!
คำแนะนำที่สมบูรณ์ยิ่งขึ้นสำหรับ Kalosm มีอยู่ในเว็บไซต์ Kalosm และตัวอย่างมีอยู่ในโฟลเดอร์ตัวอย่าง
cargo new kalosm-hello-world
cd ./kalosm-hello-world # You can use `--features language,metal`, `--features language,cuda`, or `--features language,mkl` if your machine supports an accelerator
cargo add kalosm --features language
cargo add tokio --features fullmain.rs ของคุณ use kalosm :: language :: * ;
# [ tokio :: main ]
async fn main ( ) -> Result < ( ) , Box < dyn std :: error :: Error > > {
let model = Llama :: phi_3 ( ) . await ? ;
let mut chat = Chat :: builder ( model )
. with_system_prompt ( "You are a pirate called Blackbeard" )
. build ( ) ;
loop {
chat . add_message ( prompt_input ( " n > " ) ? )
. to_std_out ( )
. await ? ;
}
}cargo run --releaseหากคุณสนใจในโครงการใดโครงการหนึ่งคุณสามารถเข้าร่วม Discord เพื่อหารือเกี่ยวกับโครงการและรับความช่วยเหลือ