LLM.js هي أسرع طريقة لاستخدام نماذج اللغات الكبيرة في JavaScript. إنها واجهة واحدة بسيطة لمئات من حاملي شهادات LLM المشهورين:
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
سمات
OpenAI
، و Google
، و Anthropic
، و Mistral
، Groq
، و Llamafile
، و Ollama
، و Together
)temperature
، max_tokens
، seed
، ...)llm
لقذيفة الخاص بك تثبيت LLM.js
من NPM:
npm install @themaximalist/llm.js
يعد إعداد LLM أمرًا سهلاً — فقط تأكد من تعيين مفتاح API الخاص بك في بيئتك
export OPENAI_API_KEY=...
export ANTHROPIC_API_KEY=...
export MISTRAL_API_KEY=...
export GOOGLE_API_KEY=...
export GROQ_API_KEY=...
export TOGETHER_API_KEY=...
بالنسبة للنماذج المحلية مثل llamafile وOllama، تأكد من تشغيل المثيل.
إن أبسط طريقة للاتصال LLM.js
هي async function
.
const LLM = require ( "@themaximalist/llm.js" ) ;
await LLM ( "hello" ) ; // Response: hi
يؤدي هذا إلى إطلاق طلب لمرة واحدة، ولا يقوم بتخزين أي سجل.
قم بتهيئة مثيل LLM لإنشاء سجل الرسائل.
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
يوفر البث تجربة مستخدم أفضل من خلال عرض النتائج على الفور، وهو أمر بسيط مثل تمرير {stream: true}
كخيار.
const stream = await LLM ( "the color of the sky is" , { stream : true } ) ;
for await ( const message of stream ) {
process . stdout . write ( message ) ;
}
في بعض الأحيان يكون من المفيد التعامل مع الدفق في الوقت الفعلي ومعالجته أيضًا بمجرد اكتماله. على سبيل المثال، توفير البث المباشر في الدردشة، ثم تحليل كتل التعليمات البرمجية الدلالية في النهاية.
LLM.js
يجعل هذا الأمر سهلاً من خلال خيار stream_handler
الاختياري.
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"]
بدلاً من إرجاع الدفق كمولد، يتم تمريره إلى stream_handler
. الاستجابة من LLM.js
هي الاستجابة بأكملها، والتي يمكن تحليلها أو التعامل معها كالمعتاد.
يدعم LLM.js
مخطط JSON لـ OpenAI وLLaMa. يمكنك طلب JSON مع أي نموذج LLM، ولكن استخدام JSON Schema سيؤدي إلى فرض المخرجات.
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" } ) ;
يتم استخدام تنسيقات مختلفة بواسطة نماذج مختلفة (JSON Schema، BNFS)، لذلك يقوم LLM.js
بالتحويل بين هذه التنسيقات تلقائيًا.
لاحظ أن مخطط JSON لا يزال بإمكانه إنتاج JSON غير صالح عندما يتجاوز max_tokens
.
قم بإنشاء وكلاء متخصصين في مهام محددة باستخدام 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)
لاحظ أن OpenAI اقترح أن مطالبات النظام قد لا تكون فعالة مثل مطالبات المستخدم، والتي يدعمها LLM.js
مع llm.user(input)
.
يدعم LLM.js
مطالبات السلسلة البسيطة، ولكنه يدعم أيضًا سجل الرسائل الكامل. وهذا مفيد بشكل خاص لتوجيه LLMs بطريقة أكثر دقة.
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
يتم استخدام تنسيق رسالة OpenAI، وتحويله سريعًا لخدمات محددة تستخدم تنسيقًا مختلفًا (مثل Google، وMixtral، وLLaMa).
يدعم LLM.js
نماذج اللغات الكبيرة الأكثر شيوعًا، بما في ذلك
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
تخمين موفر LLM بناءً على النموذج، أو يمكنك تحديده بشكل صريح.
// 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" } ) ;
إن القدرة على التبديل بسرعة بين LLMs تمنعك من الانغلاق.
يأتي LLM.js
مع عدد قليل من المحللين اللغويين المفيدين الذين يعملون مع كل LLM. وهي منفصلة عن تنسيق JSON النموذجي مع tool
schema
الذي تدعمه بعض LLMs (مثل OpenAI).
تحليل JSON
const colors = await LLM ( "Please return the primary colors in a JSON array" , {
parser : LLM . parsers . json
} ) ;
// ["red", "green", "blue"]
تحليل كتلة رمز تخفيض السعر
const story = await LLM ( "Please return a story wrapped in a Markdown story code block" , {
parser : LLM . parsers . codeBlock ( "story" )
} ) ;
// A long time ago...
تحليل 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>....
ملاحظة: يعمل OpenAI بشكل أفضل مع Markdown وJSON، بينما يعمل Anthropic بشكل أفضل مع علامات XML.
توفر LLM.js
API واجهة بسيطة لعشرات من نماذج اللغات الكبيرة.
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) مدعومة في الواجهة المختصرة لـ LLM.js
— حيث يتم تسميتها كدالة:
await LLM ( input , options ) ;
الإدخال (مطلوب)
input
<string>
أو Array
: موجه لـ LLM. يمكن أن تكون سلسلة نصية أو مجموعة من الكائنات بتنسيق Message History
.خيارات
جميع معلمات التكوين اختيارية. تتوفر بعض خيارات التكوين في طرز معينة فقط، وهي محددة أدناه.
service
<string>
: خدمة LLM للاستخدام. الافتراضي هو llamafile
.model
<string>
: LLM صريح للاستخدام. الافتراضيات للنموذج الافتراضي service
.max_tokens
<int>
: الحد الأقصى لطول استجابة الرمز المميز. لا الافتراضي.temperature
<float>
: "الإبداع" للنموذج. عادةً ما يعطي 0
نتائج حتمية أكثر، والقيم الأعلى 1
وما فوق تعطي نتائج حتمية أقل. لا الافتراضي.seed
<int>
: احصل على المزيد من النتائج الحتمية. لا الافتراضي. بدعم من openai
، llamafile
mistral
.stream
<bool>
: يعرض النتائج فورًا بدلاً من انتظار الاستجابة الكاملة. الافتراضي false
.stream_handler
<function>
: وظيفة اختيارية يتم استدعاؤها عندما يتلقى الدفق محتوى جديدًا. يتم تمرير الدالة قطعة السلسلة.schema
<object>
: كائن مخطط JSON لتوجيه LLM لإنشاء JSON. لا الافتراضي. بدعم من openai
و llamafile
.tool
<object>
: قم بتوجيه LLM لاستخدام أداة مفيدة لمخطط JSON الأكثر وضوحًا وإنشاء تطبيقات ديناميكية. لا الافتراضي. بدعم من openai
.parser
<function>
: التعامل مع تنسيق وبنية المحتوى الذي تم إرجاعه. لا الافتراضي.messages
<array>
: مصفوفة من سجل الرسائل، تتم إدارتها بواسطة LLM.js
- ولكن يمكن الرجوع إليها وتغييرها.options
<object>
: تكوين الخيارات الذي تم تعيينه عند البداية، ولكن يمكن تعديله ديناميكيًا.async send(options=<object>)
يرسل Message History
الحالي إلى LLM
الحالي مع options
المحددة. ستتجاوز هذه الخيارات المحلية الخيارات الافتراضية العامة.
ستتم إضافة الرد تلقائيًا إلى Message History
.
await llm . send ( options ) ;
async chat(input=<string>, options=<object>)
يضيف input
إلى Message History
الحالي ويتم send
المكالمات باستخدام options
التجاوز الحالية.
يعيد الرد مباشرة إلى المستخدم، أثناء تحديث Message History
.
const response = await llm . chat ( "hello" ) ;
console . log ( response ) ; // hi
abort()
إحباط دفق مستمر. يلقي خطأ AbortError
.
user(input=<string>)
إضافة رسالة من user
إلى Message History
.
llm . user ( "My favorite color is blue. Remember that" ) ;
system(input=<string>)
إضافة رسالة من system
إلى Message History
. هذه هي عادةً الرسالة الأولى.
llm . system ( "You are a friendly AI chat bot..." ) ;
assistant(input=<string>)
إضافة رسالة من assistant
إلى Message History
. وهذا عادةً ما يكون استجابة من الذكاء الاصطناعي، أو وسيلة لتوجيه الاستجابة المستقبلية.
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>
: قائمة موزعي LLM.js
الافتراضية<blockType>
)( <content>
) <function>
- يوزع كتلة التعليمات البرمجية Markdown<content>
) <function>
- يوزع إجمالي JSON أو مجموعة التعليمات البرمجية Markdown JSON<tag>
)( <content>
) <function>
— تحليل علامة XML من محتوى الاستجابةserviceForModel(model)
قم بإرجاع service
LLM لنموذج معين.
LLM . serviceForModel ( "gpt-4-turbo-preview" ) ; // openai
modelForService(service)
قم بإرجاع LLM الافتراضي service
.
LLM . modelForService ( "openai" ) ; // gpt-4-turbo-preview
LLM . modelForService ( LLM . OPENAI ) ; // gpt-4-turbo-preview
إجابة
يعرض LLM.js
النتائج من llm.send()
و llm.chat()
، وعادةً ما يكون محتوى السلسلة من LLM يكمل مطالبتك.
await LLM ( "hello" ) ; // "hi"
ولكن عند استخدام schema
tools
، عادةً ما يُرجع LLM.js
كائن 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"] }
وبتمرير {stream: true}
في options
، سيعيد LLM.js
مولدًا ويبدأ في تحقيق النتائج على الفور.
const stream = await LLM ( "Once upon a time" , { stream : true } ) ;
for await ( const message of stream ) {
process . stdout . write ( message ) ;
}
تعتمد الاستجابة على ما تطلب من LLM القيام به، ويحاول LLM.js
دائمًا القيام بالشيء الصحيح بشكل واضح.
واجهة برمجة تطبيقات Message History
في LLM.js
هي نفسها تمامًا تنسيق سجل رسائل 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
خيارات
role
<string>
: من يقول content
؟ user
أو system
أو assistant
content
<string>
: محتوى النص من الرسالة يوفر LLM.js
llm
مفيدًا لـ Shell الخاص بك. llm
هي طريقة ملائمة لاستدعاء العشرات من حاملي LLM والوصول إلى القوة الكاملة لـ LLM.js
بدون برمجة.
يمكنك الوصول إليه عالميًا عن طريق التثبيت من NPM
npm install @themaximalist/llm.js -g
ثم يمكنك استدعاء أمر llm
من أي مكان في جهازك الطرفي.
> llm the color of the sky is
blue
ويتم بث الرسائل مرة أخرى في الوقت الفعلي، لذا فإن كل شيء يتم بسرعة كبيرة.
يمكنك أيضًا بدء --chat
لتذكر سجل الرسائل ومتابعة محادثتك ( Ctrl-C
للإنهاء).
> llm remember the codeword is blue. say ok if you understand --chat
OK, I understand.
> what is the codeword ?
The codeword is blue.
أو يمكنك بسهولة تغيير LLM بسرعة:
> llm the color of the sky is --model claude-v2
blue
راجع المساعدة في 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
و llm
وحدة debug
npm مع مساحة الاسم llm.js
عرض سجلات التصحيح عن طريق تعيين متغير البيئة 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
على الكثير من الاختبارات التي يمكن أن تكون بمثابة دليل لمعرفة كيفية استخدامه.
قد يكون استخدام LLMs في الإنتاج أمرًا صعبًا بسبب سجل التتبع وتحديد المعدل وإدارة مفاتيح واجهة برمجة التطبيقات ومعرفة كيفية تحصيل الرسوم.
Model Deployer عبارة عن واجهة برمجة التطبيقات (API) الموجودة أمام LLM.js
، والتي تتعامل مع كل هذه التفاصيل والمزيد.
استخدامه بسيط، حدد modeldeployer
كخدمة ومفتاح API الخاص بك من Model Deployer model
.
await LLM ( "hello world" , { service : "modeldeployer" , model : "api-key" } ) ;
يمكنك أيضًا إعداد إعدادات محددة وتجاوز بعضها بشكل اختياري على العميل.
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
بدون Model Deployer، ولكن إذا كنت تقوم بنشر LLMs للإنتاج، فهذه طريقة رائعة لإدارتها.
لقد كان LLM.js
قيد التطوير المكثف بينما تتغير LLMs بسرعة. لقد بدأنا في الاستقرار على واجهة مستقرة، وسنقوم بتوثيق التغييرات هنا.
v0.6.6
— تمت إضافة دعم المتصفحv0.6.5
— تمت إضافة Llama 3 ومعًاv0.6.4
— تمت إضافة Groq وabort()v0.6.3
— تمت إضافة موزعي JSON/XML/Markdown ومعالج الدفقv0.6.2
— إصلاح الخلل في البث من Googlev0.6.1
— إصلاح الخلل لعدم إضافة ردود فارغةv0.6.0
— تمت إضافة الأنثروبي كلود 3v0.5.9
— تمت إضافة أولاماv0.5.4
— تمت إضافة Google Geminiv0.5.3
– تمت إضافة ميسترالv0.5.0
— تم إنشاء موقع الويبv0.4.7
— أدوات OpenAI، دفق JSONv0.3.5
— تمت إضافة ModelDeployerv0.3.2
— تمت إضافة Llamafilev0.2.5
— تمت إضافة Anthropic, CLIv0.2.4
— خيارات الدردشةv0.2.2
— واجهة LLM() الموحدة، البث المباشرv0.1.2
— المستندات، موجه النظامv0.0.1
— تم إنشاء LLM.js بدعم OpenAI يُستخدم LLM.js
حاليًا في المشاريع التالية:
معهد ماساتشوستس للتكنولوجيا
تم الإنشاء بواسطة The Maximalist، راجع مشاريعنا مفتوحة المصدر.