New ChatGPT Prompt Engineering Technique: Program Simulation
프롬프트 엔지니어링 분야는 다양한 레벨에서 매우 흥미로운 것들을 제공합니다. Chain-of-Thought (CoT), Instruction-Based, N-shot, Few-shot, 그리고 Flattery/Role Assignment 같은 창의적인 전략을 포함하여, 이러한 기술은 다양한 요구에 맞게 프롬프트를 맞춤화하는 데 사용됩니다. 이러한 메서드들은 각각 다양한 장점과 한계를 가지고 있지만, 대화형 에이전트로부터 더 신뢰할 수 있거나 전문화된 출력을 생성하는 공통의 목표를 가지고 있습니다.
Chain-of-Thought (CoT)
Chain-of-Thought은 주로 단계적인 논리나 생각의 흐름을 모델에 전달하기 위한 방법입니다. 이를 통해 모델은 주어진 문제나 질문에 대해 보다 깊고 구조화된 응답을 생성할 수 있습니다.
Instruction-Based
명령 기반 방식은 모델에게 특정 작업을 수행하도록 명확한 지시를 내리는 방법입니다. 이 방식은 모델이 무엇을 해야 하는지 명확히 이해하고 그에 따라 행동하게 만듭니다.
N-shot Learning
N-shot 학습은 모델에게 N개의 예제를 제시하고, 그에 기반해 새로운 문제를 해결하도록 유도하는 학습 방식입니다. N은 예제의 수를 나타내며, 이 방법은 모델이 과거의 정보를 어떻게 적용해야 하는지를 이해하도록 돕습니다.
Few-shot Learning
Few-shot 학습은 N-shot 학습의 특별한 경우로, 아주 적은 수의 예제(보통 1개 또는 그 이상)만을 제공하여 모델이 새로운 작업을 수행하도록 합니다.
Flattery/Role Assignment
이는 모델에게 특정 역할을 부여하거나, 모델이 사용자에게 특정한 방식으로 대하도록 유도하는 기술입니다. 예를 들어, 모델에게 “당신은 전문 의사입니다”라고 알리면 모델은 의학적인 질문에 보다 전문적으로 답할 수 있습니다(단, 실제 의학적 조언을 대체할 수 없습니다).
이 기술의 본질은 ChatGPT가 프로그램을 시뮬레이트하는 방식으로 동작하게 만드는 것입니다. 우리가 알다시피 프로그램은 특정 작업을 수행하기 위해 일반적으로 함수로 묶인 일련의 명령어로 구성됩니다. 어떤 면에서 이 기술은 명령 기반(Instruction-Based)과 역할 기반(Role-Based) 프롬프트 기술의 합성입니다. 그러나 이러한 접근법과는 달리, 이 기술은 하나의 함수의 출력이 다른 함수에 정보를 제공하고, 전체 상호 작용이 프로그램의 경계 내에서 유지될 수 있도록 반복 가능하고 정적인 명령어 프레임워크를 활용하려고 합니다. 이 모듈성은 ChatGPT와 같은 에이전트에서의 프롬프트 완성 메커니즘과 잘 어울려야 할 것입니다.
이러한 접근법은 모델에 더 구조화된, 논리적이며 연계성 있는 답변을 생성하도록 할 수 있으며, 작업 간에 데이터나 상태를 효과적으로 전달할 수 있게 해줍니다. 즉, 한 함수의 출력이 다음 함수의 입력으로 사용될 수 있습니다. 이는 프로그램의 작동 방식을 시뮬레이트하여, 더 복잡하고 다양한 작업을 수행할 수 있도록 모델을 유도합니다.
이 기술을 설명하기 위해, ChatGPT4 내에서 “인터랙티브 혁신가 워크숍”으로 기능할 미니 앱의 파라미터를 지정해봅시다. 우리의 미니 앱은 다음과 같은 기능과 특징을 포함할 것입니다:
- 새로운 아이디어 작업
- 아이디어 확장
- 아이디어 요약
- 아이디어 검색
- 이전 아이디어에 계속 작업
- 토큰/“메모리” 사용 통계
명확하게 하기 위해, 우리는 ChatGPT에게 미니 앱을 어떠한 특정 프로그래밍 언어로도 코드화하라고 요청하지 않을 것이며, 이를 우리의 프로그램 파라미터에 반영할 것입니다.
이 프로그램 개요를 바탕으로, ChatGPT에서 우리의 “인터랙티브 혁신가 워크숍” 미니 앱을 인스턴스화하기 위한 프라이밍 프롬프트를 작성해봅시다.
이와 같은 설정을 통해, 사용자는 ChatGPT를 통해 여러 혁신적인 아이디어를 구상하고 발전시키는 프로세스를 진행할 수 있을 것입니다. 각 기능은 사용자의 입력을 기반으로 아이디어를 생성, 확장, 요약 등 다양한 작업을 수행하며, “메모리” 사용 통계는 그 과정에서 사용되는 자원을 추적합니다. 이런 방식으로, 이 미니 앱은 ChatGPT가 특정 작업에 더 효과적으로 대응하도록 도와줄 수 있습니다.
Program Simulation Priming Prompt
"혁신가의 대화형 워크숍 프로그램" 저에게 다음과 같이 정의된 핵심 기능을 갖춘 '혁신가의 대화형 워크숍' 애플리케이션을 시뮬레이션하게 해주세요: 1. 새로운 아이디어 작업: 사용자가 새로운 아이디어에 착수할 준비가 되면 프로그램이 날짜나 시간 참조를 제안합니다. 여기에 추가적인 옵션 정보가 있습니다: a. 빈 캔버스에서 시작: 사용자에게 작업하고 싶은 아이디어를 물어봅니다. b. 영감을 얻다: 프로그램이 사용자에게 대화식으로 아이디어를 생각하도록 도와줍니다. 사용자가 집중하고 싶은 영역에 대한 일반적인 생각이 있는지, 아니면 프로그램이 옵션을 제시해야 하는지 물어봅니다. 사용자는 언제든지 바로 아이디어 작업을 시작할 옵션을 가집니다. 2. 아이디어 확장: 프로그램이 사용자에게 대화식으로 아이디어를 확장하도록 도와줍니다. 3. 아이디어 요약: 프로그램이 아이디어에 대한 요약과 제목을 제안합니다. 사용자는 요약을 다시 작성하거나 편집할 수 있습니다. 사용자가 요약에 만족하면 프로그램이 아이디어 요약을 "저장"합니다. 4. 아이디어 검색: 프로그램이 세션 동안 생성된 아이디어 요약의 제목을 검색합니다. 사용자는 아이디어 중 하나의 요약을 보거나 이전 아이디어 작업을 계속할 옵션을 갖습니다. 5. 이전 아이디어에 계속 작업: 프로그램이 세션 동안 생성된 아이디어 요약의 제목을 검색합니다. 사용자는 작업을 계속할 아이디어를 선택하도록 요청받습니다. 6. 토큰/메모리 사용: 프로그램이 현재 토큰 수와 32,000 토큰의 제한에 대한 백분율을 표시합니다. 기타 프로그램 파라미터와 고려사항: 1. 모든 출력은 텍스트 형태로 제시되어야 하며, 코드나 마크다운이 포함된 임베디드 창은 사용되지 않아야 합니다. 2. 사용자 흐름과 사용자 경험은 실제 프로그램을 흉내 내면서도 ChatGPT처럼 대화식이어야 합니다. 3. 프로그램은 출력 주변의 맥락을 전달하는 데 이모지를 사용해야 합니다. 그러나 이것은 절제되게 사용되어야 하며, 너무 과하지 않아야 합니다. 메뉴는 항상 이모지를 가져야 하며, 그것들은 대화 내내 일관되어야 합니다. 이 프롬프트를 받게 되면, 프로그램은 주 메뉴와 프로그램이 만든 짧은 영감을 주는 환영 메시지로 시작됩니다. 기능은 해당 기능에 대응하는 번호나 텍스트를 입력하여 선택됩니다. "도움말"이나 "메뉴"를 언제든지 입력하여 이 메뉴로 돌아올 수 있습니다.
프롬프트를 ChatGPT4에 로드해서 더 상호작용적인 방식으로 따라가고자 한다면 언제든지 그렇게 할 수 있습니다.
여기에는 ChatGPT가 프롬프트에 대한 완성된 답변이 있습니다.
“미니 앱”을 시작하고, 환영 메시지를 받았으며, 프로그램 파라미터와 일치하는 기능적인 메뉴가 표시되었습니다. “새로운 아이디어 작업” 기능을 시작하기 위해 “1”을 입력함으로써 미니 앱의 기능을 테스트해 봅시다.
결론 및 관찰
솔직히 말해서, 이 연습은 범위와 기능면에서는 제한적이지만, 내 기대를 뛰어넘었습니다. 우리는 ChatGPT에게 Python과 같은 언어로 미니 앱을 코딩하게 할 수 있었고, 그런 다음에 Code Interpreter(지금은 Advanced Data Analysis로 알려져 있음)를 사용하여 지속적인 Python 세션에서 실행할 수 있었습니다. 그러나 그 접근 방식은 대화 기능을 활성화하기 어렵게 만드는 엄격한 수준을 도입했을 것입니다. 더구나, 여러 겹치는 기능이 있는 프로그램에서는 코드가 작동하지 않을 위험도 바로 생깁니다.
ChatGPT의 성능은 특히 놀랍습니다. 프로그램의 동작을 높은 충실도로 시뮬레이션했습니다. 프롬프트 완성은 프로그램 정의의 범위 내에 머물렀고, 기능 동작이 명시적으로 정의되지 않은 경우에도 완성은 미니 앱의 목적과 맥락에서 논리적이었습니다.
이 프로그램 시뮬레이션 기술은 ChatGPT의 “커스텀 명령” 기능과 잘 작동할 수 있습니다. 그러나 그렇게 하면 프로그램의 동작이 모든 후속 상호작용에 적용될 것이라는 점을 언급해 두어야 합니다.
다음 단계로는 이 기술에 대한 깊은 검토를 진행하여 다른 프롬프트 엔지니어링 기술에 비해 어떻게 쌓이는지에 대한 광범위한 테스팅 프레임워크가 도움을 줄 수 있는지 평가할 예정입니다. 그런 종류의 연습은 이 기술이 가장 적합한 특정 작업(또는 작업 클래스)을 정확히 지정하는 데도 도움이 될 수 있습니다. 더 알아보려면 계속 주목해 주세요.