پرش به محتوای اصلی
پرش به محتوای مقاله

تفکیک دستورات Re-run و Continue در SolonCode؛ راهکاری برای مدیریت خطاهای عامل‌ها

·۲ شهریور ۱۴۰۵۷ دقیقه مطالعه۲ بازدید
راهنما
دو دکمه در SolonCode Web: اجرای مجدد و ادامه — دو معنا، دو هدف
دو دکمه در SolonCode Web: اجرای مجدد و ادامه — دو معنا، دو هدف
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

معرفی دو دستور مجزای `/rerun` و `/continue` برای تفکیک بازنشانی کامل وضعیت از ازسرگیری زنجیره استدلال در یک عامل کدنویسی.

«یکی برای پاک کردن یک اشتباه و دیگری برای به پایان رساندن یک فکر ناقص.» این توصیف دقیق از قابلیت دستورات دوگانه است که از ۲۴ اوت ۲۰۲۶ در اختیار توسعه‌دهندگان SolonCode قرار گرفته است. با جداسازی این دو اقدام، SolonCode رایج‌ترین نقاط اصطکاک در گردش‌های کاری عامل‌محور (Agentic Workflows) را حل می‌کند: منطق نادرست و توقف زودهنگام.

بسیاری از رابط‌های کاربری هوش مصنوعی، گزینه «تلاش مجدد» (Retry) را به عنوان یک درخواست کلی برای دریافت یک پاسخ جدید در نظر می‌گیرند. این رویکرد اغلب کاربران را مجبور می‌کند بین از دست دادن پاسخی که تا حد زیادی درست است یا ارسال دستی پرامپت‌هایی مانند «ادامه بده» (Keep going) یکی را انتخاب کنند؛ اتفاقی که می‌تواند منجر به انحراف زمینه (Context Drift) در گفتگو شود. SolonCode این مشکل را با تقسیم فرآیند بازیابی به دو دستور مجزا در بک‌اند حل کرده است: /rerun و /continue.

تصور کنید در حال انتقال یک سرویس قدیمی جاوا به یک فریم‌ورک مدرن هستید. اگر هوش مصنوعی الگویی را پیشنهاد دهد که معماری شما را می‌شکند، شما نمی‌خواهید روی آن اشتباه «ادامه» دهید؛ بلکه می‌خواهید آن را حذف کرده و دوباره تلاش کنید. در مقابل، اگر هوش مصنوعی ۹۰٪ کد را بنویسد اما به دلیل محدودیت توکن‌ها متوقف شود، منطقی نیست که آن ۹۰٪ بی‌نقص را دوباره تولید کنید تا فقط ۱۰٪ باقی‌مانده را دریافت کنید.

زمینه: رابط کاربری (User Interface)

در رابط کاربری وب SolonCode، هر ردیف از پاسخ‌های هوش مصنوعی دارای چهار آیکون عملیاتی در سمت راست است. در حالی که گزینه Copy محتوا را به کلیپ‌بورد منتقل می‌کند و Delete پاسخ جاری و هر آنچه بعد از آن آمده است را حذف می‌کند، دکمه‌های Re-run و Continue ابزارهای اصلی برای هدایت عامل (Agent) هستند.

این دو دکمه ظاهر مشابهی دارند و در یک نوار ابزار قرار گرفته‌اند، اما در لایه‌های زیرین، منطق‌های بنیادین متفاوتی را فعال می‌کنند. Re-run با یک فلش چرخان (循环箭头) نمایش داده می‌شود، در حالی که Continue از آیکون جلو رفتن سریع (快进) استفاده می‌کند. در پیکربندی i18n (بومی‌سازی) سیستم، این دو به ترتیب به کلیدهای msg.rerun و msg.continue متصل شده‌اند.

مکانیسم Re-run: اولویت با صحت (Correctness)

وقتی کاربر روی آیکون Re-run کلیک می‌کند، سیستم دستور RerunCommand را فراخوانی می‌کند (org.noear.solon.codecli.command.builtin.RerunCommand). طبق تحلیل‌های فنی، این دستور یک پاک‌سازی تخریبی در تاریخچه جلسه انجام می‌دهد تا یک «صفحه سفید» و پاک ایجاد کند:

  • پاک‌سازی جلسه (Session Cleanup): موتور سیستم در لیست پیام‌های جلسه به عقب حرکت می‌کند تا زمانی که به یک UserMessage برسد. سپس با استفاده از یک حلقه از دستور session.removeLatestMessage(1)، آن پیام کاربر و هر آنچه بعد از آن آمده است را از جلسه حذف می‌کند.
  • اجرای تکلیف (Task Execution): پس از پاک شدن تاریخچه، سیستم متد ctx.runAgentTask(lastUserInput, null) را فراخوانی می‌کند. این کار باعث می‌شود دقیقاً همان ورودی قبلی، اما بدون بارِ (Baggage) تلاش‌های شکست‌خورده قبلی، دوباره اجرا شود.
  • همگام‌سازی DOM: در سمت فرانت‌اند، رابط کاربری وب تمام المان‌هایی را که دارای data-run-id یکسان هستند — شامل حباب پاسخ هوش مصنوعی، کارت‌های ابزار (Tool Cards) و بلوک‌های تفکر (Thinking Blocks) — شناسایی و از DOM حذف می‌کند. این امر تضمین می‌کند که پاسخ جدید در یک حباب تازه و بدون بقایای تلاش ناموفق رندر شود.

چه زمانی از Re-run استفاده کنیم؟

  • زمانی که آخرین پاسخ عامل اساساً غلط است و می‌خواهید با همان پرامپت دوباره تلاش کنید.
  • زمانی که عامل در میانه پاسخ مسیر اشتباهی را در پیش گرفته و می‌خواهید مسیر متفاوتی را انتخاب کند.
  • زمانی که می‌خواهید تست کنید آیا یک مدل متفاوت یا یک پرامپت سیستمی دیگر، نتیجه بهتری برای همان ورودی تولید می‌کند یا خیر.

مکانیسم Continue: اولویت با کامل بودن (Completeness)

در مقابل، دکمه Continue دستور ContinueCommand را اجرا می‌کند (org.noear.solon.codecli.command.builtin.ContinueCommand). این دستور برخلاف قبلی، تاریخچه را حذف نمی‌کند؛ بلکه ردپای اجرای داخلی عامل، به‌ویژه ReActTrace ذخیره شده در کانتکست __main را دست‌کاری می‌کند:

  • بازنشانی ردپا (Trace Reset): سیستم بررسی می‌کند که آیا مسیر فعلی ردپا برابر با Agent.ID_END است یا خیر (به این معنی که عامل به گره پاسخ نهایی رسیده است). اگر چنین باشد، مسیر را به ReActAgent.ID_REASON بازمی‌گرداند و عامل را دوباره به حالت «تفکر» می‌برد.
  • مدیریت حافظه (Memory Management): پاسخ نهایی از طریق trace.setFinalAnswer(null, false) پاک می‌شود. همچنین آخرین پیام دستیار از هر دو بخش حافظه کاری و جلسه حذف می‌شود تا از تکرار محتوا جلوگیری شود.
  • ازسرگیری (Resumption): سپس دستور ctx.runAgentTask(null, null) فراخوانی می‌شود که به عامل اجازه می‌دهد دقیقاً از همان نقطه‌ای که در زنجیره استدلال متوقف شده بود، ادامه دهد.

از آنجایی که پارامتر removeRow در رابط کاربری وب روی مقدار false تنظیم شده است، حباب پاسخ موجود باقی می‌ماند. محتوای جدید به‌سادگی در همان حباب جاری جاری (Stream) می‌شود و یک گسترش بی‌وقفه از فکر قبلی ایجاد می‌کند.

چه زمانی از Continue استفاده کنیم؟

  • زمانی که عامل در میانه یک تکلیف متوقف شده است (مثلاً ۳ فایل از ۱۲ فایل را بازنویسی کرده) و می‌خواهید ادامه دهد.
  • زمانی که پاسخ آخر تا حد زیادی درست اما ناقص بوده است.
  • زمانی که می‌خواهید پاسخ به جای یک تولید مجدد، مانند یک ادامه طبیعی به نظر برسد.

مقایسه فنی در یک نگاه

ویژگی Re-run (/rerun) Continue (/continue)
پاسخ قدیمی کاملاً حذف می‌شود حفظ شده و به آن افزوده می‌شود
تاریخچه جلسه پس از آخرین پرامپت کاربر پاک می‌شود کاملاً حفظ می‌گردد
وضعیت عامل شروع مجدد (Fresh Start) ازسرگیری زنجیره استدلال
هدف اصلی اصلاح صحت (Correctness) اصلاح کامل بودن (Completeness)
آیکون وب فلش چرخان (循环箭头) جلو رفتن سریع (快进)
کلید i18n msg.rerun msg.continue
برچسب چینی 重新运行 继续运行

مثال‌های عینی در گردش کار

درخواستی را در نظر بگیرید: «سرویس UserService را از Spring Data JPA به Solon Data منتقل کن».

  • سناریوی الف (منطق غلط): عامل پاسخی تولید می‌کند که از API اشتباه Solon Data استفاده کرده است. با کلیک روی Re-run، پاسخ قدیمی ناپدید می‌شود؛ عامل دوباره فکر می‌کند و یک انتقال صحیح تولید می‌کند. اکنون تاریخچه فقط شامل نسخه اصلاح‌شده است.
  • سناریوی ب (تکلیف ناقص): عامل متد findUserById را منتقل می‌کند اما قبل از رسیدن به findByEmail متوقف می‌شود. با کلیک روی Continue، حباب پاسخ دست‌نخورده می‌ماند و عامل صرفاً منطق findByEmail را به انتهای آن اضافه می‌کند.
  • سناریوی ج (اصلاح ترکیبی): عامل یک انوتیشن غیرضروری @Component اضافه می‌کند (توهم). کاربر روی Re-run کلیک می‌کند تا منطق اصلاح شود. پس از رسیدن پاسخ جدید، کاربر متوجه می‌شود که deleteById هنوز غایب است، بنابراین روی Continue کلیک می‌کند تا آن را اضافه کند.

دسترسی به دستورات و یکپارچگی

این دستورات محدود به رابط کاربری وب نیستند. از نسخه ۲۰۲۶.۴.۲۸، این‌ها به عنوان دستورات داخلی (Built-in) در تمام حالت‌های تعامل ثبت شده‌اند:

  • CLI: کاربران می‌توانند مستقیماً در ترمینال /rerun یا /continue را تایپ کنند.
  • کانال‌های پیام‌رسان (IM): در Feishu، DingTalk یا WeChat، ارسال این دستورات باعث می‌شود بات درخواست را به موتور سیستم ارجاع دهد.
  • رابط کاربری وب: از طریق آیکون‌های حباب پاسخ فعال می‌شوند.

از آنجایی که این دستورات با علامت cliOnly() مشخص نشده‌اند، در نقطه انتهایی (Endpoint) /web/chat/hints ظاهر می‌شوند و تجربه یکسانی را در تمام کانال‌ها تضمین می‌کنند.

تحلیل تحریریه

این تفکیک معماری نشان‌دهنده درک بالغ‌تری از نیاز به «انسان در حلقه» (Human-in-the-Loop یا HITL) برای عامل‌های کدنویسی است. SolonCode با آشکار کردن تفاوت بین «بازنشانی وضعیت» (State Reset) و «ازسرگیری وضعیت» (State Resumption)، «مالیات پرامپت» — یعنی زمانی که توسعه‌دهندگان صرف متقاعد کردن هوش مصنوعی برای بازگشت به مسیر درست می‌کنند — را کاهش می‌دهد. این رویکرد به نوعی مکمل سیستم‌های پیشرفته‌تری است که مانند حلقه ترمیم TormentNexus سعی در کاهش زمان رفع باگ‌ها از طریق خودکارسازی فرآیندهای اصلاحی دارند.

برای کاربر نهایی، این به معنای توکن‌های کمتر تلف شده و ناامیدی کمتر است. توانایی حذف جراحی‌شده‌ی یک مسیر استدلالی شکست‌خورده در حالی که پرامپت دست‌نخورده باقی می‌ماند، یک پیروزی بزرگ در تجربه کاربری (UX) نسبت به دکمه استاندارد «تولید مجدد» (Regenerate) است که در اکثر پوشش‌های LLM یافت می‌شود. این موضوع در راستای بحث‌های جاری پیرامون تکامل عامل‌های خود-بهبودبخش است که پتانسیل حذف نیاز به ابزارهای سنتی را دارند.

این رویکرد، عامل را از یک تولیدکننده جعبه-سیاه به یک ابزار هدایت‌پذیر تبدیل می‌کند. این معماری می‌پذیرد که شکست هوش مصنوعی دوتایی نیست؛ بلکه یا شکستی در «جهت» است (که نیاز به Re-run دارد) یا شکستی در «استقامت» (که نیاز به Continue دارد).

SolonCode یک عامل کدنویسی متن‌باز است که بر پایه Solon AI و جاوا ساخته شده و از حالت‌های تعامل CLI، وب، دسکتاپ و ACP تحت لایسنس‌های Apache 2.0 / MIT پشتیبانی می‌کند. برای مشاهده این دستورات در عمل، توسعه‌دهندگان می‌توانند سینتکس /rerun و /continue را مستقیماً در SolonCode CLI تست کنند تا نحوه دست‌کاری تاریخچه جلسه را در لحظه مشاهده نمایند.

چرا این موضوع مهم است؟

این معماری با کاهش نیاز به تکرار پاسخ‌های طولانی، هزینه استنتاج را کاهش و سرعت توسعه را افزایش می‌دهد. این تغییر بر اساس تجربه واقعی توسعه‌دهندگان طراحی شده تا فرسایش ناشی از توقف‌های ناگهانی مدل‌های زبانی (Token Limit) به حداقل برسد.

تأثیر برای ایران

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

·نگاه ما
تحریریه دات‌هوش

تفکیک «صحت» از «تکمیل» نشان می‌دهد که طراحی رابط‌های کاربری برای هوش مصنوعی از حالت ساده‌ی «پرسش و پاسخ» به سمت «مدیریت وضعیت» (State Management) حرکت می‌کند. SolonCode با این کار، مدل را از یک جعبه‌سیاه تولیدکننده به ابزاری قابل هدایت تبدیل کرده است. این رویکرد به جای تکیه بر مهندسی پرامپت برای اصلاح خطاها، از لایه‌ی زیرساختی برای کنترل جریان استدلال استفاده می‌کند.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.