𝗠𝘆 𝗖𝗼𝗱𝗶𝗻𝗴 𝗔𝗴𝗲𝗻𝘁 𝗙𝗶𝗻𝗶𝘀𝗵𝗲𝗱 𝗧𝗵𝗲 𝗧𝗮𝘀𝗸. 𝗪𝗵𝘆 𝗗𝗶𝗱 𝗧𝗵𝗲 𝗧𝗵𝗿𝗲𝗮𝗱 𝗗𝗶𝗲?

بدترین باگ در یک عامل کدنویسی، کرش کردن نیست.

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

از نظر شما، این همان گفتگو است. اما از نظر سیستم، اتمام یک وظیفه اغلب به این معناست که نشست (session) تمام شده است. سیستم دوباره از صفر شروع می‌کند.

هنگام ساخت CliGate، متوجه شدم که سه لایه مختلف را با هم ترکیب کرده‌ام:

این‌ها یکی نیستند.

یک گفتگو، فضایی طولانی‌مدت برای صحبت کردن است. یک نشست زمان اجرا (runtime session)، رشته‌ی کاری برای آن گفتگو است. یک نوبت (turn)، یک اجرای واحد در داخل آن نشست است.

وقتی یک وظیفه کامل می‌شود، فقط نوبت باید تمام شود. نشست باید فعال باقی بماند.

جریانِ خراب به این صورت است: کاربر وظیفه‌ای را می‌خواهد -> نشست زمان اجرا شروع می‌شود -> وظیفه تمام می‌شود -> گفتگو نشست فعال را پاک می‌کند -> پیگیری بعدی یک نشست کاملاً جدید را شروع می‌کند.

این موضوع باعث از کار افتادن پیگیری‌های کوتاه می‌شود، مانند:

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

من این مشکل را با صریح کردن مدل حل کردم:

من دیگر اتمام وظیفه را به معنای مرگ نشست در نظر نمی‌گیرم. این تغییر کوچک، حس کل محصول را بهبود می‌بخشد.

در CliGate، یک نشست جدید فقط در صورتی شروع می‌شود که:

این با طرز فکر انسان‌ها مطابقت دارد. کاربر انتظار دارد یک تب چت مانند یک رشته‌ی گفتگوی مداوم عمل کند. این موضوع در اپلیکیشن‌های موبایل مانند Telegram یا Feishu حیاتی است.

منطق جدید ساده است:

این کار باعث می‌شود عامل بیشتر شبیه به یک همکار به نظر برسد تا یک ابزار اجرای دستور.

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

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

منبع: https://dev.to/codekingai/my-coding-agent-finished-the-task-why-did-the-thread-die-2jk2

انجمن یادگیری اختیاری: https://t.me/GyaanSetuAi