안녕하세요 Simon입니다.
오늘은 A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT 논문 리뷰 - (2)입니다.
https://wiz-tech.tistory.com/36
앞선 (1)에서 소개해드린 내용은 Abstrack과 introduce 프롬프트 패턴의 종류와 개발자에게 유용한 프롬프트 방법을 설명해 드렸습니다. 오늘은 마저 그 뒷 내용을 소개해드리려고 합니다.
Meta Language Creation
"메타언어생성 패턴"은 언어 학습 모델(Language Learning Models, LLMs)과의 상호작용을 위한 고급 접근 방식입니다. 사용자가 LLM과의 커뮤니케이션을 위해 특정한 대체 언어나 단축 표기법을 설정하고자 할 때 이 패턴이 사용됩니다. 이것은 특정 기호, 독특한 텍스트 단축 형식 또는 그래프나 상태 전환과 같은 복잡한 아이디어를 나타내는 특정 방법일 수 있습니다. 이 목표는 LLM이 이 새로운 언어를 이해하고 응답할 수 있도록 하는 것입니다. 이 접근 방식은 새로운 언어나 기호가 일반 언어에서 흔히 사용되는 경우 혼란이나 모호성을 초래할 수 있습니다. 이 메타 언어가 LLM의 성능을 저하시키거나 오해를 일으키지 않도록 주의가 필요합니다. 하나의 예로 설명을 해보겠습니다.
구조 및 핵심 아이디어
이 패턴의 핵심은 LLM이 따라야 할 일련의 규칙이나 의미 체계를 정의하는 것입니다. 특정 기호, 구문, 또는 구조를 특정 의미나 행동에 매핑하는 것을 포함합니다. 예를 들어, "X는 Y를 의미한다" 또는 "X라고 할 때 Y를 하라"고 말함으로써 LLM이 이 특정 단서를 해석하고 응답하는 방법을 이해하게 합니다.
예시
From now on, whenever I type two identifiers separated by a “->”, I am describing a graph.
For example, “a -> b” is describing a graph with nodes “a” and “b” and an edge between them.
저는 GPT-4를 활용하였고 , 저는 앞에서 공부한 Prompt Tip을 Custom instruction에 넣어둔 상태인걸 감안하시고 봐주시길 바랍니다. 우선 첫 번째 QA에서 예시를 "a -> b"는 노드 "a"와 "b"가 있고 그 사이에 에지가 있는 그래프를 설명하는 것입니다.로 먼저 모델에게 인지를 시켜주었습니다. 그 후 A->B->C의 관계의 KM로 설정하려다가 GPT의 사전정보에 서울, 부산, 광주의 거리정도는 있을 거 같아서 관련해서 Prompt를 입력해 주니 차례대로 생각을 해서 268KM라는 거리를 도출해 냈습니다. 물론 정확한 답안은 아니지만 어느 정도 200KM 때의 답안을 뽑아냈는데 지리적인 근거라도 환경, 요소에 따라 바뀔 수 있는 거니 다른 주제로 재차 검증을 해보면 좋을 듯합니다.
The Template Pattern
템플릿 패턴은 언어 학습 모델(LLM)의 출력이 특정한 구조의 템플릿을 따르도록 보장하는 것을 목적으로 합니다. LLM의 출력이 구조적으로 정확한 템플릿을 따르도록 하는 것입니다. 예를 들어, 사용자가 URL 경로 내 특정 위치에 생성된 정보를 삽입해야 할 수도 있습니다. 이 패턴을 사용하면 사용자가 특정 유형의 내용에 대해 일반적으로 사용하지 않는 형식으로 출력을 생성하도록 LLM에 지시할 수 있습니다.
템플릿 패턴을 적용하는 한 가지 결과는 LLM의 출력을 필터링하여 사용자에게 유용할 수 있는 다른 출력을 제거할 수 있다는 것입니다. 많은 경우, LLM은 코드 설명, 의사 결정 또는 다른 세부 정보에 대한 유용한 설명을 제공할 수 있지만, 이 패턴은 출력에서 이러한 정보를 효과적으로 제거할 수 있습니다. 따라서 사용자는 이 추가 정보를 필터링하는 장단점을 고려해야 합니다
구조 및 핵심 아이디어
예시
"저는 여러분의 출력을 위한 템플릿을 제공할 것입니다. 모든 대문자는 자리표시자입니다. 텍스트를 생성할 때마다 나열한 자리표시자 중 하나에 맞춰 보세요. 제가 제공하는 형식과 전반적인 템플릿을 유지해 주세요. 예: https://myapi.com/NAME/profile/JOB" 사용자: "사람의 이름과 직업 제목을 생성하세요." ChatGPT: "https://myapi.com/Emily Parker/profile/Software Engineer"
위 내용처럼 output 패턴을 설정해 주면 모델이 그걸 기반으로 하여서 예시를 만들어 줍니다.
보통 [Output]으로 해서 md 형식, 개발양식으로 고려해서 output의 내용을 example로 작성해 주고 ~ 으로 출력해 주세요를 작성합니다. 현재 아무래도 CoT Prompt 가 들어가 있기 때문에 모델이 생각을 단계별로 해서 위의 내용을 출력시켜 준 듯합니다. 바로 밑에서 생략해 달라고 프롬프트를 적용해서 수정이 가능합니다.
Infinite Generation Pattern
무한 생성 패턴(Infinite Generation Pattern)은 사용자가 매번 생성 프롬프트를 다시 입력할 필요 없이 일련의 출력(무한하게 보일 수 있는)을 자동으로 생성하는 것을 목적으로 합니다. 대화형 LLM에서는 모델에 대한 각 시간 단계의 입력이 이전 출력과 새로운 사용자 입력입니다. 출력 주기에서 무엇이 보존되고 다시 도입되는지의 세부 사항은 모델과 구현에 따라 다르지만, 종종 범위가 제한됩니다. 따라서 모델은 계속해서 이전 출력과 프롬프트를 제공받게 되며, 이는 입력 범위를 초과하는 경우 원래의 프롬프트 지시 사항을 모델이 시간이 지남에 따라 잃어버릴 수 있습니다.
구조 및 핵심 아이디어
예시
"저는 여러분이 계속해서 출력을 생성하기를 원합니다. 한 번에 X개의 출력을 생성하세요."
"(선택 사항) 출력 사이에 제가 제공하는 입력을 사용하는 방법입니다."
"(선택 사항) 제가 멈추라고 요청할 때 멈추세요."
Visualization Generator Pattern
텍스트 생성을 사용하여 시각화를 생성하는 것을 목적으로 합니다. 많은 개념들이 다이어그램이나 이미지 형식으로 더 쉽게 이해될 수 있습니다. 이 패턴의 목적은 도구가 다른 출력과 관련된 이미지를 생성할 수 있는 경로를 만드는 것입니다. 이 패턴은 Graphviz Dot이나 DALL-E와 같이 텍스트를 입력으로 사용하는 잘 알려진 시각화 도구들에 입력을 생성함으로써 시각화를 만들 수 있게 합니다. 이 패턴은 텍스트 생성과 시각화 도구의 강점을 결합하여 정보를 전달하는 더 포괄적이고 효과적인 방법을 제공할 수 있습니다. 이 패턴은 출력이 시각화를 렌더링하는 목표 파이프라인을 생성합니다. 이 파이프라인은 DALL-E와 같은 AI 생성기를 포함할 수 있으며, 이러한 도구는 풍부한 시각화를 생성할 수 있습니다. 이 패턴을 통해 사용자는 출력의 표현 능력을 시각 영역으로 확장할 수 있습니다
구조 및 핵심 아이디어
X를 생성하여 도구 Y에 제공할 수 있도록 하여 시각화하겠습니다.
예시
"제가 시각화를 요청할 때마다 Graphviz Dot 파일이나 DALL-E 프롬프트를 생성해 주세요. 시각화해야 할 것에 기반하여 적절한 도구를 선택하세요.
이렇게 유용하게 쓸만한 프롬프트 패턴에 대해 알아봤습니다. 이렇게 다양한 패턴들의 Prompt를 활용한다면 프롬프트 엔지니어링이 더 잘 될 것이고 앞으로 더욱더 발전하는 LLM 쪽에서 좋은 결과물을 가져오는 엔지니어로 성장할 수 있을 거 같습니다. 저도 이런 프롬프트 패턴들이 아 대충 개념은 알지라고 생각만 하고 귀찮아서 쓰질 않았는데 귀찮아도 프롬프트 패턴에 따라 프롬프트를 입력해 주면 많은 성능이 개선이 되겠구나 생각을 했습니다. 위의 리뷰글을 읽어보면서 예시를 한 번씩 입력해 보시면서 프롬프팅 기술을 익히시는 것을 추천드립니다.
마지막 3장은 나머지 논문에서 소개해드린 Prompt 패턴에 대해 리뷰를 해보겠습니다.