00:07:52
대부분의 사람들은 이제 프롬프트 엔지니어링(Prompt Engineering)이라는 용어에 익숙해졌을 것입니다. 프롬프트 엔지니어링은 대형 언어 모델(LLM)에 입력하는 텍스트를 설계하는 과정으로, 지시문, 예시, 형식 지정 단서 등을 포함해 LLM의 행동과 출력을 조종하는 역할을 합니다. 반면 컨텍스트 엔지니어링(Context Engineering)은 LLM이 추론 중에 접하는 모든 요소—프롬프트, 검색 문서, 메모리, 도구 등—를 프로그램적으로 조립하는 더 광범위한 분야입니다. 이는 정확한 응답을 제공하는 데 필요한 전체 시스템을 구성하는 discipline에 가깝습니다.
여행 예약을 전문으로 하는 에이전트 AI 모델인 '그레이엄(Agent Graeme)'을 예로 들어보겠습니다. 사용자가 "다음 달 DevOps 컨퍼런스를 위해 파리 호텔을 예약해 줘"라는 프롬프트를 보내면, 에이전트는 "Best Western Paris Inn이 와이파이와 무료 주차가 좋다"며 예약 완료를 응답합니다. 문제는 이 호텔이 미국 켄터키주의 파리에 위치한 반면, 컨퍼런스는 프랑스 파리에서 열린다는 점입니다. 이는 프롬프트 엔지니어링의 실패—위치를 명시하지 않음—로 볼 수 있지만, 동시에 컨텍스트 엔지니어링의 실패이기도 합니다. 에이전트가 더 똑똑했다면, 사용자 캘린더를 확인하거나 컨퍼런스 정보를 온라인에서 조회하는 도구를 사용해 정확한 위치를 파악했어야 합니다.
후속 프롬프트로 "내 컨퍼런스는 프랑스 파리야"라고 지정하면, 에이전트는 고급 호텔을 예약해 비용 문제를 일으킬 수 있습니다. 여기서는 회사의 출장 정책을 에이전트에 제공하지 않은 컨텍스트 부족이 근본 원인입니다. 예를 들어, 지역별 최대 호텔 요금을 명시한 JSON 파일 같은 동적 데이터가 필요했죠. 이처럼 프롬프트 엔지니어링은 지시문의 wording에 집중하는 반면, 컨텍스트 엔지니어링은 모델이 task를 완수할 수 있도록 필요한 모든 요소를 제공하는 시스템 수준의 접근입니다.
프롬프트 엔지니어링은 예술과 과학의 결합으로, 널리 채택된 몇 가지 기법이 있습니다:
컨텍스트 엔지니어링은 동적이고 에이전트적인 시스템을 구축하기 위해 전체 환경을 orchestrate합니다. 주요 구성 요소는 다음과 같습니다:
또한 프롬프트 엔지니어링 자체도 컨텍스트 엔지니어링의 일부입니다. 기본 프롬프트(예: "보안 로그 anomaly 분석")에 runtime에서 current context(최근 alerts, known false positives 등)를 inject해 final prompt를 80% dynamic content와 20% static instructions로 구성할 수 있습니다.
프롬프트 엔지니어링은 better questions를 제공하는 반면, 컨텍스트 엔지니어링은 better systems를 구축합니다. 둘을 적절히 결합하면, 예산 내에서 정확한 위치의 호텔을 예약하는 등 정확하고 실용적인 AI 에이전트를 만들 수 있습니다. 그러나 여전히 관리자 approval 같은 human factors는 별도의 challenge로 남아있죠. 궁극적으로 AI 시스템의 성능은 프롬프트의 정교함과 컨텍스트의 풍부함에 달려 있습니다.