프롬프트에서 하네스로

프롬프트에서 하네스로


2022년 11월 30일, 5일 만에 가입자 수 100만 명을 돌파한 서비스가 있었습니다. 이미 모두가 알고 있는 OpenAI의 ChatGPT가 그것인데요. 역사상 가장 빠른 초반 성장 속도를 기록한 그 서비스에 깃든 AI는 연구실에서 뛰쳐나와 지금까지와는 다른 세상을 만들어나가고 있습니다.


블루칼라 직군이 AI에 의해 가장 먼저 변화를 맞이할 것이며, 고소득 화이트칼라 직종만이 여전히 사람만이 할 수 있는 일로 남을 것이라는 이전 통념과는 달리, 현대의 AI는 지식근로자의 일부터 빠른 속도로 간섭하고 있습니다. 그리고 이는 아이러니하게도 AI와 가장 밀접하게 연결된, 디지털 세계의 코드를 작성하는 개발자들의 세계를 중심으로 뻗어나가고 있습니다.


이 흐름을 돌아보면 하나의 방향성이 보입니다. AI 활용의 무게중심이 '모델에게 잘 묻는 것'에서 '모델이 잘 일할 수 있는 환경을 설계하는 것'으로 이동하고 있다는 것입니다. 이 글에서는 2022년 'ChatGPT 모먼트' 이후, 그 이동이 어떤 경로를 따라 진행되고 있는지 정리해보려 합니다.


스케일링 법칙과 창발


ChatGPT 출시 당시 적용되었던 모델인 GPT-3는 스케일링 법칙이 적용된 첫 사례입니다. OpenAI 연구진들은 모델의 파라미터와 데이터, 더 많은 컴퓨팅 자원이 투여되면 예측 가능한 성능 향상을 기대할 수 있으며, 특정 시점을 넘길 때마다 모델이 새로운 능력을 창발적으로 획득한다는 것을 발견합니다.


이후, AI 모델의 소프트웨어 엔지니어링 업계에서의 활용, 즉 추론 단계에서의 연구들과 학습 단계에서의 연구는 서로 영향을 주고받으며 함께 발전합니다.


확률적 앵무새와 프롬프트 엔지니어링


인공지능이 챗봇 형태로 등장한 후, 먼저는 모델 자체를 사용하기 위한 여러 연구들이 진행됩니다. 이 과정에서 사람들은 모델의 한계를 체감하게 됩니다. 세종대왕이 한글 창제 중 화가 나서 맥북 프로를 던졌다는 식의, 사실이 아닌 답변을 그럴듯하게 늘어놓는 것이었습니다. 모델은 그럴듯한 말을 확률적으로 내뱉을 뿐이라는 의미에서 '확률적 앵무새'라는 표현이 등장하기도 했습니다.


대규모 언어 모델이라는 새로운 유형의 액터가 세상에 던져지자, 사람들은 이를 효과적으로 다루기 위한 방법론을 연구하게 됩니다. 모델에 지시하는 자연어 명령을 프롬프트라고 부르게 되었고, 이 프롬프트를 구조화하여 설계·개발·최적화하는 기술이 프롬프트 엔지니어링입니다.


프롬프트를 사용할 때, 별도의 맥락 없이 모델에 입력하는 제로샷 프롬프트와 달리, 퓨샷 프롬프트를 통해 입력-출력 쌍의 예시나 맥락을 제공하는 방법으로 성능 향상을 꾀했습니다. 또한 모델에게 단계별로 생각하도록 지시하는 Chain of Thought(CoT) 기법을 통한 성능 향상도 보고되었습니다.


정리하면 모델의 문제 풀이 성능을 높이기 위한 방법은 크게 두 가지 방향으로 나뉩니다.


첫 번째는 모델이 더 많이 생각하도록 하는 것입니다.
Test Time Compute를 늘려 추론 시간에 더 많은 토큰을 소모하게 합니다. CoT 기법의 프롬프트 방법론은 모델 자체가 논리적 추론 과정을 거칠 때 보상을 부여하는 방식으로 학습에 적용되었고, 이를 통해 모델 자체가 추론 과정을 내재화한 OpenAI의 O1과 같은 Reasoning 모델이 등장하게 됩니다.


두 번째는 모델에게 올바른 맥락을 제공하는 것입니다.
모델이 올바른 방향으로 나아가도록 외부 세계의 컨텍스트를 주입합니다. 검색 증강 생성(RAG)이나 MCP와 같은 도구 호출이 그 예입니다.


그러나 프롬프트를 아무리 정교하게 다듬어도, 모델이 학습 시점에 보지 못한 정보에 대해서는 근본적으로 답할 수 없다는 한계가 남았습니다. 이 한계를 넘기 위해 등장한 것이 RAG입니다.


RAG: 모델에게 지식을 건네다


모델은 학습 당시 투입되었던 데이터에 대한 정보만 가지고 있기 때문에, 최신 정보를 알지 못하는 문제가 있습니다. 이를 보완하기 위해, 사용자의 질문에 맞게 모델이 학습 당시 가지고 있지 않던 추가 정보를 검색하여 답변을 생성하는 기술이 등장합니다. 초기 사례는 Bing 챗입니다.


임베딩 모델을 통해 AI가 참조할 수 있는 문서를 벡터 데이터의 형태로 저장하고, 사용자의 쿼리와 가장 관련 있는 문서를 벡터 기반의 유사도 알고리즘으로 가져와 개선된 답변을 생성합니다.


이 과정에서 모델이 더 정확한 문서를 찾도록 현업에서 다양한 RAG 기법의 변형이 연구되고 있습니다. 문서를 그래프 방식으로 체계화하여 저장하거나, 청킹 방식의 효율을 높이기 위한 시도, 반복 추론을 통해 최종 답변의 품질을 높이는 등의 여러 방식이 있습니다.


RAG를 통해 모델은 외부의 지식을 참조할 수 있게 되었습니다. 하지만 정보를 읽는 것만으로는 충분하지 않았습니다. 모델이 외부 세계와 직접 상호작용할 수 있어야 한다는 필요에서, 도구 사용의 표준화가 시작됩니다.


MCP: 모델에게 도구를 쥐어주다


Model Context Protocol(MCP)은 앤트로픽에서 2024년 11월에 공개한, 모델이 외부 세계와 상호작용할 수 있는 도구를 제공하는 개방형 표준입니다. 공개 이후 모델의 도구 사용을 위한 가장 널리 쓰이는 표준으로 자리잡았습니다.


MCP는 MCP 클라이언트와 MCP 기능을 제공하는 서버로 나뉩니다. 그러나 널리 사용되면서 한 가지 문제가 드러났습니다. 많은 종류의 MCP 서비스를 호스트에 연결할수록, LLM의 컨텍스트 소모량이 크게 증가하여 대화가 조금만 진행되어도 이전 맥락을 더 빨리 망각하는 문제가 있었습니다.


이 컨텍스트 점유 문제를 해결하기 위해, 근래에는 Skills라는 개방형 표준이 주목받고 있습니다.


Skills: 점진적 컨텍스트 공개


Skills는 AI 에이전트에게 여러 지침을 제공하며, 특정 스크립트를 함께 제공하여 원하는 기능을 실행할 수도 있습니다. Skills는 점진적 컨텍스트 공개를 통해 MCP가 가진 컨텍스트 점유의 문제를 우아하게 해결합니다.


Skills에는 3가지 로딩 수준이 존재합니다.


1단계: 항상 로드되는 메타데이터

name: pdf-processing
description: Extract text and tables from PDF files, fill forms, merge documents.


2단계: 트리거될 때 로드되는 지침

# PDF Processing - Quick start
import pdfplumber

with pdfplumber.open("document.pdf") as pdf:
    text = pdf.pages[0].extract_text()


3단계: 필요 시 참조되는 리소스 및 코드

pdf-skill/
├── SKILL.md (main instructions)
├── FORMS.md (form-filling guide)
├── REFERENCE.md (detailed API reference)
└── scripts/
    └── fill_form.py (utility script)


3가지 로딩 수준을 통해 모델에게 필요한 정보를 점진적으로 노출시킴으로써 컨텍스트를 지능적으로 절약합니다. 특히 세 번째 수준에서는 필요에 따라 리소스를 컨텍스트에 주입하지 않고 직접 실행함으로써 컨텍스트 윈도우를 한층 더 절약하기도 합니다.


프롬프트 엔지니어링에서 RAG로, RAG에서 MCP로, MCP에서 Skills로 이어지는 흐름을 돌아보면, 공통된 방향이 보입니다. 모델을 더 잘 활용하기 위한 노력이 '질문을 잘 하는 것'에서 '일할 수 있는 환경을 잘 갖추는 것'으로 옮겨가고 있다는 것입니다. 이 흐름의 끝에 하네스 엔지니어링이 있습니다.


하네스 엔지니어링: 환경을 설계하는 엔지니어


ChatGPT 모먼트 이후, AI가 처리할 수 있는 단위 업무의 복잡도와 크기는 꾸준히 증가하고 있습니다. 달리 말하면 모델이 한 번에 일할 수 있는 단위 시간이 늘어나고 있다는 뜻입니다.


최근에는 이를 극한으로 활용하여, 사람이 자는 야간에 에이전트가 밤새 실행되며 정의된 목표를 수행하여 달성해오는 '랄프 루프'와 같은 방법론이 시도되고 있습니다.


OpenAI의 '하네스 엔지니어링' 포스트에 따르면, 지난 5개월 동안 사람이 전혀 코드를 작성하지 않고, 에이전트가 일을 잘 할 수 있는 환경을 설계하는 것으로 엔지니어의 업무를 재정의했다고 합니다. 여기에는 컨텍스트 관리 전략, 경계 설계, 테스트 케이스 관리 전략 등 비결정적인 에이전트가 올바른 결과물로 나아가기 위한 시스템 설계가 핵심입니다.


머신러닝 모델을 개발하는 워크플로우에서는 낮 시간에 사람이 논의를 진행하여 엔지니어링 방향성을 결정하고, 밤 시간에 GPU 컴퓨팅 리소스를 활용하여 AI 모델에게 학습을 맡긴다고 합니다. 일반적인 소프트웨어 개발에서도, 개발자가 작성한 요구사항을 기반으로 장기 실행 에이전트가 개발자의 휴식 시간에도 업무를 처리하는 모습이 자리잡아 가고 있습니다.


마치며


ChatGPT가 세상에 등장한 이후, 개발자들이 AI를 활용하는 방식은 '모델에게 좋은 질문을 하는 것'에서 출발하여, '모델에게 지식을 건네고', '모델에게 도구를 쥐어주고', 결국 '모델이 스스로 일할 수 있는 환경을 설계하는 것'으로 진화해왔습니다.


이 방향성이 계속된다면, 엔지니어의 역할은 코드를 직접 작성하는 사람에서 에이전트가 올바른 결과를 만들어낼 수 있도록 시스템을 설계하는 사람으로 점차 변화해 갈 것입니다. 그리고 그 변화는 개발 업계를 넘어, 지식노동 전반으로 뻗어나가고 있습니다.


참고 자료