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
コマンドNPM からLLM.js
をインストールします。
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
これにより、1 回限りのリクエストが発行され、履歴は保存されません。
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
OpenAI および LLaMa の JSON スキーマをサポートします。任意の LLM モデルで JSON を要求できますが、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 スキーマ、BNFS) では異なる形式が使用されるため、 LLM.js
これらの間で自動的に変換します。
JSON スキーマは、 max_tokens
超える場合など、無効な JSON を生成する可能性があることに注意してください。
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 で動作するいくつかの便利なパーサーが付属しています。これらは、一部の LLM (OpenAI など) がサポートするtool
やschema
を使用した一般的な JSON 形式とは別のものです。
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>
: LLM を操作して JSON を生成するための JSON スキーマ オブジェクト。デフォルトはありません。 openai
とllamafile
によってサポートされています。tool
<object>
: より明示的な JSON スキーマや動的アプリの構築に役立つツールを使用するように LLM に指示します。デフォルトはありません。 openai
によってサポートされています。parser
<function>
: 返されたコンテンツのフォーマットと構造を処理します。デフォルトはありません。messages
<array>
: LLM.js
によって管理されるメッセージ履歴の配列ですが、参照および変更できます。options
<object>
: 起動時に設定されたオプション構成ですが、動的に変更できます。async send(options=<object>)
指定されたoptions
を使用して、現在のMessage History
現在のLLM
に送信します。これらのローカル オプションは、グローバルのデフォルト オプションをオーバーライドします。
応答はMessage History
に自動的に追加されます。
await llm . send ( options ) ;
async chat(input=<string>, options=<object>)
input
現在のMessage History
に追加し、現在のオーバーライドoptions
を使用してsend
呼び出します。
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
に追加します。これは通常、AI からの応答、または将来の応答を制御する方法です。
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>
— マークダウン コードブロックを解析します。<content>
) <function>
— JSON 全体または Markdown JSON コードブロックを解析します。<tag>
)( <content>
) <function>
— 応答コンテンツから XML タグを解析します。serviceForModel(model)
特定のモデルの LLM service
を返します。
LLM . serviceForModel ( "gpt-4-turbo-preview" ) ; // openai
modelForService(service)
service
のデフォルトの LLM を返します。
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"] }
そして、 options
に{stream: true}
を渡すと、 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
常に明らかに正しいことを実行しようとします。
LLM.js
のMessage History
API は、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
llm.js
名前空間を持つdebug
npm モジュールを使用します。
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 は、 LLM.js
の前にある API であり、これらすべての詳細などを処理します。
使い方は簡単で、 modeldeployer
サービスとして指定し、Model Deployer の API キーを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 を管理する優れた方法です。
LLM.js
大規模な開発が行われている一方で、LLM は急速に変化しています。私たちは安定したインターフェースに落ち着き始めており、変更点をここに文書化する予定です。
v0.6.6
— ブラウザーのサポートを追加v0.6.5
— Llama 3 と Together を追加v0.6.4
— Groq と abort() を追加v0.6.3
— JSON/XML/Markdown パーサーとストリーム ハンドラーを追加しましたv0.6.2
— Google ストリーミングのバグを修正v0.6.1
— 空の応答を追加しないようにバグを修正v0.6.0
— Anthropic Claude 3 を追加v0.5.9
— オラマを追加v0.5.4
— Google Gemini を追加v0.5.3
— ミストラルを追加v0.5.0
— ウェブサイトを作成しましたv0.4.7
— OpenAI ツール、JSON ストリームv0.3.5
— ModelDeployer を追加v0.3.2
— Llamafile を追加v0.2.5
— Anthropic、CLI を追加v0.2.4
— チャット オプションv0.2.2
— 統合 LLM() インターフェイス、ストリーミングv0.1.2
— ドキュメント、システム プロンプトv0.0.1
— OpenAI サポートを備えた LLM.js を作成しましたLLM.js
は現在、次のプロジェクトで使用されています。
マサチューセッツ工科大学
The Maximalist によって作成されました。オープンソース プロジェクトをご覧ください。