LLM.js adalah cara tercepat untuk menggunakan Model Bahasa Besar di JavaScript. Ini adalah antarmuka sederhana untuk ratusan LLM populer:
gpt-4
, gpt-4-turbo-preview
, gpt-3.5-turbo
gemini-1.5-pro
, gemini-1.0-pro
, gemini-pro-vision
claude-3-opus
, claude-3-sonnet
, claude-3-haiku
, claude-2.1
, claude-instant-1.2
mixtral-8x7b
, llama2-70b
, gemma-7b-it
llama-3-70b
, llama-3-8b
, nous-hermes-2
, ...mistral-medium
, mistral-small
, mistral-tiny
LLaVa-1.5
, TinyLlama-1.1B
, Phi-2
, ...llama-3
, llama-2
, gemma
, dolphin-phi
, ... await LLM ( "the color of the sky is" , { model : "gpt-4" } ) ; // blue
Fitur
OpenAI
, Google
, Anthropic
, Mistral
, Groq
, Llamafile
, Ollama
, Together
)temperature
, max_tokens
, seed
, ...)llm
perintah untuk shell Anda Instal LLM.js
dari NPM:
npm install @themaximalist/llm.js
Menyiapkan LLM itu mudah—pastikan saja kunci API Anda disetel di lingkungan Anda
export OPENAI_API_KEY=...
export ANTHROPIC_API_KEY=...
export MISTRAL_API_KEY=...
export GOOGLE_API_KEY=...
export GROQ_API_KEY=...
export TOGETHER_API_KEY=...
Untuk model lokal seperti llamafile dan Ollama, pastikan sebuah instance berjalan.
Cara paling sederhana untuk memanggil LLM.js
adalah sebagai async function
.
const LLM = require ( "@themaximalist/llm.js" ) ;
await LLM ( "hello" ) ; // Response: hi
Ini memicu permintaan satu kali, dan tidak menyimpan riwayat apa pun.
Inisialisasi instans LLM untuk membangun riwayat pesan.
const llm = new LLM ( ) ;
await llm . chat ( "what's the color of the sky in hex value?" ) ; // #87CEEB
await llm . chat ( "what about at night time?" ) ; // #222d5a
Streaming memberikan pengalaman pengguna yang lebih baik dengan segera mengembalikan hasil, dan semudah meneruskan {stream: true}
sebagai opsi.
const stream = await LLM ( "the color of the sky is" , { stream : true } ) ;
for await ( const message of stream ) {
process . stdout . write ( message ) ;
}
Terkadang berguna untuk menangani streaming secara real-time dan juga memprosesnya setelah semuanya selesai. Misalnya, menyediakan streaming waktu nyata dalam obrolan, dan kemudian menguraikan blok kode semantik di bagian akhir.
LLM.js
mempermudahnya dengan opsi stream_handler
opsional.
const colors = await LLM ( "what are the common colors of the sky as a flat json array?" , {
model : "gpt-4-turbo-preview" ,
stream : true ,
stream_handler : ( c ) => process . stdout . write ( c ) ,
parser : LLM . parsers . json ,
} ) ;
// ["blue", "gray", "white", "orange", "red", "pink", "purple", "black"]
Alih-alih aliran dikembalikan sebagai generator, aliran diteruskan ke stream_handler
. Respon dari LLM.js
adalah keseluruhan respon yang dapat diurai atau ditangani seperti biasa.
LLM.js
mendukung skema JSON untuk OpenAI dan LLaMa. Anda dapat meminta JSON dengan model LLM apa pun, tetapi menggunakan Skema JSON akan menerapkan output.
const schema = {
"type" : "object" ,
"properties" : {
"colors" : { "type" : "array" , "items" : { "type" : "string" } }
}
}
const obj = await LLM ( "what are the 3 primary colors in JSON format?" , { schema , temperature : 0.1 , service : "openai" } ) ;
Format yang berbeda digunakan oleh model yang berbeda (Skema JSON, BNFS), sehingga LLM.js
mengonversi keduanya secara otomatis.
Catatan, Skema JSON masih dapat menghasilkan JSON yang tidak valid seperti ketika melebihi max_tokens
.
Buat agen yang berspesialisasi pada tugas tertentu menggunakan llm.system(input)
.
const llm = new LLM ( ) ;
llm . system ( "You are a friendly chat bot." ) ;
await llm . chat ( "what's the color of the sky in hex value?" ) ; // Response: sky blue
await llm . chat ( "what about at night time?" ) ; // Response: darker value (uses previous context to know we're asking for a color)
Catatan, OpenAI telah menyarankan bahwa perintah sistem mungkin tidak seefektif perintah pengguna, yang didukung oleh LLM.js
dengan llm.user(input)
.
LLM.js
mendukung perintah string sederhana, tetapi juga riwayat pesan lengkap. Hal ini sangat membantu untuk memandu LLM dengan cara yang lebih tepat.
await LLM ( [
{ role : "user" , content : "remember the secret codeword is blue" } ,
{ role : "assistant" , content : "OK I will remember" } ,
{ role : "user" , content : "what is the secret codeword I just told you?" } ,
] ) ; // Response: blue
Format pesan OpenAI digunakan, dan dikonversi dengan cepat untuk layanan tertentu yang menggunakan format berbeda (seperti Google, Mixtral, dan LLaMa).
LLM.js
mendukung Model Bahasa Besar paling populer, termasuk
gpt-4
, gpt-4-turbo-preview
, gpt-3.5-turbo
gemini-1.0-pro
, gemini-1.5-pro
, gemini-pro-vision
claude-3-sonnet
, claude-3-haiku
, claude-2.1
, claude-instant-1.2
mixtral-8x7b
, llama2-70b
, gemma-7b-it
llama-3-70b
, llama-3-8b
, nous-hermes-2
, ...mistral-medium
, mistral-small
, mistral-tiny
LLaVa 1.5
, Mistral-7B-Instruct
, Mixtral-8x7B-Instruct
, WizardCoder-Python-34B
, TinyLlama-1.1B
, Phi-2
, ...Llama 2
, Mistral
, Code Llama
, Gemma
, Dolphin Phi
, ... LLM.js
dapat menebak penyedia LLM berdasarkan modelnya, atau Anda dapat menentukannya secara eksplisit.
// defaults to Llamafile
await LLM ( "the color of the sky is" ) ;
// OpenAI
await LLM ( "the color of the sky is" , { model : "gpt-4-turbo-preview" } ) ;
// Anthropic
await LLM ( "the color of the sky is" , { model : "claude-2.1" } ) ;
// Mistral AI
await LLM ( "the color of the sky is" , { model : "mistral-tiny" } ) ;
// Groq needs an specific service
await LLM ( "the color of the sky is" , { service : "groq" , model : "mixtral-8x7b-32768" } ) ;
// Google
await LLM ( "the color of the sky is" , { model : "gemini-pro" } ) ;
// Ollama
await LLM ( "the color of the sky is" , { model : "llama2:7b" } ) ;
// Together
await LLM ( "the color of the sky is" , { service : "together" , model : "meta-llama/Llama-3-70b-chat-hf" } ) ;
// Can optionally set service to be specific
await LLM ( "the color of the sky is" , { service : "openai" , model : "gpt-3.5-turbo" } ) ;
Mampu dengan cepat beralih antar LLM mencegah Anda terjebak.
LLM.js
dikirimkan dengan beberapa parser bermanfaat yang berfungsi dengan setiap LLM. Ini terpisah dari pemformatan JSON pada umumnya dengan tool
dan schema
yang didukung oleh beberapa LLM (seperti dari OpenAI).
Penguraian JSON
const colors = await LLM ( "Please return the primary colors in a JSON array" , {
parser : LLM . parsers . json
} ) ;
// ["red", "green", "blue"]
Penguraian Blok Kode Penurunan Harga
const story = await LLM ( "Please return a story wrapped in a Markdown story code block" , {
parser : LLM . parsers . codeBlock ( "story" )
} ) ;
// A long time ago...
Penguraian XML
const code = await LLM ( "Please write a simple website, and put the code inside of a <WEBSITE></WEBSITE> xml tag" {
parser : LLM . parsers . xml ( "WEBSITE" )
} ) ;
// <html>....
Catatan: OpenAI berfungsi paling baik dengan Markdown dan JSON, sedangkan Anthropic berfungsi paling baik dengan tag XML.
LLM.js
API menyediakan antarmuka sederhana untuk puluhan Model Bahasa Besar.
new LLM ( input , { // Input can be string or message history array
service : "openai" , // LLM service provider
model : "gpt-4" , // Specific model
max_tokens : 100 , // Maximum response length
temperature : 1.0 , // "Creativity" of model
seed : 1000 , // Stable starting point
stream : false , // Respond in real-time
stream_handler : null , // Optional function to handle stream
schema : { ... } , // JSON Schema
tool : { ... } , // Tool selection
parser : null , // Content parser
} ) ;
API yang sama didukung dalam antarmuka singkat LLM.js
— menyebutnya sebagai fungsi:
await LLM ( input , options ) ;
Masukan (wajib)
input
<string>
atau Array
: Prompt untuk LLM. Dapat berupa string teks atau array objek dalam format Message History
.Pilihan
Semua parameter konfigurasi bersifat opsional. Beberapa opsi konfigurasi hanya tersedia pada model tertentu, dan ditentukan di bawah.
service
<string>
: layanan LLM yang akan digunakan. Defaultnya adalah llamafile
.model
<string>
: LLM eksplisit untuk digunakan. Default ke model default service
.max_tokens
<int>
: Panjang respons token maksimum. Tidak ada bawaan.temperature
<float>
: "Kreativitas" suatu model. 0
biasanya memberikan hasil yang lebih deterministik, dan nilai 1
ke atas yang lebih tinggi memberikan hasil yang kurang deterministik. Tidak ada bawaan.seed
<int>
: Dapatkan hasil yang lebih deterministik. Tidak ada bawaan. Didukung oleh openai
, llamafile
dan mistral
.stream
<bool>
: Segera kembalikan hasil daripada menunggu respons penuh. Standarnya false
.stream_handler
<function>
: Fungsi opsional yang dipanggil ketika aliran menerima konten baru. Fungsi dilewatkan pada potongan string.schema
<object>
: Objek Skema JSON untuk mengarahkan LLM untuk menghasilkan JSON. Tidak ada bawaan. Didukung oleh openai
dan llamafile
.tool
<object>
: Instruksikan LLM untuk menggunakan alat, berguna untuk Skema JSON yang lebih eksplisit dan membangun aplikasi dinamis. Tidak ada bawaan. Didukung oleh openai
.parser
<function>
: Menangani pemformatan dan struktur konten yang dikembalikan. Tidak ada bawaan.messages
<array>
: Array riwayat pesan, dikelola oleh LLM.js
—tetapi dapat direferensikan dan diubah.options
<object>
: Konfigurasi opsi yang disetel saat awal, tetapi dapat dimodifikasi secara dinamis.async send(options=<object>)
Mengirim Message History
saat ini ke LLM
saat ini dengan options
tertentu. Opsi lokal ini akan menggantikan opsi default global.
Respons akan secara otomatis ditambahkan ke Message History
.
await llm . send ( options ) ;
async chat(input=<string>, options=<object>)
Menambahkan input
ke Message History
saat ini dan panggilan send
dengan options
penggantian saat ini.
Mengembalikan respons langsung ke pengguna, sekaligus memperbarui Message History
.
const response = await llm . chat ( "hello" ) ;
console . log ( response ) ; // hi
abort()
Membatalkan streaming yang sedang berlangsung. Melemparkan AbortError
.
user(input=<string>)
Menambahkan pesan dari user
ke Message History
.
llm . user ( "My favorite color is blue. Remember that" ) ;
system(input=<string>)
Menambahkan pesan dari system
ke Message History
. Ini biasanya merupakan pesan pertama.
llm . system ( "You are a friendly AI chat bot..." ) ;
assistant(input=<string>)
Menambahkan pesan dari assistant
ke Message History
. Ini biasanya merupakan respons dari AI, atau cara untuk mengarahkan respons di masa depan.
llm . user ( "My favorite color is blue. Remember that" ) ;
llm . assistant ( "OK, I will remember your favorite color is blue." ) ;
LLAMAFILE
<string>
: llamafile
OPENAI
<string>
: openai
ANTHROPIC
<string>
: anthropic
MISTRAL
<string>
: mistral
GOOGLE
<string>
: google
MODELDEPLOYER
<string>
: modeldeployer
OLLAMA
<string>
: ollama
TOGETHER
<string>
: together
parsers
<object>
: Daftar parser LLM.js
default<blockType>
)( <content>
) <function>
— Mengurai blok kode Markdown<content>
) <function>
— Mengurai keseluruhan JSON atau blok kode Markdown JSON<tag>
)( <content>
) <function>
— Mengurai tag XML dari konten responsserviceForModel(model)
Kembalikan service
LLM untuk model tertentu.
LLM . serviceForModel ( "gpt-4-turbo-preview" ) ; // openai
modelForService(service)
Mengembalikan LLM default untuk suatu service
.
LLM . modelForService ( "openai" ) ; // gpt-4-turbo-preview
LLM . modelForService ( LLM . OPENAI ) ; // gpt-4-turbo-preview
Tanggapan
LLM.js
mengembalikan hasil dari llm.send()
dan llm.chat()
, biasanya konten string dari LLM yang melengkapi permintaan Anda.
await LLM ( "hello" ) ; // "hi"
Namun saat Anda menggunakan schema
dan tools
— LLM.js
biasanya akan mengembalikan objek JSON.
const tool = {
"name" : "generate_primary_colors" ,
"description" : "Generates the primary colors" ,
"parameters" : {
"type" : "object" ,
"properties" : {
"colors" : {
"type" : "array" ,
"items" : { "type" : "string" }
}
} ,
"required" : [ "colors" ]
}
} ;
await LLM ( "what are the 3 primary colors in physics?" ) ;
// { colors: ["red", "green", "blue"] }
await LLM ( "what are the 3 primary colors in painting?" ) ;
// { colors: ["red", "yellow", "blue"] }
Dan dengan meneruskan {stream: true}
di options
, LLM.js
akan mengembalikan generator dan segera mulai memberikan hasil.
const stream = await LLM ( "Once upon a time" , { stream : true } ) ;
for await ( const message of stream ) {
process . stdout . write ( message ) ;
}
Responsnya didasarkan pada apa yang Anda minta agar LLM lakukan, dan LLM.js
selalu berusaha melakukan hal yang jelas-jelas benar.
API Message History
di LLM.js
sama persis dengan format riwayat pesan OpenAI.
await LLM ( [
{ role : "user" , content : "remember the secret codeword is blue" } ,
{ role : "assistant" , content : "OK I will remember" } ,
{ role : "user" , content : "what is the secret codeword I just told you?" } ,
] ) ; // Response: blue
Pilihan
role
<string>
: Siapa yang mengatakan content
? user
, system
, atau assistant
content
<string>
: Isi teks dari pesan LLM.js
menyediakan perintah llm
yang berguna untuk shell Anda. llm
adalah cara mudah untuk memanggil lusinan LLM dan mengakses kekuatan penuh LLM.js
tanpa pemrograman.
Akses secara global dengan menginstal dari NPM
npm install @themaximalist/llm.js -g
Kemudian Anda dapat memanggil perintah llm
dari mana saja di terminal Anda.
> llm the color of the sky is
blue
Pesan dialirkan kembali secara real time, jadi semuanya sangat cepat.
Anda juga dapat memulai --chat
untuk mengingat riwayat pesan dan melanjutkan percakapan Anda ( Ctrl-C
untuk keluar).
> llm remember the codeword is blue. say ok if you understand --chat
OK, I understand.
> what is the codeword ?
The codeword is blue.
Atau dengan mudah mengubah LLM dengan cepat:
> llm the color of the sky is --model claude-v2
blue
Lihat bantuan dengan llm --help
Usage: llm [options] [input]
Large Language Model library for OpenAI, Google, Anthropic, Mistral, Groq and LLaMa
Arguments:
input Input to send to LLM service
Options:
-V, --version output the version number
-m, --model < model > Completion Model (default: llamafile)
-s, --system < prompt > System prompt (default: " I am a friendly accurate English speaking chat bot " ) (default: " I am a friendly accurate English speaking chat bot " )
-t, --temperature < number > Model temperature (default 0.8) (default: 0.8)
-c, --chat Chat Mode
-h, --help display help for command
LLM.js
dan llm
menggunakan modul debug
npm dengan namespace llm.js
Lihat log debug dengan mengatur variabel lingkungan DEBUG
.
> DEBUG=llm.js * llm the color of the sky is
# debug logs
blue
> export DEBUG=llm.js *
> llm the color of the sky is
# debug logs
blue
LLM.js
memiliki banyak tes yang dapat berfungsi sebagai panduan untuk melihat cara penggunaannya.
Menggunakan LLM dalam produksi bisa jadi rumit karena riwayat pelacakan, pembatasan tarif, pengelolaan kunci API, dan mencari tahu cara mengenakan biaya.
Model Deployer adalah API di depan LLM.js
—yang menangani semua detail ini dan banyak lagi.
Cara menggunakannya sederhana, tentukan modeldeployer
sebagai layanan dan kunci API Anda dari Model Deployer sebagai model
.
await LLM ( "hello world" , { service : "modeldeployer" , model : "api-key" } ) ;
Anda juga dapat mengatur pengaturan tertentu dan secara opsional mengganti beberapa pengaturan di klien.
await LLM ( "the color of the sky is usually" , {
service : "modeldeployer" ,
model : "api-key" ,
endpoint : "https://example.com/api/v1/chat" ,
max_tokens : 1 ,
temperature : 0
} ) ;
LLM.js
dapat digunakan tanpa Model Deployer, namun jika Anda menerapkan LLM ke produksi, ini adalah cara terbaik untuk mengelolanya.
LLM.js
sedang dalam pengembangan besar-besaran sementara LLM berubah dengan cepat. Kami sudah mulai menetapkan antarmuka yang stabil, dan akan mendokumentasikan perubahannya di sini.
v0.6.6
— Menambahkan dukungan browserv0.6.5
— Menambahkan Llama 3 dan Bersamav0.6.4
— Menambahkan Groq dan batalkan()v0.6.3
— Menambahkan parser JSON/XML/Markdown dan pengendali aliranv0.6.2
— Memperbaiki bug dengan streaming Googlev0.6.1
— Memperbaiki bug agar tidak menambahkan tanggapan kosongv0.6.0
— Menambahkan Antropis Claude 3v0.5.9
— Menambahkan Ollamav0.5.4
— Menambahkan Google Geminiv0.5.3
— Menambahkan Mistralv0.5.0
— Membuat situs webv0.4.7
— Alat OpenAI, aliran JSONv0.3.5
— Menambahkan ModelDeployerv0.3.2
— Menambahkan Llamafilev0.2.5
— Menambahkan Antropik, CLIv0.2.4
— Opsi obrolanv0.2.2
— Antarmuka LLM() terpadu, streamingv0.1.2
— Dokumen, perintah sistemv0.0.1
— Membuat LLM.js dengan dukungan OpenAI LLM.js
saat ini digunakan dalam proyek-proyek berikut:
MIT
Dibuat oleh The Maximalist, lihat proyek sumber terbuka kami.