قم بتنقيح معلومات تحديد الهوية الشخصية (PII) من سجلات وكيل الذكاء الاصطناعي قبل أن تصل إلى قاعدة بياناتك
يقوم وكيلك بتسجيل كل مطالبة واستدعاء للأداة. يتحول رقم SSN المفقود في النص إلى إفصاح عن اللائحة العامة لحماية البيانات (GDPR). تقوم برنامج وسيط مكون من ثلاثة أسطر بإصلاحه قبل كتابة الصف.
يقوم وكيل الذكاء الاصطناعي الخاص بك بتسجيل المطالبة. إدخال استدعاء الأداة نتيجة الأداة. الرد النهائي. كان ذلك بمثابة منجم ذهب لبيانات تصحيح الأخطاء. اليوم، أصبح الكشف عن اللائحة العامة لحماية البيانات في انتظار تذكرة دعم لحمل رقم الضمان الاجتماعي (SSN) بعد التحقق من صحته.
لا يمكنك منع المستخدمين من لصق البيانات الحساسة. يمكنك منع النص الخام من الوصول إلى مخزن السجل الخاص بك، وبائع إمكانية المراقبة، وتصدير التقييم الأسبوعي. برنامج وسيط صغير يقوم بذلك في قفزة واحدة.
التسرب الذي تمتلكه معظم إعدادات الوكيل بالفعل
// before: every raw prompt, tool call, and tool result lands in the log row
logger.info({
event: 'agent.turn',
prompt: userInput,
tool_calls: toolCalls,
tool_results: toolResults,
});
// one support ticket later: "My SSN is 123-45-6789 and card 4111 1111 1111 1111"
// sits in the logs, the observability vendor, and the weekly eval export.
يحمل كل صف الآن رقم البطاقة. يحتفظ به مخزن السجل لمدة 30 يومًا. تقوم SDK الخاصة بإمكانية الملاحظة بشحنها إلى طرف ثالث. يلتقط تصدير التقييم نفس السلسلة بعد يومين. خمس نسخ من بطاقة واحدة؛ كل منهم خارج نطاق سياسة التشفير في حالة الراحة الخاصة بك.
كشف معلومات تحديد الهوية الشخصية (PII) بمكالمة واحدة
البوتوي /v1/pii/detect تقوم نقطة النهاية بمسح النص بحثًا عن رسائل البريد الإلكتروني وأرقام الهواتف وأرقام الضمان الاجتماعي وبطاقات الائتمان (التي تم التحقق من صحتها بواسطة Luhn) وعناوين IP وتواريخ الميلاد. تقوم بإرجاع كل نتيجة مع إزاحة البداية، وإزاحة النهاية، وقيمة مقنعة يمكنك وضعها في مكانها.
طلب
curl -X POST https://api.botoi.com/v1/pii/detect \\
-H "Content-Type: application/json" \\
-d '{"text": "Reach me at alice@example.com or 555-123-4567. Card: 4111 1111 1111 1111."}'
إجابة
{
"found": true,
"count": 3,
"findings": [
{ "type": "email", "value": "alice@example.com", "start": 12, "end": 29, "masked": "al***@example.com" },
{ "type": "phone", "value": "555-123-4567", "start": 33, "end": 45, "masked": "***-***-4567" },
{ "type": "credit_card", "value": "4111 1111 1111 1111", "start": 53, "end": 72, "masked": "************1111" }
]
}
ثلاث أعواد ثقاب، ثلاثة بدائل مقنعة، أوضاع يمكنك لصقها بشكل نظيف. لا توجد مكتبة regex للمحافظة عليها، ولا يوجد جدول بادئة SSN للحفاظ على التحديث، ولا يوجد تصريح Luhn للكتابة بنفسك.
برنامج وسيط للسجل يتم تنقيحه قبل الكتابة
المكان المناسب لذلك هو الخطوة الأخيرة قبل أن يترك الصف عمليتك. لا يزال كل مكون أولي يرى النص الأولي الذي يحتاجه؛ يتم تطهير النسخة المستمرة.
// log-redact.ts
import type { LogRecord } from './types';
const PII_FIELDS = ['prompt', 'tool_calls', 'tool_results', 'output'] as const;
export async function redactPii(record: LogRecord): Promise<LogRecord> {
const clone = structuredClone(record);
for (const field of PII_FIELDS) {
const value = clone[field];
if (!value) continue;
clone[field] = await scrub(JSON.stringify(value));
}
return clone;
}
async function scrub(text: string): Promise<string> {
const res = await fetch('https://api.botoi.com/v1/pii/detect', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: \`Bearer \${process.env.BOTOI_API_KEY}\`,
},
body: JSON.stringify({ text }),
});
const data = await res.json();
if (!data.found) return text;
// Replace from the end of the string so offsets stay valid.
const sorted = [...data.findings].sort((a, b) => b.start - a.start);
let scrubbed = text;
for (const f of sorted) {
scrubbed = scrubbed.slice(0, f.start) + f.masked + scrubbed.slice(f.end);
}
return scrubbed;
}
ثلاثة تفاصيل مهمة في هذا المقتطف. أولاً، فإنه يمشي في الحقول المعروفة ذات الثقل في معلومات تحديد الهوية الشخصية (PII) بدلاً من السجل بأكمله؛ لا تحتاج إلى مسح معرف الطلب. ثانيًا، يقوم بإجراء تسلسل لكل حقل في سلسلة واحدة قبل إرساله إلى واجهة برمجة التطبيقات، بحيث يغطي استدعاء واحد نتيجة الأداة بأكملها. ثالثًا، يقوم بتوصيل البدائل من نهاية السلسلة بحيث لا تتحرك الإزاحات أسفلها.
قم بتوصيله إلى المسجل
// logger.ts
import { redactPii } from './log-redact';
export async function logTurn(raw: LogRecord) {
const safe = await redactPii(raw);
await logStore.write(safe);
}
// anywhere in your agent loop:
await logTurn({
event: 'agent.turn',
prompt: userInput,
tool_calls: toolCalls,
tool_results: toolResults,
});
يتصل logTurn بدلا من الموجود لديك logger.info عند حدود المنعطف. كل شيء في المنبع يبقى كما هو.
فشل مغلقة، لا تفشل صامتا
عادةً ما تجيب نقطة نهاية الكشف في أقل من 20 مللي ثانية. عند انتهاء المهلة، لا يزال لديك خيار: تسجيل الصف الخام (خطر التسرب) أو إسقاط الحقول الحساسة وتسجيل العلامة. يعد الإسقاط هو الإجراء الافتراضي الأكثر أمانًا لأحمال العمل الحساسة للامتثال.
async function redactPiiSafe(record: LogRecord): Promise<LogRecord> {
try {
return await Promise.race([
redactPii(record),
new Promise<LogRecord>((_, reject) =>
setTimeout(() => reject(new Error('pii-detect timeout')), 250)
),
]);
} catch (err) {
// Fail closed: drop the sensitive fields rather than logging them raw.
return { ...record, prompt: '[REDACT_FAILED]', tool_calls: [], tool_results: [] };
}
}
اضبط المهلة على شيء صغير. 250 مللي ثانية كافية لاستيعاب التباطؤ الإقليمي دون عرقلة مسار الطلب السليم.
نسخة بايثون
# log_redact.py
import os, json, httpx
PII_FIELDS = ('prompt', 'tool_calls', 'tool_results', 'output')
API = 'https://api.botoi.com/v1/pii/detect'
async def scrub(text: str) -> str:
async with httpx.AsyncClient(timeout=0.25) as client:
r = await client.post(
API,
headers={'Authorization': f"Bearer {os.environ['BOTOI_API_KEY']}"},
json={'text': text},
)
data = r.json()
if not data.get('found'):
return text
out = text
for f in sorted(data['findings'], key=lambda x: x['start'], reverse=True):
out = out[:f['start']] + f['masked'] + out[f['end']:]
return out
يسقط scrub في ربط السجل الخاص بإطار عمل الوكيل الخاص بك. تقبل البرامج الوسيطة FastAPI وعمليات رد الاتصال LangChain ومصدري OpenInference وظائف غير متزامنة.
ما لا تفعله هذه الوسيطة
- ولا يلتقط الأسماء أو العناوين أو أرقام الحسابات التي لا تشبه أي نوع مدعوم. يحتاج هؤلاء إلى نموذج كيان مسمى وقرار سياسي (القناع؟ إسقاط؟ تنقيح الدور بأكمله؟).
- إنه لا يحمي بائع النموذج الخاص بك من رؤية الموجه الأولي. للقيام بذلك، قم بتشغيل نفس استدعاء الكشف على العميل قبل إرساله إلى النموذج.
- ولا يحل محل سياسة الاحتفاظ بالبيانات. قم بتقصير السجل TTL على أي حال.
مكانين ينتمي هذا
| طبقة | يحمي | توقيت المكالمة |
|---|---|---|
| قبل طلب النموذج | البائع النموذجي، بيانات التدريب، التسريبات التقييمية | حظر الكمون المرئي للمستخدم |
| قبل سجل الكتابة | مخزن السجل، بائع إمكانية الملاحظة، الصادرات | خارج النطاق وغير مرئي للمستخدم |
قم بشحن البرنامج الوسيط لكتابة السجل أولاً. فهو يمتد خارج المسار الساخن ويمنع نمط التسرب الأكثر شيوعًا. أضف إصدار النموذج المسبق بمجرد تغطية جانب السجل.
احصل على مفتاح API وابدأ
يمنحك الوصول المجهول 5 طلبات في الدقيقة، وهو ما يكفي لتجربة نقطة النهاية مقابل نموذج سجل. بالنسبة للبرامج الوسيطة للإنتاج، احصل على مفتاح مجاني على botoi.com/api/signup. تغطي الطبقة المجانية 1000 مكالمة فرك يوميًا بدون بطاقة ائتمان.
راجع مرجع نقطة النهاية الكامل في صفحة كشف معلومات تحديد الهوية الشخصية (API). أو تصفح api.botoi.com/docs لنقاط النهاية الـ 149 الأخرى.
FAQ
- لماذا تسرّب سجلات وكيل الذكاء الاصطناعي معلومات تحديد الهوية الشخصية (PII) أكثر من سجلات الخادم العادية؟
- يقوم الوكلاء بتسجيل الموجه بالكامل، وكل إدخال لاستدعاء الأداة، وكل مخرج للأداة. يظهر الآن نص الدعم الذي كان موجودًا خلف علامة "عدم التسجيل" في خمسة أماكن: المُنسق، وخادم الأدوات، وبائع إمكانية المراقبة، وموفر النموذج، ومجموعة تقييم التدريب.
- أين يجب تشغيل خطوة التنقيح؟
- قم بتشغيله عند حدود كاتب السجل، مباشرة قبل إرسال الصف إلى مخزن السجل الخاص بك. بهذه الطريقة، يرى كل مكون أولي (المنسق، والأداة، وSDK لقابلية المراقبة) النص الأولي الذي يحتاجه، ويتم تطهير النسخة الدائمة فقط.
- هل يلتقط مُحرر التعبير العادي كل شيء؟
- لا، فالتعبير العادي الخاص بك يفتقد أرقام بطاقات الائتمان ذات المسافات غير المعتادة، وأرقام الضمان الاجتماعي التي تبدو مثل الأرقام الأخرى المكونة من 9 أرقام، وأسماء الأشخاص. تعمل واجهة برمجة التطبيقات مثل /v1/pii/detect على تشغيل Luhn على البطاقات، وتصفية بادئات SSN، وإرجاع المواضع حتى تتمكن من إسقاط المطابقة فقط، وليس السطر بأكمله.
- ما زمن الوصول الذي تضيفه واجهة برمجة تطبيقات Botoi PII Detect API؟
- تعمل نقطة النهاية عند الحافة وتعود في أقل من 20 مللي ثانية لحمولة 500 رمز. يمكنك استدعاؤه بشكل متزامن في برنامج وسيط للسجل دون التأثير على أوقات الاستجابة المرئية للمستخدم؛ يحدث التسجيل بعد إرسال الرد.
- هل يمكنني التنقيح على العميل قبل إرساله إلى النموذج؟
- نعم، وهي طبقة ثانية جيدة. يؤدي التنقيح في البرنامج الوسيط للخادم إلى حماية مخزن السجل الخاص بك؛ يؤدي التنقيح في العميل إلى حماية بائع النموذج الخاص بك من رؤية معلومات تحديد الهوية الشخصية (PII) الأولية. كلاهما معًا عبارة عن إعداد صديق للقانون العام لحماية البيانات (GDPR).
ابدأ البناء مع botoi
أكثر من 150 نقطة نهاية API للبحث ومعالجة النصوص وتوليد الصور وأدوات المطورين. باقة مجانية، بدون بطاقة ائتمان.