در دنیای امروز که هوش مصنوعی دیگر یک رویای دوردست نیست و به بخشی جداییناپذیر از زندگی دیجیتال ما تبدیل شده، توانایی ساخت اپلیکیشنهای هوشمند، بهویژه چتباتها، یک مزیت رقابتی فوقالعاده برای توسعهدهندگان و کسبوکارهاست. اما بیایید صادق باشیم؛ ساخت یک چتبات واقعاً هوشمند، سریع و مقیاسپذیر که بتواند فراتر از پاسخهای کلیشهای عمل کند، همیشه چالشبرانگیز بوده است. اینجاست که یک ابزار قدرتمند به نام Vercel AI SDK وارد میدان میشود. در این آموزش چتبات با Vercel AI SDK، قصد داریم شما را از سطح مقدماتی تا ساخت یک چتبات پیشرفته با قابلیت جستجو در پایگاه دانش اختصاصی (RAG) همراهی کنیم. اگر به دنبال ساخت یک دستیار هوش مصنوعی برای کسب و کار خودتان هستید یا صرفا می خواهید دانش خود را در این زمینه بالا ببرید، این مقاله برای شما نوشته شده است. پس آماده شوید تا با هم سفری هیجانانگیز را آغاز کنیم و ببینیم چگونه میتوان با چند قدم ساده، یک چتبات حرفهای را روی پلتفرم Vercel مستقر کرد.
معرفی Vercel AI SDK: جعبهابزار شما برای ساخت چتباتهای نسل جدید
قبل از اینکه آستینها را بالا بزنیم و وارد کدنویسی شویم، بهتر است با ابزار اصلی خود آشنا شویم. Vercel AI SDK یک کتابخانه متنباز و رایگان است که توسط تیم Vercel (سازندگان فریمورک محبوب Next.js) توسعه داده شده است. هدف اصلی این SDK، سادهسازی فرآیند ساخت رابطهای کاربری مکالمهمحور (Conversational UI) است. این کتابخانه به شما اجازه میدهد تا با هر مدل زبانی بزرگ (LLM) و هر ارائهدهندهای (مانند OpenAI, Fireworks, xAI و…) به راحتی کار کنید و یک تجربه استریم پیام (Real-time message streaming) بینقص را برای کاربران خود فراهم کنید.
اما برگ برنده واقعی Vercel، ارائه یک قالب آماده به نام Next.js AI Chatbot است. این قالب یک اپلیکیشن کامل و آماده تولید (Production-Ready) است که تمام پایههای لازم را برای شما فراهم کرده است:
- مبتنی بر Next.js App Router: از جدیدترین و بهینهترین ساختار Next.js برای مسیریابی پیشرفته و عملکرد بالا بهره میبرد.
- کامپوننتهای سرور (RSCs): با استفاده از React Server Components، بخش زیادی از منطق برنامه در سرور اجرا میشود که به افزایش سرعت و بهبود سئو کمک شایانی میکند.
- انعطاف در انتخاب مدل AI: به طور پیشفرض از مدل `grok-2-1212` شرکت xAI استفاده میکند، اما شما میتوانید تنها با تغییر چند خط کد، به مدلهای OpenAI مانند `gpt-4-turbo` یا هر مدل دیگری سوییچ کنید.
- ذخیرهسازی داده (Data Persistence): با استفاده از KV Store ورسل، تاریخچه چتها و دادههای کاربران به راحتی ذخیره میشود.
- استایلدهی با Tailwind CSS: طراحی ظاهری اپلیکیشن با استفاده از Tailwind CSS و کامپوننتهای Shadcn/ui انجام شده که انعطاف و دسترسیپذیری بالایی را فراهم میکند.
به زبان ساده، این قالب نقطه شروعی عالی برای آموزش چتبات با Vercel AI SDK است، زیرا شما را از درگیری با تنظیمات اولیه و زیرساختی بینیاز میکند و اجازه میدهد مستقیماً روی قابلیتهای اصلی چتبات خود تمرکز کنید.
استقرار با یک کلیک: چتبات شما در چند دقیقه آنلاین میشود!
یکی از جذابترین ویژگیهای اکوسیستم Vercel، سهولت استقرار است. شما میتوانید نسخه شخصی خودتان از این قالب چتبات را تنها با یک کلیک روی پلتفرم Vercel مستقر کنید. کافی است به مخزن GitHub قالب Next.js AI Chatbot مراجعه کرده و روی دکمه “Deploy” کلیک کنید. Vercel به صورت خودکار یک نسخه از پروژه را در اکانت گیتهاب شما کپی کرده و آن را برایتان مستقر میکند. در حین فرآیند استقرار، از شما خواسته میشود تا کلیدهای API لازم (مثلاً کلید OpenAI) را وارد کنید. به همین سادگی!
قلب تپنده رابط کاربری: آشنایی عمیق با هوک `useChat`
حالا که با کلیات کار آشنا شدیم، بیایید به سراغ هسته فنی پیادهسازی رابط کاربری چت برویم. Vercel AI SDK یک هوک (Hook) قدرتمند در ریاکت به نام `useChat` ارائه میدهد که تقریباً تمام کارهای سنگین مربوط به مدیریت یک مکالمه را برای شما انجام میدهد. این هوک وظایف زیر را بر عهده دارد:
- مدیریت لیست پیامها (هم پیامهای کاربر و هم پیامهای هوش مصنوعی).
- مدیریت مقدار ورودی کاربر در فیلد متن.
- ارسال پیامها به API شما در سمت سرور.
- دریافت پاسخ استریمشده از مدل و نمایش آن به صورت لحظهای.
- مدیریت وضعیتهای مختلف مکالمه (در حال ارسال، در حال استریم، آماده، خطا).
بیایید نگاهی به یک مثال ساده از نحوه استفاده از این هوک بیندازیم:
'use client';
import { useChat } from '@ai-sdk/react';
export default function Page() {
const { messages, input, handleInputChange, handleSubmit } = useChat();
return (
<div>
{messages.map(message => (
<div key={message.id}>
{message.role === 'user' ? 'User: ' : 'AI: '}
{message.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input name="prompt" value={input} onChange={handleInputChange} />
<button type="submit">Submit</button>
</form>
</div>
);
}همانطور که میبینید، تنها با فراخوانی `useChat()`، شما به تمام ابزارهای لازم برای ساخت یک رابط چت دسترسی دارید. `messages` یک آرایه از اشیاء پیام است، `input` مقدار فعلی فیلد ورودی را نگه میدارد و `handleInputChange` و `handleSubmit` توابعی هستند که باید به ترتیب به رویدادهای `onChange` و `onSubmit` فیلد ورودی و فرم خود متصل کنید. این سادگی، بخش مهمی از فرآیند آموزش چتبات با Vercel AI SDK را تشکیل میدهد.
مدیریت وضعیتهای پیشرفته در `useChat`
قدرت `useChat` فراتر از این مثال ساده است. این هوک وضعیتهای مختلفی را در اختیار شما قرار میدهد که میتوانید از آنها برای بهبود تجربه کاربری استفاده کنید.
- status: این متغیر وضعیت فعلی درخواست را نشان میدهد و میتواند مقادیر `submitted` (ارسال شده)، `streaming` (در حال دریافت پاسخ)، `ready` (آماده برای پیام جدید) یا `error` (بروز خطا) را داشته باشد. شما میتوانید از این وضعیت برای نمایش یک اسپینر لودینگ یا غیرفعال کردن دکمه ارسال استفاده کنید.
- stop(): تابعی برای متوقف کردن دریافت پاسخ از هوش مصنوعی. این قابلیت برای زمانی که کاربر میخواهد پاسخ طولانی را قطع کند، بسیار مفید است.
- reload(): این تابع آخرین پیام کاربر را دوباره به API ارسال میکند تا هوش مصنوعی یک پاسخ جدید تولید کند. این همان دکمه “Regenerate” در چتباتهای معروف است.
- append(): به شما اجازه میدهد به صورت برنامهنویسی یک پیام جدید به لیست پیامها اضافه کرده و آن را برای هوش مصنوعی ارسال کنید.
- setMessages(): به شما کنترل کامل روی آرایه پیامها را میدهد. میتوانید پیامها را حذف یا ویرایش کنید.
این قابلیتها به شما اجازه میدهند تا رابطهای کاربری بسیار پیچیده و کاملی را با کمترین زحمت پیادهسازی کنید. برای اطلاعات بیشتر و دیدن همه قابلیت ها میتوانید از مستندات رسمی وبسایت ورسل نیز استفاده کنید.
گامی فراتر: ساخت چتبات با حافظه و دانش اختصاصی (RAG)
تا اینجا یاد گرفتیم که چگونه یک چتبات استاندارد بسازیم. اما چالش اصلی زمانی شروع میشود که میخواهیم چتبات ما به اطلاعاتی دسترسی داشته باشد که در دادههای آموزشی اولیه مدل وجود نداشته است؛ مثلاً اطلاعات محصولات شرکت شما، مستندات فنی پروژه، یا هر دانش اختصاصی دیگر. راه حل این مشکل، استفاده از یک تکنیک قدرتمند به نام Retrieval-Augmented Generation (RAG) است.
اگر بخواهیم RAG را به زبان ساده توضیح دهیم، اینطور است: به جای اینکه فقط سوال کاربر را به مدل هوش مصنوعی بدهیم، ابتدا در یک پایگاه دانش (Knowledge Base) جستجو میکنیم تا اطلاعات مرتبط با سوال کاربر را پیدا کنیم. سپس، هم سوال کاربر و هم اطلاعات یافتشده را به عنوان “زمینه (Context)” به مدل میدهیم و از او میخواهیم با استفاده از این زمینه به سوال پاسخ دهد.
این فرآیند باعث میشود پاسخهای مدل به شدت دقیقتر، مرتبطتر و مبتنی بر منابع معتبر (که خودمان تعریف کردهایم) باشد. حالا بیایید ببینیم چگونه میتوانیم این سیستم را با استفاده از ابزارهای موجود در آموزش چتبات با Vercel AI SDK پیادهسازی کنیم.
مرحله اول: آمادهسازی زیرساخت (پایگاه داده و Embeddings)
برای پیادهسازی RAG، ما به یک پایگاه داده نیاز داریم که بتواند جستجوی معنایی (Semantic Search) انجام دهد. در این راهنما، از پشته زیر استفاده میکنیم:
- پایگاه داده: Postgres
- افزونه: pgvector (برای ذخیره و جستجوی بردارهای عددی)
- ORM: Drizzle ORM (برای تعامل آسان با پایگاه داده در TypeScript)
اما جستجوی معنایی چگونه کار میکند؟ اینجا مفهومی به نام Embeddings وارد میشود.
Embeddings چیست؟ تبدیل کلمات به اعداد
Embeddings در واقع نمایشهای عددی (برداری) از کلمات، عبارات یا جملات هستند. مدلهای هوش مصنوعی میتوانند متن را به یک بردار چندبعدی از اعداد تبدیل کنند، به طوری که متون با معنای مشابه، بردارهای نزدیک به هم در این فضای عددی داشته باشند. برای مثال، بردار embedding برای “گربه” و “سگ” به هم نزدیکتر است تا بردار “ماشین”.
فرآیند RAG به این صورت عمل میکند:
- Chunking و Indexing: ابتدا تمام دانش خود (مثلاً فایلهای متنی مستندات) را به قطعات کوچکتر (Chunk) تقسیم میکنیم. سپس برای هر Chunk یک Embedding تولید کرده و آن را به همراه متن اصلی در پایگاه داده Postgres (با افزونه pgvector) ذخیره میکنیم.
- Retrieval: وقتی کاربر سوالی میپرسد، ما برای سوال او نیز یک Embedding تولید میکنیم.
- Search: در پایگاه داده، به دنبال Chunkهایی میگردیم که Embedding آنها بیشترین شباهت (از نظر ریاضی، کمترین فاصله کسینوسی) را با Embedding سوال کاربر دارد.
- Augmentation: متن اصلی Chunkهای یافتشده را به عنوان زمینه به مدل میدهیم.
مرحله دوم: گسترش قابلیتهای مدل با “Tools”
حالا سوال اینجاست: چگونه به مدل هوش مصنوعی یاد بدهیم که چه زمانی باید در پایگاه دانش ما جستجو کند؟ پاسخ در استفاده از قابلیت Tools (ابزارها) در Vercel AI SDK نهفته است. Tools توابعی هستند که ما تعریف میکنیم و به مدل اجازه میدهیم در صورت نیاز آنها را فراخوانی کند.
در پروژه RAG ما، دو ابزار اصلی تعریف میکنیم:
ابزار اول: `addResource`
این ابزار به مدل اجازه میدهد تا دانش جدیدی را به پایگاه دانش ما اضافه کند. ما یک توضیح برای این ابزار مینویسیم، مثلاً: “از این ابزار برای افزودن یک منبع یا دانش جدید به پایگاه دانش استفاده کن.”
// در فایل app/api/chat/route.ts
import { createResource } from '@/lib/actions/resources';
import { z } from 'zod';
import { tool } from 'ai';
// ...
tools: {
addResource: tool({
description: `add a resource to your knowledge base.
If the user provides a random piece of knowledge unprompted, use this tool without asking for confirmation.`,
parameters: z.object({
content: z
.string()
.describe('the content or resource to add to the knowledge base'),
}),
execute: async ({ content }) => createResource({ content }),
}),
// ... سایر ابزارها
}وقتی کاربر به چتبات میگوید: “یادت باشه که غذای مورد علاقه من پیتزاست”، مدل هوش مصنوعی تشخیص میدهد که این یک دانش جدید است، ابزار `addResource` را با پارامتر `content: “غذای مورد علاقه من پیتزاست”` فراخوانی میکند و این اطلاعات در پایگاه داده ما ذخیره (و embed) میشود.
ابزار دوم: `getInformation`
این ابزار به مدل اجازه میدهد تا برای پاسخ به سوالات، در پایگاه دانش جستجو کند. توضیح آن میتواند این باشد: “از این ابزار برای گرفتن اطلاعات از پایگاه دانش برای پاسخ به سوالات استفاده کن.”
// در فایل app/api/chat/route.ts
import { findRelevantContent } from '@/lib/ai/embedding';
import { z } from 'zod';
import { tool } from 'ai';
// ...
tools: {
// ... ابزار addResource
getInformation: tool({
description: `get information from your knowledge base to answer questions.`,
parameters: z.object({
question: z.string().describe('the users question'),
}),
execute: async ({ question }) => findRelevantContent(question),
}),
}حالا اگر کاربر بپرسد: “غذای مورد علاقه من چیه؟”، مدل تشخیص میدهد که برای پاسخ به این سوال نیاز به اطلاعات دارد. بنابراین، ابزار `getInformation` را با پارامتر `question: “غذای مورد علاقه من چیه؟”` فراخوانی میکند. تابع `findRelevantContent` ما در پایگاه داده جستجو کرده و متن “غذای مورد علاقه من پیتزاست” را پیدا میکند. این متن به عنوان زمینه به مدل داده میشود و مدل با اطمینان پاسخ میدهد: “غذای مورد علاقه شما پیتزا است!”
این فرآیند، هسته اصلی ساخت یک چتبات قدرتمند و سفارشیشده است و آموزش چتبات با Vercel AI SDK این فرآیند پیچیده را به طرز شگفتانگیزی ساده و قابل مدیریت میکند. شما میتوانید این مفاهیم را گسترش داده و چتباتهایی برای پشتیبانی مشتری، دستیاران کدنویسی شخصی، یا ابزارهای تحلیل اسناد بسازید. همه اینها به لطف قدرت فریم ورک چریکا که یک ابزار قدرتمند است ممکن میشود.
جمعبندی و گامهای بعدی
در این مقاله جامع، یک سفر کامل را در دنیای ساخت چتباتهای هوشمند با Vercel AI SDK طی کردیم. ما از معرفی قالب آماده و استقرار آسان آن شروع کردیم، سپس به قلب تپنده رابط کاربری یعنی هوک `useChat` پرداختیم و با قابلیتهای پیشرفته آن آشنا شدیم. در نهایت، وارد حوزه پیشرفته Retrieval-Augmented Generation (RAG) شدیم و یاد گرفتیم چگونه با استفاده از Embeddings و Tools، به چتبات خود حافظه و دانش اختصاصی ببخشیم.
آنچه یاد گرفتیم در یک نگاه:
- چگونه با استفاده از قالب Next.js AI Chatbot، یک چتبات را با یک کلیک روی Vercel مستقر کنیم.
- چگونه با هوک `useChat`، یک رابط کاربری مکالمهای روان و قدرتمند بسازیم.
- مفهوم RAG چیست و چرا برای ساخت چتباتهای هوشمند ضروری است.
- چگونه از Embeddings برای جستجوی معنایی و از Tools برای گسترش قابلیتهای مدل هوش مصنوعی استفاده کنیم.
اکنون شما تمام دانش لازم برای شروع پروژه بعدی خود در زمینه هوش مصنوعی مکالمهمحور را در اختیار دارید. دنیای آموزش چتبات با Vercel AI SDK بسیار گسترده است و این مقاله تنها نقطه شروعی برای ماجراجویی شماست. پیشنهاد میکنیم مستندات رسمی Vercel AI SDK را مطالعه کرده و با قابلیتهای دیگر آن مانند Generative UI و اجرای کد در مرورگر نیز آشنا شوید.
حالا نوبت شماست! آیا تجربهای در ساخت چتبات با Vercel AI SDK یا ابزارهای مشابه داشتهاید؟ چه چالشها یا ایدههایی در این زمینه دارید؟ نظرات و سوالات خود را در بخش کامنتها با ما و دیگران به اشتراک بگذارید. بیصبرانه منتظر شنیدن تجربیات شما هستیم!
سوالات متداول
Vercel AI SDK چیست و چه کمکی به ساخت چتبات میکند؟
Vercel AI SDK یک کتابخانه متنباز است که فرآیند ساخت رابطهای کاربری مکالمهمحور (Conversational UI) را ساده میکند و امکان تعامل آسان با مدلهای زبانی بزرگ (LLMs) و ارائه تجربه استریم پیام را فراهم میآورد.
قالب Next.js AI Chatbot Vercel چه مزایایی دارد؟
این قالب یک پروژه آماده تولید مبتنی بر Next.js App Router، React Server Components، انعطافپذیری در انتخاب مدل AI، ذخیرهسازی داده با KV Store و استایلدهی با Tailwind CSS است که نقطه شروعی عالی برای ساخت چتبات محسوب میشود.
چگونه میتوان یک چتبات ساخته شده با Vercel AI SDK را به سرعت مستقر کرد؟
با استفاده از قالب Next.js AI Chatbot و کلیک بر روی دکمه “Deploy” در مخزن GitHub آن، میتوانید پروژه را در پلتفرم Vercel مستقر کرده و با وارد کردن کلیدهای API لازم، چتبات خود را آنلاین کنید.
هوک `useChat` در Vercel AI SDK چه وظایفی را بر عهده دارد؟
هوک `useChat` مدیریت لیست پیامها، ورودی کاربر، ارسال پیامها به سرور، دریافت پاسخ استریمشده و مدیریت وضعیتهای مکالمه (مانند در حال ارسال، در حال استریم، خطا) را بر عهده دارد.
تکنیک RAG (Retrieval-Augmented Generation) در ساخت چتبات با Vercel AI SDK به چه معناست؟
RAG به فرآیندی گفته میشود که در آن ابتدا اطلاعات مرتبط از یک پایگاه دانش بازیابی شده و سپس به همراه سوال کاربر به مدل هوش مصنوعی داده میشود تا پاسخهای دقیقتر و مبتنی بر دانش اختصاصی ارائه دهد.
چگونه میتوان به چتبات با Vercel AI SDK دانش اختصاصی (مانند مستندات شرکت) اضافه کرد؟
با استفاده از تکنیک RAG، میتوانید دانش خود را به قطعات کوچکتر تقسیم کرده، Embeddings تولید کنید و در پایگاه داده ذخیره نمایید. سپس با استفاده از قابلیت Tools، مدل را قادر میسازید تا در صورت نیاز در این پایگاه دانش جستجو کرده و از اطلاعات آن استفاده کند.








