Skip to content
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

Merged
merged 5 commits into from
Dec 29, 2024

Conversation

NickoJo
Copy link
Collaborator

@NickoJo NickoJo commented Dec 26, 2024

открыл PR для продолжения работы над multistage атакой.

  • добавил атаку harmful_behavior_multistage - пока за работоспособность не ручаюсь - нужно обсудить архитектурный момент (ниже)
  • добавил ее упоминание во всякие config файлы
  • TODO: обновить md файлы - как замерджим эту атаку

@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 для обсуждения.

@NickoJo NickoJo added the enhancement New feature or request label Dec 26, 2024
@NickoJo NickoJo requested a review from nizamovtimur December 26, 2024 23:02
@NickoJo NickoJo self-assigned this Dec 26, 2024
@NickoJo NickoJo requested a review from RomiconEZ December 26, 2024 23:02
@nizamovtimur
Copy link
Collaborator

Ещё не смотрел конкретно. Ребейзнул ветку multi-stage-attack только с коммитом b3be0d6 на текущий мейн и форс-пушнул.

Copy link
Collaborator

@nizamovtimur nizamovtimur left a 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)

@nizamovtimur
Copy link
Collaborator

Необходимый для доработки функционал добавлен в #55

@NickoJo можешь развлекаться, только в конце прогони пж pre-commit run --all-files

Copy link
Collaborator

@nizamovtimur nizamovtimur left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Получилось хорошо, однако есть нюансы (см. комментарии к коду). Ещё надо проработать такой момент, что ответ атакующей модели перед подачей тестируемой надо очистить от лишних пробелов и вероятных кавычек в начале и конце.

src/llamator/attacks/harmful_behavior_multistage.py Outdated Show resolved Hide resolved
@NickoJo NickoJo requested a review from nizamovtimur December 28, 2024 22:12
Copy link
Collaborator

@nizamovtimur nizamovtimur left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great job! Happy New Year!
image

@nizamovtimur nizamovtimur merged commit f00faf1 into main Dec 29, 2024
1 of 2 checks passed
@nizamovtimur nizamovtimur deleted the multi-stage-attack branch December 29, 2024 20:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants