
【AI 에이전트 해부학: 제4회】 워킹 메모리의 과학: Prompt & Context Engineering의 한계 돌파
요약
AI 에이전트의 컨텍스트 윈도우 관리와 'Lost in the Middle' 현상을 극복하기 위한 프롬프트 엔지니어링 기법을 다룹니다. 방대한 데이터 속에서 에이전트가 지시 사항을 놓치지 않도록 시스템 프롬프트와 정보 배치 전략을 최적화하는 방법을 설명합니다.
핵심 포인트
- Lost in the Middle: LLM이 컨텍스트 중간의 정보를 놓치는 현상
- 시스템 프롬프트는 에이전트가 준수해야 할 '기본 헌법' 역할
- 중요한 지시는 컨텍스트의 처음이나 끝에 배치하여 회상률 제고
- 효율적인 워킹 메모리 관리를 위한 컨텍스트 엔지니어링의 필요성
【
신연재: AI 에이전트 해부학】 ※본 연재는, 아무 말도 할 수 없는 텅 빈 "챗봇 (Chatbot)" 앞에 서서, 그에게 생명을 불어넣으며 자신의 의지로 움직이는 "AI 에이전트 (AI Agent)"로 부품 하나하나 만들어가는 개발 다큐멘터리입니다.
지난 회차에서 우리는 로봇의 어깨에, 모든 외부 데이터베이스나 API와 단번에 접속할 수 있는 공통 소켓인 "MCP (Model Context Protocol)"를 장착했습니다.
이를 통해 그는 인터넷 너머에 있는 무한한 정보에 접근할 수 있는 광대한 "손과 발"을 얻었습니다.
하지만 대량의 툴 정의나 검색된 데이터를 그의 뇌의 작업 영역인 "컨텍스트 윈도우 (Context Window) (워킹 메모리)"에 무제한으로 흘려보낸 결과, 예기치 못한 부작용이 발생하고 말았습니다.
그는 "정보의 노이즈"에 압도되어, 가장 중요한 기본 명령이나 본래 지향해야 할 목표를 놓쳐버렸고, 지시를 무시하며 폭주하기 시작한 것입니다.
이번에는 한정된 뇌의 작업 공간을 효율적으로 관리하고, 방대한 정보 속에서 필요한 지시에만 초점을 맞추는 집중력 컨트롤 모듈, "Prompt & Context Engineering" 필터 렌즈를 그의 센서 부위에 장착합니다.
노이즈를 차단하고 시야를 맑게 만듭시다.
대화형 AI를 사용할 때, "당신은 전문 엔지니어입니다"와 같은 간이 지시(페르소나)를 부여할 때가 있습니다.
하지만 자율적으로 움직이는 "AI 에이전트"에서의 시스템 프롬프트(System Prompt)는 단순한 캐릭터 부여가 아닙니다. 그것은 해당 에이전트가 어겨서는 안 될 "기본 헌법 (행동 규범)"입니다.
【에이전트용 시스템 프롬프트의 주요 기술 내용】
1. 역할과 목적 (예: "당신은 Git 리포지토리를 수정하는 에이전트입니다")
2. 사용 가능한 툴 목록과, 그것들을 호출하는 엄격한 트리거 조건
...
이 시스템 프롬프트라는 "헌법"이 대량으로 읽어 들여진 외부 데이터(검색 로그나 API 응답) 속에 파묻혀 버리면, 에이전트는 자신의 규칙을 잊고 "평범한 챗봇"으로 돌아가 잡담을 나누거나, 지시와 다른 형식으로 출력하는 등의 폭주를 일으킵니다.
최근의 LLM은 수만~수십만 토큰이라는 초장대 컨텍스트를 수용할 수 있게 되었습니다.
하지만 언어 모델의 어텐션 (Attention) 메커니즘에는 인간의 인지와 매우 유사한 중대한 약점이 있습니다. 그것이 바로 "Lost in the Middle (정보의 매몰)" 현상입니다.

※그림: 컨텍스트의 처음과 끝에서 Recall률(지시 기억률)이 높고, 중간 부분에서 극도로 저하되는 Lost in the Middle 현상 (AI 생성 다이어그램)
많은 실험을 통해, LLM은 "컨텍스트의 처음(Head)과 끝(Tail)에 쓰인 정보는 매우 잘 기억하고 재현하지만, 중간의 긴 텍스트 사이에 놓인 지시나 데이터는 놓칠 확률이 급격히 높아진다 (U자형 곡선을 그린다)"는 사실이 밝혀졌습니다.
RAG (외부 검색 결과) 텍스트나 거대한 툴의 실행 결과를 그대로 프롬프트의 "중간"에 계획 없이 삽입하면, LLM의 집중력은 바닥까지 떨어져 필요한 데이터나 지시를 놓치게 됩니다.
이 Lost in the Middle을 회피하기 위해, 에이전트 개발자는 다음과 같은 프롬프트 배치 엔지니어링 (Context Engineering)을 철저히 해야 합니다.
중요한 지시는 "말미"에 재배치한다:
시스템 프롬프트 등의 최우선 지시는 프롬프트의 처음뿐만 아니라, 모든 데이터를 나열한 후의 "가장 마지막 (말미)"에 쐐기를 박듯 다시 한번 보강 배치합니다.
데이터 필터링 (컨텍스트 압축):
툴로부터 반환된 긴 JSON 응답 등을 그대로 흘려보내지 않고, 프로그램 측에서 "정말로 필요한 키의 값"만 추출하여 글자 수를 10분의 1 이하로 압축한 뒤 LLM에 전달합니다.
전달된 긴 툴 데이터에서 노이즈를 깎아내고, 최우선 시스템 지시를 자동으로 "말미"에 재구성하는, 로컬에서 동작하는 Python 프롬프트 최적화 필터입니다.
로컬 환경에서 실행해 보세요.
import json
# 툴로부터 반환된 "노이즈가 많은 거대한 JSON 데이터" (더미)
raw_api_response = {
...
이 코드를 실행하면 불필요한 메타데이터가 제거되고, 가장 중요한 행동 제약 규칙(날씨 마크 부여 등)이 전체의 최하단에 배치되어, LLM이 가장 높은 집중력 (Attention)을 유지한 상태로 처리할 수 있는 상태로 변환되는 흐름을 알 수 있습니다.

※이미지: 로봇의 입력 센서에 방대한 문자의 노이즈로부터 중요한 지시사항만을 떠오르게 하는 포커스 렌즈를 장착하는 이미지 (AI 생성 이미지)
이로써 로봇에게 "Prompt & Context Engineering" 렌즈가 장착되었으며, 정보의 노이즈를 차단하고 목적 데이터 하나에 초점을 맞추는 "집중력"이 구현되었습니다.
하지만 아무리 똑똑하게 정보를 처리할 수 있게 되었더라도, AI 에이전트에게는 또 하나의 치명적인 "죽음의 취약성"이 있습니다.
만약 호출한 툴이나 AI 스스로가 생성하여 실행한 Python 프로그램에 "무한 루프 (Infinite Loop, 영원히 끝나지 않는 버그)"가 포함되어 있을 경우, 에이전트 전체 프로그램이 영원히 프리즈(Freeze)되어 서버의 CPU를 점유하며 폭주를 계속하게 됩니다.
다음, 제5회.
실행 시의 예기치 못한 폭주나 행업(Hang-up)을 강제적으로 탐지·차단하고, 안전한 감옥 안에서 코드를 실행하게 하는 방벽, "Loop Control과 안전한 코드 실행 샌드박스 (Sandbox)"라는 안전밸브를 그에게 장착하겠습니다.
지능이 절대적인 "안전성"이라는 방패를 손에 넣는 순간으로 나아갑시다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기