ساخت ایجنت شخصی AI روی پلن رایگان کلادفلر — معماری Talorys و ساختن نسخه خودت
نویسنده: آرش لطیفی
پروژه متنباز Talorys نشان میده چطور با Pages + Worker + Durable Object و Workers AI یک دستیار شخصی هوش مصنوعی کاملاً در اکانت خودت اجرا کنی — بدون سرور، بدون دیتابیس، بدون اشتراک ماهانه.
TL;DR — پروژه متنباز Talorys (در HN روز ۱۰ اکتبر ۳۰۱ آپدیت گرفت) نشون میده یک ایجنت شخصی AI کامل با چت، حافظه، تسک و اتوماسیون روی پلن رایگان کلادفلر قابل استقراره: Pages برای فرانت، Worker خصوصی برای API، Durable Object با SQLite برای داده و زمانبندی، و Workers AI برای مدل چت.
این مقاله رو با یک سیگنال واقعی شروع میکنم: سهشنبه ۱۰ اکتبر، پست Talorys روی Hacker News به فرانت رسید (۳۰۱ امتیاز، ۱۳۷ کامنت در لحظه بررسی). پروژه یک دستیار شخصی AI متنبازه که «تماماً داخل اکانت Cloudflare خودت» اجرا میشه. جذابیتش برای دولوپرها دو چیزه: معماری تمیز روی سرویسهای رایگان، و بحث جنجالی کامنتها درباره معنی «self-hosted». هر دو رو اینجا باز میکنم.
معماری: چهار سرویس، بدون هیچ سرویس پولی
طبق README رسمی پروژه، Talorys از این اجزا استفاده میکنه:
Browser ──HTTPS──▶ Cloudflare Pages (React + /api Pages Function)
│ service binding (بدون URL عمومی)
▼
Private Worker (روتر Hono)
│ getAgentByName("personal-agent")
▼
Durable Object (Cloudflare Agents SDK)
├─ SQLite: مکالمات، حافظه، تسکها، اتوماسیونها
├─ Workers AI: مدل @cf/zai-org/glm-4.7-flash
└─ Alarms: ریمایندر و زمانبندی تکرارشونده
| سرویس کلادفلر | نقش | پلن رایگان | | --- | --- | --- | | Pages | فرانتاند + Pages Function | بله | | Workers | API Worker خصوصی | بله | | Durable Objects (SQLite) | همه دادهها + آلارمها | بله | | Workers AI | مدل چت | بله، سهمیه روزانه |
نکتههای معماری که ارزش دقت دارن:
- Worker هیچ URL عمومی نداره. با
workers_dev: falseدیپلوی میشه و مرورگر فقط با سایت*.pages.devحرف میزنه؛ درخواستهای/api/*از طریق service binding به Worker میرن. یعنی API مستقیماً از اینترنت قابل دسترسی نیست. - اتوزیشن روی سمت Worker اتفاق میفته، نه فرانتاند. پسورد owner با PBKDF2-SHA256 هش میشه و فقط بهعنوان Cloudflare secret ذخیره میشه.
- چت بهصورت SSE استریم میشه از سرتاسر زنجیره تا مرورگر.
- آلارمهای Durable Object یعنی برای ریمایندرها هیچ چیزی نباید همیشه روشن و آنلاین بمونه.
پلن رایگان واقعاً کافیه؟
Workers AI بر اساس واحدی به اسم Neuron صورتحساب میشه. طبق مستندات رسمی قیمتگذاری (آخرین بهروزرسانی ۹ اکتبر ۲۰۲۶):
- قیمت: $0.011 بهازای هر ۱۰۰۰ Neuron
- پلن رایگان: ۱۰,۰۰۰ Neuron در روز رایگان
- بالاتر از اون نیازمند Workers Paid
این عدد یعنی استفاده شخصی روزانه (چت، خلاصهسازی، چند فراخوانی ابزار) معمولاً در سهمیه رایگان جا میشه، ولی اگر ایجنت رو برای استفاده سنگین یا چندنفره ببری، سریع به سقف میخوری. Talorys این رو هم پیشبینی کرده: «بدون AI هم کار میکنه» — یعنی اگر Workers AI در دسترس نباشه یا سهمیه تموم بشه، تسکها و یادداشتها و ریمایندرها به کارشون ادامه میدن.
بحث جالب کامنتها: «self-hosted» یعنی چی؟
قسمت سرگرمکننده ترد HN این بود: سازنده ادعا میکرد بدون اتکا به سرویس هاستشده کسی دیگر، و کامنتها فوراً پاسخ دادند «پس کلادفلر چی میشه؟» یک کامنت خلاصه بود: «Where do I download cloudflare?»
این بحث بیفایده نیست — درس عملی داره. وقتی معماریای میسازی که دادههای شخصی (حافظه، تسکها، مکالمات) رو نگه میداره، سؤال درست این نیست که «روی سرور خودمه یا نه»، بلکه اینه:
- داده کجا ذخیره میشه؟ (اینجا: SQLite داخل Durable Object خودت، خروجیگرفتنی)
- کلیدهای دسترسی کی داره؟ (اینجا: فقط secrets اکانت خودت)
- اگر سرویس پلتفرم فردا تغییر قیمت داد یا بسته شد، migrate چقدر سخته؟ (اینجا: منطق اصلی Hono استانداره، ولی Durable Object وابستگی سخت به کلادفلره)
پس دقیقتره بگیم «self-ownede روی پلتفرم ابری» تا self-hosted به معنای کلاسیکش.
اگر بخوای خودت بسازی — چکلیست
- [ ] اکانت Cloudflare با Node.js 22+ (Wrangler همراه Node میاد)
- [ ] یک Durable Object با SQLite backend بساز؛ همه state رو همونجا نگه دار — نه در KV جدا
- [ ] Worker رو با
workers_dev: falseدیپلوی کن و از Pages Function با service binding وصلش کن - [ ] مدل چت رو با binding
@cf/...از Workers AI بگیر و استریم SSE برگردون - [ ] ریمایندرها رو با
alarm()پیاده کن، نه cron خارجی - [ ] سقف Neurons روزانه رو در UI نشون بده تا کاربر بدونه کی سهمیه تموم میشه
- [ ] حالت degrade بدون AI رو تست کن — تسکها و یادداشتها باید بدون مدل کار کنن
جای این معماری در پروژههای خودت
اگر قبلاً ایجنت هوشمند در Next.js یا webhook زرینپال کار کردی، این الگو مکملشه: هرجا به state پایدار + زمانبندی + استریم نیاز داری و نمیخوای سرور نگه داری، همین ترکیب (Pages + Worker + Durable Object + Workers AI) یک جایگزین کمهزینه و واقعی برای VPS + دیتابیس + cron است.
FAQ
Q: این پلن رایگان برای تولید (production) مناسبه؟
برای یک کاربر (خودت) بله — همین هدف Talorys هم هست: single-user by design، بدون signup و تیم. برای محصول چندکاربره، سقفهای Workers AI و Durable Object باید جدی محاسبه بشن و احتمالاً به پلن پولی میرسی.
Q: دادههای من کجا نگه داشته میشه؟
در SQLite داخل Durable Object اکانت کلادفلر خودت. سازنده به هیچ سرور یا دیتابیسی از خودش دسترسی نداره — معماری طوریه که اصلاً سرویسی از طرف توسعهدهنده وجود نداره.
Q: مدل چت چیه و چرا مدل بزرگ نیست؟
@cf/zai-org/glm-4.7-flash — یک مدل سبک داخل کاتالوگ Workers AI. برای دستیار شخصی با ابزارهای ساده (تسک، حافظه، ریمایندر) کافیه؛ برای reasoning سنگین محدودیت حس میشه.