هذا هو الكود المصدري لخط أنابيب Web Tensor Trust و Data Cleaning. انظر موقع الورق لمزيد من التفاصيل حول المشروع. يمكنك أيضًا استخدام البيانات ، أو تشغيل اللعبة!
إذا كنت تعتمد على الكود أو بياناتنا في منشور أكاديمي ، فيرجى الاستشهاد بنا مع bibtex التالية:
@misc { toyer2023tensor ,
title = { {Tensor Trust}: Interpretable Prompt Injection Attacks from an Online Game } ,
author = { Toyer, Sam and Watkins, Olivia and Mendes, Ethan Adrian and Svegliato, Justin and Bailey, Luke and Wang, Tiffany and Ong, Isaac and Elmaaroufi, Karim and Abbeel, Pieter and Darrell, Trevor and Ritter, Alan and Russell, Stuart } ,
year = { 2023 } ,
journal = { arXiv preprint arXiv:2311.01011 } ,
url = { https://arxiv.org/pdf/2311.01011.pdf }
}للتثبيت والتشغيل ، قم أولاً بإعداد مفتاح Openai API إذا لم يكن لديك بالفعل:
https://platform.openai.com/account/api-keys .set OPENAI_API_KEY=<your-key> ، وعلى Unix Run export OPENAI_API_KEY=<your-key> .الآن قم بتشغيل ما يلي:
# Install Redis on Ubuntu. For other OSes see:
# https://redis.io/docs/getting-started/installation/
sudo apt install redis
# If this command fails, try running `redis-server` directly
sudo systemctl enable redis-server
&& sudo systemctl restart redis-server
# Install node.js on Ubuntu. For other OSes see:
# https://nodejs.org/en/download
# If this command doesn't work, try installing using nvm. See
# https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04#option-3-installing-node-using-the-node-version-manager
sudo snap install node --classic
# setup:
conda create -n promptgame python=3.10
conda activate promptgame
pip install -e ' .[dev] '
./manage.py tailwind install # install JS modules for Tailwind
./manage.py migrate # set up database
# For testing, we need two commands.
# Run this first command in one terminal to update the stylesheet in response to Tailwind changes:
./manage.py tailwind start
# Now run this second command in another terminal to a Django server
./manage.py runserver # run demo server (will auto-restart when you edit files)يمكنك الآن زيارة نسخة تطوير من موقع الويب على http: // localhost: 8000/.
Django يتعامل مع إدارة قاعدة البيانات مع Models ، والتي نحددها في src/promptgame/gameui/models.py . كلما قمت بتحرير Model ، فأنت بحاجة إلى تغيير في قاعدة البيانات الأساسية التي يديرها Django. للقيام بذلك ، قم بتشغيل:
./manage.py makemigrations
./manage.py migrate بعبارات GIT ، يشبه makemigrations إنشاء تسجيل لتغييرك إلى قاعدة البيانات. يتم تتبع هذا الترحيل فعليًا داخل ملف في دليل src/promptgame/migrations . يشبه تشغيل migrate دفع هذا الالتزام ، وبالتالي يقوم في الواقع بتحديث قاعدة البيانات. لمعرفة المزيد حول هذه العملية (بما في ذلك كيفية القيام بسلوك أكثر تعقيدًا مثل إعادة قاعدة البيانات الخاصة بك مرة أخرى إلى حالة الترحيل السابقة) ، انقر هنا.
لاحظ أنه إذا كنت تسحب من main بعد أن قام شخص ما بإجراء تغيير على نموذج ، فسيتعين عليك أيضًا تشغيل ./manage.py migrate
لإنشاء حساب المسؤول ، قم بتشغيل:
./manage.py createsuperuserاتبع المطالبات لإنشاء اسم مستخدم وكلمة مرور.
قم بتسجيل الدخول إلى صفحة المسؤول في LocalHost: 8000/private/dj-login/. على موقع Prod ، سيكون هذا في TensorTrust.ai/private/dj-login/.
أدخل اسم المستخدم وكلمة المرور التي أنشأتها أعلاه. إذا كنت على موقع Prod ، فسيتعين عليك الحصول على كلمة المرور عن طريق فتح محطة وتشغيل gcloud secrets versions access --secret=promptgame_prod_application_settings latest .
Tailwind هو إطار CSS يسهل تضمين CSS مباشرة في علامات HTML الخاصة بك ، بدلاً من وضع مصدر HTML الخاص بك ومصدر CSS في أماكن مختلفة. إنه يعمل عن طريق حشو المعلومات في مجموعة من الفئات المحددة مسبقًا ، مثل هذا المزيج من فئات HTML و Tailwind التي تحدد زرًا أرجوانيًا مستديرًا:
< div class =" ml-8 rounded-md bg-indigo-600 px-3 py-2 text-[0.8125rem]
font-semibold leading-5 text-white hover:bg-indigo-500 " >
This is a button!
</ div > قد تلاحظ من هذا المثال أن مجموعة فئات Tailwind المحتملة كبيرة حقًا. على سبيل المثال text-[0.8125rem] يجعل النص 0.8125 REM مرتفعًا ، ولكن ماذا لو طلب المستخدم 0.31 REM أو
بالطبع ، لا يمكن للمتصفحات التعامل إلا مع عدد محدود من الفصول المحددة والتصميم ، لذلك يحتاج Tailwind إلى طريقة لمعرفة الفئات التي يجب أن تنشئها بالفعل والتي يمكن أن تتخطىها. يفعل هذا باستخدام برنامج التحويل البرمجي CSS. لأغراض التطوير ، يمكن تشغيل برنامج التحويل البرمجي ديناميكيًا في متصفح الويب الخاص بك عن طريق إدخال هذه العلامة في رأس المستند الخاص بك:
< script src =" https://cdn.tailwindcss.com " > </ script >هذا يعمل ولكن لديه عيب في أن يكون بطيئًا وأحيانًا يتسبب في عرض محتوى غير معتمد. أنا أيضًا قلق قليلاً من حظرنا من CDN الخاص بهم إذا استخدمناها في الإنتاج ، لكنني لا أعرف مدى احتمال ذلك بالفعل.
لكلا هذين السببين ، نستخدم بدلاً من ذلك برنامج التحويل البرمجي لخادم Tailwind (عبر Django-Tailwind). يتم كتابة برنامج التحويل البرمجي من جانب الخادم في JavaScript ، وهذا هو السبب في أننا نحتاج إلى عقدة ، وأيضًا لماذا نحتاج إلى تشغيل ./manage.py tailwind install يقوم المترجم بمسح رمز المصدر الخاص بك (HTML ، Python ، JavaScript) للأشياء التي تشبه أسماء فئات Tailwind ، ثم يولدها جميعها وتضعها في ورقة الأنماط هذه:
src/promptgame/theme/static/css/dist/styles.css
يتم التحقق من ورقة الأنماط في التحكم في الإصدار ، لذلك عندما تقوم git diffs ./manage.py tailwind start هذا قبيح بعض الشيء ولكنه جيد في النهاية ، لأن ملف styles.css .
لاستخدام عرض Django Silk UI ، تفضل بزيارة http://127.0.0.1:8000/silk/.
تم تكوين هذا المشروع ليتم نشره على GCP. اتضح أنه معقد بشكل مدهش ، لأننا بحاجة:
تفاصيل كيفية إعدادها في مستند داخلي (يرجى الاطلاع على قناة TT الداخلية إذا كنت تابعة لـ Chai التي تحتاج إلى الوصول).
لنشر إصدار جديد من موقع الويب ، تحتاج فقط إلى معرفة مجموعة فرعية صغيرة مما يوجد في هذا المستند. بمجرد أن يكون لديك أذونات مناسبة في مشروع GCP prompt-ad-game ، يمكنك خفض نشر التدريج الجديد مثل هذا:
gcloud auth login && gcloud config set project prompt-ad-gamestaging_image_tag= " $( git rev-parse --short=7 HEAD ) $( git diff --quiet || echo " -drt " ) "
&& gcloud builds submit -t " gcr.io/prompt-ad-game/promptgame-staging: $staging_image_tag "
&& yes | gcloud container images add-tag
gcr.io/prompt-ad-game/promptgame-staging:{ " $staging_image_tag " ,latest}Dockerfile في جذر الريبو. سيتم تسمية الصورة gcr.io/prompt-ad-game/promptgame-staging مع :latest علامة ، بالإضافة إلى علامة تتكون من آخر 7 أرقام من مراجعة GIT الحالية.:latest الصورة التي قمت بإنشائها أعلاه): gcloud run jobs execute promptgame-staging-collect-and-migrate
--region us-central1 --wait./deploy/replace_cloud_run_service.py stagingإذا نجحت جميع الأوامر ، فيجب أن يكون التطبيق يعمل على موقع التدريج الخاص بنا! يمكنك استخدام هذا كفرصة للعب معها في إعداد منخفض المخاطر-من الجيد إذا تم إفساد موقعنا التدريجي ، طالما نصلح الأخطاء قبل الذهاب إلى الإنتاج.
بمجرد التحقق من أن التطبيق يعمل في التدريج ، يمكنك دفعه إلى الإنتاج:
0f043fc ، ولكن يمكنك معرفة العلامة المناسبة لك الصورة باستخدام هذا الأمر: gcloud container images list-tags
gcr.io/prompt-ad-game/promptgame-staging # can replace -staging:latest with -staging:<your tag>
yes | gcloud container images add-tag
gcr.io/prompt-ad-game/promptgame-staging:latest
gcr.io/prompt-ad-game/promptgame-prod:latestgcloud run jobs execute promptgame-prod-collect-and-migrate
--region us-central1 --wait./deploy/replace_cloud_run_service.py prodبمجرد الانتهاء من كل هذه الخطوات ، يجب أن يكون الرمز الذي قمت بتشغيله بنجاح على موقع التدريج متاحًا على موقع التدريج أيضًا!
هناك الكثير من التفاصيل الأخرى التي لم أغطيها هنا ، مثل كيفية إضافة إعدادات جديدة تختلف بين التدريج و prod ، أو كيفية إعادة إنشاء بيئة التدريج من نقطة الصفر. يجب أن يجيب مستند Google (طويل جدًا) المرتبط أعلاه على بعض هذه الأسئلة ، ولكن يمكنك أيضًا ping sam على Slack إذا كنت تريد مؤشرات.