لم تتغير الدورة، كل ما في الأمر هو أن هناك المزيد من الأدوات
"لم تتغير الحلقة على الإطلاق، لقد أضفت للتو أشياء إلى مصفوفة TOOLS." - s02_tool_use.py الكلمات الأصلية.
كم عدد الأماكن التي تحتاج إلى الانتقال إليها لإضافة أداة؟
وكيل S01 يعرف فقط bash. كيف يمكنك تغييره لتمكين أيضًا read_file / write_file / edit_file؟ ص>
رد الفعل الأول للعديد من الأشخاص هو: تغيير الحلقة. خطأ. لا تلمس سطرًا واحدًا من الحلقة. هناك حاجة إلى ثلاثة أشياء فقط:
- اكتب دالة معالج بايثون (
run_read(path, Limit)). لي> - قم بتسجيله في جدول التعيين
TOOL_HANDLERS("read_file": lambda **kw: run_read(...)). لي> - أضف عبارة مخطط JSON إلى مصفوفة
TOOLS(لتخبر النموذج باسم الأداة والمعلمات التي تقبلها). لي>
عندما ترى الحلقة كتلة tool_use، اضغط على block.name للبحث عن الوظيفة في خريطة الإرسال، وتنفيذها، وإعادة إدخال المخرجات في tool_result. يتبع نفس المسار تمامًا مثل bash.
# خريطة الإرسال: الاسم → معالج لامدا معالجات الأدوات = { "bash": lambda **kw: run_bash(kw["command"]), "read_file": lambda **kw: run_read(kw["path"], kw.get("limit"))), "write_file": lambda **kw: run_write(kw["path"], kw["content"]), "edit_file": lambda **kw: run_edit(kw["path"], kw["old_text"], kw["new_text"]),
انظر كيف يتم توجيه الإرسال
تتيح لك الأداة التالية النقر على طلب tool_use الذي قد يتم إرساله بواسطة نموذج لمعرفة كيفية توجيهه إلى وظيفة Python محددة. ملاحظة: يحدد block.name السطر الذي سيتم اتخاذه. ص>
Safe_path: خط الدفاع الذي لا يمكن إغفاله
امنح الوكيل حقوق الوصول إلى الملف. الفشل الأمني الأكثر احتمالاً هو مسار الهروب: كان من المفترض أن يعمل النموذج في /home/user/project/، ولكن انتهى به الأمر بإرسال read_file("../../etc/passwd"). ص>
توجد وظيفة صغيرة في s02 تتعامل مع هذا:
def safe_path(p: str) -> المسار: المسار = (WORKDIR / p).resolve() # التطبيع والحل .. والروابط الناعمة إذا ليس path.is_relative_to(WORKDIR): رفع ValueError(f"المسار يهرب من مساحة العمل: {p}") مسار العودة
يكمن المفتاح في خطوتين .resolve() + .is_relative_to() - قم بالتحليل إلى المسار المطلق ثم تحقق مما إذا كان لا يزال في وضع الحماية. بدون الأول، يمكن أن يمر foo/../../etc من خلاله؛ وبدون هذا الأخير، لا يتم إجراء أي فحص. ص>
تحديد أمان المسار
المسارات الخمسة التالية هي جميع معلمات read_file التي قد يرسلها النموذج. ما هي تلك التي سيتم السماح بها بواسطة safe_path وأي منها سيتم رفضها؟ افترض WORKDIR = /home/user/project. ص>
لا تقم بإضافة أدوات خطيرة إلى الوكيل
من السهل إضافة أدوات، ولكن تذكر: كل أداة تضيفها تمثل حدًا جديدًا لقدرة النموذج. في s02، يحتوي bash بالفعل على قائمة سوداء (rm -rf /، sudo، shutdown)، وwrite_file لديه قيود safe_path. اطرح على نفسك ثلاثة أسئلة قبل إضافة الأدوات إلى الإنتاج:
- هل يمكن لهذه الأداة أن تسمح للنموذج بالقيام بأشياء لا رجعة فيها؟ (rm، إرسال بريد إلكتروني، git Push)
- ما الذي يمكن أنيتسرب؟ (env vars، .ssh، ملفات تعريف الارتباط)
- هل سيتم التعامل مع مخرجات الخطأ كتعليقات على الأمر؟ (الحقن الفوري عبر إخراج الأداة)
ستضيف المحاضرة 07 "طبقة إذن" لسحب هذه القرارات من الكود وجعلها تصريحية. ص>