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

«Truncates Silently»؛ نقص فنی در اعتبارسنج‌های CogniRunner برای اسناد جیرا

·۱۱ مهر ۱۴۰۵۱۶ دقیقه مطالعه
راهنما
اتصال مشخصات API به اعتبارسنج گردش کار Jira: قانون AI CogniRunner که هرگز نمی‌خواند
اتصال مشخصات API به اعتبارسنج گردش کار Jira: قانون AI CogniRunner که هرگز نمی‌خواند
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

افشای یک محدودیت سخت‌گیرانه و پنهان در ۳۰,۰۰۰ کاراکتر در CogniRunner که برخلاف لاگ‌های سیستم، منجر به حذف بی‌سروصدا و تخریب نحوی اسناد مرجع می‌شود.

اگر برای مدیریت گردش‌کارهای پیچیده در جیرا به قوانین هوش مصنوعی تکیه می‌کنید، احتمالاً بخشی از منطق تجاری شما بدون هیچ هشداری حذف شده است. یک سقف سخت‌گیرانه و پنهان در ۳۰,۰۰۰ کاراکتر، باعث می‌شود CogniRunner بخش‌های حیاتی از اسناد مرجع را دور بریزد و مدل را مجبور کند بر اساس تکه‌های ناقص، تصمیم بگیرد. این محدودیت زمانی رخ می‌دهد که کاربر یک مشخصات API یا یک طرحواره JSON را به اعتبارسنج متصل می‌کند. سیستم ممکن است متن را در وسط یک رشته قطع کند و در نتیجه، مدل زبانی بزرگ (LLM) — مثل کتابخانه‌داری که میلیاردها صفحه را خوانده و حالا با همان لحن کتاب‌ها جواب می‌دهد — مجبور شود معیارهای اعتبارسنجی را بر اساس یک تکه شکسته حدس بزند.

این وضعیت به‌دلیل نبود هیچ‌گونه نشانگر برش (Truncation Marker) در پرامپت نهایی، به‌شدت خطرناک است. یک مدیر سیستم ممکن است یک طرحواره ۴۰ کیلوبایتی را ضمیمه کند و در رابط کاربری پیام «موفقیت» را ببیند، در حالی که مدل در واقع یک رشته JSON از نظر نحوی نامعتبر دریافت کرده که ناگهان در وسط یک ویژگی (Property) قطع شده است.

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

مکانیسم برش خاموش

به نقل از یک گزارش فنی، این برش در دو مرحله مجزا رخ می‌دهد. ابتدا در مرحله اسمبل (Assembly)، اسناد تک‌به‌تک تا ۶۰,۰۰۰ کاراکتر و مجموع کل اسناد تا ۱۵۰,۰۰۰ کاراکتر محدود می‌شوند. در این مرحله، سیستم یک نشانگر صریح را به متن اضافه می‌کند: …[document truncated] یا …[context truncated].

اما مشکل اصلی در مسیر اعتبارسنج است. یک تابع Wrapper در اینجا محدودیت دوم و بسیار سخت‌گیرانه‌تری را اعمال می‌کند. این تابع عملیات substring(0, 30000) را روی کل رشته پرامپت نهایی اجرا می‌کند. این برش مطلق است؛ یعنی هیچ توجهی به مرز اسناد، شکستگی خطوط یا نحو (Syntax) فایل‌های JSON ندارد. این یک برش سخت در یک آفست ثابت است.

اتصال مشخصات API به اعتبارسنج گردش کار Jira: قانونی که هوش مصنوعی CogniRunner هرگز نمی‌خواند

شکست نامرئی

یکی از تکان‌دهنده‌ترین یافته‌ها این است که کد سیستم در واقع می‌داند چه زمانی برش رخ داده است، اما اعتبارسنج این اطلاعات را دور می‌ریزد. تابع داخلی fetchContextDocsDetailed یک آرایه applied[] برمی‌گرداند که برای هر سند یک پرچم truncated و یک متغیر بولین totalTruncated دارد. اما تابع Wrapper مورد استفاده در اعتبارسنج — که به صورت const fetchContextDocs = async (docIds) => (await fetchContextDocsDetailed(docIds)).text; تعریف شده — تنها ویژگی .text را برمی‌گرداند و تمام متادیتای مربوط به برش را نادیده می‌گیرد.

این موضوع یک تجربه کاربری فریبنده ایجاد می‌کند:

  • پنل تست: لاگ «Loaded N context document(s)» فقط تعداد شناسه‌های موجود در selectedDocIds را می‌شمارد که درخواست شده‌اند، نه تعداد کاراکترهایی که واقعاً تحویل داده شده‌اند. این لاگ تاییدکننده «قصد» سیستم است، نه «تحویل» محتوا.
  • لاگ عملیاتی: اعتبارسنج هیچ لاگی درباره اسناد زمینه ثبت نمی‌کند. تابع validate اسناد را واکشی کرده و مستقیماً به سراغ مدل می‌رود بدون اینکه گزارشی از حجم داده‌ها بدهد.
  • دیدگاه مدل: هوش مصنوعی رشته‌ای قطع‌شده را دریافت می‌کند بدون اینکه هیچ نشانه‌ای مبنی بر گم شدن محتوا ببیند. چون برش در ۳۰,۰۰۰ کاراکتر رخ می‌دهد و نشانگر اسمبل بعد از ۶۰,۰۰۰ کاراکتر اضافه می‌شود، اسنادی که اندازه آن‌ها بین این دو مقدار است، هیچ نشانگری دریافت نمی‌کنند و مدل تصور می‌کند سند کامل است.

اندازه‌گیری اثرات

برای اثبات این ادعا، یک محیط تست (Measurement Harness) با استخراج کد ارسالی و شبیه‌سازی ذخیره‌ساز کلید-مقدار Forge با استفاده از یک Map() ساده ساخته شد. این محیط تست به Node ۱۸ یا نسخه‌های جدیدتر نیاز دارد و روی نسخه ۲۴.۱۵.۰ تایید شد. وقتی یک طرحواره با ۱۲۵,۰۴۳ کاراکتر تست شد، نتایج تکان‌دهنده بود:

  • اندازه ذخیره‌شده: ۱۲۵,۰۴۳ کاراکتر.
  • بعد از اولین واکشی: ۶۰,۰۴۳ کاراکتر (که در آن applied[0].truncated برابر با true بود).
  • تحویل نهایی به پرامپت: دقیقاً ۳۰,۰۰۰ کاراکتر.
  • نتیجه: فایل JSON در وسط یک ویژگی به صورت "field_337":{"type":"string", قطع شد و کل سند برای مدل غیرقابل تحلیل (Unparseable) شد.

در این اجرای خاص، پرچم totalTruncated مقدار false داشت، زیرا این پرچم فقط سقف کلی ۱۵۰,۰۰۰ کاراکتر را ردیابی می‌کند، نه برش‌های هر سند. قانون حیاتی (CRITICAL_RULE) — تنها ویژگی‌ای که حاوی منطق واقعی کسب‌وکار بود — به‌دلیل قرار داشتن در انتهای فایل، در این برش حذف شد و هرگز به مدل نرسید.

استراتژی‌های بقا

از آنجا که این سقف از طریق تنظیمات قابل تغییر نیست، کاربران باید محتوا را مدیریت کنند. گزارش توصیه می‌کند هر سند را زیر ۲۵,۰۰۰ کاراکتر نگه دارید. این کار فضای کافی (Headroom) برای هدر ### Title، جداکننده‌های بین اسناد و رشد احتمالی متن پس از فشردن دکمه Format باقی می‌گذارد.

جزئیات مدیریت اسناد

افزودن اسناد از طریق تب Documentation در صفحه جهانی CogniRunner انجام می‌شود. در اینجا هیچ انتخاب‌گر فایلی (File Picker) وجود ندارد؛ محتوا در یک Textarea چسبانده شده و در ذخیره‌ساز Forge تحت کلید doc_repo:{id} ذخیره می‌شود و متادیتای آن در doc_repo_index قرار می‌گیرد.

  • دکمه Format: فشردن این دکمه قبل از ذخیره می‌تواند باعث رشد تقریباً ۳۵ درصدی حجم متن شود. یک طرحواره ۲۸,۰۰۰ کاراکتری که فشرده (Minified) شده است، ممکن است صرفاً با «زیباسازی» (Pretty-print) از سقف ۳۰,۰۰۰ عبور کند. این فرمت‌بندی برای JSON (تورفتگی دو فاصله)، XML/HTML (تورفتگی تو در تو)، YAML (تب‌ها به دو فاصله) و JavaScript (تب به فاصله) اعمال می‌شود.
  • محدودیت ذخیره‌سازی: کتابخانه هر سندی بالای ۲۰۰,۰۰۰ کاراکتر را با خطای «Document too large (max ~200KB)» رد می‌کند.
  • دسته‌بندی‌ها: ۶ دسته (API Documentation، Field Mappings، JSON Schemas، Business Rules، Code Snippets، General) وجود دارد. این‌ها صرفاً برای سازمان‌دهی هستند و تاثیری در نحوه تزریق محتوا به مدل ندارند.
  • حفاظت امنیتی: اسناد در یک بلوک حصارشده با برچسب ## Reference Documentation (DATA — fenced, untrusted) قرار می‌گیرند. برای جلوگیری از تزریق پرامپت (Prompt Injection)، هر تکرار سه تایی یا بیشتر از علامت < به دو عدد کاهش می‌یابد تا سند نتواند حصار REFERENCE_DOCS را ببندد و به بخش دستورات پرامپت نفوذ کند.
  • کنترل دسترسی: افزودن اسناد نیازمند نقش Editor یا Admin است. کاربرانی که نقش Viewer ندارند، به‌جای دکمه «+ Add Document»، یک یادداشت دسترسی می‌بینند.

تنها راه تضمین بقای یک قانون، ترتیب قرارگیری آن است. چون برش از انتها رخ می‌دهد، حیاتی‌ترین قوانین کسب‌وکار باید در ابتدای سند قرار گیرند.

به‌جای ضمیمه کردن کل مشخصات OpenAPI، توصیه می‌شود خلاصه‌های دست‌نویس تهیه کنید. یک خلاصه ۳,۰۰۰ کاراکتری از ۱۲ قانون کلیدی که واقعاً اهمیت دارند، بسیار قابل‌اعتمادتر از یک سند ۴۰ کیلوبایتی رسمی است که در میانه راه نصف می‌شود.

بهینه‌سازی بودجه

کاربران باید از «تورم کتابخانه» دوری کنند. چون بودجه ۳۰,۰۰۰ کاراکتری بین تمام اسناد ضمیمه شده مشترک است، ضمیمه کردن سه سند ۱۵,۰۰۰ کاراکتری به این معناست که سند سوم کاملاً حذف و سند دوم بخشی از محتوایش را از دست می‌دهد. این مدیریت دقیق منابع یادآور رویکرد CogniRunner در جایگزینی کاراکتر با بایت است تا بودجه حافظه با بیشترین بهره‌وری ممکن استفاده شود.

استراتژی‌های موثر عبارتند از:

  • اسناد مختص هر قانون: از selectedDocIds استفاده کنید تا فقط اسناد مرتبط با یک اعتبارسنج خاص ضمیمه شوند. تقسیم اسناد بر اساس هر قانون، بودجه موثر شما را در تعداد قوانین ضرب می‌کند.
  • تمرکز بر موارد غیر-استنتاجی: بودجه را برای چیزهایی که مدل از قبل می‌داند (مثل فرمت ایمیل) هدر ندهید. آن را صرف منطق‌های خاص هر سازمان کنید؛ مثلاً این شرط که اگر region=EMEA بود، فیلد VAT اجباری است.
  • ردیابی نسخه: نسخه منبع (مثلاً Order API rules (from openapi.yaml v4.2)) را در عنوان سند بنویسید تا از استخراج‌های قدیمی که منجر به احکام غلط می‌شوند، جلوگیری کنید.
  • نوشتن مبتنی بر محدودیت: به‌جای استفاده از طرحواره، محدودیت را به صورت متنی بنویسید: «orderId اجباری است و با الگوی ^ORD- \d{8}$ مطابقت دارد». این عبارت ۴۰ کاراکتر هزینه دارد، در حالی که معادل آن در طرحواره ۴۰۰ کاراکتر است.

بستر گسترده‌تر پرامپت

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

  • حفاظ‌های تزریق و پیکربندی قوانین.
  • مقدار فیلدی که در حال اعتبارسنجی است.
  • بلاک «Field Guide» شامل دانش پلتفرم (که در اواخر سپتامبر ۲۰۲۶ اضافه شد).
  • خاطرات یادگرفته‌شده (در صورت فعال بودن تزریق زمان اجرا).

اگرچه این‌ها محدودیت‌های جداگانه‌ای دارند و باعث حذف اسناد نمی‌شوند، اما همگی در یک درخواست نهایی قرار می‌گیرند. محدودیت توجه (Attention Span) مدل دلیل دیگری است که چرا یک سند کوتاه و گلچین‌شده، برنده یک سند بلند و رسمی است. این محدودیت فنی، نقش مدیر هوش مصنوعی را از یک «کتابدار» که داده جمع می‌کند، به یک «ویراستار» تبدیل می‌کند که پرامپتی با تراکم بالا می‌سازد.

این کشف، فرض «هرچه داده بیشتر، بهتر» را در اعتبارسنج‌های مبتنی بر تولید بازیابی‌افزا (RAG) — شبیه دانش‌آموزی که قبل از جواب دادن، اول کتاب درسی را باز می‌کند و از آن نقل می‌آورد — به چالش می‌کشد. در CogniRunner، یک سند بلند و رسمی به‌دلیل ایجاد خطاهای نحوی در پرامپت، عملاً بدتر از یک سند کوتاه است.

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

همین حالا اندازه اسناد مرجع خود را در کتابخانه بررسی کنید و حیاتی‌ترین محدودیت‌ها را به ۵,۰۰۰ کاراکتر اول هر فایل منتقل کنید.

گام بعدی شما

  • تمام اسناد مرجع در CogniRunner را بررسی کرده و حجم آن‌ها را به زیر ۲۵,۰۰۰ کاراکتر برسانید.
  • قوانین حیاتی و شرط‌های اصلی را از انتهای اسناد به ابتدای آن‌ها منتقل کنید.
  • به‌جای آپلود فایل‌های OpenAPI کامل، خلاصه‌های متنی متراکم از قوانین را جایگزین کنید.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

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

این موضوع اعتبار اعتبارسنج‌های خودکار در محیط‌های سازمانی را زیر سؤال می‌برد و نشان می‌دهد که خطاهای خاموش در لایه پردازش متن می‌توانند منجر به تصمیمات تجاری غلط شوند. تخصص در مدیریت پنجره متنی اکنون به یک مهارت حیاتی برای مدیران سیستم‌های عامل‌محور تبدیل شده است.

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

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

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

این نقص فنی نشان می‌دهد که در بسیاری از ابزارهای Llama-index یا RAG-based، لایه‌های Wrapper بدون توجه به ساختار داده (مانند JSON)، عملیات برش متنی انجام می‌دهند. این موضوع فرضیه «اعتماد به UI» را می‌شکند؛ چراکه سیستم پیام موفقیت می‌دهد اما در لایه استنتاج، داده‌ای ناقص ارسال می‌کند. راهکار واقعی در این مرحله، گذار از «تأمین داده» به «مهندسی تراکم» در پرامپت‌هاست.

منابع

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

گفتگو

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

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

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

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

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

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

دات‌هوش

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

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