นี่คือซอร์สโค้ดสำหรับ Tensor Trust Web Game และ Data Cleaning Pipeline ดูเว็บไซต์กระดาษสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับโครงการ นอกจากนี้คุณยังสามารถใช้ข้อมูลหรือเล่นเกม!
หากคุณสร้างรหัสหรือข้อมูลของเราในสิ่งพิมพ์ทางวิชาการโปรดอ้างอิงเราด้วย 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-keysset 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 กำลังจัดการอยู่ ในการทำเช่นนี้ Run:
./manage.py makemigrations
./manage.py migrate ในแง่ของ GIT makemigrations เป็นเหมือนการสร้างการกระทำที่บันทึกการเปลี่ยนแปลงของคุณไปยังฐานข้อมูล การโยกย้ายนี้ถูกติดตามจริงภายในไฟล์ในไดเรกทอรี src/promptgame/migrations การใช้งาน migrate เป็นเหมือนการผลักดันการกระทำนี้และจริง ๆ แล้วอัปเดตฐานข้อมูล หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการนี้ (รวมถึงวิธีการทำพฤติกรรมที่ซับซ้อนมากขึ้นเช่นเปลี่ยนฐานข้อมูลของคุณกลับไปยังสถานะการย้ายถิ่นก่อนหน้านี้) คลิกที่นี่
โปรดทราบว่าหากคุณดึงมาจาก main หลังจากมีคนเปลี่ยนแปลงโมเดลคุณจะต้องเรียกใช้ ./manage.py migrate ไปใช้การอพยพใหม่ที่สร้างขึ้นโดยบุคคลอื่น
เพื่อสร้างบัญชีผู้ดูแลระบบเรียกใช้:
./manage.py createsuperuserทำตามพรอมต์เพื่อสร้างชื่อผู้ใช้และรหัสผ่าน
ลงชื่อเข้าใช้หน้าผู้ดูแลระบบที่ LocalHost: 8000/ส่วนตัว/DJ-Login/ บนไซต์ Prod สิ่งนี้จะอยู่ที่ tensortrust.ai/private/dj-login/
ป้อนชื่อผู้ใช้และรหัสผ่านที่คุณสร้างไว้ด้านบน หากคุณอยู่ในไซต์ PRED คุณจะต้องได้รับรหัสผ่านโดยการเปิดเทอร์มินัลและเรียกใช้ 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 เพื่อดาวน์โหลดการพึ่งพาทั้งหมดของ Tailwind เมื่อติดตั้งครั้งแรกบนเครื่องใหม่ คอมไพเลอร์สแกนซอร์สโค้ดของคุณ (HTML, Python, JavaScript) สำหรับสิ่งต่าง ๆ ที่ดูเหมือนชื่อคลาส Tailwind จากนั้นสร้างทั้งหมดและนำไปใส่ในสไตล์ชีทนี้:
src/promptgame/theme/static/css/dist/styles.css
สไตล์ชีทจะถูกตรวจสอบเป็นตัวควบคุมเวอร์ชันดังนั้นเมื่อคุณเรียกใช้ ./manage.py tailwind start การเปลี่ยนแปลงที่ทำโดยคอมไพเลอร์สดจะปรากฏขึ้นใน git diffs นี่เป็นเรื่องที่น่าเกลียด แต่ท้ายที่สุดก็ใช้ได้เพราะไฟล์ styles.css ที่ผลิตมีความยาวเพียงไม่กี่พันบรรทัด
หากต้องการใช้ดู Django Silk UI เยี่ยมชม http://127.0.0.1:8000/silk/
โครงการนี้ได้รับการกำหนดค่าให้ปรับใช้กับ GCP มันกลับกลายเป็นว่าซับซ้อนอย่างน่าประหลาดใจเนื่องจากเราต้องการ:
รายละเอียดของวิธีการตั้งค่าทั้งหมดอยู่ในเอกสารภายใน (โปรดดูช่อง TT ภายในหากคุณเป็นพันธมิตรไชยที่ต้องการการเข้าถึง)
ในการปรับใช้เว็บไซต์เวอร์ชันใหม่คุณจะต้องรู้ชุดย่อยเล็ก ๆ ของสิ่งที่อยู่ในเอกสารนั้น เมื่อคุณมีสิทธิ์ที่เหมาะสมในโครงการ 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 ในรูทของ repo ภาพจะได้รับการตั้งชื่อว่า gcr.io/prompt-ad-game/promptgame-staging -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 หากคุณต้องการพอยน์เตอร์