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
이는 일회성 요청을 실행하며 기록을 저장하지 않습니다.
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>)
현재 Message History
에 input
추가하고 현재 재정의 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>)
Message History
에 assistant
의 메시지를 추가합니다. 이는 일반적으로 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>
— 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
쉘에 유용한 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
— 인류 클로드 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
— Llama 파일 추가v0.2.5
— Anthropic, CLI 추가v0.2.4
— 채팅 옵션v0.2.2
— 통합 LLM() 인터페이스, 스트리밍v0.1.2
— 문서, 시스템 프롬프트v0.0.1
— OpenAI 지원을 통해 LLM.js 생성 LLM.js
는 현재 다음 프로젝트에서 사용됩니다.
MIT
The Maximalist가 만든 오픈 소스 프로젝트를 확인하세요.