프롬프트 엔지니어를 위한 컨텍스트 엔지니어링
사람들은 프롬프트 엔지니어링이 끝났다고 말합니다. 컨텍스트 엔지니어링이 그것을 대체했다고 말이죠. 하지만 이는 틀렸습니다.
프롬프트 엔지니어링은 컨텍스트 엔지니어링의 일부일 뿐입니다. 프롬프팅은 당신이 말하는 내용입니다. 컨텍스트 엔지니어링은 모델이 보는 모든 것을 의미합니다. 여기에는 시스템 프롬프트, 도구 정의, 검색된 문서, 그리고 메모리가 포함됩니다.
당신의 프롬프트는 더 큰 퍼즐의 한 조각입니다. 다뤄야 할 영역이 더 넓어진 것뿐입니다.
모든 문제를 해결하기 위해 거대한 컨텍스트 윈도우를 사용하려고 하지 마세요. 100만 토큰의 윈도우가 100만 토큰 모두가 유용한 주의(attention)를 기울인다는 것을 의미하지는 않습니다. 입력값이 많아지면 오히려 모델의 성능이 저하될 수 있습니다.
다음 두 가지 주요 문제를 주의해야 합니다:
• Lost in the middle (중간 소실): 모델은 프롬프트의 시작과 끝 부분에 가장 잘 집중합니다. 중요한 데이터가 중간에 위치하면 어려움을 겪습니다. • Context rot (컨텍스트 부패): 입력 길이가 길어질수록 추론 및 회상 능력이 저하됩니다. 윈도우가 가득 차면 모델에게는 간단한 작업조차 더 어려워집니다.
목표는 작업을 완수할 수 있는 가장 작은 고신호(high-signal) 토큰 세트를 찾는 것입니다. 컨텍스트 윈도우를 예산처럼 다루세요.
예산을 관리하기 위해 다음 6가지 패턴을 사용하세요:
• Attention budgeting (주의력 예산 관리): 모든 상용구(boilerplate)와 중복된 텍스트를 제거하세요. 고신호 콘텐츠만 사용하세요. • Retrieval placement (검색 배치): 관련 데이터를 시작 부분이나 끝 부분에 배치하세요. 중요한 정보를 중간에 두는 것은 피해야 합니다. • Tool-result formatting (도구 결과 포맷팅): 압축된 데이터를 반환하세요. 거대한 API 객체를 윈도우에 그대로 쏟아붓지 마세요. • Schema design (스키마 설계): 구조화된 출력을 사용하세요. 오류를 방지하기 위해 중첩 수준(nesting levels)을 낮게 유지하세요. • System vs. turn separation (시스템과 턴의 분리): 핵심 규칙은 시스템 프롬프트에 유지하세요. 구체적인 데이터는 사용자 턴(user turns)에 유지하세요. • Memory and compaction (메모리 및 압축): 상태(state)를 윈도우 외부로 저장하세요. 대화 흐름을 유지하기 위해 오래된 데이터는 요약하세요.
컨텍스트 엔지니어링은 단순히 RAG만을 의미하지 않습니다. 그것은 배치와 절제에 관한 것입니다. 이미 프롬프트를 잘 작성하고 있다면, 처음부터 다시 시작하는 것이 아닙니다. 당신의 프롬프트가 사용하는 예산을 관리하는 법을 배우는 것입니다.
Source: https://dev.to/anoopk/context-engineering-for-people-who-already-know-how-to-prompt-2pj1
Optional learning community: https://t.me/GyaanSetuAi