これは、テンソルトラストWebゲームとデータクリーニングパイプラインのソースコードです。プロジェクトの詳細については、Paper Webサイトをご覧ください。データを使用したり、ゲームをプレイしたりすることもできます。
アカデミック出版物のコードまたはデータを構築する場合は、次の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)これで、Webサイトの開発コピーhttp:// localhost:8000/にアクセスできます。
djangoはsrc/promptgame/gameui/models.pyで定義するModelsを使用してデータベース管理を処理します。 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は、HTMLソースとCSSソースをさまざまな場所に配置するのではなく、CSSを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 highを作成しますが、ユーザーが0.31 remを要求した場合はどうなりますか
もちろん、ブラウザは有限数の定義されたスタイルのクラスのみを処理できるため、Tailwindには実際に生成する必要があるクラスを把握し、どのクラスがスキップできるかを把握する必要があります。 CSSコンパイラを使用してこれを行います。開発目的で、このタグをドキュメントのヘッドに挿入することにより、コンパイラをWebブラウザーで動的に実行できます。
< script src =" https://cdn.tailwindcss.com " > </ script >これは機能しますが、遅く、時にはスタイルのないコンテンツが表示されるという欠点があります。また、生産で使用した場合、CDNがCDNを禁止されることを少し心配していますが、実際にどれだけの可能性があるかわかりません。
これらの両方の理由で、代わりにTailwindのサーバー側コンパイラ(Django-Tailwind経由)を使用します。サーバー側のコンパイラはJavaScriptで記述されているため、ノードが必要な理由です。また、新しいマシンに最初にインストールするときにすべてのTailwindの依存関係をダウンロードするために./manage.py tailwind install実行する必要がある理由もあります。コンパイラは、ソースコード(HTML、Python、JavaScript)をスキャンして、Tailwindクラス名のように見えるものをスキャンし、それらをすべて生成し、このスタイルシートに入れます。
src/promptgame/theme/static/css/dist/styles.css
StyleSheetはバージョンコントロールにチェックされているため、 ./manage.py tailwind startを実行すると、ライブコンパイラが行った変更もgit diffsに表示されます。これは少し醜いですが、最終的には問題ありません。なぜなら、生成されたstyles.cssファイルの長さはわずか数千行です。
Django Silk UIを使用するには、http://127.0.0.1:8000/silk/にアクセスしてください。
このプロジェクトは、GCPに展開されるように構成されています。私たちが必要としていたので、それは驚くほど複雑であることが判明しました:
すべてのセットアップの詳細は内部ドキュメントにあります(アクセスが必要なCHAIアフィリエイトの場合は、内部TTチャネルを参照してください)。
ウェブサイトの新しいバージョンを展開するには、そのドキュメントにあるものの小さなサブセットを知る必要があります。 prompt-ad-game GCPプロジェクトに適切なアクセス許可があると、このような新しいステージング展開を削減できます。
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を使用して、Googleのサーバー上に画像が作成されます。画像は、 gcr.io/prompt-ad-game/promptgame-staging :latest jame-jame-jame-stagingと呼ばれます。: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これらすべての手順を完了したら、ステージングサイトで正常に実行したコードもステージングサイトでも利用できるはずです!
ステージングと製品の間で異なる新しい設定を追加する方法や、ステージング環境をゼロから再作成する方法など、ここではカバーしていない他の詳細がたくさんあります。上記の(非常に長い)Googleドキュメントは、これらの質問のいくつかに答える必要がありますが、ポインターが必要な場合はSAMをSAMにpingすることもできます。