نوشتن کد با اجرای آن فرق دارد. دستیار برنامهنویسی میتواند اسکریپتی برای تحلیل فایل پیشنهاد کند. اجرا کجا انجام میشود؟ برنامه باید تصمیم بگیرد آن اسکریپت چه فایلهایی را ببیند و چه منابعی مصرف کند.
سندباکس محیطی برای همین اجراست. در دانا کد، هر کاربر محیط جداگانهای دارد. این مرز بخشی از طراحی محصول است و نباید به درست رفتار کردن مدل وابسته باشد.
مسیر درخواست تا نتیجه
کاربر درخواستش را میفرستد. مدل ممکن است برای پاسخ به ابزار نیاز داشته باشد. سرویس عامل فراخوانی ابزار را میگیرد، آن را در محدودهٔ دسترسی کاربر اجرا میکند و نتیجه را به مدل برمیگرداند. مدل سپس ادامه میدهد یا پاسخ نهایی را مینویسد.
محل اجرای مدل را هم باید شناخت. استفاده از مدل بیرونی به این معنا نیست که کد هم نزد همان ارائهدهنده اجرا میشود. برعکس، اجرای کد در محیط داخلی به معنی داخلی بودن پردازش مدل نیست. هنگام انتخاب مدل، مسیر ارسال محتوای گفتگو هم باید روشن باشد.
جداسازی فقط یک پوشهٔ جدا نیست
دو پوشه کافی نیست. مالکیت فایل و محیط باید در هر عملیات بررسی شود. کاربر نباید با تغییر یک شناسه بتواند فایل کاربر دیگر را بخواند.
اجرای کد نیز به محدودیت منابع نیاز دارد. برنامهٔ اشتباه ممکن است حافظه مصرف کند، فرایندهای زیادی بسازد یا متوقف نشود. محدودیت زمان و منابع، اثر این خطا را مهار میکند. رسیدن به این محدودیتها باید در رابط کاربر قابل فهم باشد تا شکست اجرا با پاسخ ناقص مدل اشتباه نشود.
دسترسی شبکه مسئلهٔ جداگانهای است. نصب وابستگی و فرستادن فایل به یک مقصد بیرونی هر دو از شبکه استفاده میکنند، اما مجوز یکسانی نمیخواهند. کنترل مقصد باید در محیط اجرا اعمال شود.
جداسازی را با دو کاربر بسنجیم
تنظیمات درست کافی نیستند. تست باید دو محیط واقعی بسازد، در یکی فایل بنویسد و از دیگری تلاش کند آن را بخواند. همین نگاه برای دسترسی شبکه و سقف منابع هم لازم است.
در بازبینی دانا کد، این نوع تست را روی محیطهای واقعی اجرا کردیم. نتیجهٔ تست به نسخه و کانفیگ همان اجرا مربوط است. تغییر محیط اجرا یا مسیر ابزار، دلیل خوبی برای تکرار تست است.
خطای مدل هنوز ممکن است
سندباکس جلوی همهٔ خطاهای منطقی را نمیگیرد. مدل ممکن است محاسبه را اشتباه بنویسد، فایل کاربر را بد ویرایش کند یا نتیجهٔ ابزار را نادرست توضیح دهد. جداسازی محیط، جای تست کد و بازبینی خروجی را نمیگیرد.
برای کار تحلیلی، خود فایل خروجی، کد اجراشده و توضیح نتیجه باید با هم سازگار باشند. برای کار برنامهنویسی، گذشتن تستها شاهد بهتری از جملهٔ «کار تمام شد» است. نمایش روشن خطا و امکان دیدن خروجی ابزار به کاربر کمک میکند تصمیم بگیرد به کدام بخش اعتماد کند.
این مرز در برابر prompt injection هم مهم است: ممکن است مدل از متن بیرونی تأثیر بگیرد، اما اختیار عملش باید همچنان در دست برنامه بماند.