
وكيل شفاف لإخفاء معلومات التعريف الشخصية (PII) لحركة مرور واجهة برمجة التطبيقات (API) للنماذج اللغوية الكبيرة (LLM). يقف بين التطبيق وموفر LLM (حاليًا Anthropic)، حيث يقوم بإخفاء هوية البيانات الحساسة في الاتجاه الصادر واستعادتها في الاتجاه الوارد. مبني باستخدام FastAPI + httpx.
وكيل شفاف لإخفاء معلومات التعريف الشخصية (PII) لحركة مرور واجهة برمجة تطبيقات نماذج اللغة الكبيرة (LLM). يجلس بين تطبيقك وموفر LLM، حيث يقوم بإخفاء البيانات الحساسة باستخدام أسماء مستعارة (pseudonymization) في طريق الخروج، وإعادتها إلى حالتها الأصلية في طريق العودة.
لا يرى LLM الخاص بك أبدًا الأسماء الحقيقية أو رسائل البريد الإلكتروني أو عناوين IP أو النطاقات - بل يعمل بالكامل مع أسماء مستعارة منظمة مثل [email protected]. يحصل تطبيقك على القيم الأصلية مرة أخرى، بشفافية تامة.
عند استخدام LLMs لعمليات الأمن، أو الاستجابة للحوادث، أو أي مهمة تتضمن بيانات حقيقية للعملاء، فإنك تخاطر بإرسال معلومات التعريف الشخصية (PII) إلى واجهات برمجة تطبيقات طرف ثالث. يحل هذا الوكيل تلك المشكلة عن طريق:
# 1. أنشئ ملف التهيئة الخاص بك
cp config.json.example config.json
# قم بتعديل config.json بإضافة نطاقاتك الداخلية، الكيانات المعروفة، إلخ.
# 2. شغّل باستخدام Docker
docker build -t llm-token-proxy .
docker run -p 8090:8080 -v ./config.json:/app/config.json llm-token-proxy
# 3. وجّه تطبيقك إلى الوكيل
export ANTHROPIC_BASE_URL=http://localhost:8090/session/my-session/
هذا كل شيء. أصبحت استدعاءات واجهة برمجة تطبيقات Anthropic تمر الآن عبر الوكيل مع إخفاء معلومات التعريف الشخصية.

تيار نموذجي: تطبيق → وكيل الرموز (إخفاء PII) → واجهة برمجة تطبيقات LLM (أسماء مستعارة فقط) → وكيل الرموز (استعادة الأصول) → تطبيق
admin من [email protected])| نوع الكيان | مثال داخلي | مثال خارجي |
|---|---|---|
| بريد إلكتروني | [email protected] | [email protected] |
| نطاق | domain-internal-001.com | domain-external-001.net |
| عنوان IP | 10.99.99.1 (RFC1918) | عنوان IP مانح واعي بـ ASN (انظر أدناه) |
| شخص | person_internal_001 | person_external_001 |
| مؤسسة | org_internal_001 | org_external_001 |
| اسم مضيف | host_001 | host_001 |
الأسماء المستعارة حتمية داخل الجلسة - نفس القيمة الحقيقية تتوافق دائمًا مع نفس الاسم المستعار.
عندما يقوم LLM بتحليل سجلات الأمن، فإن مزود الاستضافة والموقع الجغرافي لعنوان IP مهمان - تسجيل الدخول من عنوان IP لـ Hetzner في ألمانيا يحكي قصة مختلفة عن تسجيل الدخول من مزود خدمة إنترنت سكني في الولايات المتحدة. الاستبدال الساذج بعناوين IP من نطاق التوثيق (مثل 198.51.100.x) يدمر هذا السياق.
مع قاعدة بيانات MaxMind GeoLite2-ASN الاختيارية، يستبدل الوكيل عناوين IP الحقيقية بعنوان IP مختلف من نفس ASN والشبكة الفرعية. يرى LLM عنوان IP يبدو حقيقيًا ويتحول إلى نفس مزود الاستضافة والموقع الجغرافي التقريبي - لكنه ليس العنوان الفعلي.
10.99.99.x (لا يوجد سياق ASN للحفاظ عليه)198.51.100.x (نطاق التوثيق)يتم اختيار عنوان IP المانح بشكل حتمي عبر HMAC مع ملح خاص بالجلسة، بحيث يتم تعيين نفس عنوان IP الحقيقي دائمًا إلى نفس المانح داخل الجلسة، لكن الجلسات المختلفة تنتج تعيينات مختلفة.
يأتي الوكيل مع config.json فارغ - لا توجد قوائم كلمات مدمجة أو افتراضات خاصة بالمجال. تم ضبط config.json.example المرفق لـ عمليات الأمن مع Microsoft Sentinel و Entra ID (أكثر من 8,000 اسم جدول/عمود لـ KQL، مصطلحات إذن Graph API، نطاقات مرجعية أمنية). إذا كان ذلك يتوافق مع حالة الاستخدام الخاصة بك، فانسخ ما تحتاجه منه. إذا كنت تستخدم الوكيل لمجال مختلف (الرعاية الصحية، القانوني، المالي، إلخ)، فابدأ من التهيئة الفارغة وقم ببناء قوائمك الخاصة.
config.json{
"internal_domains": ["yourcompany.com"],
"partner_domains": ["partnercorp.com"],
"internal_ip_ranges": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
"known_persons": ["John Smith"],
"known_orgs": ["YourCompany"],
"known_hostnames": ["DC01", "FS01"],
"ner_enabled": true,
"ner_skiplist": [],
"redaction_enabled": true
}
_internal_)spacy + en_core_web_sm)false، يصبح الوكيل مجرد تمرير نقيfalse، تمر النطاقات دون تعديل (لا يزال يتم إخفاء رسائل البريد الإلكتروني وعناوين IP والأسماء). مفيد عندما تحمل أسماء النطاقات سياقًا مهمًا لـ LLM (مثل التمييز بين outlook.com و protonmail.com) ولا تعتبر حساسة.| المتغير | القيمة الافتراضية | الغرض |
|---|---|---|
ANTHROPIC_API_BASE | https://api.anthropic.com | عنوان URL لواجهة برمجة تطبيقات Anthropic الأعلى |
TOKEN_PROXY_CONFIG_PATH | /app/config.json | مسار ملف التهيئة |
LOG_LEVEL | info | مستوى التسجيل |
GEOIP_ASN_DB_PATH | /app/data/GeoLite2-ASN.mmdb | قاعدة بيانات MaxMind GeoLite2-ASN (اختياري) |
إدارة القوائم البيضاء وتشغيل/إيقاف الإخفاء دون إعادة التشغيل:
# عرض جميع القوائم البيضاء
curl http://localhost:8090/token-proxy/config/whitelist
# إضافة مصطلحات إلى قائمة تخطي NER (يقلل النتائج الإيجابية الخاطئة)
curl -X POST http://localhost:8090/token-proxy/config/whitelist \
-H "Content-Type: application/json" \
-d '{"category": "ner_skiplist", "values": ["EvoSTS", "Hetzner"]}'
# إضافة نطاقات إلى القائمة المسموح بها (لا يتم إخفاءها أبدًا)
curl -X POST http://localhost:8090/token-proxy/config/whitelist \
-H "Content-Type: application/json" \
-d '{"category": "domain_allowlist", "values": ["github.com"]}'
# تعطيل الإخفاء (وضع التمرير)
curl -X POST http://localhost:8090/token-proxy/config/status \
-H "Content-Type: application/json" \
-d '{"redaction_enabled": false}'
فئات القائمة البيضاء: ner_skiplist، domain_allowlist، known_persons، known_orgs، known_hostnames
تفحص ما يفعله الوكيل في الوقت الفعلي:
# عرض الجلسات النشطة
curl http://localhost:8090/token-proxy/sessions
# عرض تعيينات الأسماء المستعارة لجلسة
curl http://localhost:8090/token-proxy/sessions/{session_id}/mappings
# عرض سجل نشاط الإخفاء
curl http://localhost:8090/token-proxy/sessions/{session_id}/log
# البحث في التعيينات
curl http://localhost:8090/token-proxy/sessions/{session_id}/search?q=admin
# عرض البيانات الملتقطة (ما رآه LLM بالفعل)
curl http://localhost:8090/token-proxy/sessions/{session_id}/payloads
# استخدام الرموز لجلسة (رموز الإدخال/الإخراج عبر جميع الطلبات)
curl http://localhost:8090/token-proxy/sessions/{session_id}/usage
# إحصائيات عامة (تشمل total_tokens عبر جميع الجلسات)
curl http://localhost:8090/token-proxy/stats