AI 서비스를 만들 때, 개발자는 어디까지 개입할 수 있을까? AI 는 어느 부분에서 부족할까? 소설을 추천하여 매일 메일링을 해주는 서비스가 있다고 치자. 사용자 연령에 따라 소설 추천이 달라져야 할 수도, 번역판이 존재하지 않는다면 원작을 추천해야 할 수도 있다. AI 가 적재적소의 답변을 하도록 가이드를 줘야한다. 그게 프롬포트 Prompt 다.
프롬포트는 LLM 을 사용할 때 입력으로 주어지는 명령이나 질문을 뜻한다. 프롬포트는 어떻게 가져가냐에 따라 응답 품질이 아예 달라지기 때문에 매우 매우 중요하다. 지금까지 살펴본 DL 의 주요 개념과 프롬포트는 어떻게 연결되는지 궁리해보았다.
연결이 조금 더 복잡해졌지만, 연두색만 집중해서 살펴보면된다. LLM 은 DL 의 Transformer 아키텍처 기반으로 만들어진다. 프롬포트가 입력되면, Self-Attention Mechanism 이 분석해서 가장 적절한 출력을 생성한다.
결국, 프롬프트는 Self-Attention을 거쳐 모델이 패턴을 인식하고 응답을 생성하는 시작점이다. LLM 은 프롬포트에 의해 학습된다. 그 과정에서 지도학습과 RLHF 방식이 활용되어 응답 품질이 높아진다.
응답 품질을 높이는 또 다른 방법이 RAG (Retrieval-Augmented Generation)다. RAG 는 사전학습될 수 없는 실시간성에 적합한 콘텐츠 생성에 필요한 과정이다. 기존 Fine-Tuning은 정적 데이터만 업데이트할 수 있지만, RAG는 실시간 검색을 활용하여 최신 정보를 반영할 수 있다. 프롬포트 실행과정에서 LLM 이 외부 정보도 검색하여 활용할 수 있도록 유도할 수 있어야한다.
프롬포트 엔지니어링이 하는 역할이 바로 이거다. LLM이 가진 자동 학습 능력을 최대로 끌어올리는 것.
추가로 연결지을 수 있는 개념이 GenerateAI 다. 생성형 AI 는 결국 프롬포트 + 학습을 통해 새로운 콘텐츠를 생성하는 인공지능이다. ChatGPT 가 내놓는 응답 역시 사용자인 나의 프롬포트의 도움을 받는거다.
그럼 어떻게 프롬포트를 잘 할 수 있냐 !
일찍이 프롬포트가 중요하다고 생각하는 몇몇 사람들은 실험과 테스트를 거쳐 아래 방법론을 제시했다.
프롬포트 기법 더 자세하게 알아보기
Self-Consistency
- 여러 번의 다양한 CoT 과정을 거쳐 그 중 베스트를 선정하는 방법
- Self-Consistency Improves Chain of Thought Reasoning in Language Models (2022)
- https://arxiv.org/pdf/2203.11171.pdf
- 각 CoT 과정들을 연결한 Tree of Thought 논문도 있음
Generated Knowledge
- 질문을 통해 상식을 끄집어내어 더 정확하게 대답하는 방법
- Generated Knowledge Prompting for Commonsense Reasoning (2022)
- https://arxiv.org/pdf/2110.08387.pdf
- 해당 상식을 어느 정도 알고 있다는 전제 하에 워킹할만한 방법
- Retrieval Augmented Gerneration(RAG) 은 상식을 직접 주입하는 방법
- 별도의 RAG 로직이 필요하지만 이게 실제로 많이 활용되는 방법임.
Least-to-Most
- 질문 A를 바로 물어보지않고 질문 a,b 로 쪼개서 물어보는 분할 정복 방법
- Least-to-Most Prompting Enables Complex Reasoning in Large language Models (2022)
- https://arxiv.org/pdf/2205.10625.pdf
- 비용 증가로 이어지긴 하나 상대적으로 사용하기 쉬운 방법
Prompt Chaining
- Prompt A 의 Output A를 Prompt B에 사용하는 방법
- 주로 전처리 또는 답변을 하기 쉽게 만드는 Prompt A 와 실제 답변을 유도하는 Prompt B로 구성
- Least-to-Most 처럼 분할 정복 계열
ReAct
- Chain-of-Thought 에서 Reasoning 과정을 추가한다면 여기서는 Reasoning 외에도 Action 까지 추가하는 방법
- 실제로 환경과 interact 해야하는 상황을 가정한 방법론
- ReAct Synergizing Reasoning and Acting in Language Models (2022)
- https://arxiv.org/pdf/2210.03629.pdf
실용적인 방법론이 많진 않지만, CoT 논문 이후로 여러 다양한 방법론을 찾기 위한 많은 연구 결과물들
실용적이지 않은 이유?.. input 토큰이 몇 배씩 증가하여 비용 이슈로 이어지니까…
이 방법론의 기조를 하나하나 살펴보는 것도 의미가 있을 것 같다. 좋은 질문 뒤에 좋은 답변이 나오기 때문이다. 실제로 이 기법들을 적용해보니 답변 퀄리티가 높아지기도했다. “나는 이론보다 실전에 강한 스타일이다” 라면 Claude(클로드) 시리즈로 유명한 Anthropic 에서 제시한 해법에 주목하시면된다.
좋은 프롬포트를 만들 수 있는 프로세스다. 테스트 케이스 평가와 Prompt 수정 단계는 정답이 없는 단위 테스트 같다. 사실 여기서 진짜 중요한 건 반복이다. 테스트 케이스를 평가하고 프롬포트를 수정하는 것의 반복이 결국 좋은 프롬포트를 만들 수 있는거다. 그럴려면 방대한 양의 테스트 케이스와 시간이 필요하다. 그래서 서비스 초기에는 많은 테스트 데이터 셋 확보하는 것이 우선적 과제가 되지 않을까? 정말 그럴까? 직접 해봐야겠다고 생각했다.
'생각' 카테고리의 다른 글
ChainOfThought "AI" (1) | 2025.03.20 |
---|---|
<AI, 네가 뭔데 날 울려> 소개 (0) | 2025.03.17 |
This is water (0) | 2025.02.22 |
java.util.concurrent 안에는 뭐가 들었을까 (1) | 2025.01.04 |
동시성 제어의 원초적 접근법, 애플리케이션 락은 유효한가요? (2) | 2024.12.14 |