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 обеспечит соблюдение выходных данных.
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
поддерживает простые строковые запросы, а также полную историю сообщений. Это особенно полезно для более точного руководства LLM.
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" } ) ;
Возможность быстрого переключения между LLM не позволит вам застрять.
LLM.js
поставляется с несколькими полезными парсерами, которые работают с каждым LLM. Они отличаются от типичного форматирования JSON с помощью tool
и schema
, которые поддерживаются некоторыми LLM (например, OpenAI).
Анализ JSON
const colors = await LLM ( "Please return the primary colors in a JSON array" , {
parser : LLM . parsers . json
} ) ;
// ["red", "green", "blue"]
Анализ блока кода Markdown
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.
API LLM.js
предоставляет простой интерфейс для десятков больших языковых моделей.
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
всегда старается сделать очевидно правильные вещи.
API 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
для вашей оболочки. 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
имеется множество тестов, которые могут служить руководством для понимания того, как его использовать.
Использование LLM в производстве может быть сложным из-за отслеживания истории, ограничения скорости, управления ключами API и выяснения того, как взимать плату.
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, но если вы развертываете LLM в рабочей среде, это отличный способ управлять ими.
LLM.js
находится в стадии интенсивной разработки, в то время как LLM быстро меняются. Мы начали работать над стабильным интерфейсом и будем документировать изменения здесь.
v0.6.6
— Добавлена поддержка браузераv0.6.5
— Добавлена Лама 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 Tools, поток 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, ознакомьтесь с нашими проектами с открытым исходным кодом.