@ -223,7 +223,7 @@ simple_function 함수의 문자열 입력을 질문의 시작으로 대체하
### 지시에 방어문구를 추가
### 지시에 방어문구를 추가
입문 단계에서 적용해 볼 수 있는 간단한 방어 전술은 모델에 전달되는 지시를 이용하여 바람직한 출력을 도출하는 것입니다. 이것은 완전한 해결책이 아니며 어떠한 보장도 제공하지 않지만 잘 만들어진 프롬프트의 힘을 보여줍니다. 다음 장에서 적대적 프롬프트를 감지하기 위해 좋은 프롬프트를 활용하는 보다 강력한 접근 방식을 다룰 예정입니다. 'text-davinci-003'에서 다음과 같은 프롬프트 주입을 시도해 보겠습니다:
입문 단계에서 적용해 볼 수 있는 간단한 방어 전술은 모델에 전달되는 지시를 이용하여 바람직한 출력을 도출하는 것입니다. 이것은 완전한 해결책이 아니며 어떠한 보장도 제공하지 않지만 잘 만들어진 프롬프트의 힘을 보여줍니다. 다음 섹션에서 적대적 프롬프트를 감지하기 위해 좋은 프롬프트를 활용하는 보다 강력한 접근 방식을 다룰 예정입니다. 'text-davinci-003'에서 다음과 같은 프롬프트 주입을 시도해 보겠습니다.
_프롬프트:_
_프롬프트:_
@ -255,19 +255,23 @@ _출력:_
공격적
공격적
```
```
마지막에 악성 명령을 주입했음에도 모델이 원래 작업을 수행했음을 알 수 있습니다. 지시와 함께 제공된 추가 문구가 모델이 원래 부여받은 작업을 수행하도록 조정하는 데에 도움이 된 것으로 보입니다.
마지막에 악성 명령을 주입했음에도 모델이 원래 작업을 수행했음을 알 수 있습니다. 지시와 함께 제공된 추가 문구가 모델에 부여된 원래 작업을 수행하도록 조정하는 데에 도움이 된 것으로 보입니다.
해당 예시를 [이 노트북](https://github.com/dair-ai/Prompt-Engineering-Guide/blob/main/notebooks/pe-chatgpt-adversarial.ipynb)에서 시도해볼 수 있습니다.
해당 예시를 [이 노트북](https://github.com/dair-ai/Prompt-Engineering-Guide/blob/main/notebooks/pe-chatgpt-adversarial.ipynb).에서 시도해볼 수 있습니다.
### 프롬프트 컴포넌트 매개변수화
### 프롬프트 컴포넌트 매개변수화
프롬프트 주입은 [SQL 주입](https://en.wikipedia.org/wiki/SQL_injection)과 상당히 유사하므로 해당 도메인에서 방어 전략을 이끌어낼 수 있습니다.
프롬프트 주입은 [SQL 주입](https://en.wikipedia.org/wiki/SQL_injection)과 상당히 유사하므로 해당 도메인에서 방어 전략을 이끌어낼 수 있습니다.
이에 영감을 받은 [Simon의 제안](https://simonwillison.net/2022/Sep/12/prompt-injection/),은 입력으로부터 명령을 분리하여 별개로 처리하는 것과 같은 프롬프트의 다양한 구성 요소를 매개 변수화하는 것입니다.
이에 영감을 받은 [Simon의 제안](https://simonwillison.net/2022/Sep/12/prompt-injection/)은 입력으로부터 명령을 분리하여 별개로 처리하는 것과 같은 프롬프트의 다양한 구성 요소를 매개 변수화하는 것입니다.
이 방법을 통해 더 깔끔하고 안전한 해결책으로 이어질 수는 있지만, 매번 유동적으로 적용할 수 있는 방법은 아니라는 점을 고려해야 합니다. 이는 LLM과 상호 작용하는 소프트웨어가 발전할 수록 그에 비례하여 각광받는 분야입니다.
이 방법을 통해 더 깔끔하고 안전한 해결책으로 이어질 수는 있지만, 매번 유동적으로 적용할 수 있는 방법은 아니라는 점을 고려해야 합니다. 이는 LLM과 상호 작용하는 소프트웨어가 발전할 수록 그에 비례하여 각광받는 분야입니다.
### 따옴표 및 추가 형식(Formatting) 지정
### 따옴표 및 추가 형식(Formatting) 지정
뒤이어, Riley는 [이른바 꼼수](https://twitter.com/goodside/status/1569457230537441286?s=20)가 있을 수 있음을 알렸지만, 이는 결국 다른 사용자에 의해 악용되었습니다. Riley가 제안한 방법에는, 입력 문자열에 이스케이프 처리를 하거나 따옴표로 묶는 작업이 포함되었습니다. 또한 Riley는 이 방법을 사용하면 지시에 경고를 추가하는 것도 소용이 없으며, 여러 문구에 걸쳐 강력한 영향력을 가진다고 지적했습니다. 그럼에도 불구하고 적절한 프롬프트 포맷팅은 여전히 유용하기 때문에 프롬프트 예시를 공유하겠습니다.
또한, Riley는 [하나의 회피책](https://twitter.com/goodside/status/1569457230537441286?s=20)을 제시했지만, 이는 결국 다른 사용자에 의해 악용되었습니다. Riley가 제안한 방법에는, 입력 문자열에 이스케이프 처리를 하거나 따옴표로 묶는 작업이 포함되었습니다. 또한 Riley는 이 방법을 사용하면 지시에 경고를 추가하는 것도 소용이 없으며, 여러 문구에 걸쳐 강력한 영향력을 가진다고 지적했습니다. 그럼에도 불구하고 적절한 프롬프트 포맷팅은 여전히 유용하기 때문에 프롬프트 예시를 공유하겠습니다.
_프롬프트:_
_프롬프트:_
@ -290,7 +294,8 @@ _출력:_
Riley가 제안한 또 다른 [방어 전략](https://twitter.com/goodside/status/1569457230537441286?s=20)은 지시나 예시에 JSON 인코딩과 마크다운 제목을 사용하는 것입니다.
Riley가 제안한 또 다른 [방어 전략](https://twitter.com/goodside/status/1569457230537441286?s=20)은 지시나 예시에 JSON 인코딩과 마크다운 제목을 사용하는 것입니다.
이를 재현해보기 위해서 `temperature=0`으로 시도해보았지만 그닥 효과가 있지는 않았습니다. 아래에서 재현을 위해 시도된 프롬프트와 출력을 확인할 수 있습니다. 이 예시는 모델에 입력되는 내용과 형식에 대해 생각하는 것이 얼마나 중요한지를 보여주며, 이 글을 읽는 학습자가 다양한 입력 및 지시 변형에 대응할 수 있는 강력한 방어를 찾을 수 있도록 도울 것입니다.
이를 재현해 보기 위해서 `temperature=0`으로 시도해 보았지만 그다지 효과는 없었습니다. 아래에서 재현을 위해 시도된 프롬프트와 출력을 확인할 수 있습니다. 이 예시는 모델에 입력되는 내용과 형식에 대해 생각하는 것이 얼마나 중요한지를 보여주며, 이 글을 읽는 학습자가 다양한 입력 및 지시 변형에 대응할 수 있는 강력한 방어를 찾을 수 있도록 도울 것입니다.
_프롬프트:_
_프롬프트:_
@ -315,11 +320,12 @@ _출력:_
### 적대적 프롬프트 탐지기(detecter)
### 적대적 프롬프트 탐지기(detecter)
대규모언어모델(LLM: Large Language Model)은 복잡하고, 광범위한 작업에서 우수한 성능을 발휘하는 강력한 시스템이라는 것은 우리 모두 알고있는 사실입니다. 또한 LLM은 지식 생성([Luu et al. 2022](https://arxiv.org/pdf/2110.08387.pdf))이나 자가 검증([Weng et al. (dll)](https://arxiv.org/abs/2212.09561v1))과 같은 특정 작업을 수행하는 데 사용되거나 이를 위해 추가학습을 시킬 수도 있습니다. 마찬가지로 LLM을 사용하여 적대적 프롬프트를 탐지하고 필터링할 수 있습니다.
대규모언어모델(LLM: Large Language Model)은 복잡하고, 광범위한 작업에서 우수한 성능을 발휘하는 강력한 시스템이라는 것은 우리 모두 알고있는 사실입니다. 또한 LLM은 지식 생성([Luu et al. 2022](https://arxiv.org/pdf/2110.08387.pdf))이나 자가 검증([Weng et al. (dll)](https://arxiv.org/abs/2212.09561v1))과 같은 특정 작업을 수행하는 데 사용되거나 이를 위해 추가학습을 시킬 수도 있습니다. 마찬가지로 LLM을 사용하여 적대적 프롬프트를 탐지하고 필터링할 수 있습니다.
[Armstrong과 Gorman (2022)](https://www.alignmentforum.org/posts/pNcFYZnPdXyL2RfgA/using-gpt-eliezer-against-chatgpt-jailbreaking)은 이 개념을 이용한 흥미로운 해결책을 제안합니다. 실제로 사용한 예시를 살펴보겠습니다.
[Armstrong과 Gorman (2022)](https://www.alignmentforum.org/posts/pNcFYZnPdXyL2RfgA/using-gpt-eliezer-against-chatgpt-jailbreaking)은 이 개념을 이용한 흥미로운 해결책을 제안합니다. 실제로 사용한 예시를 살펴보겠습니다.
첫 번째 단계는 프롬프트 평가자를 정의내리는 것입니다. 이 기사의 저자는 다음과 같이 생긴 `chatgpt-prompt-evaluator`를 제시합니다:
첫 번째 단계는 프롬프트 평가자를 정의내리는 것입니다. 이 기사의 저자는 다음과 같은 `chatgpt-prompt-evaluator`를 제시합니다:
_프롬프트:_
_프롬프트:_
@ -341,9 +347,10 @@ _프롬프트:_
Riley Goodside가 [이 트위터 스레드](https://twitter.com/goodside/status/1578278974526222336?s=20)에서 제안한 바와 같이, 프롬프트 주입을 피하기 위한 한 가지 접근법은 실제 운영 레벨에서 지시를 따르도록 학습된 모델(명령 기반 모델)을 사용하지 않는 것입니다. 그는 모델을 새롭게 추가 학습시키거나 비명령 기반 모델을 기반으로 k-shot 프롬프트를 만드는 것을 추천합니다.
Riley Goodside가 [이 트위터 스레드](https://twitter.com/goodside/status/1578278974526222336?s=20)에서 제안한 바와 같이, 프롬프트 주입을 피하기 위한 한 가지 접근법은 실제 운영 레벨에서 지시를 따르도록 학습된 모델(명령 기반 모델)을 사용하지 않는 것입니다. 그는 모델을 새롭게 추가 학습시키거나 비명령 기반 모델을 기반으로 k-shot 프롬프트를 만드는 것을 추천합니다.
명령어를 폐기하는 k-shot 프롬프트 솔루션은 입력에 너무 많은 예시를 필요로 하지 않는 일반적/통상적 작업에 적절한 솔루션입니다. 명령 기반 모델에 의존하지 않는 이 버전도 여전히 프롬프트 주입에 노출되어 있다는 것을 기억하세요. [http user](https://twitter.com/goodside/status/1578291157670719488?s=20) 가 해야 할 일은 원래 프롬프트의 흐름을 방해하거나 예제 구문을 모방하는 것이었습니다. Riley는 공백 이스케이프 및 따옴표 입력과 같은 추가 포맷팅 옵션을 사용하여 프롬프트를 보다 견고하게 만들 것을 제안합니다. 이러한 모든 접근 방식은 여전히 취약하며 훨씬 더 강력한 솔루션이 필요합니다.
명령어를 폐기하는 k-shot 프롬프트 솔루션은 입력에 너무 많은 예시를 필요로 하지 않는 일반적/통상적 작업에 적절한 솔루션입니다. 명령 기반 모델에 의존하지 않는 이 버전도 여전히 프롬프트 주입에 노출되어 있다는 것을 기억하세요. [http user](https://twitter.com/goodside/status/1578291157670719488?s=20)가 해야 할 일은 원래 프롬프트의 흐름을 방해하거나 예제 구문을 모방하는 것이었습니다. Riley는 공백 이스케이프 및 따옴표 입력과 같은 추가 포맷팅 옵션을 사용하여 프롬프트를 보다 견고하게 만들 것을 제안합니다. 이러한 모든 접근 방식은 여전히 취약하며 훨씬 더 강력한 솔루션이 필요합니다.
어려운 작업의 경우 입력 길이에 의해 제약을 받을 수 있는 예제가 훨씬 더 필요할 수 있습니다. 이러한 경우에는 여러 예제(100 ~ 수천 개)를 기반으로 모델을 추가학습시키는 것이 더 이상적일 수 있습니다. 보다 강력하고 정확한 추가 학습 모델을 구축할수록 명령 기반 모델에 대한 의존도가 낮아지고 프롬프트 주입을 예방할 수 있습니다. 추가학습을 통해 미세 조정된 모델은 프롬프트 주입을 예방하기 위해 현재 우리가 취할 수 있는 가장 좋은 접근법일 수 있습니다.
어려운 작업의 경우 입력 길이에 의해 제약을 받을 수 있는 예제가 훨씬 더 필요할 수 있습니다. 이러한 경우에는 여러 예제(100 ~ 수천 개)를 기반으로 모델을 추가학습시키는 것이 더 이상적일 수 있습니다. 보다 강력하고 정확한 추가학습 모델을 구축할수록 명령 기반 모델에 대한 의존도가 낮아지고 프롬프트 주입을 예방할 수 있습니다. 추가학습을 통해 미세 조정된 모델은 프롬프트 주입을 예방하기 위해 현재 우리가 취할 수 있는 가장 좋은 접근법일 수 있습니다.
최근, ChatGPT가 등장했습니다. 위에서 시도한 많은 공격에 대해 ChatGPT에는 이미 일부 가드레일이 포함되어 있으며 악의적이거나 위험한 프롬프트가 나타날 때 안전한 메시지로 응답할 수 있습니다. ChatGPT는 이러한 적대적 프롬프트 기술의 대부분을 방어할 수 있지만, 이는 늘 완벽하지는 않으며 여전히 모델이 가진 가드레일을 깨는 새롭고 효과적인 적대적 프롬프트가 존재합니다. ChatGPT의 한 가지 단점은 모델 내에 가드레일이 있기 때문에 원치 않는 동작을 방지할 수 있지만 입력에 특수한 제약 조건이 추가될 때에는 특정 동작을 방지할 수 없다는 것입니다. 이러한 모든 모델 유형과 관련하여, 이 분야는 보다 우수하고 강력한 솔루션으로 끊임없이 진화하고 있습니다.
최근, ChatGPT가 등장했습니다. 위에서 시도한 많은 공격에 대해 ChatGPT에는 이미 일부 가드레일이 포함되어 있으며 악의적이거나 위험한 프롬프트가 나타날 때 안전한 메시지로 응답할 수 있습니다. ChatGPT는 이러한 적대적 프롬프트 기술의 대부분을 방어할 수 있지만, 이는 늘 완벽하지는 않으며 여전히 모델이 가진 가드레일을 깨는 새롭고 효과적인 적대적 프롬프트가 존재합니다. ChatGPT의 한 가지 단점은 모델 내에 가드레일이 있기 때문에 원치 않는 동작을 방지할 수 있지만 입력에 특수한 제약 조건이 추가될 때에는 특정 동작을 방지할 수 없다는 것입니다. 이러한 모든 모델 유형과 관련하여, 이 분야는 보다 우수하고 강력한 솔루션으로 끊임없이 진화하고 있습니다.
대규모언어모델(LLM: Large Language Model)은 모델의 성능을 저하시키고 다운스트림 태스크 수행과정에서 의도치 않은 방향으로 흘러가게 만들 수 있는 편향성이라는 잠재적 위험성을 지니고 있습니다. 그 중 일붑는 효과적인 프롬프팅 전략을 통해 개선될 수 있지만 오히려 입력 텍스트의 일부를 덜어내거나 필터링하는 것과 같은 보다 정교한 솔루션이 필요할 수 있습니다.
대규모언어모델(LLM: Large Language Model)은 모델의 성능을 저하시키고 다운스트림 태스크 수행과정에서 의도치 않은 방향으로 흘러가게 만들 수 있는 편향성이라는 잠재적 위험성을 지니고 있습니다. 그 중 일부는 효과적인 프롬프팅 전략을 통해 개선될 수 있지만 오히려 입력 텍스트의 일부를 덜어내거나 필터링하는 것과 같은 보다 정교한 솔루션이 필요할 수 있습니다.
### 표본 분포
### 표본 분포
@ -98,6 +99,6 @@ _출력:_
### 표본의 순서
### 표본의 순서
퓨샷 예시를 이용하여 학습할 시, 예시의 순서가 모델의 성능이나 편향성에 영향을 줄 수 있을지 확인해볼 필요가 있습니다.
퓨샷 예시를 이용하여 학습을 진행할 경우, 예시의 순서가 모델의 성능이나 편향성에 어떤 식으로 영향을 주는지 확인해 볼 필요가 있습니다.
위 표본들의 순서를 변경하여 모델이 출력하는 라벨에 편향을 만들어낼 수 있는지 확인해보시기 바랍니다. 표본을 무작위로 정렬해 보는 것을 추천합니다. 예를 들어, 처음엔 긍정적인 예시만을, 마지막에는 모든 부정적인 예시만을 제공하는 것을 지양해야 합니다. 라벨 분포가 왜곡된 경우 이 문제는 더욱 심각해집니다. 이런 류의 편향을 줄이기 위해 여러번의 실험을 해보시기 바랍니다.
위 표본들의 순서를 변경하여 모델이 출력하는 라벨에 편향을 만들어낼 수 있는지 확인해보시기 바랍니다. 표본을 무작위로 정렬해 보는 것을 추천합니다. 예를 들어, 처음엔 긍정적인 예시만을, 마지막에는 모든 부정적인 예시만을 제공하는 것을 지양해야 합니다. 라벨 분포가 왜곡된 경우 이 문제는 더욱 심각해집니다. 이러한 유형의 편향을 줄이기 위해 여러번의 실험을 해보시기 바랍니다.