უსაფრთხოების პოლიტიკა
PRX-ში უსაფრთხოება არ არის შემდგომ დამატებული ფუნქცია აგენტის ციკლზე. ეს არის სტრუქტურული კომპონენტი — 5-ფენიანი პოლიტიკის პაიპლაინი, რომელიც მართავს რის გაკეთების უფლება აქვს ყოველ აგენტს, ინსტრუმენტსა და დანამატს.
SecurityPolicy სტრუქტურა
Section titled “SecurityPolicy სტრუქტურა”ძირითადი პოლიტიკა განსაზღვრულია SecurityPolicy სტრუქტურით:
pub struct SecurityPolicy { pub autonomy: AutonomyLevel, pub workspace_restrictions: Vec<PathBuf>, pub allowed_commands: Vec<String>, pub forbidden_paths: Vec<PathBuf>, pub rate_limits: RateLimits, pub cost_limits: CostLimits,}ავტონომიის დონეები
Section titled “ავტონომიის დონეები”| დონე | ქცევა |
|---|---|
ReadOnly | აგენტს შეუძლია ფაილების წაკითხვა და LLM-ების გამოძახება, მაგრამ ვერ ასრულებს ბრძანებებს, ვერ წერს ფაილებს ან ვერ ცვლის მდგომარეობას |
Supervised | აგენტს შეუძლია ქმედებების შემოთავაზება, მაგრამ უნდა მიიღოს ადამიანის დამტკიცება შესრულებამდე |
Full | აგენტს შეუძლია ქმედებების ავტონომიური შესრულება პოლიტიკის ფარგლებში |
სამუშაო სივრცის შეზღუდვები
Section titled “სამუშაო სივრცის შეზღუდვები”ზღუდავს ფაილური სისტემის გზებს, რომლებზეც აგენტს აქვს წვდომა:
workspace_restrictions = ["/home/user/project", "/tmp/workspace"]ამ გზების გარეთ ნებისმიერი ფაილური ოპერაცია უარყოფილია, ავტონომიის დონის მიუხედავად.
ნებადართული ბრძანებები
Section titled “ნებადართული ბრძანებები”შელის ბრძანებების ექსპლიციტური ნებართვების სია, რომლებიც აგენტს შეუძლია შეასრულოს:
allowed_commands = ["git", "cargo", "npm", "python", "ls", "cat", "grep"]ამ სიაში არ არსებული ბრძანებები დაბლოკილია. ვაილდქარდები მხარდაუჭერელია — ყოველი ნებადართული ბრძანება ექსპლიციტურად უნდა იყოს ჩამოთვლილი.
აკრძალული გზები
Section titled “აკრძალული გზები”გზები, რომლებიც ყოველთვის უარყოფილია, თუნდაც ნებადართული სამუშაო სივრცის ფარგლებში მოხვდეს:
forbidden_paths = ["/home/user/project/.env", "/home/user/project/secrets/"]მოთხოვნის ლიმიტები
Section titled “მოთხოვნის ლიმიტები”მოთხოვნის სიხშირის კონტროლი:
[rate_limits]requests_per_minute = 60requests_per_hour = 500max_concurrent = 4ხარჯის ლიმიტები
Section titled “ხარჯის ლიმიტები”LLM API გამოძახებებზე ხარჯის შეზღუდვა:
[cost_limits]max_per_request_usd = 1.00max_per_hour_usd = 10.00max_per_day_usd = 50.00ხარჯის ლიმიტის მიღწევისას, შემდგომი LLM გამოძახებები დაბლოკილია ფანჯრის გადატვირთვამდე.
5-ფენიანი პოლიტიკის პაიპლაინი
Section titled “5-ფენიანი პოლიტიკის პაიპლაინი”პოლიტიკები ფასდება ფენიან იერარქიაში. ყოველ ფენას შეუძლია შეზღუდოს (მაგრამ ვერასოდეს გააფართოვოს) ზედა ფენის მიერ მინიჭებული ნებართვები.
┌──────────────────────────────┐│ ფენა 1: გლობალური პოლიტიკა │ სისტემის მასშტაბის ნაგულისხმევები├──────────────────────────────┤│ ფენა 2: პროფილის პოლიტიკა │ მომხმარებლის ან როლის გადაფარვები├──────────────────────────────┤│ ფენა 3: აგენტის პოლიტიკა │ დასახელებულ აგენტზე შეზღუდვები├──────────────────────────────┤│ ფენა 4: ჯგუფის პოლიტიკა │ არხის ჯგუფზე შეზღუდვები├──────────────────────────────┤│ ფენა 5: ინსტრუმენტის პოლიტიკა │ ინსტრუმენტზე შეზღუდვები└──────────────────────────────┘| ფენა | ფარგლები | მაგალითი |
|---|---|---|
| გლობალური | ყველა აგენტი, ყველა არხი | autonomy = Supervised, max_per_day_usd = 100 |
| პროფილი | კონკრეტული მომხმარებელი ან როლი | ადმინის პროფილი იღებს autonomy = Full; სტუმრის პროფილი რჩება ReadOnly |
| აგენტი | დასახელებული აგენტი (მაგ., “coder”) | კოდერ აგენტი იღებს allowed_commands = ["git", "cargo"], კვლევის აგენტი — არცერთს |
| ჯგუფი | არხის ჯგუფი (მაგ., კონკრეტული Telegram ჯგუფი) | საჯარო ჯგუფები იძულებით ReadOnly |
| ინსტრუმენტი | ცალკეული ინსტრუმენტი (მაგ., “bash”) | Bash ინსტრუმენტი იღებს დამატებით forbidden_paths-ს, უფრო მკაცრ rate_limits-ს |
ნებისმიერი ქმედების ეფექტიანი პოლიტიკა არის ყველა გამოყენებადი ფენის კვეთა. თუ ნებისმიერი ფენა უარყოფს ქმედებას, ის უარყოფილია.
დამტკიცების სამუშაო პროცესი
Section titled “დამტკიცების სამუშაო პროცესი”როცა autonomy = Supervised, აგენტი ვერ ასრულებს ქმედებებს პირდაპირ. ამის ნაცვლად:
- აგენტი შესთავაზებს ქმედებას (მაგ., „
cargo test-ის გაშვება”) - PRX აფორმატებს შემოთავაზებას და აგზავნის ზედამხედველ არხში
- ზედამხედველი (ადამიანი) განიხილავს და პასუხობს: დამტკიცება, უარყოფა ან შეცვლა
- დამტკიცების შემთხვევაში, PRX ასრულებს ქმედებას და აბრუნებს შედეგს აგენტს
- უარყოფის შემთხვევაში, აგენტი იღებს უარყოფის შეტყობინებას და უნდა მოძებნოს ალტერნატიული მიდგომა
დამტკიცების მოთხოვნები მოიცავს:
- შემოთავაზებულ ზუსტ ბრძანებას ან ქმედებას
- აგენტის სახელსა და კონტექსტს
- უსაფრთხოების პოლიტიკის ფენას, რომელიც მოითხოვს დამტკიცებას
- ტაიმაუტს (ნაგულისხმევი: 5 წუთი), რომლის შემდეგაც ქმედება ავტომატურად უარყოფილია
სენდბოქსი
Section titled “სენდბოქსი”PRX მხარს უჭერს რამდენიმე სენდბოქსის ბექენდს ინსტრუმენტების შესრულების იზოლაციისთვის. სენდბოქსი შეირჩევა პლატფორმის ხელმისაწვდომობისა და კონფიგურაციის საფუძველზე.
Docker
Section titled “Docker”სრული კონტეინერული იზოლაცია. ბრძანებები მუშაობს ერთჯერად Docker კონტეინერში:
- დამონტაჟებული სამუშაო სივრცის დირექტორია (მხოლოდ წაკითხვის ან წაკითხვა-ჩაწერის პოლიტიკის მიხედვით)
- ქსელზე წვდომა არ არის (თუ ექსპლიციტურად არ არის ნებადართული)
- რესურსების ლიმიტები (CPU, მეხსიერება, დრო)
- ჩამოშორებული შესაძლებლობები
[sandbox]backend = "docker"image = "prx-sandbox:latest"network = falsememory_limit = "512m"cpu_limit = "1.0"timeout_seconds = 300Firejail
Section titled “Firejail”მსუბუქი Linux სენდბოქსი სახელსივრცეებითა და seccomp-ით:
- ფაილური სისტემის ნებართვების სია
- ქსელის ფილტრაცია
- Seccomp სისტემური გამოძახებების ფილტრაცია
- Root არ არის საჭირო
[sandbox]backend = "firejail"whitelist = ["/home/user/project"]net = "none"Bubblewrap (bwrap)
Section titled “Bubblewrap (bwrap)”მინიმალური არაპრივილეგირებული სენდბოქსი, რომელსაც Flatpak იყენებს:
- მონტაჟის სახელსივრცის იზოლაცია
- PID სახელსივრცის იზოლაცია
- მხოლოდ მითითებული დირექტორიების bind-mount
- ყველა შესაძლებლობის ჩამოშორება
[sandbox]backend = "bubblewrap"bind_rw = ["/home/user/project"]bind_ro = ["/usr", "/lib", "/bin"]unshare_net = trueLandlock
Section titled “Landlock”Linux უსაფრთხოების მოდული ფაილური სისტემის წვდომის დეტალური კონტროლისთვის:
- ფაილზე წვდომის შეზღუდვა ბირთვის დონეზე
- კონტეინერის ოვერჰედის გარეშე
- მუშაობს არაპრივილეგირებული პროცესებით
- ხელმისაწვდომია Linux 5.13+-ზე
[sandbox]backend = "landlock"allowed_read = ["/home/user/project", "/usr/lib"]allowed_write = ["/home/user/project/output"]სენდბოქსის შერჩევა
Section titled “სენდბოქსის შერჩევა”PRX ავტომატურად ამოიცნობს ხელმისაწვდომ ბექენდებს და ირჩევს ყველაზე ძლიერს:
Docker > Bubblewrap > Firejail > Landlock > Noneთუ სენდბოქსის ბექენდი არ არის ხელმისაწვდომი და პოლიტიკა მოითხოვს სენდბოქსს, ინსტრუმენტის შესრულება უარყოფილია.
WASM დანამატის სენდბოქსი
Section titled “WASM დანამატის სენდბოქსი”PRX დანამატები კომპილირებულია WASM-ში და სრულდება wasmtime სენდბოქსში:
- მეხსიერების იზოლაცია: ყოველ დანამატს აქვს საკუთარი ხაზოვანი მეხსიერება
- ფაილურ სისტემაზე წვდომა არ არის, თუ ექსპლიციტურად არ არის მინიჭებული WASI-ით
- ქსელზე წვდომა არ არის, თუ ექსპლიციტურად არ არის მინიჭებული
- CPU დროის ლიმიტები wasmtime-ის საწვავის აღრიცხვით
- დანამატები ვერ წვდებიან PRX-ის შიდა სტრუქტურებს — ისინი კომუნიკაციას ახორციელებენ განსაზღვრული ჰოსტის API-ით
[plugins.my_plugin]path = "plugins/my_plugin.wasm"permissions = ["fs:read:/data", "net:https://api.example.com"]fuel_limit = 1_000_000ეს უზრუნველყოფს, რომ მესამე მხარის ან მომხმარებლის მიერ დაწერილი დანამატები ვერ შეარყევენ ჰოსტის სისტემას, ვერ გაჟონავენ მონაცემებს ან ვერ მოხმარენ შეუზღუდავ რესურსებს.