LLM.js是在 JavaScript 中使用大型語言模型最快的方法。它是一個簡單的介面,可連接數百個流行的法學碩士:
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
這會觸發一次性請求,並且不儲存任何歷史記錄。
初始化 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 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 Schema 仍然會產生無效的 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
支援簡單的字串提示,但也支援完整的訊息歷史記錄。這對於更精確地指導法學碩士特別有幫助。
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.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"]
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 標籤搭配使用效果最佳。
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
} ) ;
LLM.js
的簡寫介面支援相同的 API — 將其作為函數呼叫:
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 Schema 物件。無預設值。由openai
和llamafile
支援。tool
<object>
:指示 LLM 使用工具,對於更明確的 JSON 模式和建立動態應用程式很有用。無預設值。由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
。這通常是人工智慧的回應,或是引導未來回應的一種方式。
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)
傳回特定模型的 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
為您的 shell 提供了一個有用的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 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 是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.js
一直在大力開發,而 LLM 正在迅速改變。我們已經開始確定一個穩定的介面,並將在此處記錄變更。
v0.6.6
— 新增了瀏覽器支持v0.6.5
— 新增了 Llama 3 和 Togetherv0.6.4
— 新增了 Groq 和 abort()v0.6.3
— 新增了 JSON/XML/Markdown 解析器和流處理程序v0.6.2
— 修正 Google 串流媒體的錯誤v0.6.1
— 修復錯誤以不新增空響應v0.6.0
— 新增了人類克勞德 3v0.5.9
— 新增了 Ollamav0.5.4
— 新增了 Google Geminiv0.5.3
— 新增了米斯特拉爾v0.5.0
— 建立網站v0.4.7
— OpenAI 工具,JSON 流v0.3.5
— 新增了 ModelDeployerv0.3.2
— 新增了 Llamafilev0.2.5
— 新增了 Anthropic、CLIv0.2.4
— 聊天選項v0.2.2
— 統一 LLM() 接口,串流傳輸v0.1.2
— 文件、系統提示v0.0.1
— 創建了支援 OpenAI 的 LLM.js LLM.js
目前用於以下專案:
麻省理工學院
由 The Maximalist 創建,請參閱我們的開源專案。