Это исходный код для веб -игры Tensor Trust Web Game и очистки данных. Смотрите бумажный веб -сайт для более подробной информации о проекте. Вы также можете использовать данные или сыграть в игру!
Если вы опираетесь на наш код или данные в академической публикации, пожалуйста, укажите нам следующее 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 }
}Чтобы установить и запустить, сначала настройте ключ API OpenAI, если у вас еще нет:
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 , вам нужно, чтобы изменение было отражено в базовой базе данных, которыми управляет Джанго. Для этого беги:
./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 > Из этого примера вы можете заметить, что набор возможных занятий по ветру действительно большой. Например, 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 , чтобы загрузить все зависимости Tailwind при первой установке на новой машине. Компилятор сканирует ваш исходный код (HTML, Python, Javascript) для вещей, которые выглядят как имена классов Taillid
src/promptgame/theme/static/css/dist/styles.css
Таблица StyleShephice проверяется в управлении версиями, поэтому, когда git diffs запустите ./manage.py tailwind start Это немного некрасиво, но в конечном итоге нормально, потому что файл производимого styles.css длиной всего несколько тысяч строк.
Чтобы использовать просмотреть шелк Django ilk 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 с A :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 Doc, связанный выше, должен ответить на некоторые из этих вопросов, но вы также можете пинг Сэма на Slack, если хотите указатели.