"분명히 프롬프트 지시대로 에이전트가 외부 웹 검색과 DB 조회를 아주 잘 마쳤는데, 마지막 종합 대답을 작성할 때 가장 핵심적인 수치 데이터를 쏙 빼놓거나 엉뚱한 이전 대화 내용을 섞어서 출력해 버렸습니다."
AI 에이전트 파이프라인을 구축해서 복잡한 multi-step 업무를 자동화하다 보면, 중간 노드들은 전부 일을 잘해냈는데 이상하게 '최종 결과물 출력 노드'에서 맥락을 놓치고 바보 같은 대답을 뱉어내는 현상을 자주 마주하게 됩니다.
에이전트가 단계를 거치며 수집한 데이터와 대화 기록이 길어질수록 프롬프트의 분량이 커지는데, 대형 언어 모델(LLM)이 긴 프롬프트의 앞쪽이나 중간쪽에 위치한 핵심 정보를 깜빡하고 무시해 버리는 고질적인 'Lost in the Middle(중간 맥락 유실)' 버그 때문이지요. 오늘은 제가 직접 겪었던 '긴 문맥 데이터 유실 잔혹사'와 이를 완벽히 잡아낸 '동적 맥락 재배치(Dynamic Context Re-ordering) & 요약 윈도우 파이프라인' 구축기를 정리해 드릴게요.
1. "가장 중요한 정보를 왜 빼먹니?" - 긴 프롬프트의 배신
여러 개의 외부 전문 뉴스 사이트와 내부 가이드라인 DB를 동시에 검색하여, 오늘 주요 이슈를 세 줄 요약하고 핵심 인사이트를 도출하는 인텔리전스 에이전트를 가동하던 때였습니다. 수집 노드가 전달해 준 검색 결과 텍스트가 A4 용지 10장에 달할 정도로 양이 매우 방대했지요.
저는 이 방대한 자료를 시스템 프롬프트 중간에 깔끔하게 집어넣고 최종 답변을 생성하도록 만들었습니다. 그런데 결과물을 확인해 보니, 가장 핵심이 되는 중요한 통계 수치나 최신 뉴스 내용은 싹 빠져 있고, 텍스트의 제일 앞부분에 잠깐 언급되었던 지엽적인 배경지식만 가지고 겉도는 답변을 적어내고 있었습니다.
LLM이 수만 토큰에 달하는 컨텍스트 윈도우(Context Window)를 지원한다고 해도, 텍스트의 '중간 영역'에 위치한 데이터는 주의력(Attention) 집중도가 현저히 떨어진다는 언어 모델 고유의 기하학적 한계를 눈으로 확인한 순간이었습니다.
2. 시행착오: 프롬프트를 무작정 길게 이어 붙였던 나날들
초기에는 정보가 빠지지 않도록 에이전트가 거쳐온 모든 단계의 대화 기록, 검색 결과, 도구 호출 로그를 단순 `join()` 문으로 모조리 합쳐서 모델에게 던져주었습니다. "다 들려주면 알아서 중요한 걸 잘 골라내겠지!"라고 생각했던 것이죠.
하지만 이는 완전히 잘못된 접근이었습니다. 쓸데없는 로그와 부차적인 문맥이 늘어날수록 토큰 비용은 배로 뛰었고, 모델은 더욱 혼란에 빠져 핵심 지시사항을 무시했습니다. 무작정 많은 정보를 프롬프트에 구겨 넣는 것은 에이전트의 지능을 올려주는 것이 아니라, 오히려 중요한 정보를 쓰레기 데이터 속에 묻어버리는 결과를 초래한다는 것을 뼈저리게 깨달았습니다.
💡 몬이쌤의 실전 인사이트: 학원에서 아이들에게 시험 직전 요점 정리를 해줄 때 문제집 한 권을 통째로 읽으라고 하면 아무것도 기억하지 못합니다. 가장 중요한 시험 출제 포인트 3가지를 '맨 첫 장'과 '맨 마지막 장'에 또박또박 짚어주어야 아이 머릿속에 각인되는 것과 똑같습니다. AI 에이전트도 프롬프트 양 끝에 핵심 정보를 배치해 주어야 합니다.
3. 해결책: '양끝 배치(U-Shape Re-ordering)' & 슬라이딩 맥락 압축 3단계 비책
이 '중간 맥락 유실' 버그를 기술적으로 완벽히 극복하기 위해, 저는 파이프라인 출구 레이어에 '3단계 동적 맥락 최적화 아키텍처'를 도입했습니다.
- 1단계 [핵심 데이터의 양끝 재배치(U-Shape Context Re-ordering)]: RAG 검색 결과나 수집된 핵심 문서를 연관도 순으로 정렬한 뒤, 가장 중요한 Top 1~2개 문서를 프롬프트의 '맨 앞(System Prompt 직후)'과 '맨 끝(User Output Prompt 바로 위)'에 나누어 배치했습니다. LLM의 주의력이 가장 높게 유지되는 유선형 구간을 활용한 것이죠.
- 2단계 [중간 데이터의 슬라이딩 압축(Sliding Window Summarization)]: 긴 대화 이력이나 3순위 이하의 서브 문서들은 가벼운 슬라이딩 윈도우 노드를 거쳐 2~3줄의 핵심 요약문(Bullet Point)으로 실시간 압축하여 중간에 배치했습니다.
- 3단계 [지시문 샌드위치(Instruction Sandwich) 구조]: "반드시 출력 양식을 지켜라"와 같은 핵심 행동 지시문(System Instruction)을 프롬프트 시작 지점뿐만 아니라, 모든 텍스트 데이터가 끝나는 최하단에 한 번 더 강조하여 주입했습니다.
4. 결과: 정보 누락 0건, 완성도 높은 인사이트 도출
양끝 재배치와 지시문 샌드위치 아키텍처를 도입하자마자 거짓말 같은 변화가 일어났습니다! 방대한 양의 수집 데이터를 처리하면서도, 에이전트가 단 하나의 핵심 통계나 중요한 요구사항을 놓치지 않고 완벽하게 최종 리포트에 반영해 내기 시작했습니다.
전체 토큰 사용량은 60% 이상 크게 줄어들었고, 답변 생성의 정밀도와 논리적 일상성은 이전과 비교할 수 없을 정도로 압도적으로 올라갔지요.
AI 에이전트 시스템을 잘 만든다는 것은 더 비싸고 큰 모델을 가져오는 것에 달려있지 않습니다. '모델이 가장 잘 알아들을 수 있는 위치와 순서로 정보를 정갈하게 차려주는 프롬프트 오케스트레이션의 섬세함'이 시스템의 명품 여부를 결정짓습니다.
여러분도 에이전트가 자꾸 중요한 정보를 잊어버리거나 딴소리를 한다면, 무작정 지시문을 늘리지 말고 핵심 텍스트를 프롬프트의 '맨 앞과 맨 뒤'로 재배치해 보세요. 몰라보게 똑똑해진 에이전트를 만나게 되실 겁니다.
