이것은 Tensor Trust 웹 게임 및 데이터 청소 파이프 라인의 소스 코드입니다. 프로젝트에 대한 자세한 내용은 논문 웹 사이트를 참조하십시오. 데이터를 사용하거나 게임을 할 수도 있습니다!
학술 간행물에서 당사 코드 또는 데이터를 구축하는 경우 다음 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 로 이동하십시오.export OPENAI_API_KEY=<your-key> 쉘을 엽니 set 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는 HTML 소스와 CSS 소스를 다른 장소에 배치하는 것과는 대조적으로 HTML 태그에 CSS를 직접 포함시키는 CSS 프레임 워크입니다. 둥근 자주색 버튼을 정의하는 HTML 및 테일 윈드 클래스의 혼합과 같은 스타일 정보를 사전 정의 된 클래스 세트로 채우는 것입니다.
< 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로 작성되었으므로 노드가 필요한 이유이며, 새 시스템에 처음 설치할 때 모든 Tailwind의 종속성을 다운로드하기 위해 ./manage.py tailwind install 실행 해야하는 이유입니다. 컴파일러는 Tailwind 클래스 이름처럼 보이는 것에 대해 소스 코드 (HTML, Python, JavaScript)를 스캔 한 다음 모든 것을 생성 하여이 스타일 시트에 넣습니다.
src/promptgame/theme/static/css/dist/styles.css
스타일 시트는 버전 컨트롤로 확인되므로 ./manage.py tailwind start 실행하면 라이브 컴파일러의 변경 사항도 git diffs 에 나타납니다. 생성 된 styles.css 파일은 길이가 수천 줄에 불과하기 때문에 이것은 약간 추악하지만 궁극적으로 괜찮습니다.
Django Silk UI를 사용하려면 http://127.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 서버에 이미지가 작성됩니다. 이미지는 다음과 같은 :latest 태그로 gcr.io/prompt-ad-game/promptgame-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이 모든 단계를 완료하면 준비 사이트에서 스테이징 사이트에서 성공적으로 실행 한 코드도 준비 사이트에서도 사용할 수 있어야합니다!
스테이징과 prod 사이의 새로운 설정을 추가하는 방법이나 스테이징 환경을 처음부터 다시 제작하는 방법과 같은 다른 세부 사항이 많이 있습니다. 위에서 링크 된 (매우 긴) Google Doc은 이러한 질문 중 일부에 답변해야하지만 포인터를 원한다면 SAM에 SAM을 핑 할 수도 있습니다.