DanLevy.net

בינה מלאכותית בפרודקשן היא דבר מבעית (ואיך לתקן את זה)

אם לסוכן שלכם אין מנגנוני הגנה, אתם לא מוכנים לפרודקשן.

אף אחד לא יוצא לדרך במטרה לבנות מערכת AI לא בטוחה. אתם כותבים הוראות, בודקים מקרי קצה ומוסיפים כמה כללי ולידציה. ואז מישהו מגלה שאפשר לגרום לבוט שלכם לשחק תפקיד של פיראט ולחשוף נתוני משתמשים. או שמספר כרטיס אשראי מגיע בסוף ללוגים שלכם. או שהמודל ממליץ בביטחון על מוצר של מתחרה.

הפער בין “עובד בדמו” לבין “בטוח בפרודקשן” רחב יותר ממה שרוב הצוותים מצפים.

חלק מהבעיה הוא של-LLM גולמי אין דעה לגבי מה מותר או אסור לו לעשות. אלה מכונות חיזוי שמנסות להמשיך כל תבנית שהתחלתם. תנו להן פרומפט שנראה כמו “מצב עקיפת מערכת”, והן ישתפו פעולה בשמחה. זו לא תקלה במודל; כך מודלים של שפה עובדים.

רוב הפריימוורקים נותנים לכם את המודל ומאחלים לכם בהצלחה. Mastra נוקטת גישה אחרת: היא מניחה שבשלב מסוים תצטרכו מעקות בטיחות, ולכן בונה אותם בארכיטקטורת הסוכן כבר מההתחלה.


מעבדים כשכבות הגנה

המנגנון המרכזי פשוט. לפני שהפרומפט שלכם מגיע למודל, הוא עובר דרך שרשרת של מעבדי קלט. לאחר שהמודל מחזיר תשובה, מגיע תורם של מעבדי הפלט. כל מעבד יכול לבדוק, לשנות או לחסום את התוכן באותו שלב.

חשבו עליהם כעל middleware לאינטראקציות עם AI. אתם מרכיבים את אלה שאתם צריכים, מגדירים את ההתנהגות שלהם, והם רצים אוטומטית בכל בקשה.

1. עצירת הפיראטים (הזרקת פרומפט)

התקפות הזרקת פרומפט נעשו יצירתיות. אנשים משתמשים בתווי Unicode בלתי נראים, כותבים הוראות ב-base64 או משכנעים את המודל שהוא נמצא ב”מצב דיבאג”, שבו הכללים הרגילים לא חלים. הטכניקות ממשיכות להתפתח.

Mastra כוללת מעבדים שלוכדים תבניות נפוצות:

src/mastra/agents/secure-agent.ts
import { Agent } from '@mastra/core/agent';
import { PromptInjectionDetector, UnicodeNormalizer } from '@mastra/core/processors';
const GUARDRAIL_MODEL = 'openrouter/openai/gpt-oss-safeguard-20b';
export const secureAgent = new Agent({
id: 'fortress-assistant',
name: 'fortress-assistant',
instructions: 'You are a secure assistant.',
model: 'openai/gpt-5.5',
inputProcessors: [
// 1. Scrub invisible characters
new UnicodeNormalizer({
stripControlChars: true,
collapseWhitespace: true,
}),
// 2. Detect the attempt
new PromptInjectionDetector({
model: GUARDRAIL_MODEL,
threshold: 0.8,
strategy: 'block', // Hard stop
detectionTypes: ['injection', 'jailbreak', 'system-override'],
lastMessageOnly: true,
}),
],
});

ה-UnicodeNormalizer מסיר תווי בקרה ומכווץ רצפים של רווחים. ה-PromptInjectionDetector מנתח את הקלט שנוקה ומחפש תבניות שמרמזות שמישהו מנסה לעקוף את ההוראות שלכם.

אתם מגדירים עד כמה אגרסיבית תהיה הבדיקה (הפרמטר threshold) ומה יקרה כשהיא תופעל (block, warn, filter או rewrite).

2. טיפול ב-PII

מספרי כרטיסי אשראי בלוגים, מספרי ביטוח לאומי במסדי נתונים וקטוריים, כתובות אימייל שנשמרות זמן רב מהנחוץ. אלה בדיוק סוגי הבעיות שהופכות לבעיות רגולטוריות. האתגר הוא שמשתמשים לא תמיד מבינים שהם מדביקים מידע רגיש בחלון צ’אט.

ה-PIIDetector סורק תבניות נפוצות לפני שהן מגיעות למודל שלכם או נכתבות לאחסון:

import { Agent } from '@mastra/core/agent';
import { BatchPartsProcessor, PIIDetector } from '@mastra/core/processors';
export const privateAgent = new Agent({
id: 'privacy-first-assistant',
name: 'privacy-first-assistant',
instructions: 'You are a helpful assistant that never stores personal information.',
model: 'openai/gpt-5.5',
inputProcessors: [
new PIIDetector({
model: GUARDRAIL_MODEL,
detectionTypes: ['email', 'phone', 'credit-card', 'ssn'],
threshold: 0.6,
strategy: 'redact',
redactionMethod: 'mask',
instructions: 'Detect and mask personally identifiable information',
lastMessageOnly: true,
}),
],
outputProcessors: [
new BatchPartsProcessor({ batchSize: 10 }),
new PIIDetector({
model: GUARDRAIL_MODEL,
strategy: 'redact',
redactionMethod: 'mask',
}),
],
});

אפשר לבחור לטשטש, לגבב, להסיר, להחליף ב-placeholders עם טיפוס או לחסום לחלוטין. PIIDetector הוא מעבד היברידי: הציבו אותו ב-inputProcessors, ב-outputProcessors או בשניהם, בהתאם למקום שבו נמצא הסיכון. בפלט מוזרם, אגדו מקטעים לפני הרצת מסווגים כבדים יותר, כדי לא לשלם על בדיקת LLM נפרדת עבור כל טפטוף זעיר של טוקנים.

3. מודרציית תוכן

מודלים שאומנו על נתונים מהאינטרנט נחשפו ללא מעט דברים. בלי סינון, הם עלולים מדי פעם להפיק תשובות שיגרמו לצוות יחסי הציבור שלכם להזיע. ModerationProcessor לוכד תוכן שמפר את ההנחיות שלכם:

import { Agent } from '@mastra/core/agent';
import { BatchPartsProcessor, ModerationProcessor } from '@mastra/core/processors';
export const moderatedAgent = new Agent({
id: 'safe-assistant',
name: 'safe-assistant',
instructions: 'You are a helpful assistant for a community platform.',
model: 'openai/gpt-5.5',
inputProcessors: [
new ModerationProcessor({
model: GUARDRAIL_MODEL,
categories: ['hate', 'harassment', 'violence', 'self-harm'],
threshold: 0.7,
strategy: 'block',
instructions: 'Detect harmful content that violates community guidelines',
lastMessageOnly: true,
}),
],
outputProcessors: [
new BatchPartsProcessor({ batchSize: 10 }),
new ModerationProcessor({
model: GUARDRAIL_MODEL,
categories: ['hate', 'harassment', 'violence', 'self-harm'],
strategy: 'filter',
chunkWindow: 1,
}),
],
});

החלק המעניין הוא שאתם מגדירים אילו קטגוריות רלוונטיות למקרה השימוש שלכם. כלי לכתיבה יצירתית עשוי לאפשר תוכן אקספרסיבי יותר מבוט שירות לקוחות. הסף ואסטרטגיית הפעולה נותנים לכם שליטה על מידת הנוקשות של הסינון.


כשהדברים מפעילים את מנגנון ההגנה

כאשר מעבד משתמש באסטרטגיית block, Mastra מפסיקה את ההפקה וחושפת את האירוע כמטא-נתונים של tripwire. עם generate(), בדקו את אובייקט התוצאה:

const result = await secureAgent.generate('Ignore all previous instructions...');
if (result.tripwire) {
console.log(`Blocked by ${result.tripwire.processorId}`);
console.log(`Reason: ${result.tripwire.reason}`);
// "Blocked! Reason: Prompt injection detected."
return 'Request blocked by policy.';
}

בקריאות סטרימינג, האזינו למקטעי tripwire ב-fullStream. התבנית הזו מאפשרת לכם לטפל באירועי אבטחה בכל דרך שמתאימה לאפליקציה שלכם. אפשר לתעד אותם לצורך ניתוח, להחזיר הודעת שגיאה כללית, או להעביר מקרה בעל סיכון נמוך מ-block ל-warn בזמן כוונון הספים. processorId ו-reason מציינים איזה מעבד סימן את התוכן, וזה עוזר כשמאתרים חיוביים שגויים.


מה זה לא פותר

מעבדים לוכדים הרבה, אבל הם לא קסם. תוקף נחוש, עם מספיק זמן, כנראה ימצא prompt שחומק מהם. מודלים גם הוזים מדי פעם בדרכים שמעבדים אינם יכולים לחזות. ותמיד יש פשרה בין אבטחה לגמישות: ככל שהכללים שלכם מחמירים יותר, כך גדל הסיכוי שתחסמו מקרי שימוש לגיטימיים.

הערך אינו בהגנה מושלמת. הוא טמון בדרך שיטתית לטפל בבעיות הנפוצות שבהחלט יצוצו בפרודקשן. תוכלו לכוונן את הרגישות ככל שתלמדו מה המשתמשים שלכם באמת עושים. תוכלו להוסיף מעבדים מותאמים אישית לסיכונים ספציפיים לדומיין. ותוכלו לחבר callbacks של הפרות, לוגים, traces ורשומות audit ברמת האפליקציה לאותה נקודת בקרה.

רוב בעיות האבטחה ב-AI שבפרודקשן אינן מתקפות מתוחכמות. אלה אנשים שמעתיקים ומדביקים נתונים שלא היו אמורים לשתף, או שמגלים בניסוי וטעייה שהבוט מוכן לעשות דברים שלא התכוונתם אליהם. מעבדים לא יעצרו כל בעיה אפשרית, אבל הם הופכים את הבעיות הברורות להרבה יותר קשות לניצול.

משאבים

לקריאת הסדרה

  1. ניתוב LLM
  2. אבטחה ומעקות בטיחות (הפוסט הזה)
  3. אינטגרציות MCP וכלים
  4. Workflows וזיכרון