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 创建,请参阅我们的开源项目。