مكتبة TypeScript لبناء تطبيقات الذكاء الاصطناعي.
مقدمة | التثبيت السريع | الاستخدام | التوثيق | أمثلة | المساهمة | modelfusion .ديف
مهم
انضم modelfusion إلى Vercel ويتم دمجه في Vercel AI SDK. نحن نقدم أفضل أجزاء modelfusion إلى Vercel AI SDK، بدءًا من إنشاء النص وإنشاء الكائنات المنظمة واستدعاءات الأدوات. يرجى مراجعة AI SDK للحصول على أحدث التطورات.
modelfusion عبارة عن طبقة تجريد لدمج نماذج الذكاء الاصطناعي في تطبيقات JavaScript وTypeScript، وتوحيد واجهة برمجة التطبيقات للعمليات الشائعة مثل تدفق النص وإنشاء الكائنات واستخدام الأدوات . وهو يوفر ميزات لدعم بيئات الإنتاج، بما في ذلك خطافات إمكانية المراقبة والتسجيل وإعادة المحاولة التلقائية. يمكنك استخدام modelfusion لإنشاء تطبيقات الذكاء الاصطناعي وروبوتات الدردشة والوكلاء.
npm install modelfusion
أو استخدم قالب البداية:
نصيحة
تعتبر الأمثلة الأساسية طريقة رائعة للبدء والاستكشاف بالتوازي مع الوثائق. يمكنك العثور عليها في المجلد الأمثلة/الأساسي.
يمكنك توفير مفاتيح API لعمليات التكامل المختلفة باستخدام متغيرات البيئة (على سبيل المثال، OPENAI_API_KEY
) أو تمريرها إلى منشئي النموذج كخيارات.
قم بإنشاء نص باستخدام نموذج اللغة والموجه. يمكنك دفق النص إذا كان مدعومًا بالنموذج. يمكنك استخدام الصور للمطالبة متعددة الوسائط إذا كان النموذج يدعمها (على سبيل المثال، مع llama.cpp). يمكنك استخدام أنماط المطالبة لاستخدام النص أو التعليمات أو مطالبات الدردشة.
import { generateText , openai } from " modelfusion " ;
const text = await generateText ( {
model : openai . CompletionTextGenerator ( { model : "gpt-3.5-turbo-instruct" } ) ,
prompt : "Write a short story about a robot learning to love:nn" ,
} ) ;
الموفرون: OpenAI، متوافق مع OpenAI، Llama.cpp، Ollama، Mistral، Hugging Face، Cohere
import { streamText , openai } from " modelfusion " ;
const textStream = await streamText ( {
model : openai . CompletionTextGenerator ( { model : "gpt-3.5-turbo-instruct" } ) ,
prompt : "Write a short story about a robot learning to love:nn" ,
} ) ;
for await ( const textPart of textStream ) {
process . stdout . write ( textPart ) ;
}
الموفرون: OpenAI، متوافق مع OpenAI، Llama.cpp، Ollama، Mistral، Cohere
يمكن لنماذج الرؤية متعددة الوسائط مثل GPT 4 Vision معالجة الصور كجزء من الموجه.
import { streamText , openai } from " modelfusion " ;
import { readFileSync } from "fs" ;
const image = readFileSync ( "./image.png" ) ;
const textStream = await streamText ( {
model : openai
. ChatTextGenerator ( { model : "gpt-4-vision-preview" } )
. withInstructionPrompt ( ) ,
prompt : {
instruction : [
{ type : "text" , text : "Describe the image in detail." } ,
{ type : "image" , image , mimeType : "image/png" } ,
] ,
} ,
} ) ;
for await ( const textPart of textStream ) {
process . stdout . write ( textPart ) ;
}
الموفرون: OpenAI، متوافق مع OpenAI، Llama.cpp، Ollama
إنشاء كائنات مكتوبة باستخدام نموذج اللغة والمخطط.
قم بإنشاء كائن يطابق المخطط.
import {
ollama ,
zodSchema ,
generateObject ,
jsonObjectPrompt ,
} from " modelfusion " ;
const sentiment = await generateObject ( {
model : ollama
. ChatTextGenerator ( {
model : "openhermes2.5-mistral" ,
maxGenerationTokens : 1024 ,
temperature : 0 ,
} )
. asObjectGenerationModel ( jsonObjectPrompt . instruction ( ) ) ,
schema : zodSchema (
z . object ( {
sentiment : z
. enum ( [ "positive" , "neutral" , "negative" ] )
. describe ( "Sentiment." ) ,
} )
) ,
prompt : {
system :
"You are a sentiment evaluator. " +
"Analyze the sentiment of the following product review:" ,
instruction :
"After I opened the package, I was met by a very unpleasant smell " +
"that did not disappear even after washing. Never again!" ,
} ,
} ) ;
الموفرون: OpenAI، وOllama، وLlama.cpp
دفق كائن يطابق المخطط. الكائنات الجزئية قبل الجزء الأخير غير مكتوبة بـ JSON.
import { zodSchema , openai , streamObject } from " modelfusion " ;
const objectStream = await streamObject ( {
model : openai
. ChatTextGenerator ( /* ... */ )
. asFunctionCallObjectGenerationModel ( {
fnName : "generateCharacter" ,
fnDescription : "Generate character descriptions." ,
} )
. withTextPrompt ( ) ,
schema : zodSchema (
z . object ( {
characters : z . array (
z . object ( {
name : z . string ( ) ,
class : z
. string ( )
. describe ( "Character class, e.g. warrior, mage, or thief." ) ,
description : z . string ( ) ,
} )
) ,
} )
) ,
prompt : "Generate 3 character descriptions for a fantasy role playing game." ,
} ) ;
for await ( const { partialObject } of objectStream ) {
console . clear ( ) ;
console . log ( partialObject ) ;
}
الموفرون: OpenAI، وOllama، وLlama.cpp
إنشاء صورة من موجه.
import { generateImage , openai } from " modelfusion " ;
const image = await generateImage ( {
model : openai . ImageGenerator ( { model : "dall-e-3" , size : "1024x1024" } ) ,
prompt :
"the wicked witch of the west in the style of early 19th century painting" ,
} ) ;
الموفرون: OpenAI (Dall·E)، وStability AI، وAutomatic1111
تركيب الكلام (الصوت) من النص. ويسمى أيضًا TTS (تحويل النص إلى كلام).
يقوم generateSpeech
بتجميع الكلام من النص.
import { generateSpeech , lmnt } from " modelfusion " ;
// `speech` is a Uint8Array with MP3 audio data
const speech = await generateSpeech ( {
model : lmnt . SpeechGenerator ( {
voice : "034b632b-df71-46c8-b440-86a42ffc3cf3" , // Henry
} ) ,
text :
"Good evening, ladies and gentlemen! Exciting news on the airwaves tonight " +
"as The Rolling Stones unveil 'Hackney Diamonds,' their first collection of " +
"fresh tunes in nearly twenty years, featuring the illustrious Lady Gaga, the " +
"magical Stevie Wonder, and the final beats from the late Charlie Watts." ,
} ) ;
مقدمو الخدمة: Eleven Labs، LMNT، OpenAI
يقوم generateSpeech
بإنشاء دفق من أجزاء الكلام من النص أو من دفق النص. اعتمادًا على الطراز، يمكن أن يكون هذا مزدوجًا بالكامل.
import { streamSpeech , elevenlabs } from " modelfusion " ;
const textStream : AsyncIterable < string > ;
const speechStream = await streamSpeech ( {
model : elevenlabs . SpeechGenerator ( {
model : "eleven_turbo_v2" ,
voice : "pNInz6obpgDQGcFmaJgB" , // Adam
optimizeStreamingLatency : 1 ,
voiceSettings : { stability : 1 , similarityBoost : 0.35 } ,
generationConfig : {
chunkLengthSchedule : [ 50 , 90 , 120 , 150 , 200 ] ,
} ,
} ) ,
text : textStream ,
} ) ;
for await ( const part of speechStream ) {
// each part is a Uint8Array with MP3 audio data
}
المقدمون: أحد عشر مختبرًا
نسخ بيانات الكلام (الصوت) إلى نص. وتسمى أيضًا تحويل الكلام إلى نص (STT).
import { generateTranscription , openai } from " modelfusion " ;
import fs from "node:fs" ;
const transcription = await generateTranscription ( {
model : openai . Transcriber ( { model : "whisper-1" } ) ,
mimeType : "audio/mp3" ,
audioData : await fs . promises . readFile ( "data/test.mp3" ) ,
} ) ;
الموفرون: OpenAI (Whisper)، Whisper.cpp
إنشاء تضمينات للنص والقيم الأخرى. التضمينات هي ناقلات تمثل جوهر القيم في سياق النموذج.
import { embed , embedMany , openai } from " modelfusion " ;
// embed single value:
const embedding = await embed ( {
model : openai . TextEmbedder ( { model : "text-embedding-ada-002" } ) ,
value : "At first, Nox didn't know what to do with the pup." ,
} ) ;
// embed many values:
const embeddings = await embedMany ( {
model : openai . TextEmbedder ( { model : "text-embedding-ada-002" } ) ,
values : [
"At first, Nox didn't know what to do with the pup." ,
"He keenly observed and absorbed everything around him, from the birds in the sky to the trees in the forest." ,
] ,
} ) ;
الموفرون: OpenAI، متوافق مع OpenAI، Llama.cpp، Ollama، Mistral، Hugging Face، Cohere
يصنف قيمة في فئة.
import { classify , EmbeddingSimilarityClassifier , openai } from " modelfusion " ;
const classifier = new EmbeddingSimilarityClassifier ( {
embeddingModel : openai . TextEmbedder ( { model : "text-embedding-ada-002" } ) ,
similarityThreshold : 0.82 ,
clusters : [
{
name : "politics" as const ,
values : [
"they will save the country!" ,
// ...
] ,
} ,
{
name : "chitchat" as const ,
values : [
"how's the weather today?" ,
// ...
] ,
} ,
] ,
} ) ;
// strongly typed result:
const result = await classify ( {
model : classifier ,
value : "don't you love politics?" ,
} ) ;
المصنفات: EmbeddingSimilarityClassifier
تقسيم النص إلى رموز مميزة وإعادة بناء النص من الرموز المميزة.
const tokenizer = openai . Tokenizer ( { model : "gpt-4" } ) ;
const text = "At first, Nox didn't know what to do with the pup." ;
const tokenCount = await countTokens ( tokenizer , text ) ;
const tokens = await tokenizer . tokenize ( text ) ;
const tokensAndTokenTexts = await tokenizer . tokenizeWithTexts ( text ) ;
const reconstructedText = await tokenizer . detokenize ( tokens ) ;
الموفرون: OpenAI، Llama.cpp، Cohere
الأدوات هي وظائف (والبيانات التعريفية المرتبطة بها) يمكن تنفيذها بواسطة نموذج الذكاء الاصطناعي. إنها مفيدة لبناء روبوتات الدردشة والوكلاء.
يقدم modelfusion العديد من الأدوات المبتكرة: Math.js، وMediaWiki Search، وSerpAPI، وGoogle Custom Search. يمكنك أيضًا إنشاء أدوات مخصصة.
باستخدام runTool
، يمكنك أن تطلب من نموذج لغة متوافق مع الأداة (مثل دردشة OpenAI) استدعاء أداة واحدة. يقوم runTool
أولاً بإنشاء استدعاء أداة ثم ينفذ الأداة باستخدام الوسائط.
const { tool , toolCall , args , ok , result } = await runTool ( {
model : openai . ChatTextGenerator ( { model : "gpt-3.5-turbo" } ) ,
too : calculator ,
prompt : [ openai . ChatMessage . user ( "What's fourteen times twelve?" ) ] ,
} ) ;
console . log ( `Tool call:` , toolCall ) ;
console . log ( `Tool:` , tool ) ;
console . log ( `Arguments:` , args ) ;
console . log ( `Ok:` , ok ) ;
console . log ( `Result or Error:` , result ) ;
باستخدام runTools
، يمكنك أن تطلب من نموذج اللغة إنشاء العديد من استدعاءات الأدوات بالإضافة إلى النص. سيختار النموذج الأدوات (إن وجدت) التي يجب استدعاؤها باستخدام الوسائط. كل من النص واستدعاءات الأداة اختيارية. هذه الوظيفة تنفذ الأدوات.
const { text , toolResults } = await runTools ( {
model : openai . ChatTextGenerator ( { model : "gpt-3.5-turbo" } ) ,
tools : [ calculator /* ... */ ] ,
prompt : [ openai . ChatMessage . user ( "What's fourteen times twelve?" ) ] ,
} ) ;
يمكنك استخدام runTools
لتنفيذ حلقة وكيل تستجيب لرسائل المستخدم وتنفذ الأدوات. يتعلم أكثر.
const texts = [
"A rainbow is an optical phenomenon that can occur under certain meteorological conditions." ,
"It is caused by refraction, internal reflection and dispersion of light in water droplets resulting in a continuous spectrum of light appearing in the sky." ,
// ...
] ;
const vectorIndex = new MemoryVectorIndex < string > ( ) ;
const embeddingModel = openai . TextEmbedder ( {
model : "text-embedding-ada-002" ,
} ) ;
// update an index - usually done as part of an ingestion process:
await upsertIntoVectorIndex ( {
vectorIndex ,
embeddingModel ,
objects : texts ,
getValueToEmbed : ( text ) => text ,
} ) ;
// retrieve text chunks from the vector index - usually done at query time:
const retrievedTexts = await retrieve (
new VectorIndexRetriever ( {
vectorIndex ,
embeddingModel ,
maxResults : 3 ,
similarityThreshold : 0.8 ,
} ) ,
"rainbow and water droplets"
) ;
متاجر المتجهات المتاحة: Memory وSQLite VSS وPinecone
يمكنك استخدام أنماط مطالبة مختلفة (مثل النص أو التعليمات أو مطالبات الدردشة) مع نماذج إنشاء النص modelfusion . يمكن الوصول إلى أنماط المطالبة هذه من خلال الطرق .withTextPrompt()
و .withChatPrompt()
و .withInstructionPrompt()
:
const text = await generateText ( {
model : openai
. ChatTextGenerator ( {
// ...
} )
. withTextPrompt ( ) ,
prompt : "Write a short story about a robot learning to love" ,
} ) ;
const text = await generateText ( {
model : llamacpp
. CompletionTextGenerator ( {
// run https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF with llama.cpp
promptTemplate : llamacpp . prompt . Llama2 , // Set prompt template
contextWindowSize : 4096 , // Llama 2 context window size
maxGenerationTokens : 512 ,
} )
. withInstructionPrompt ( ) ,
prompt : {
system : "You are a story writer." ,
instruction : "Write a short story about a robot learning to love." ,
} ,
} ) ;
const textStream = await streamText ( {
model : openai
. ChatTextGenerator ( {
model : "gpt-3.5-turbo" ,
} )
. withChatPrompt ( ) ,
prompt : {
system : "You are a celebrated poet." ,
messages : [
{
role : "user" ,
content : "Suggest a name for a robot." ,
} ,
{
role : "assistant" ,
content : "I suggest the name Robbie" ,
} ,
{
role : "user" ,
content : "Write a short story about Robbie learning to love" ,
} ,
] ,
} ,
} ) ;
يمكنك استخدام قوالب المطالبة مع نماذج الصور أيضًا، على سبيل المثال لاستخدام مطالبة نصية أساسية. وهي متاحة كطريقة مختصرة:
const image = await generateImage ( {
model : stability
. ImageGenerator ( {
//...
} )
. withTextPrompt ( ) ,
prompt :
"the wicked witch of the west in the style of early 19th century painting" ,
} ) ;
قالب موجه | موجه النص |
---|---|
تلقائي1111 | ✅ |
استقرار | ✅ |
تقوم وظائف نموذج modelfusion بإرجاع استجابات غنية تتضمن الاستجابة الأولية (الأصلية) وبيانات التعريف عندما تقوم بتعيين وسيطة fullResponse
على true
.
// access the raw response (needs to be typed) and the metadata:
const { text , rawResponse , metadata } = await generateText ( {
model : openai . CompletionTextGenerator ( {
model : "gpt-3.5-turbo-instruct" ,
maxGenerationTokens : 1000 ,
n : 2 , // generate 2 completions
} ) ,
prompt : "Write a short story about a robot learning to love:nn" ,
fullResponse : true ,
} ) ;
console . log ( metadata ) ;
// cast to the raw response type:
for ( const choice of ( rawResponse as OpenAICompletionResponse ) . choices ) {
console . log ( choice . text ) ;
}
يوفر modelfusion إطارًا للمراقب ودعمًا للتسجيل. يمكنك بسهولة تتبع عمليات التشغيل والتسلسلات الهرمية للاستدعاء، ويمكنك إضافة المراقبين الخاصين بك.
import { generateText , openai } from " modelfusion " ;
const text = await generateText ( {
model : openai . CompletionTextGenerator ( { model : "gpt-3.5-turbo-instruct" } ) ,
prompt : "Write a short story about a robot learning to love:nn" ,
logging : "detailed-object" ,
} ) ;
أمثلة لجميع الوظائف والكائنات الفردية تقريبًا. موصى به للغاية للبدء.
متعدد الوسائط، تدفق الكائنات ، توليد الصور ، تحويل النص إلى كلام ، تحويل الكلام إلى نص ، إنشاء النص ، إنشاء الكائنات ، التضمينات
StoryTeller هو تطبيق ويب استكشافي يقوم بإنشاء قصص صوتية قصيرة للأطفال في مرحلة ما قبل المدرسة.
تطبيق Next.js ، OpenAI GPT-3.5-turbo ، البث ، إحباط المعالجة
محادثة عبر الويب مع مساعد الذكاء الاصطناعي، يتم تنفيذها كتطبيق Next.js.
التطبيق الطرفي ، تحليل ملفات PDF ، مؤشرات متجهات الذاكرة ، توليد الاسترجاع المعزز ، تضمين المستندات الافتراضية
اطرح أسئلة حول مستند PDF واحصل على إجابات من المستند.
تطبيق Next.js ، توليد الصور ، النسخ ، دفق الكائنات ، OpenAI ، الاستقرار AI ، Ollama
أمثلة على استخدام modelfusion مع Next.js 14 (جهاز توجيه التطبيق):
تدفق الكلام ، OpenAI ، تدفق Elevenlabs ، Vite ، Fastify ، خادم modelfusion
عند ظهور مطالبة، يقوم الخادم بإرجاع كل من الاستجابة النصية والكلامية.
التطبيق الطرفي وكيل BabyAGI
تنفيذ TypeScript لـ BabyAGI classic وBabyBeeAGI.
التطبيق الطرفي وكيل ReAct و GPT-4 ووظائف وأدوات OpenAI
احصل على إجابات للأسئلة من ويكيبيديا، على سبيل المثال "من ولد أولاً، أينشتاين أم بيكاسو؟"
محطة التطبيق وكيل الأدوات GPT-4
وكيل صغير يحل مشاكل الرياضيات في المدرسة المتوسطة. ويستخدم أداة الآلة الحاسبة لحل المسائل.
التطبيق الطرفي ، تحليل PDF ، استخراج المعلومات العودية ، في فهرس ناقل الذاكرة، استرجاع مثال _style ، OpenAI GPT-4 ، حساب التكلفة
يستخرج معلومات حول موضوع ما من ملف PDF ويكتب تغريدة عنه بأسلوبك الخاص.
كلاود فلير ، أوبن إيه آي
قم بإنشاء نص على Cloudflare Worker باستخدام modelfusion وOpenAI.
اقرأ دليل المساهمة modelfusion للتعرف على عملية التطوير، وكيفية اقتراح إصلاحات الأخطاء والتحسينات، وكيفية إنشاء تغييراتك واختبارها.