Ini adalah kode sumber untuk permainan web Tensor Trust dan pipa pembersih data. Lihat situs web kertas untuk detail lebih lanjut tentang proyek ini. Anda juga dapat menggunakan data, atau bermain game!
Jika Anda membangun kode atau data kami dalam publikasi akademik, silakan mengutip kami dengan BIBTEX berikut:
@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 }
}Untuk menginstal dan jalankan, pertama -tama atur tombol API OpenAI jika Anda belum:
https://platform.openai.com/account/api-keys .set OPENAI_API_KEY=<your-key> , dan pada unix run export OPENAI_API_KEY=<your-key> .Sekarang jalankan berikut:
# 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)Sekarang Anda dapat mengunjungi salinan pengembangan situs web di http: // localhost: 8000/.
Django menangani manajemen basis data dengan Models , yang kami definisikan dalam src/promptgame/gameui/models.py . Setiap kali Anda mengedit Model , Anda perlu perubahan untuk tercermin dalam database yang mendasari yang dikelola Django. Untuk melakukan ini, jalankan:
./manage.py makemigrations
./manage.py migrate Dalam istilah git, makemigrations seperti membuat komit merekam perubahan Anda ke database. Migrasi ini sebenarnya dilacak dalam file di direktori src/promptgame/migrations . Menjalankan migrate seperti mendorong komit ini, dan dengan demikian benar -benar memperbarui database. Untuk mengetahui lebih lanjut tentang proses ini (termasuk cara melakukan perilaku yang lebih kompleks seperti mengembalikan database Anda kembali ke keadaan migrasi sebelumnya), klik di sini.
Perhatikan bahwa jika Anda menarik dari main setelah seseorang membuat perubahan pada model, Anda juga harus menjalankan ./manage.py migrate untuk menerapkan migrasi baru yang dihasilkan oleh orang lain.
Untuk membuat akun admin, jalankan:
./manage.py createsuperuserIkuti petunjuk untuk membuat nama pengguna dan kata sandi.
Masuk ke halaman Admin di LocalHost: 8000/Private/DJ-Login/. Di situs Prod, ini akan berada di TensorTrust.ai/private/dj-login/.
Masukkan nama pengguna dan kata sandi yang Anda buat di atas. Jika Anda berada di situs Prod, Anda harus mendapatkan kata sandi dengan membuka terminal dan menjalankan gcloud secrets versions access --secret=promptgame_prod_application_settings latest .
Tailwind adalah kerangka kerja CSS yang membuatnya lebih mudah untuk menanamkan CSS secara langsung di tag HTML Anda, sebagai lawan menempatkan sumber HTML Anda dan sumber CSS Anda di berbagai tempat. Ini bekerja dengan memasukkan informasi gaya ke dalam satu set kelas yang telah ditentukan, seperti campuran kelas HTML dan tailwind yang mendefinisikan tombol ungu bulat:
< 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 > Anda mungkin memperhatikan dari contoh ini bahwa himpunan kelas tailwind yang mungkin sangat besar. misalnya text-[0.8125rem] membuat teks 0,8125 REM tinggi, tetapi bagaimana jika pengguna meminta 0,31 REM atau
Tentu saja, browser hanya dapat menangani sejumlah kelas yang ditentukan dan ditata, sehingga penarik membutuhkan cara untuk mencari tahu kelas mana yang sebenarnya harus dihasilkan dan yang dapat dilewati. Ini melakukan ini menggunakan kompiler CSS. Untuk tujuan pengembangan, kompiler dapat dijalankan secara dinamis di browser web Anda dengan memasukkan tag ini ke kepala dokumen Anda:
< script src =" https://cdn.tailwindcss.com " > </ script >Ini berfungsi tetapi memiliki kelemahan karena lambat dan terkadang menyebabkan konten yang tidak terhubung ditampilkan. Saya juga sedikit khawatir bahwa kita akan dilarang dari CDN mereka jika kami menggunakannya dalam produksi, tetapi saya tidak tahu seberapa besar kemungkinannya.
Untuk kedua alasan ini, kami malah menggunakan kompiler sisi server Tailwind (melalui Django-Tailwind). Kompiler sisi server ditulis dalam JavaScript, itulah sebabnya kami membutuhkan Node, dan juga mengapa kami perlu menjalankan ./manage.py tailwind install untuk mengunduh semua dependensi Tailwind saat pertama kali menginstal pada mesin baru. Kompiler memindai kode sumber Anda (html, python, javascript) untuk hal -hal yang terlihat seperti nama kelas tailwind, kemudian menghasilkan semuanya dan memasukkannya ke dalam stylesheet ini:
src/promptgame/theme/static/css/dist/styles.css
Stylesheet diperiksa ke kontrol versi, jadi ketika Anda menjalankan ./manage.py tailwind start , perubahan yang dibuat oleh kompiler langsung juga akan muncul di git diffs . Ini agak jelek tetapi pada akhirnya baik -baik saja, karena file styles.css yang diproduksi hanya beberapa ribu baris.
Untuk menggunakan Lihat Django Silk UI, kunjungi http://127.0.0.1:8000/silk/.
Proyek ini dikonfigurasi untuk digunakan di GCP. Ternyata sangat rumit, karena kami membutuhkan:
Rincian tentang bagaimana semua yang diatur berada dalam dokumen internal (silakan lihat saluran TT internal jika Anda seorang afiliasi Chai yang membutuhkan akses).
Untuk menggunakan versi baru dari situs web, Anda hanya perlu mengetahui subset kecil dari apa yang ada di dokumen itu. Setelah Anda memiliki izin yang sesuai pada proyek GCP prompt-ad-game , Anda dapat memotong penyebaran pementasan baru seperti ini:
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 di akar repo. Gambar akan dinamai gcr.io/prompt-ad-game/promptgame-staging dengan a :latest , serta tag yang terdiri dari 7 digit terakhir dari revisi git saat ini.:latest yang Anda buat di atas): gcloud run jobs execute promptgame-staging-collect-and-migrate
--region us-central1 --wait./deploy/replace_cloud_run_service.py stagingJika semua perintah berhasil, aplikasi harus berjalan di situs pementasan kami! Anda dapat menggunakan ini sebagai kesempatan untuk bermain dengannya dalam pengaturan berisiko rendah-tidak apa-apa jika situs pementasan kami berantakan, selama kami memperbaiki bug sebelum pergi ke produksi.
Setelah Anda memverifikasi bahwa aplikasi berfungsi dalam pementasan, Anda dapat mendorongnya ke produksi:
0f043fc , tetapi Anda dapat mengetahui tag yang tepat untuk gambar Anda menggunakan perintah ini: 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 prodSetelah Anda menyelesaikan semua langkah ini, kode yang Anda jalankan dengan sukses di situs pementasan harus tersedia di situs pementasan juga!
Ada banyak detail lain yang belum saya bahas di sini, seperti cara menambahkan pengaturan baru yang berbeda antara pementasan dan prod, atau cara menciptakan kembali lingkungan pementasan dari awal. Google doc (sangat panjang) yang ditautkan di atas harus menjawab beberapa pertanyaan itu, tetapi Anda juga dapat melakukan ping sam di Slack jika Anda menginginkan petunjuk.