توی مقالهی «Agent چیست» دیدیم که ایجنت یعنی یه هوش مصنوعی که علاوه بر حرفزدن، واقعاً یه کاری انجام میده. حالا وقتشه دستبهکار شیم و با هم یه ایجنت واقعی بسازیم: یه ایجنت چتِ نوبتدهی که با کاربر حرف میزنه، تقویم رو چک میکنه و خودش نوبت ثبت میکنه — مثلاً بهجای اینکه با خودِ دکتر تماس بگیری، با ایجنت چت میکنی و برات وقت میگیره. و همهش رایگان.
با چی میسازیمش؟
ابزارمون OpenCode ئه، چون مدلهای رایگان میده (Claude Code هم عالیه ولی اینجا میخوایم رایگان پیش بریم). یه پروژهی جدید میسازیم و یه مدل رایگان انتخاب میکنیم. این بار PRD آماده نمیکنیم؛ آرومآروم و با گفتوگو جلو میریم و کانتکستویندوزِ مدل رو کمکم آماده میکنیم.
(نکتهی همیشگی: Claude فارسی رو میفهمه ولی نمایشِ راستبهچپش عالی نیست و معمولاً با انگلیسی — حتی انگلیسیِ شکسته — جوابِ بهتری میگیری، چون مدلها بیشتر با انگلیسی آموزش دیدن.)
اول یه تصمیم: LLM، Rule-based یا RAG؟
موقع ساخت، ازت میپرسه ایجنت چه نوعی باشه:
- Rule-based: همون باتهای قدیمی که فقط کد بودن و هیچ هوش مصنوعیای پشتشون نبود (مثل باتهای یاهو مسنجر).
- LLM-powered: هستهش یه مدل زبانیه (همون چیزی که ما میخوایم).
- RAG: یه لایهی دانش (شبیه دیتابیس، ولی مخصوص هوش مصنوعی با embedding و وکتور) به مدل اضافه میکنه. اوایل خیلی لازم بود چون کانتکستویندوزها کوچیک بودن؛ الان اگه دانشت زیاد نیست، میتونی مستقیم بذاریش توی همون کانتکست و شاید اصلاً RAG لازم نداشته باشی.
ما ساده میریم: LLM-powered.
ترفندِ رایگان: AI Pass بهجای API key
برای اینکه مدل وصل شه، یه راه اینه که بری از ChatGPT یه API key بگیری. سادهترش اینه که از AI Pass استفاده کنی: یه اکانت بساز، یه Space درست کن، یه API key و یه پرامپتِ آماده بهت میده که فقط کافیه به هوش مصنوعی بدی. (میتونی ۱ دلار اعتبار رایگان هم بگیری.) من مدلِ Gemini Flash رو انتخاب کردم چون سریعه و برای ایجنت بهاندازهی کافی خوبه.
بهش گفتم یه چتِ ساده بسازه، تست کردیم، جواب گرفتیم — کار کرد. UIش رو بهتر کردیم و یه markdown parser اضافه کردیم تا خروجی تمیز نشون داده شه. (فعلاً دیتا توی localStorageِ مرورگر ذخیره میشه؛ برای نسخهی واقعی میشه یه دیتابیس وصل کرد.)
دمو: گرفتن نوبت
نوشتم «میخوام یه نوبت بگیرم»، و ایجنت وقتهای خالی رو نشون داد، یه زمان پیشنهاد داد، اسم و شماره رو پرسید و نوبت رو ثبت کرد. یعنی واقعاً یه ایجنت ساختیم. حالا بریم ببینیم چطور کار میکنه — این بخش مهمه.
قلبِ ماجرا: سیستمپرامپت
وقتی کد رو باز کردم، دیدم همهچی به یه سیستمپرامپت برمیگرده (حدود ۱۰۰ خط، نه دو خط). توی این سیستمپرامپت اینا ریخته شده:
- پرسونا: «تو یه دستیارِ کمککنندهای که میتونه نوبت ثبت کنه.»
- تاریخ و ساعتِ الان، ساعاتِ کاری، و بازهی مجاز (مثلاً تا ۷ روز آینده).
- نوبتهای گرفتهشده و وقتهای خالی — کد قبل از ارسال، حساب میکنه کدوم ساعتها پُرن و کدوم خالی، و همه رو بهصورتِ یه رشتهی متنی میذاره توی پرامپت.
- قانونها: اول وقتهای خالی رو پیشنهاد بده، قبل از نهاییکردن اسم و شماره بپرس، هیچوقت دوباره یه ساعت رو بوک نکن، اگه زمانِ خواستهشده پُر بود نزدیکترین زمان رو پیشنهاد بده.
اینجاست که نکتهی کلیدیِ context window خودشو نشون میده: هوش مصنوعی در واقع توی همین کانتکستویندوز «زندگی میکنه» — هرچی بهتر آمادهش کنی، بهتر و دقیقتر جواب میده.
فانکشنکالینگ در عمل
برای ثبتِ نوبت، به مدل گفته شده وقتی همهچی اوکی شد، یه تگِ خاص با یه فرمتِ مشخص توی جوابش بذاره. این تگ میره توی متنِ چت، ولی کدِ ما (یه parser) اون رو تشخیص میده، اطلاعاتِ وسطش (تاریخ، اسم، شماره) رو درمیاره و واقعاً فانکشنِ ثبتِ نوبت رو (یه AppointmentManager) صدا میزنه. این دقیقاً همون prompt-based tool use ئه که توی مقالهی Agent گفتیم. و چون همهچی روی prompt سواره، میتونی راحت مدل رو عوض کنی (مثلاً از Gemini به GPT) و باز هم کار میکنه.
توکنها، هزینه و یه ترفند
سیستمپرامپتِ این ایجنت حدود ۲۷۰ توکن بود — در برابرِ کانتکستِ ۲۵۰هزار-تا-یکمیلیونی، اصلاً زیاد نیست. حتی اگه چند برابر هم بشه (با اضافهشدنِ دیتا) مشکلی نیست؛ یه عددِ منطقی برای سیستمپرامپت جایی حول ۵هزار توکنه و برای دیتای اضافه میتونی تا دهها هزار توکن هم بری.
ولی یه نکته: هر بار کلِ مکالمه دوباره برای مدل ارسال میشه، پس هرچی گفتوگو طولانیتر بشه، هزینه بیشتر میشه (هزینه به تعدادِ توکن وصله). یه راهکار context caching ئه: بهجای ارسالِ دوبارهی کلِ پیامها، مدل یه شناسه میده و دفعهی بعد فقط پیامِ جدید رو میفرستی — ارزونتر و سریعتر. (روی همهی مدلها نیست، و برای نسخهی اولِ یه ایجنتِ ساده اصلاً لازمش نداری.)
از اینجا به بعد
این ایجنت نوبتها رو داخلیِ خودش ذخیره میکنه. با کمی وقتِ بیشتر میشه: به Google Calendar وصلش کرد، روی یه دیتابیسِ واقعی ذخیره کرد، یا موقعِ ثبتِ نوبت برای هر دو طرف ایمیل/پیامک فرستاد.
و قدمهای بعدی هیجانانگیزترن: میشه بهش صدا اضافه کرد (voice agent)، بعد تبدیلش کرد به یه ایجنتِ ریلتایمِ صوتی مثل حالتِ صوتیِ ChatGPT، و حتی یه آواتارِ تصویری که باهات حرف میزنه.
خلاصه: با OpenCode و یه مدل رایگان و یه AI Pass Space، یه ایجنتِ واقعیِ نوبتدهی ساختیم — بدون پول و بدون پیچیدگی. اگه دوست داری مرحلهبهمرحله ببینیش، ویدیوش رو از پایین تماشا کن. 🙌


دیدگاهتان را بنویسید