Faragiri

آموزش ایجنت‌هاهوش مصنوعی

ایجنت یک مدل است با ابزار و یک متن که دور می‌زند. آنچه به‌طور پیش‌فرض ندارد قاعده توقف است و هر راهی برای اینکه موفق بودن را از درست بودن جدا کند.

۶بخش
۶دقیقه خواندن
۲عمق

حلقه

چهار گام که دور می‌زنند، و هیچ جایی برای بررسی ندارند

هر گام گام بعدی را تغذیه می‌کند و چهارمی اولی را. هر بررسی‌ای که باشد باید داخل یکی از این چهارتا زندگی کند.

یک گام از یک اجرا

  • ۰۱هرچه تا اینجا هست را بخوانکل متن اجرا، از اول، دوباره
  • ۰۲یک ابزار و ورودی‌هایش را انتخاب کنیک حدس، به همان معنایی که یک جمله حدس است
  • ۰۳ابزار اجرا می‌شودو گزارش می‌دهد که اجرا شد، نه اینکه درست بود
  • ۰۴نتیجه را ته متن بچسبانحالا جزو چیزی است که دفعه بعد خوانده می‌شود

این شکل نمی‌گوید یک دور چقدر طول می‌کشد یا چقدر خرج برمی‌دارد، و همان دو عدد است که تعیین می‌کند حلقه‌ای که ایستادن بلد نیست تا کجا می‌رود.

ایجنت یک حلقه است: مدل ابزار را انتخاب می‌کند، ابزار اجرا می‌شود، نتیجه برمی‌گردد. بعد همین دوباره، تا وقتی چیزی جلویش را بگیرد. تمام تفاوت یک ایجنت با یک پنجره چت در همان کلمه آخر است، و آن کلمه چیزی است که کسی ننوشته.

در این حلقه گامی به اسم راستی‌آزمایی نیست. هر بررسی‌ای که قرار است انجام شود باید داخل یکی از همان چهار گام جا داده شود، وگرنه انجام نمی‌شود؛ و چون حلقه بدون آن هم می‌چرخد، نبودنش هیچ خطایی تولید نمی‌کند. این صفحه درباره همان جای خالی است، نه درباره اینکه ایجنت چه چیزهایی می‌تواند بکند.

ابزاری که موفق برمی‌گرداند چه چیزی را گفته است

ابزاری که موفق برمی‌گرداند گفته تماس برقرار شد، نه اینکه جواب درست است. کد بازگشتی درباره لوله حرف می‌زند نه درباره محتوا: صفحه بالا آمد، پرس‌وجو اجرا شد، پیام رفت. مدل این را می‌خواند و هیچ راهی ندارد بفهمد بین «چیزی پیدا نشد» و «چیزی نبود» کدام‌یک اتفاق افتاده، چون هر دو یک شکل دارند: یک نتیجه خالی با علامت موفقیت روی آن.

راه‌حلش در خود ابزار است نه در دستور: به ابزار راهی بدهید که بگوید نمی‌دانم، وگرنه حلقه مقدار را می‌سازد. یک تابع موجودی که سه حالت برمی‌گرداند، موجود و ناموجود و پیدانشده، ایجنت را وادار می‌کند حالت سوم را جایی ببرد؛ همان تابع با دو حالت، حالت سوم را در سکوت به حالت دوم تا می‌کند.

گل‌فروشی رشت، و یازده مشتری که جواب اشتباه گرفتند

مهسا کیانی یک گل‌فروشی اینترنتی کوچک در رشت دارد و روزی حدود سی پیام «موجوده؟» می‌گیرد. یک ایجنت ساخت که خودش جواب بدهد، با سه ابزار.

  • خواندن دفتر موجودی: نام گل را می‌گیرد و تعداد را برمی‌گرداند.
  • خواندن صفحه پیک: کد شهر را می‌گیرد و می‌گوید امروز ارسال هست یا نه.
  • فرستادن جواب: متن را می‌گیرد و در پنل پیام‌رسان می‌فرستد.

روز سوم، یازده نفر که «رز هلندی» خواسته بودند جواب گرفتند که موجود نیست. رزها در یخچال بودند. سطر دفتر را کسی با کیبورد عربی زده بود، یعنی حرف آخرِ آن کلمه در دفتر همان حرفی نیست که ایجنت دنبالش گشت. برای چشم شما یکی‌اند و برای جست‌وجو دو نویسه متفاوت‌اند. ابزار صفر سطر برگرداند و کنارش نوشت موفق، مدل صفر را ناموجود خواند، و متن جواب کاملاً درست و مودبانه بود.

هیچ‌جای این ماجرا خرابی مدل نیست. تنها چیزی که لازم بود این بود که ابزار به جای صفر بگوید «چنین نامی در دفتر نیست»، و مدل آن‌وقت چیزی داشت که نتواند نادیده‌اش بگیرد. مهسا همین یک خط را عوض کرد و همان روز دو غلط دیگر از همین جنس بیرون افتاد.

اینجا ابزارها بیشتر مرورگرند تا رابط برنامه‌نویسی

این خرابی در ایران شکل خاص خودش را دارد. پنل پیامکی، سامانه انبار، درگاه فروشگاه: بیشتر چیزهایی که یک کسب‌وکار کوچک ایرانی هر روز با آن‌ها کار می‌کند رابط برنامه‌نویسی ندارند و فقط یک صفحه وب فارسی‌اند. پس ابزار ایجنت در عمل یک مرورگر است که همان صفحه را می‌راند.

و ابزاری که مرورگر است نمی‌تواند بگوید پیدا نشد، می‌گوید صفحه بالا آمد. جدول خالی و جدول پرنشده و جدولی که هنوز در حال بارگذاری است، هر سه یک اسکرین‌شات موفق‌اند. اگر ابزارهای شما از این جنس‌اند، سه حالت را باید خودتان در همان تابع بسازید: متن مشخصی را روی صفحه پیدا کن، و اگر نبود صریح بگو نبود.

قاعده توقف، و اجازه‌هایی که یک‌جا داده می‌شوند

قاعده توقف همان چیزی است که کسی نمی‌نویسد. حلقه‌ای که نمی‌داند کی تمام شده تا وقتی چیزی خارج از آن جلویش را بگیرد ادامه می‌دهد، و آن چیز معمولاً یا اعتبار تمام‌شده است یا کسی که ساعت یازده شب نگاهش به صفحه افتاده. قاعده توقف سه تکه دارد و هر سه عدد یا شرطند: بیشترین تعداد گام، بیشترین خرج، و شرطی که می‌گوید کار تمام است. سومی سخت‌ترین است چون باید بشود از بیرون بررسی‌اش کرد.

و هر ابزاری که می‌دهید یک اجازه است، و وقت مصرفش را مدل تعیین می‌کند. این جمله را کند بخوانید: اجازه را شما یک بار می‌دهید و لحظه استفاده‌اش را کسی می‌گیرد که در آن لحظه دارد محتمل‌ترین ادامه را انتخاب می‌کند. ابزار «فرستادن پیام» یعنی اجازه نوشتن به مشتری، همیشه، بی‌آنکه هر بار پرسیده شود.

ترتیب

کرانه آن‌طرف جلوتر نیست، ترتیب خواندن دیگری است

این طرف یک نفر هر خروجی را می‌خواند. آن طرف کسی پشت میز نیست، و هر تخته به خاطر چیزی گذاشته شده که با نگاه کردن گیر نمی‌افتد.

شما هر کلمه را می‌خوانیدیک خروجی، یک نگاه، یک نفر که متوجه می‌شد
  1. ۰۱حلقهچهار گام، و اینکه هرکدام چه می‌تواند بداند و چه نه
  2. ۰۲ابزارهاهرکدام یک اجازه، که وقت خرجش را مدل تعیین می‌کند
  3. ۰۳قاعده توقفتخته‌ای که کسی نمی‌گذارد، و همان که آدم‌ها از رویش می‌افتند
  4. ۰۴متن اجراتنها حافظه‌ای که هست، و پر می‌شود
  5. ۰۵حلقه یک نفر دیگرهماهنگی، و فقط وقتی یک حلقه کسل‌کننده شده باشد
هیچ‌کس نمی‌خواندصدها خروجی، یک خلاصه بالای صفحه، در یک روز شلوغ

تخته‌های بی‌ترتیب هم پلی می‌سازند که می‌شود رویش راه رفت، و سختی همین است. شکاف فقط در گذری معلوم می‌شود که کسی تماشایش نمی‌کند.

ایست: روزی که خواندن متن اجرا تمام می‌شود

متن گفت‌وگو تنها حافظه است، و حلقه سریع‌تر از یک گفت‌وگو پرش می‌کند: هر گام یک درخواست ابزار و یک نتیجه اضافه می‌کند. خواندنش هم تنها راه بررسی است. ده اجرای اول را همه می‌خوانند.

ایست همین‌جاست و شکل عجیبی دارد: هیچ روزی نیست که در آن تصمیم گرفته شود دیگر خوانده نشود. متن‌ها بلندتر می‌شوند، جواب‌ها خوب می‌مانند، و یک روز شلوغ می‌آید. برای مهسا آن روز، روز مادر است. آن روز کسی متن اجرا را باز نمی‌کند و از آن به بعد هم باز نمی‌شود، چون عادتِ نخواندن از همان‌جا شروع شده و هیچ‌چیز خرابی اعلام نکرده. بررسی بدون آنکه لغو شود تعطیل می‌شود، و اولین هزینه واقعی‌اش هفته‌ها بعد از پشت تلفن می‌رسد.

ابزار نوشتن، وقتی صفحه رابط برنامه‌نویسی ندارد

Model Context Protocol از ۲۰۲۶ جای نوشتن یک پوشش صدا زدن تابع برای هر دستیار را گرفته است: یک مشخصات باز با سرورهای مرجع متن‌باز، پس راه رایگانش کل راه است. ارزش عملی‌اش برای شما این است که یک ابزار را یک بار می‌نویسید و به چند دستیار وصلش می‌کنید، و همان سه‌حالتی بودن را هم یک بار می‌سازید.

Playwright از ۲۰۲۶ جای کلیک کردن روی همان پنل فارسی با دست، هر روز، را گرفته و رایگان و متن‌باز است؛ وقتی صفحه‌ای رابط برنامه‌نویسی ندارد این جدی‌ترین راه است، و مهم‌ترین کارش این است که می‌شود به جای اسکرین‌شات، وجود یک متن مشخص را شرط کرد. Git هم از ۲۰۲۶ جای خواندن تک‌تک فایل‌هایی را گرفته که یک ایجنت دست زده تا بفهمید چه کرده است؛ رایگان و متن‌باز است، و روی کاری که فایل می‌نویسد تنها چیزی است که نخواندن متن اجرا را قابل جبران می‌کند.

شش تکه، و چرا هماهنگی آخر از همه است

اول مرز میان یک گفت‌وگو و یک ایجنت، چون تا این مرز روشن نباشد بقیه اسم‌اند. بعد اجازه دادن به مدل که کاری بکند به جای اینکه توصیفش کند و بلافاصله بعد از آن مرزهایی که سپردن اختیار را بی‌خطر می‌کنند، چون این دو یک چیزند که از دو طرف نگاه شده. بعد آنچه یک ایجنت بین گام‌ها و بین اجراها به یاد می‌آورد، و بعد ایجنت‌هایی که یک کدبیس را می‌خوانند و می‌نویسند، که پرکارترین نمونه امروزند و بهترین جا برای دیدن یک حلقه واقعی. آخر از همه چیدن چند گام، یا چند ایجنت.

چیزی که آدم‌ها زودتر از موعد سراغش می‌روند همین آخری است: چند ایجنت، پیش از آنکه یک ایجنت کسل‌کننده شده باشد. دو حلقه‌ای که هیچ‌کدام قاعده توقف ندارند یک سامانه نیستند، دو برابر همان مسئله‌اند، و پیدا کردن اینکه خرابی از کدامشان آمده حالا خودش کار است. اینجا یک پله بالاتر از جایی است که هر کلمه را خودتان می‌خوانید، و آن نردبان در کار کردن با مدل‌ها، فهمیدنشان، و ساختن با آن‌ها کشیده شده است.

ایجنتی که پوسته و مرورگر و کلید دارد، به همان اندازه که توانایی تازه است سطح حمله تازه است، و دفاع از سیستم‌ها، و اول از همه فهمیدن حمله‌ها جایی است که این نگرانی اسم و دسته‌بندی پیدا می‌کند. اگر قرار است این حلقه داخل نرم‌افزار خودتان برود، گذاشتن یک مدل داخل نرم‌افزار خودتان صفحه بعدی است. و کیفیت هر گام حلقه هنوز به همان چیزی برمی‌گردد که در گرفتن جواب به‌دردبخور، به جای جوابی که فقط قانع‌کننده به نظر می‌رسد ساخته می‌شود.

و یک سوال می‌ماند که هیچ ابزاری جوابش را نمی‌دهد: چه کسی متن اجرا را می‌خواند، و در کدام روز هفته. تا وقتی جوابش یک اسم و یک ساعت مشخص نباشد، جوابش هیچ‌کس است.

کنار این

بالای این