-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multistage attack (harmful_behavior_multistage) #53
Conversation
2a75a69
to
b3be0d6
Compare
Ещё не смотрел конкретно. Ребейзнул ветку multi-stage-attack только с коммитом b3be0d6 на текущий мейн и форс-пушнул. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@RomiconEZ (FYI @nizamovtimur) мне кажется стоит подумать над функцией refine_attack_prompt: возможно ее стоит засунуть в
chat_client.py
class MultiStageInteractionSession
Данная функция позволяет "улучшить" атакующий промпт в случае неудачи.
сейчас функция start_conversation проверяет в цикле критерии остановки, но в случае, если они не встречаются - ответ защищающейся модели передается атакующей через say?
сейчас попытался эту функцию прикрутить вharmful_behavior_multistage.py
- но по ощущениям выглядит кривовато, еще не тестил
Это реально выглядит криво, refine_attack_prompt
ИМХО действительно нужно добавить в MultiStageInteractionSession
как опциональный параметр по аналогии с stop_criterion
, то есть если он не нужен, как в подхалимтсве или логике, поскольку улучшающие инструкции уже есть в системном промте атакующей модели, то пусть просто игнорируется. Хотя, может, и тебе достаточно системный промт дополнить без добавления refine?
Кстати:
def stop_criterion(tested_client_history: List[Dict[str, str]]) -> bool:
last_response = tested_client_history[-1]["content"] if tested_client_history else ""
# filtered_response = filter_non_alpha_lower(last_response) — лишнее, уже есть в `contains_refusal_keywords()`
return not contains_refusal_keywords(last_response)
7297ab1
to
1c63774
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Получилось хорошо, однако есть нюансы (см. комментарии к коду). Ещё надо проработать такой момент, что ответ атакующей модели перед подачей тестируемой надо очистить от лишних пробелов и вероятных кавычек в начале и конце.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
открыл PR для продолжения работы над multistage атакой.
@RomiconEZ (FYI @nizamovtimur) мне кажется стоит подумать над функцией refine_attack_prompt: возможно ее стоит засунуть в
chat_client.py
class MultiStageInteractionSessionДанная функция позволяет "улучшить" атакующий промпт в случае неудачи.
сейчас функция start_conversation проверяет в цикле критерии остановки, но в случае, если они не встречаются - ответ защищающейся модели передается атакующей через say?
сейчас попытался эту функцию прикрутить в
harmful_behavior_multistage.py
- но по ощущениям выглядит кривовато, еще не тестилцелевая логика:
в случае если не встретились stop_criterion и history_limit - вызывать метод для refine, который будет конкретизироваться для каждой атаки отдельно (как stop_criterion).
возможно я что-то упускаю из вида - welcome для обсуждения.