
أمن وكيل الذكاء الاصطناعي المدعوم بنماذج اللغة الكبيرة — كشف الحقن الوارد + حماية الخصوصية الصادرة
في الرامايانا، كان جاتاايو هو النسر الذي رصد رافانا وهو يختطف سيتا. لم ينتظر نمطًا مطابقًا. لقد رأى التهديد، وحكم على الموقف، وتصرف — بمفرده، دون تردد. هذا هو جاتاايو.
طبقة ترخيص وقت التشغيل لوكلاء الذكاء الاصطناعي الذين يستخدمون الأدوات. تحكم في الإجراء، وليس السلسلة النصية.
يقرر جاتاايو — بشكل حتمي — ما إذا كان إجراء الوكيل مسموحًا بتشغيله، بناءً على ضرر التأثير × مصدر الإدخال × سياسة قدراتك. يمكن للوكيل الذي قرأ صفحة ويب يتحكم فيها المهاجم أن يلخصها؛ لكن لا يمكن خداعه لتشغيل أمر shell، أو قراءة السر، أو إرسال بياناتك التي أرادها المهاجم. حول هذا الجوهر يضيف فحصًا دفاعيًا متعدد الطبقات (حقن داخلي، خصوصية خارجية، قنوات سحب البيانات، سلسلة توريد المهارات) وآثار تدقيق قابلة لإعادة التشغيل.
تحاول معظم أدوات أمان الوكلاء اكتشاف نص الهجوم. هذا سباق تسلح خاسر: المهاجم التكيفي يعيد كتابة السلسلة النصية حتى يفشل المصنف في اكتشافها. أطروحة جاتاايو — التي تلاقت عليها معايير 2026 (OWASP Agentic Top 10، NIST) — هي أن الحد الدائم هو الإجراء، الذي يُحكم عليه من مصدر الإدخال المؤثر:
الإصدار 0.3.1 — ألفا. لم يتم نشره بعد على PyPI. قم بالتثبيت من GitHub (انظر أدناه). قد تتغير واجهة برمجة التطبيقات قبل الإصدار 1.0. انظر CHANGELOG.md لمعرفة ما تم إصداره في كل إصدار و ARCHITECTURE.md للتصميم.
# Core (effect boundary + regex pre-filter, no LLM deps)
pip install git+https://github.com/saikrishnarallabandi/jataayu.git
# With cloud LLM backends (OpenAI + Anthropic) for the optional slow path
pip install "jataayu[llm] @ git+https://github.com/saikrishnarallabandi/jataayu.git"
# With Ollama (local, free slow path)
pip install "jataayu[ollama] @ git+https://github.com/saikrishnarallabandi/jataayu.git"
يتطلب Python ≥ 3.10. التبعية الصعبة الوحيدة هي requests؛ واجهات LLM الخلفية هي إضافات اختيارية.
قرر بناءً على ضرر التأثير × مصدر الإدخال، بشكل حتمي (لا يعتمد على LLM):
from jataayu import jataayu_authorize_action
decision = jataayu_authorize_action(
"shell.exec",
{"cmd": "rm -rf /tmp/cache"},
untrusted=True, # these params were influenced by untrusted inbound content
)
# {tool_name, effect_class: 'shell', provenance: 'untrusted',
# decision: 'allow'|'deny'|'needs_approval', reason, violations, commit_token}
if decision["decision"] == "deny":
raise SecurityError(decision["reason"])
يتم رفض الإدخال المشتق من مصدر غير موثوق به إلى تأثير shell / تقييم الكود / قراءة السر؛ ويحتاج إلى موافقة بشرية في حالة الشبكة / كتابة الملفات / كتابة الذاكرة؛ وكل شيء آخر مسموح به.
للتنفيذ القسري، استخدم واجهة برمجة تطبيقات الكائن PREVIEW → COMMIT — يربط commit_token
الطلب الدقيق، لذلك يتم رفض تعديل الإجراء بعد الترخيص:
from jataayu import EffectBoundary, Value, Provenance
eb = EffectBoundary()
preview = eb.preview(
"file.write",
{"path": "notes.md", "text": text},
values=[Value(text, Provenance.TRUSTED, source="user")],
)
if preview.approved:
eb.commit(preview, {"path": "notes.md", "text": text}, lambda: write_file("notes.md", text))
# commit() raises CommitRejected if the preview wasn't ALLOW or the params changed
يمكن أيضًا تسليم المحتوى المحقون إلى الوكيل كـ مقبض مبهم مع ملخص محدود، بحيث تحتوي محاولة سحب البيانات دائمًا على مقبض، وليس السر الخام (تقييد حدود القراءة).
يأتي الحقن في الرسالة الأولى، وفي نتائج الأدوات، وفي كل ما استدعاه الوكيل من الذاكرة. نفس المحرك، السطح الصحيح — تعامل مع هذا كمصدر تلوث يغذي حدود التأثير، وليس كضمان لك:
from jataayu import (
jataayu_check_inbound,
jataayu_check_tool_return,
jataayu_check_memory_write,
jataayu_check_memory_read,
)
result = jataayu_check_inbound(github_issue_body, surface="github-issue")
if result["status"] == "HIGH":
raise SecurityError(f"Blocked: {result['findings']}")
# Returns: {status: 'SAFE'|'LOW'|'MEDIUM'|'HIGH', findings, risk_score, threat_types, blocked}
# A tool result or a memory recall can carry an injection — check before the agent consumes it
r = jataayu_check_tool_return(api_response, tool_name="web.search")
if r["blocked"]:
raise SecurityError(r["findings"])
jataayu_check_memory_write(note) # before persisting
jataayu_check_memory_read(recalled) # before it re-enters context
قم بتجريد معلومات التعريف الشخصية/الأسرار قبل الإرسال إلى الأسطح المشتركة، والأهم من ذلك — حظر عنوان URL الذي يحمل البيانات / الصورة التي يتم جلبها تلقائيًا والتي تسرب السياق بدون نقرات (فئة EchoLeak / AgentFlayer / Notion). لا يرى ماسح معلومات التعريف الشخصية هذا الحمولة؛ لكن حارس الخروج يراها:
from jataayu import jataayu_check_outbound, jataayu_check_egress
result = jataayu_check_outbound(
draft_reply, surface="discord-channel",
protected_names=["Alice", "Bob"], # names that must never leak
)
safe_text = result["redacted"] if result["status"] in ("WARN", "BLOCK") else draft_reply
r = jataayu_check_egress(
"Task complete! ",
surface="github-comment",
context_secrets=[api_key], # optional: confirm exfil if a known secret rides in the URL
)
if r["status"] == "BLOCK":
safe_text = r["redacted"] # offending URL neutralized, human text kept
لا يعتبر السماح بقائمة النطاقات وحدها كافيًا — فقد تجاوز AgentFlayer عبر Azure
Blob، وهو مضيف موثوق به — لذلك يتم حظر أدوات اعتراض الطلبات ومرحلات السحابة المستغلة (webhook.site،
*.blob.core.windows.net، ngrok، ...) بشكل صارم كمنارات لسحب البيانات. يتم تشغيل هذا تلقائيًا
داخل OutboundGuard (يمكن التبديل باستخدام PrivacyConfig.check_egress، والسماح لشبكة CDN الخاصة بك عبر
egress_allowed_domains).
from jataayu import jataayu_vet_skill, jataayu_check_skillset
# Single skill — LLM-as-judge over SKILL.md instructions + code + tool defs
v = jataayu_vet_skill("path/to/skill/")
if v["verdict"] == "MALICIOUS": # verdict: 'SAFE'|'REVIEW'|'MALICIOUS'
refuse_install(v["explanation"])
# Compositional risk — individually-safe skills that are dangerous *together*
# (e.g. one reads secrets, another writes to the network → exfiltration path)
risk = jataayu_check_skillset([skill_a, skill_b, skill_c])
# {verdict, risky_combinations, policy_violations, aggregate_capabilities, ...}
from jataayu import InboundGuard, OutboundGuard, PrivacyConfig