نحوه ساخت و استقرار یک ربات چت هوش مصنوعی مانند ChatGPT بدون کارت اعتباری

بررسی اجمالی
- ما از این الگوی ارائه شده توسط vercel شروع می کنیم که با NextJs 13 App Directory با فعال کردن عملکردهای سرور و Vercel AI SDK برای رابط کاربری چت استریم ساخته شده است.
- تمام خدمات لازم را مرحله به مرحله پیکربندی کنید.
- همه خدمات دارای یک طرح رایگان بدون نیاز به روش پرداخت هستند.
- محدودیت نرخ قابل تنظیم را برای جلوگیری از سوء استفاده در استقرار خود اعمال کنید.
- ما از پلتفرم vercel استفاده خواهیم کرد، اما آشنایی با vercel پیش نیاز نیست.
- کد در github موجود است
فهرست مطالب
پیکربندی خدمات
ارائه دهنده مدل
ما از صورت در آغوش گرفتن برای مدل خود استفاده خواهیم کرد.
چرا به جای OpenAI از صورت در آغوش گرفتن استفاده کنیم؟ صرفاً به این دلیل که یک طرح رایگان دارد و نیازی به پیوست کردن هیچ روش پرداختی ندارید.
- ایجاد یک حساب کاربری در صورت در آغوش گرفتن
- به تنظیمات حساب بروید و یک توکن ایجاد کنید.
- توکن را به عنوان ذخیره کنید
HUGGINGFACE_API_KEY
در فایل env.
احراز هویت
ما از github oauth برای احراز هویت از طریق NextAuth استفاده خواهیم کرد.
- از اینجا یک برنامه oauth جدید در github ثبت کنید
- یک نام برای برنامه بگذارید و بقیه را به این صورت پر کنید:
- توجه داشته باشید که این برای توسعه محلی است، برای استقرار یک برنامه جدید را ثبت کنید و همه نمونه های آن را جایگزین کنید
http://localhost:3000
با آدرس اینترنتی آن استقرار. - یک راز مشتری جدید ایجاد کنید.
- شناسه مشتری را به عنوان کپی کنید
AUTH_GITHUB_ID
و راز مشتری به عنوانAUTH_GITHUB_SECRET
در فایل env. - برای ایجاد یک رشته تصادفی امن به این لینک بروید و آن را به عنوان ذخیره کنید
AUTH_SERCRET
در فایل env. این برای NextAuth برای کار در تولید مورد نیاز است.
پایگاه داده
برای ذخیره چت ها از پایگاه داده KV vercel استفاده می کنیم.
-
در vercel ثبت نام کنید یا وارد شوید.
- اگر با ایمیل ثبت نام کرده اید، حساب github خود را از تنظیمات متصل کنید.
- به ذخیره سازی بروید و یک پایگاه داده KV ایجاد کنید. توجه داشته باشید که شما فقط می توانید یک پایگاه داده KV در پلن رایگان داشته باشید.
- پایگاه داده ای را که ایجاد کرده اید انتخاب کنید و روی تب .env.local کلیک کنید. محتویات را در فایل env خود کپی کنید.
بالادست
ما از upstash برای محدود کردن نرخ استفاده خواهیم کرد. اگر به محدودیت نرخ نیاز ندارید، می توانید از این مرحله صرف نظر کنید.
- به کنسول upstash بروید.
- بر روی Create Database کلیک کنید، منطقه مورد نظر خود را انتخاب کرده و آن را فعال کنید
Eviction
گزینه. - در جزئیات، به
REST API
بخش و روی تب env. کلیک کنید. - مقادیر را کپی کرده و در فایل env خود قرار دهید.
محدود کردن نرخ
در هر حساب
app/api/chat/route.ts:
const ratelimit = new Ratelimit({
redis: redis,
limiter: Ratelimit.slidingWindow(15, '1 d')
})
export async function POST(req: NextRequest) {
const { userId } = auth()
const { success, reset } = await ratelimit.limit(userId!)
if (!success) {
return new Response(
`Your rate limit has been exceeded. You can chat again from ${new Date(
reset
).toLocaleString()} GMT`
)
}
.
.
.
}
این بخشی از کد است که مسئول محدود کردن نرخ است. شما می توانید مقادیر را مطابق با نیازهای خود انتخاب کنید. در اینجا، من آن را روی 15 درخواست در روز تنظیم کرده ام. میتوانید از «m» برای دقیقه، «s» برای ثانیه استفاده کنید. همچنین میتوانید پیامی را که در صورت تجاوز از حد مجاز نشان داده میشود، تغییر دهید. را reset
متغیر یک مهر زمانی یونیکس را در میلی ثانیه از زمانی که محدودیت نرخ برای این کاربر بازنشانی میشود، برمیگرداند که به رشتهای مانند تبدیل میشود. 7/18/2023, 6:00:00 AM
به ازای IP
همچنین می توانید به ازای هر آدرس IP به محدودیت امتیاز دهید. به جای استفاده از userId، ip را به عنوان پارامتر به ratelimit.limit منتقل کنید.
export async function POST(req: NextRequest) {
const ip = req.ip ?? "127.0.0.1"
const { success, reset } = await ratelimit.limit(ip)
.
.
.
}
req.ip
در لوکال هاست تعریف نشده است، به همین دلیل است که ما قرار می دهیم 127.0.0.1
به عنوان مقدار بازگشتی
اگر محدود کردن نرخ نمیخواهید، واردات redis و RateLimit را در بالای فایل حذف کنید و تمام خطوط را که به آنها اشاره میکنند حذف کنید.
گسترش
قبل از ادامه، مطمئن شوید که مقادیر تمام متغیرهای محیط ضروری را در فایل env. پر کرده اید. اگر می خواهید به صورت محلی اجرا کنید، مخزن را شبیه سازی کنید و بسته ها را با آن نصب کنید pnpm install
. سپس سرور توسعه دهنده را با اجرا کنید pnpm dev
یک پروژه جدید در vercel راه اندازی کنید
- مخزن را چنگال کنید.
- یک پروژه جدید در vercel ایجاد کنید.
- مخزن فورک شده را وارد کنید.
- تنظیم
Environment Variables
با توجه به فایل env شما. توجه داشته باشید که نیازی به کپی کردن جفت های مقادیر کلیدی یک به یک نیست، فقط کل فایل را کپی کنید، مکان نما را در قسمت Name و Ctrl-v قرار دهید. - روی deploy کلیک کنید
اما هنوز کارمان تمام نشده است. ما deploy را می زنیم تا یک پروژه جدید ایجاد شود. Vercel دامنه های منحصر به فردی را به استقرارها اختصاص می دهد. برای کار کردن github oauth باید از یک دامنه ثابت استفاده کنید.
برنامه Github OAuth را پیکربندی کنید
- به داشبورد vercel بروید. و پروژه خود را انتخاب کنید.
- کلیک کنید روی
Settings
را برگه و بهDomains
بخش. - دامنه را به دلخواه خود تنظیم کنید و URL کامل را کپی کنید.
- یک برنامه جدید سوگند github را از اینجا ثبت کنید.
- URL Homapage را به عنوان دامنه ای که قبلاً کپی کرده اید تنظیم کنید.
- URL بازگشت به تماس مجوز را به عنوان تنظیم کنید
your-domain-url/api/auth/callback
. - حالا به قسمت project Settings در vercel بروید و سپس به
Environment Variables
بخش. - ویرایش کنید
AUTH_GITHUB_ID
وAUTH_GITHUB_SECRET
و مانند قبل آن را با مقدار برنامه جدید github oauth جایگزین کنید. - در حالت ایده آل، شما باید از موارد مختلف استفاده کنید
AUTH_SERCRET
در محیط داخلی و تولیدی برای امنیت بهتر. یک رشته تصادفی از اینجا بگیرید و ویرایش کنیدAUTH_SERCRET
.
LLM را تغییر دهید
با تغییر پارامتر مدل به راحتی می توانید مدل ها را تغییر دهید Hf.textGenerationStream()
بر /api/chat/rout.ts
. صورت در آغوش گرفتن امکان دسترسی به مدل های زیادی را فراهم می کند. اگر مدلی از استریم پشتیبانی میکند و اندازه کوچکی دارد، میتوانید بدون تغییر کد عمده از مدلی استفاده کنید. شما باید اصلاح کنید buildOpenAssistantPrompt
روش prompt برای قالب بندی درخواست ها با توجه به مشخصات مدل. مدلی که ما استفاده می کنیم، دستور کاربر را به عنوان دریافت می کند <|prompter|>${prompt}<|endoftext|>
و پاسخ های قبلی مدل در این قالب انتظار می رود <|assistant|>${content}<|endoftext|>
. این قالب بسته به مدل متفاوت خواهد بود.
می توانید از ارائه دهندگان LLM به غیر از چهره در آغوش گرفته مانند Anthropic، Langchain و OpenAI نیز استفاده کنید. این سند را دنبال کنید تا کنترل کننده مسیر (/api/chat/route.ts) را تغییر دهید و به بخش ارائه دهنده LLM انتخابی خود مراجعه کنید.
منو پیدا کن
💻 Github
🔘 لینکدین
⭕ توییتر