تصور کنید یک کارمند حسابداری هستید که نمیتواند به هوش مصنوعیای که صرفاً میگوید «تأیید شد» اعتماد کند، بلکه به سیستمی نیاز دارد که ثابت کند چرا یک فاکتور معتبر است. برای حل این شکاف اعتماد، یک توسعهدهنده در ۲۹ سپتامبر ۲۰۲۶ رابطی برای یک عامل استثنائات حسابداری (AP exception agent) معرفی کرد که با استفاده از Streamlit و حافظهٔ Hindsight، کاربر را مجبور میکند پیش از دیدن حکم نهایی، ابتدا با خودِ مشکل روبهرو شود.
زمینه: کاربر و مسئله
کاربر اصلی این سیستم، کارمند حسابداری است که صف فاکتورهای نامتطابق با سفارشات خرید (PO) را مدیریت میکند. این افراد هرچند تأمینکنندگان خود را بهتر از هر مدلی میشناسند، اما با محدودیت زمان و ناتوانی در به یاد آوردن دقیق نحوهٔ حل یک استثنای مشابه توسط همکارشان در سه ماه پیش دستوپنجه نرم میکنند.
برای رفع این مشکل، رابط کاربری با سه وظیفه مشخص طراحی شده است: نمایش دقیق اینکه چه چیزی اشتباه است، ارائه پیشنهاد عامل و افشای حافظههای خاصی که منجر به آن نتیجه شدهاند. چیدمان صفحه از یک رویکرد صفحه-دوقسمتی (split-screen) استفاده میکند: در سمت چپ، صف فاکتورها قرار دارد و در سمت راست، جزئیات فاکتور انتخابشده نمایش داده میشود.
بسیاری از عاملهای هوش مصنوعی در محیطهای حرفهای شکست میخورند زیرا نتیجه را بدون ارائه ردپای تصمیمگیری ارائه میدهند. در جریانهای کاری مالی با ریسک بالا، بازبینیکنندهای که ابتدا حکم AI را میبیند، یا کورکورانه آن را تأیید میکند یا بهکلی نادیده میگیرد. این چالش دقیقاً همان نقطهای است که ضرورت ثبت ردپای تصمیمات در هوش مصنوعی برای جلوگیری از شکستهای بازبینی را برجسته میکند. برای مقابله با این وضعیت، عامل مجهز به Hindsight فاکتور و سفارش خرید را در کنار هم قرار میدهد و تضادها را با رنگ قرمز مشخص میکند، پیش از آنکه هوش مصنوعی لب به سخن گشاید.

جزئیات: سازوکار و رابط کاربری
سیستم پیش از آنکه هوش مصنوعی نظری ارائه دهد، از کدهای ساده پایتون برای تشخیص و نمایش خطاها استفاده میکند. این امر تضمین میکند که پیشنهاد عامل، به عنوان یک «نظر دوم» روی مشکلی خوانده شود که انسان قبلاً آن را درک کرده است.
- نشانه های بصری: هر خطی که در سفارش خرید (PO) وجود نداشته باشد، با رنگ قرمز هایلایت میشود. تفاوتهای مالیاتی به رنگ قرمز ظاهر میشوند و عدم تطابق در شرایط پرداخت با خطوط هشدار قرمز مخصوص به خود علامتگذاری میشوند.
- تحلیل مقایسهای: موثرترین صفحه، یک فاکتور واحد را دو بار اجرا میکند؛ یک بار با حافظه و یک بار بدون آن. برای مثال، در فاکتور شرکت Meridian Logistics که دارای یک خط هزینه حملونقل مجزا است، ستون «بدون حافظه» موضوع را به عنوان یک خطا گزارش کرده و آن را ارجاع (escalate) میدهد. اما ستون «با حافظه»، به قراردادی در ۱ اوت استناد میکند که هزینه حملونقل را در قیمت واحد ادغام کرده بود، به دو فاکتور مطابق بعدی اشاره میکند و در نهایت توصیه میکند که فاکتور تأیید نشود.
سازوکار اصلی این سیستم بر یک معماری حافظهٔ دو لایه استوار است. وقتی عامل یک استثنا را پردازش میکند، صرفاً از حافظه برای رسیدن به تصمیم استفاده نمیکند، بلکه آن حافظه را در دو قالب متمایز به کاربر نشان میدهد:
- سنتز بازتابی (Reflect Synthesis): یک خلاصه یکپارچه از سوابق گذشته و اینکه آیا قوانین تغییر کردهاند یا خیر.
- حقایق بازیابیشده (Recall Facts): دادههای خام و زیربنایی، شامل تاریخهای دقیق فاکتورها و نام بازبینهای قبلی.
تفکیک این دو بخش حیاتی بود زیرا بازیابی خام اغلب دادههای تکراری برمیگرداند، از جمله حقایق خام «نوع جهان» (world type) و ورودیهای مشاهداتی یکپارچه. اکنون رابط کاربری اینها را به سه بخش مجزا فیلتر میکند: سنتز بازتابی، مشاهدات یکپارچه (obs) و حقایق خام (facts).
این جداسازی اجازه میدهد یک بازبینِ اعتمادکننده تنها یک پاراگراف را بخواند، در حالی که یک بازبین شکاک بتواند تا سطح تکتک اسناد منبع پیش برود. این طراحی در واقع پاسخی به این پرسش است که چگونه میتوان از تبدیل شدن ناظران انسانی به مهر تایید صرف جلوگیری کرد تا تخصص انسانی در فرآیند بازبینی حفظ شود. توسعهدهنده خاطرنشان کرد که عامل هرگز به فاکتوری خیالی استناد نکرد، که این یک الزام حیاتی برای مفید بودن استنادات در حسابرسیهای مالی است.
پیادهسازی فنی و موانع
پیادهسازی فنی نیازمند حل چندین مانع تجربه کاربری (UX) در مراحل نهایی بود. برای مثال، تیم با «باگ علامت دلار» در Streamlit مواجه شد؛ جایی که مبالغ ارزی به اشتباه به عنوان فرمولهای ریاضی LaTeX تفسیر میشدند. از آنجایی که Streamlit متن بین دو علامت دلار را به عنوان فرمول میشناسد، خطی مانند «Subtotal $742.38 | Tax $59.39» به صورت متن سبز تکفاصلهای (monospace) شکسته نمایش داده میشد. تیم این مشکل را با یک تابع escape سفارشی حل کرد: return str(text).replace("$", "\$").
تأخیر در پاسخدهی نیز یک چالش روانی بود. یک تصمیم بدون حافظه یک ثانیه زمان میبرد، اما یک فراخوانی بازتابی (reflect call) در Hindsight ده ثانیه طول میکشد. برای جلوگیری از تصور کاربر مبنی بر هنگ کردن برنامه، تیم یک نشانگر انتظار (spinner) پیاده کرد که صراحتاً بیان میکند: «در حال مشورت با حافظه Hindsight...» و بدین ترتیب یک تأخیر فنی را به یک «فرآیند پژوهشی» در ذهن کاربر تبدیل کرد.
به دلیل اینکه Streamlit با هر کلیک کل اسکریپت را دوباره اجرا میکند، تیم از سیستم کشینگ (Caching) برای هر فاکتور و هر حالت (mode) استفاده کرد تا از تکرار فراخوانیهای API جلوگیری کند. منطق برنامه بررسی میکند که آیا کلیدی — متشکل از کلید فاکتور و وضعیت حافظه — در نتایج وضعیت (state results) وجود دارد یا خیر، پیش از آنکه فراخوانی agent.process را فعال کند.
برای بستن حلقه بازخورد، رابط کاربری شامل دکمههای تأیید (Approve)، رد (Reject) و ارجاع (Escalate) است. کلیک روی این دکمهها صرفاً تیکت را حل نمیکند، بلکه نتیجه را به عنوان یک حافظه جدید به Hindsight مینویسد. این امر تضمین میکند که عامل در لحظه از متخصص انسانی یاد بگیرد، هرچند این کار نیازمند استراتژی برای «کلیکهای تمرینی» است تا بانک حافظه با دادههای تست آلوده نشود. تیم یک هشدار در نوار کناری و فرآیندی برای بازنشانی (reseed) یک بانک حافظه پاک پیش از ضبط دموها اضافه کرد.
این رویکرد، نقش هوش مصنوعی را از یک «تصمیمگیرنده» به یک «دستیار پژوهشی» تغییر میدهد. با ارائه ابتدا شواهد و سپس پیشنهاد، سیستم به تخصص انسانی احترام گذاشته و همزمان محدودیتهای زمانی و حافظه او را پوشش میدهد.
درس اصلی برای توسعهدهندگان این است که شفافیت، بیش از آنکه یک مشکل مدل باشد، یک مشکل طراحی رابط کاربری است. اگر UI به کاربر اجازه ندهد «چرا»ی تصمیم را تأیید کند، دقیقترین مدل جهان همچنان با تردید نگریسته خواهد شد.
کسانی که به دنبال پیادهسازی الگوهای مشابه هستند، میتوانند کد کامل و اپلیکیشن Streamlit را در مخزن satya-harika08/ap-exception-agent در گیتهاب بررسی کنند.
گام بعدی شما
- اگر در حال توسعه عاملهای سازمانی هستید، الگوی «شواهد پیش از حکم» را برای کاهش مقاومت کاربران در برابر AI پیاده کنید.
- برای مدیریت تأخیرهای استنتاج در رابط کاربری، از پیامهای وضعیت (Status Messages) برای تبدیل تأخیر فنی به ارزش پژوهشی استفاده کنید.
- کد کامل این پروژه و اپلیکیشن Streamlit را در مخزن satya-harika08/ap-exception-agent در گیتهاب بررسی کنید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو