در قلب هوش مصنوعی مولد ، مدلهای هوش مصنوعی قرار دارند. دو نمونه برجسته از مدلهای تولیدی، مدلهای زبان بزرگ (LLM) و مدلهای تولید تصویر هستند. این مدلها ورودی را دریافت میکنند که اعلان نامیده میشود (معمولاً متن، تصویر یا ترکیبی از هر دو)، و از آن به عنوان خروجی متن، تصویر یا حتی صدا یا ویدیو تولید میکنند.
خروجی این مدل ها می تواند به طرز شگفت آوری متقاعد کننده باشد: LLM ها متنی را تولید می کنند که به نظر می رسد می تواند توسط یک انسان نوشته شده باشد، و مدل های تولید تصویر می توانند تصاویری تولید کنند که بسیار نزدیک به عکس های واقعی یا آثار هنری خلق شده توسط انسان هستند.
علاوه بر این، LLM ها ثابت کرده اند که قادر به انجام وظایفی فراتر از تولید متن ساده هستند:
- نوشتن برنامه های کامپیوتری
- برنامه ریزی وظایف فرعی که برای تکمیل یک کار بزرگتر مورد نیاز است.
- سازماندهی داده های سازمان نیافته
- درک و استخراج داده های اطلاعاتی از مجموعه ای از متن.
- دنبال کردن و انجام فعالیت های خودکار بر اساس شرح متنی فعالیت.
مدل های زیادی از چندین ارائه دهنده مختلف در دسترس شماست. هر مدلی نقاط قوت و ضعف خاص خود را دارد و ممکن است یک مدل در یک کار برتر باشد اما در برخی دیگر عملکرد کمتری داشته باشد. برنامههایی که از هوش مصنوعی مولد استفاده میکنند، اغلب میتوانند بسته به وظیفهای که در دست دارند، از چندین مدل مختلف استفاده کنند.
بهعنوان یک توسعهدهنده اپلیکیشن، معمولاً مستقیماً با مدلهای هوش مصنوعی مولد تعامل نمیکنید، بلکه از طریق سرویسهایی که بهعنوان APIهای وب در دسترس هستند، تعامل دارید. اگرچه این سرویس ها اغلب عملکردهای مشابهی دارند، اما همه آنها را از طریق API های مختلف و ناسازگار ارائه می دهند. اگر می خواهید از چندین سرویس مدل استفاده کنید، باید از هر یک از SDK های اختصاصی آنها استفاده کنید که به طور بالقوه با یکدیگر ناسازگار هستند. و اگر میخواهید از یک مدل به جدیدترین و قویترین مدل ارتقا دهید، ممکن است مجبور شوید دوباره آن یکپارچهسازی را ایجاد کنید.
Genkit با ارائه یک رابط واحد که جزئیات دسترسی به هر سرویس مدل هوش مصنوعی مولد را با چندین پیاده سازی از پیش ساخته شده در حال حاضر در دسترس است، به این چالش رسیدگی می کند. ساختن اپلیکیشن مبتنی بر هوش مصنوعی بر اساس Genkit، فرآیند برقراری اولین تماس هوش مصنوعی مولد شما را ساده میکند و ترکیب چند مدل یا تعویض یک مدل با مدل دیگر را با ظهور مدلهای جدید به همان اندازه ساده میکند.
قبل از شروع
اگر می خواهید نمونه کدهای موجود در این صفحه را اجرا کنید، ابتدا مراحل راهنمای Get Start را کامل کنید. همه مثال ها فرض می کنند که شما قبلاً Genkit را به عنوان یک وابستگی در پروژه خود نصب کرده اید.
مدل های پشتیبانی شده توسط Genkit
Genkit به گونه ای طراحی شده است که به اندازه کافی انعطاف پذیر باشد تا از هر سرویس مدل مولد هوش مصنوعی استفاده کند. کتابخانه های اصلی آن رابط مشترک را برای کار با مدل ها تعریف می کنند و پلاگین های مدل جزئیات پیاده سازی را برای کار با یک مدل خاص و API آن تعریف می کنند.
تیم Genkit پلاگین هایی را برای کار با مدل های ارائه شده توسط Vertex AI، Google Generative AI و Ollama نگهداری می کند:
- خانواده جمینی LLM، از طریق افزونه Google Cloud Vertex AI .
- خانواده LLMهای جمینی، از طریق افزونه هوش مصنوعی گوگل .
- Gemma 3، Llama 4، و بسیاری از مدل های باز دیگر، از طریق پلاگین Ollama (شما باید سرور Ollama را خودتان میزبانی کنید).
بارگیری و پیکربندی پلاگین های مدل
قبل از اینکه بتوانید از Genkit برای شروع تولید محتوا استفاده کنید، باید یک پلاگین مدل را بارگیری و پیکربندی کنید. اگر از راهنمای شروع به کار آمده اید، قبلاً این کار را انجام داده اید. در غیر این صورت، راهنمای شروع به کار یا مستندات هر افزونه را ببینید و قبل از ادامه مراحل را در آنجا دنبال کنید.
تابع genkit.Generate()
.
در Genkit، رابط اصلی که از طریق آن با مدلهای هوش مصنوعی مولد تعامل میکنید، تابع genkit.Generate()
است.
ساده ترین فراخوانی genkit.Generate()
مدلی را که می خواهید استفاده کنید و یک دستور متنی را مشخص می کند:
import (
"context"
"log"
"github.com/firebase/genkit/go/ai"
"github.com/firebase/genkit/go/genkit"
"github.com/firebase/genkit/go/plugins/googlegenai"
)
func main() {
ctx := context.Background()
g, err := genkit.Init(ctx,
genkit.WithPlugins(&googlegenai.GoogleAI{}),
genkit.WithDefaultModel("googleai/gemini-2.0-flash"),
)
if err != nil {
log.Fatal(err)
}
resp, err := genkit.Generate(ctx, g,
ai.WithPrompt("Invent a menu item for a pirate themed restaurant."),
)
if err != nil {
log.Fatal(err)
}
log.Println(resp.Text())
}
هنگامی که این مثال کوتاه را اجرا می کنید، برخی از اطلاعات اشکال زدایی را چاپ می کند و به دنبال آن خروجی فراخوانی genkit.Generate()
که معمولاً مانند مثال زیر به صورت متن Markdown خواهد بود:
## The Blackheart's Bounty
**A hearty stew of slow-cooked beef, spiced with rum and molasses, served in a
hollowed-out cannonball with a side of crusty bread and a dollop of tangy
pineapple salsa.**
**Description:** This dish is a tribute to the hearty meals enjoyed by pirates
on the high seas. The beef is tender and flavorful, infused with the warm spices
of rum and molasses. The pineapple salsa adds a touch of sweetness and acidity,
balancing the richness of the stew. The cannonball serving vessel adds a fun and
thematic touch, making this dish a perfect choice for any pirate-themed
adventure.
اسکریپت را دوباره اجرا کنید و خروجی متفاوتی خواهید داشت.
نمونه کد قبلی، درخواست تولید را به مدل پیشفرض ارسال کرد، که شما هنگام پیکربندی نمونه Genkit آن را مشخص کردید.
همچنین می توانید یک مدل برای یک فراخوانی genkit.Generate()
مشخص کنید:
resp, err := genkit.Generate(ctx, g,
ai.WithModelName("googleai/gemini-2.5-pro"),
ai.WithPrompt("Invent a menu item for a pirate themed restaurant."),
)
شناسه رشته مدل شبیه providerid/modelid
است، جایی که شناسه ارائه دهنده (در این مورد، googleai
) افزونه را شناسایی می کند، و شناسه مدل یک شناسه رشته خاص پلاگین برای نسخه خاصی از یک مدل است.
این مثالها همچنین یک نکته مهم را نشان میدهند: زمانی که از genkit.Generate()
برای فراخوانیهای مدل هوش مصنوعی مولد استفاده میکنید، تغییر مدلی که میخواهید استفاده کنید، انتقال مقدار متفاوتی به پارامتر مدل است. با استفاده از genkit.Generate()
به جای SDK های مدل بومی، به خود انعطاف پذیری می دهید تا راحت تر از چندین مدل مختلف در برنامه خود استفاده کنید و در آینده مدل ها را تغییر دهید.
تاکنون فقط نمونه هایی از ساده ترین فراخوانی های genkit.Generate()
دیده اید. با این حال، genkit.Generate()
همچنین یک رابط برای تعاملات پیشرفته تر با مدل های تولیدی ارائه می دهد که در بخش های بعدی خواهید دید.
سیستم درخواست می کند
برخی از مدلها از ارائه اعلان سیستم پشتیبانی میکنند، که به مدل دستورالعملهایی درباره نحوه پاسخگویی به پیامهای کاربر میدهد. میتوانید از فرمان سیستم برای تعیین ویژگیهایی مانند شخصیتی که میخواهید مدل اتخاذ کند، لحن پاسخهای آن و قالب پاسخهای آن استفاده کنید.
اگر مدلی که استفاده میکنید از سیستم پشتیبانی میکند، میتوانید یکی را با گزینه WithSystem()
ارائه کنید:
resp, err := genkit.Generate(ctx, g,
ai.WithSystem("You are a food industry marketing consultant."),
ai.WithPrompt("Invent a menu item for a pirate themed restaurant."),
)
برای مدلهایی که از دستورات سیستم پشتیبانی نمیکنند، WithSystem()
آن را با تغییر درخواست بهگونهای شبیهسازی میکند که مانند یک فرمان سیستم ظاهر شود.
پارامترهای مدل
تابع genkit.Generate()
یک گزینه WithConfig()
می گیرد که از طریق آن می توانید تنظیمات اختیاری را تعیین کنید که نحوه تولید محتوا را مدل کنترل می کند:
resp, err := genkit.Generate(ctx, g,
ai.WithModelName("googleai/gemini-2.0-flash"),
ai.WithPrompt("Invent a menu item for a pirate themed restaurant."),
ai.WithConfig(&googlegenai.GeminiConfig{
MaxOutputTokens: 500,
StopSequences: ["<end>", "<fin>"],
Temperature: 0.5,
TopP: 0.4,
TopK: 50,
}),
)
پارامترهای دقیقی که پشتیبانی میشوند به هر مدل و API مدل بستگی دارد. با این حال، پارامترهای مثال قبلی تقریباً برای هر مدلی مشترک است. در زیر توضیحی در مورد این پارامترها ارائه شده است:
پارامترهایی که طول خروجی را کنترل می کنند
MaxOutputTokens
LLM ها بر روی واحدهایی به نام توکن عمل می کنند. یک نشانه معمولاً، اما لزوماً به دنباله خاصی از کاراکترها نگاشت می شود. هنگامی که یک درخواست را به یک مدل ارسال می کنید، یکی از اولین گام هایی که انجام می شود این است که رشته درخواست خود را به دنباله ای از توکن ها تبدیل کنید . سپس، LLM دنباله ای از توکن ها را از ورودی توکن شده تولید می کند. در نهایت، دنباله توکن ها دوباره به متن تبدیل می شود که خروجی شماست.
پارامتر حداکثر توکن های خروجی محدودیتی را برای تعداد توکن های تولید شده با استفاده از LLM تعیین می کند. هر مدلی به طور بالقوه از یک توکنایزر متفاوت استفاده می کند، اما یک قانون کلی خوب این است که یک کلمه انگلیسی را از 2 تا 4 توکن در نظر بگیرید.
همانطور که قبلاً گفته شد، برخی از نشانه ها ممکن است به دنباله کاراکترها نگاشت نشوند. یکی از این نمونهها این است که اغلب رمزی وجود دارد که پایان دنباله را نشان میدهد: وقتی یک LLM این توکن را تولید میکند، تولید بیشتر متوقف میشود. بنابراین، ممکن است و اغلب اتفاق میافتد که یک LLM توکنهای کمتری نسبت به حداکثر تولید کند، زیرا توکن «stop» را تولید کرده است.
StopSequences
میتوانید از این پارامتر برای تنظیم توکنها یا توکنهایی استفاده کنید که وقتی تولید میشوند، پایان خروجی LLM را نشان میدهند. مقادیر صحیح برای استفاده در اینجا به طور کلی به نحوه آموزش مدل بستگی دارد و معمولاً توسط افزونه مدل تنظیم می شود. با این حال، اگر از مدل خواستهاید که توالی توقف دیگری ایجاد کند، میتوانید آن را در اینجا مشخص کنید.
توجه داشته باشید که دنباله کاراکترها را مشخص میکنید، نه توکنها را فی نفسه. در بیشتر موارد، یک توالی کاراکتر را مشخص میکنید که توکنایزر مدل آن را به یک توکن نگاشت میکند.
پارامترهای کنترل کننده "خلاقیت"
پارامترهای دما ، top-p و top-k با هم کنترل میکنند که میخواهید مدل چقدر "خلاقانه" باشد. این بخش توضیحات بسیار مختصری درباره معنای این پارامترها ارائه می دهد، اما نکته مهمتر این است: این پارامترها برای تنظیم کاراکتر خروجی یک LLM استفاده می شوند. مقادیر بهینه برای آنها به اهداف و ترجیحات شما بستگی دارد و احتمالاً فقط از طریق آزمایش یافت می شوند.
دما
LLM ها اساساً ماشین های پیش بینی نشانه هستند. برای یک دنباله معین از نشانه ها (مانند اعلان) یک LLM، برای هر نشانه در واژگان خود، احتمال اینکه توکن بعدی در دنباله باشد، پیش بینی می کند. دما یک فاکتور مقیاسپذیر است که پیشبینیها قبل از نرمال شدن به احتمال بین 0 و 1 بر اساس آن تقسیم میشوند.
مقادیر دمای پایین - بین 0.0 و 1.0 - تفاوت احتمالات بین توکنها را تقویت میکند، در نتیجه مدل حتی کمتر احتمال دارد که توکنی را تولید کند که قبلاً بعید ارزیابی شده بود. این اغلب به عنوان خروجی کمتر خلاقانه تلقی می شود. اگرچه 0.0 از نظر فنی یک مقدار معتبر نیست، بسیاری از مدل ها آن را به عنوان نشان دهنده این است که مدل باید قاطعانه رفتار کند و تنها یک توکن محتمل را در نظر بگیرد.
مقادیر دمای بالا - آنهایی که بیشتر از 1.0 هستند - اختلاف احتمالات بین نشانهها را فشرده میکنند و در نتیجه احتمال تولید نشانههایی که قبلاً بعید به نظر میرسید مدل بیشتر میشود. این اغلب به عنوان خروجی خلاقانه تلقی می شود. برخی از APIهای مدل حداکثر دما را اعمال می کنند که اغلب 2.0 است.
TopP
Top-p مقداری بین 0.0 و 1.0 است که با مشخص کردن احتمال تجمعی توکنها، تعداد توکنهای ممکنی را که میخواهید مدل در نظر بگیرد، کنترل میکند. به عنوان مثال، مقدار 1.0 به این معنی است که هر توکن ممکن را در نظر بگیرید (اما همچنان احتمال هر توکن را در نظر بگیرید). مقدار 0.4 به این معنی است که فقط محتمل ترین توکن ها را در نظر بگیرید که احتمال آن ها 0.4 است و بقیه توکن ها را از بررسی حذف کنید.
TopK
Top-k یک مقدار صحیح است که همچنین تعداد توکنهای ممکنی را که میخواهید مدل در نظر بگیرد، کنترل میکند، اما این بار با مشخص کردن صریح حداکثر تعداد توکنها. تعیین مقدار 1 به این معنی است که مدل باید به طور قطعی رفتار کند.
با پارامترهای مدل آزمایش کنید
شما می توانید با استفاده از Developer UI تاثیر این پارامترها را بر خروجی تولید شده توسط مدل های مختلف و ترکیب های سریع آزمایش کنید. رابط کاربری توسعه دهنده را با دستور genkit start
شروع کنید و به طور خودکار تمام مدل های تعریف شده توسط افزونه های پیکربندی شده در پروژه شما بارگیری می شود. شما می توانید به سرعت دستورات و مقادیر پیکربندی مختلف را بدون نیاز به انجام مکرر این تغییرات در کد امتحان کنید.
مدل را با پیکربندی آن جفت کنید
با توجه به اینکه هر ارائهدهنده یا حتی یک مدل خاص ممکن است طرح پیکربندی خاص خود را داشته باشد یا تنظیمات خاصی را تضمین کند، ممکن است با استفاده از WithModelName()
و WithConfig()
گزینههای جداگانه تنظیم شوند، زیرا دومی به شدت روی اولی تایپ نشده است.
برای جفت کردن یک مدل با پیکربندی آن، میتوانید یک مرجع مدل ایجاد کنید که به جای آن میتوانید آن را به فراخوانی ایجاد کنید:
model := googlegenai.GoogleAIModelRef("gemini-2.0-flash", &googlegenai.GeminiConfig{
MaxOutputTokens: 500,
StopSequences: ["<end>", "<fin>"],
Temperature: 0.5,
TopP: 0.4,
TopK: 50,
})
resp, err := genkit.Generate(ctx, g,
ai.WithModel(model),
ai.WithPrompt("Invent a menu item for a pirate themed restaurant."),
)
if err != nil {
log.Fatal(err)
}
سازنده مرجع مدل الزام می کند که نوع پیکربندی صحیح ارائه شود که ممکن است عدم تطابق را کاهش دهد.
خروجی ساختاریافته
هنگامی که از هوش مصنوعی مولد به عنوان یک مؤلفه در برنامه خود استفاده می کنید، اغلب خروجی را در قالبی غیر از متن ساده می خواهید. حتی اگر فقط محتوا تولید میکنید تا به کاربر نمایش دهید، میتوانید از خروجی ساختاریافته صرفاً به منظور ارائه جذابتر آن به کاربر بهره ببرید. اما برای کاربردهای پیشرفتهتر هوش مصنوعی مولد، مانند استفاده برنامهای از خروجی مدل، یا تغذیه خروجی یک مدل به مدل دیگر، خروجی ساختاریافته ضروری است.
در Genkit، هنگام فراخوانی genkit.Generate()
میتوانید با تعیین نوع خروجی، خروجی ساختاریافته را از یک مدل درخواست کنید:
type MenuItem struct {
Name string `json:"name"`
Description string `json:"description"`
Calories int `json:"calories"`
Allergens []string `json:"allergens"`
}
resp, err := genkit.Generate(ctx, g,
ai.WithPrompt("Invent a menu item for a pirate themed restaurant."),
ai.WithOutputType(MenuItem{}),
)
if err != nil {
log.Fatal(err) // One possible error is that the response does not conform to the type.
}
انواع خروجی مدل به عنوان طرحواره JSON با استفاده از بسته invopop/jsonschema
مشخص می شوند. این بررسی نوع زمان اجرا را فراهم می کند که شکاف بین انواع Go استاتیک و خروجی غیرقابل پیش بینی مدل های هوش مصنوعی تولیدی را پر می کند. این سیستم به شما امکان می دهد کدی بنویسید که می تواند بر این واقعیت تکیه کند که یک تماس تولید موفق همیشه خروجی مطابق با انواع Go شما را برمی گرداند.
وقتی یک نوع خروجی را در genkit.Generate()
مشخص می کنید، Genkit چندین کار را در پشت صحنه انجام می دهد:
- درخواست را با راهنمایی بیشتر در مورد فرمت خروجی انتخاب شده تقویت می کند. این همچنین یک اثر جانبی دارد که به مدل مشخص میکند که دقیقاً چه محتوایی را میخواهید تولید کنید (به عنوان مثال، نه تنها یک آیتم منو را پیشنهاد دهید، بلکه یک توضیح، فهرستی از آلرژنها و غیره را نیز ایجاد کنید).
- تأیید می کند که خروجی با طرح مطابقت دارد.
- خروجی مدل را به یک نوع Go تبدیل می کند.
برای دریافت خروجی ساختاریافته از یک فراخوانی موفق، Output()
در پاسخ مدل با مقدار خالی از نوع فراخوانی کنید:
var item MenuItem
if err := resp.Output(&item); err != nil {
log.Fatalf(err)
}
log.Printf("%s (%d calories, %d allergens): %s\n",
item.Name, item.Calories, len(item.Allergens), item.Description)
از طرف دیگر، میتوانید genkit.GenerateData()
برای فراخوانی مختصرتر استفاده کنید:
item, resp, err := genkit.GenerateData[MenuItem](ctx, g,
ai.WithPrompt("Invent a menu item for a pirate themed restaurant."),
)
if err != nil {
log.Fatal(err)
}
log.Printf("%s (%d calories, %d allergens): %s\n",
item.Name, item.Calories, len(item.Allergens), item.Description)
این تابع به پارامتر نوع خروجی نیاز دارد اما به طور خودکار گزینه WithOutputType()
را تنظیم می کند و قبل از برگرداندن مقدار resp.Output()
فراخوانی می کند.
رسیدگی به خطاها
در مثال قبلی توجه داشته باشید که فراخوانی genkit.Generate()
می تواند منجر به خطا شود. یک خطای احتمالی ممکن است زمانی رخ دهد که مدل نتواند خروجی منطبق با طرح را تولید کند. بهترین استراتژی برای مقابله با چنین خطاهایی به استفاده دقیق شما بستگی دارد، اما در اینجا چند نکته کلی وجود دارد:
یک مدل متفاوت را امتحان کنید . برای موفقیت در خروجی ساختاریافته، مدل باید قادر به تولید خروجی در JSON باشد. قدرتمندترین LLM ها مانند Gemini به اندازه کافی همه کاره هستند که این کار را انجام دهند. با این حال، مدلهای کوچکتر، مانند برخی از مدلهای محلی که با Ollama استفاده میکنید، ممکن است نتوانند خروجی ساختاریافته را به طور قابل اعتماد تولید کنند، مگر اینکه به طور خاص برای انجام این کار آموزش دیده باشند.
طرحواره را ساده کنید . LLM ها ممکن است در تولید انواع پیچیده یا عمیق تو در تو با مشکل مواجه شوند. اگر نمیتوانید دادههای ساختیافته را بهطور قابل اعتمادی تولید کنید، از نامهای واضح، فیلدهای کمتر، یا ساختار مسطح استفاده کنید.
genkit.Generate()
را فراخوانی کنید . اگر مدلی که انتخاب کردهاید به ندرت موفق به تولید خروجی منطبق نمیشود، میتوانید با خطا همانطور رفتار کنید که با خطای شبکه برخورد میکنید و با استفاده از نوعی استراتژی افزایشی پسآف، درخواست را دوباره امتحان کنید.
پخش جریانی
هنگام تولید مقادیر زیادی متن، میتوانید با ارائه خروجی به هنگام تولید - پخش جریانی خروجی، تجربه را برای کاربران خود بهبود بخشید. نمونهای آشنا از جریان در عمل را میتوان در اکثر برنامههای چت LLM مشاهده کرد: کاربران میتوانند پاسخ مدل به پیام خود را در حین تولید بخوانند، که پاسخگویی درک شده برنامه را بهبود میبخشد و توهم چت کردن با همتای هوشمند را افزایش میدهد.
در Genkit، میتوانید خروجی را با استفاده از گزینه WithStreaming()
استریم کنید:
resp, err := genkit.Generate(ctx, g,
ai.WithPrompt("Suggest a complete menu for a pirate themed restaurant."),
ai.WithStreaming(func(ctx context.Context, chunk *ai.ModelResponseChunk) error {
// Do something with the chunk...
log.Println(chunk.Text())
return nil
}),
)
if err != nil {
log.Fatal(err)
}
log.Println(resp.Text())
ورودی چندوجهی
نمونه هایی که تا کنون مشاهده کرده اید از رشته های متنی به عنوان درخواست های مدل استفاده کرده اند. در حالی که این رایجترین راه برای درخواست مدلهای هوش مصنوعی مولد باقی میماند، بسیاری از مدلها میتوانند رسانههای دیگر را نیز به عنوان درخواست بپذیرند. اعلانهای رسانه اغلب همراه با اعلانهای متنی استفاده میشوند که به مدل دستور میدهند تا برخی از عملیاتها را روی رسانه انجام دهد، مانند نوشتن شرح تصویر یا رونویسی یک ضبط صوتی.
توانایی پذیرش ورودی رسانه و انواع رسانه ای که می توانید استفاده کنید کاملاً به مدل و API آن بستگی دارد. به عنوان مثال، سری مدلهای Gemini 2.0 میتوانند تصاویر، ویدیو و صدا را به عنوان درخواست بپذیرند.
برای ارائه اعلان رسانه ای به مدلی که از آن پشتیبانی می کند، به جای ارسال یک اعلان متنی ساده به genkit.Generate()
یک آرایه متشکل از یک بخش رسانه و یک قسمت متنی را ارسال کنید. این مثال تصویری را با استفاده از یک URL HTTPS قابل دسترس برای عموم مشخص می کند.
resp, err := genkit.Generate(ctx, g,
ai.WithModelName("googleai/gemini-2.0-flash"),
ai.WithMessages(
NewUserMessage(
NewMediaPart("image/jpeg", "https://example.com/photo.jpg"),
NewTextPart("Compose a poem about this image."),
),
),
)
همچنین میتوانید دادههای رسانه را مستقیماً با رمزگذاری آن به عنوان URL داده ارسال کنید. به عنوان مثال:
image, err := ioutil.ReadFile("photo.jpg")
if err != nil {
log.Fatal(err)
}
resp, err := genkit.Generate(ctx, g,
ai.WithModelName("googleai/gemini-2.0-flash"),
ai.WithMessages(
NewUserMessage(
NewMediaPart("image/jpeg", "data:image/jpeg;base64," + base64.StdEncoding.EncodeToString(image)),
NewTextPart("Compose a poem about this image."),
),
),
)
همه مدلهایی که از ورودی رسانه پشتیبانی میکنند، هم از URLهای داده و هم از نشانیهای اینترنتی HTTPS پشتیبانی میکنند. برخی از پلاگین های مدل، از منابع رسانه ای دیگر پشتیبانی می کنند. به عنوان مثال، افزونه Vertex AI همچنین به شما امکان می دهد از آدرس های اینترنتی Cloud Storage ( gs://
) استفاده کنید.
مراحل بعدی
درباره Genkit بیشتر بدانید
- بهعنوان یک توسعهدهنده اپلیکیشن، راه اصلی تأثیرگذاری بر خروجی مدلهای هوش مصنوعی مولد از طریق درخواست است. دستورالعملهای مدیریت با Dotprompt را بخوانید تا بدانید چگونه Genkit به شما کمک میکند تا دستورات مؤثر ایجاد کنید و آنها را در پایگاه کد خود مدیریت کنید.
- اگرچه
genkit.Generate()
هسته هر برنامه مولد مبتنی بر هوش مصنوعی است، برنامه های کاربردی دنیای واقعی معمولاً قبل و بعد از فراخوانی یک مدل هوش مصنوعی مولد به کار اضافی نیاز دارند. برای انعکاس این موضوع، Genkit مفهوم جریانها را معرفی میکند که مانند توابع تعریف میشوند، اما ویژگیهای اضافی مانند مشاهدهپذیری و استقرار سادهشده را اضافه میکنند. برای کسب اطلاعات بیشتر، به تعریف گردش کار هوش مصنوعی مراجعه کنید.
استفاده از LLM پیشرفته
تکنیکهایی وجود دارد که برنامه شما میتواند از آن استفاده کند تا از LLM سود بیشتری ببرد.
- یکی از راههای افزایش قابلیتهای LLM این است که فهرستی از راههایی را که میتوانند از شما اطلاعات بیشتری درخواست کنند یا از شما درخواست کنند تا اقداماتی را انجام دهید، در اختیار آنها قرار دهید. این به عنوان فراخوانی ابزار یا فراخوانی تابع شناخته می شود. مدلهایی که برای پشتیبانی از این قابلیت آموزش دیدهاند، میتوانند به یک درخواست با یک پاسخ فرمتبندی شده ویژه پاسخ دهند، که به برنامه فراخوان نشان میدهد که باید اقداماتی را انجام دهد و نتیجه را همراه با درخواست اصلی به LLM ارسال کند. Genkit دارای توابع کتابخانه ای است که هم تولید سریع و هم عناصر حلقه پاسخ به تماس یک پیاده سازی فراخوانی ابزار را خودکار می کند. برای کسب اطلاعات بیشتر به تماس با ابزار مراجعه کنید.
- Retrieval-Augmented Generation (RAG) تکنیکی است که برای معرفی اطلاعات خاص دامنه به خروجی مدل استفاده می شود. این کار با درج اطلاعات مرتبط در یک اعلان قبل از انتقال آن به مدل زبان انجام می شود. یک پیادهسازی کامل RAG به شما نیاز دارد که چندین فناوری را با هم ترکیب کنید: مدلهای تولید جاسازی متن، پایگاههای داده برداری و مدلهای زبان بزرگ. برای اینکه بدانید چگونه Genkit روند هماهنگی این عناصر مختلف را ساده می کند، به نسل افزوده شده بازیابی (RAG) مراجعه کنید.