
프롬프트, 컨텍스트, 하네스 및 루프 엔지니어링에 대한 명확한 설명!
요약
AI 에이전트를 구성하는 네 가지 핵심 엔지니어링 계층인 프롬프트, 컨텍스트, 하네스, 루프 엔지니어링의 개념과 차이점을 설명합니다. 각 계층이 모델을 중심으로 어떻게 확장되며 상호작용하는지 상세히 다룹니다.
핵심 포인트
- 프롬프트 엔지니어링: 모델의 추론과 출력 형식을 정의하는 입력 설계
- 컨텍스트 엔지니어링: 검색 문서, 메모리 등 모델이 참조하는 정보의 최적화
- 하네스 엔지니어링: 도구 호출, 파싱, 재시도 등 모델 주변의 실행 환경 구축
- 루프 엔지니어링: 에이전트의 실행 반복 및 종료 조건을 관리하는 외부 제어
에이전트(Agent)는 네 가지 계층의 엔지니어링이 감싸고 있는 while 루프입니다:
- 프롬프트 엔지니어링 (Prompt engineering)
- 컨텍스트 엔지니어링 (Context engineering)
- 하네스 엔지니어링 (Harness engineering)
- 루프 엔지니어링 (Loop engineering)
각 계층은 이전 계층을 감싸며, 모델은 그 중심에 위치하므로 이들은 서로 경쟁하지 않습니다. 대신, 각 계층은 한 단계 더 바깥쪽으로 확장될 뿐입니다.
프롬프트 엔지니어링 (Prompt engineering):
이는 모델이 한 번의 호출(call)에서 보는 입력을 정의하며, 흔히 역할(role), 지침(instructions), 예시(examples), 그리고 출력 형식(output format)으로 구성됩니다.
이 단계의 기술들은 모델이 보는 문구로 인해 발생하는 내부 연산(internal computation)과 추론(reasoning) 과정을 변화시킵니다:
- 생각의 사슬 (Chain-of-thought)은 답변하기 전에 단계별로 작업하도록 만듭니다.
- 퓨샷 예시 (Few-shot examples)는 형식과 예외 케이스(edge cases)를 정의합니다.
- JSON 스키마 (JSON schema)나 XML 태그는 출력을 코드로 파싱(parse) 가능하게 만듭니다.
- 자기 일관성 (Self-consistency)은 몇 개의 사슬을 샘플링하여 다수결을 따릅니다.
컨텍스트 엔지니어링 (Context engineering):
이는 단순히 프롬프트뿐만 아니라, 한 턴(turn) 동안 모델이 보는 모든 것을 의미합니다. 여기에는 질의(query), 검색된 문서(retrieved docs), 메모리(memory), 이전 턴(prior turns), 그리고 이전 단계의 도구 출력(tool outputs)이 포함됩니다.
컨텍스트 창(window)은 유한하며 빠르게 채워지기 때문에, 엔지니어링 작업은 입력을 순위 매기고(rank) 기여도가 낮은 모든 것을 잘라내는 것입니다.
다음과 같은 방법으로 수행합니다:
- 질의와 관련된 청크(chunks)만 검색한 다음, 이를 재순위화(reranking)합니다.
- 정확도가 떨어지는 중간 부분에 핵심 사실을 두지 않습니다.
- 오래된 턴을 요약하고, 오래된 출력은 제거하며, 큰 데이터 덩어리(blobs)는 파일로 보냅니다.
하네스 엔지니어링 (Harness engineering):
이는 모델 주변의 코드로, 도구를 정의하고, 호출을 파싱하며, 실패 시 재시도(retry)하고, 작업을 하위 에이전트(sub-agents)로 라우팅하여 하나는 검색을 담당하고 다른 하나는 코드를 담당하게 할 수 있습니다.
그 후 검증기(verifier)가 테스트를 실행하거나 스키마를 검증하는 등의 방식으로 결과를 채점합니다.
프롬프트와 컨텍스트는 단 한 번의 호출을 올바르게 만드는 것과 관련이 있습니다. 하네스는 해당 호출이 실제 시스템에서 실행되기 위해 그 주변에서 일어나야 하는 모든 것과 관련이 있습니다.
루프 엔지니어링 (Loop engineering):
일반적인 설정에서 당신은 외부 루프 (outer loop)를 관리합니다. 즉, 프롬프트 (prompt)를 작성하고, 에이전트 (agent)가 실행하는 턴 (turns)을 읽고, 다음 프롬프트를 작성하며, 실패를 포착하면서 이 과정을 반복합니다.
이 계층은 그 작업을 에이전트 자체에게 넘깁니다. 이는 특정 일정이나 이벤트에 따라 시작되며, 중간에 프롬프트 입력 없이 여러 턴을 실행합니다.
루프는 본질적으로 자신이 언제 끝났는지 알지 못합니다. 에이전트는 테스트가 여전히 실패하고 있는 와중에도 작업이 완료되었다고 보고하고 중단할 수 있습니다. 따라서 중단 결정은 에이전트의 말에 의존해서는 안 되며, 다음과 같은 실제 신호(signal)여야 합니다:
- 갇힌 실행을 중단하기 위한 턴 (turn) 및 토큰 (token) 제한
- 반복되는 호출을 포착하기 위한 진행 없음 감지기 (no-progress detector)
- 별도의 모델이나 결정론적 테스트 (deterministic test)를 통해 목표를 검증하는 완료 확인 (completion check)
이 계층에서 당신은 전체 실행 (run) 단위로 작동하므로, 엔지니어링의 초점은 각 프롬프트를 작성하는 것에서 목표와 중단 조건 (stop conditions)을 사전에 설정하고 실행되도록 두는 것으로 이동합니다.
루프 엔지니어링 (loop engineering)에 대해 더 깊이 알고 싶다면, 저의 공동 창업자가 해당 외부 루프 (outer loop)에 대한 상세한 분석 글을 작성했습니다.
그 글은 기본적인 while 루프부터 스스로 종료되는 실행까지의 과정을 다루며, 각 부분의 이면에 있는 코드, 그리고 언제 멈춰야 하는지 아는 법, 긴 실행 과정에서의 컨텍스트 부패 (context rot), 그리고 검증자 (checker)를 생성자 (maker)와 분리하여 유지하는 법과 같이 제대로 구현하기 어려운 부분들을 설명합니다.
아래에서 읽어보세요.
[IMG:1]
AI 자동 생성 콘텐츠
본 콘텐츠는 X @nainsidwiv50980 (자동 발견)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기