CCAR-F · CHAPTER 05 · D5 CONTEXT MANAGEMENT & RELIABILITY · 15%
긴 작업에서도 흔들리지 않는 에이전트 설계
컨텍스트 관리와 신뢰성은 CCAR-F 시험에서 15%의 비중을 차지하며, 데모에서는 잘 작동하던 에이전트가 실제 운영에서 무너지는 지점을 정확히 겨냥합니다. 문맥이 길어지고 여러 에이전트가 협업하며 사람의 검수가 개입하는 상황에서, 설계자가 어디에 안전장치를 두어야 하는지를 다룹니다.
5.1 핵심 정보 보존 — 컨텍스트 윈도우를 자산으로 다루기
에이전트가 오래 작동할수록 컨텍스트 윈도우(context window, 모델이 한 번에 참고할 수 있는 정보의 총량)는 빠르게 차오릅니다. 누적 요약(progressive summarization, 이전 대화를 계속 압축하는 방식)은 토큰을 아끼지만, 요약을 반복하는 사이 확정된 사실이 뭉개지는 위험이 있습니다. 또한 모델은 긴 문맥의 가운데에 놓인 정보를 놓치기 쉬운데(lost-in-the-middle), 이 때문에 계약 조건이나 식별자 같은 확정 사실은 별도의 고정 블록으로 유지하고 문맥의 눈에 띄는 앞뒤 자리에 배치하는 편이 안전합니다. 도구 실행 결과가 토큰을 과도하게 차지하면 장황한 출력은 필요한 부분만 남기고 정리합니다.
실무 예시
고객지원 에이전트가 수십 턴이 오간 상담에서 초반에 확인한 요금제 조건을 잊고 엉뚱한 안내를 하는 사고를 겪은 팀이라면, 대화 전체를 요약해 압축하기보다 '확정 사실 블록'(계약번호·요금제·이전 약속)을 매 턴 문맥 상단에 유지하도록 설계하는 편이 재발을 막습니다.
5.2 에스컬레이션과 모호성 해소 — 언제 사람에게 넘길 것인가
상위 이관(escalation, 에이전트가 처리를 멈추고 사람 담당자에게 넘기는 것)의 트리거는 명확한 사건에 걸어야 합니다. 고객이 사람 상담을 직접 요청했을 때, 정책에 없는 상황일 때, 여러 번 시도해도 진전이 없을 때가 대표적입니다. 반대로 고객의 감정이나 모델의 자신감 점수(confidence proxy) 같은 대리 지표를 트리거로 삼는 설계는 위험합니다 — 신뢰하기 어렵고 오작동을 부릅니다. 조회 결과가 여러 건으로 갈리면 곧바로 하나를 고르지 말고, 계약번호나 주문번호 같은 식별자를 먼저 요청해 대상을 좁힙니다.
실무 예시
결제 오류 상담 에이전트를 설계하는 테크리드라면, '환불 규정에 없는 예외 요청'과 '고객이 상담원 연결을 명시적으로 요청'을 이관 트리거로 두고, 동명이인의 주문이 두 건 이상 잡히면 주문번호를 되묻는 흐름을 넣습니다. 목소리 톤이 격앙됐다는 추정만으로 이관하지는 않습니다.
5.3 멀티에이전트 오류 전파 — 실패를 구조화해 전달하기
여러 에이전트가 협업하는 구조에서는 한 에이전트의 실패가 어떻게 전달되는지가 신뢰성을 좌우합니다. 오류는 구조화된 맥락(structured error context)으로 넘겨야 합니다 — 실패 유형, 시도한 질의, 확보한 부분 결과, 가능한 대안을 함께 담습니다. 특히 '접근 권한 실패'와 '결과가 실제로 비어 있음'은 전혀 다른 사건인데, 이를 뭉뚱그리면 종합 단계에서 잘못된 결론이 납니다. 하위 에이전트의 오류를 조용히 삼켜 버리거나, 반대로 작은 실패에 전체 작업을 중단하는 것은 둘 다 나쁜 패턴입니다.
실무 예시
멀티에이전트 리서치 시스템을 만드는 아키텍트라면, 검색 담당 에이전트가 사내 자료 접근에 실패했을 때 이를 '자료 없음'으로 반환하지 않도록 합니다. '권한 오류, 시도한 검색어, 공개 자료로 대체 가능'을 구조화해 넘기면, 종합 에이전트가 빈 결과를 사실로 오인하는 사고를 막을 수 있습니다.
5.4 대규모 코드베이스 탐색 — 문맥 저하를 관리하는 설계
규모가 큰 코드베이스를 훑을 때는 문맥이 길어지며 판단이 흐려지는 문맥 저하(context degradation)가 생깁니다. 이를 막는 실무 장치가 몇 가지 있습니다. 중간 상태를 별도 메모 파일(scratchpad)에 적어 두면 문맥에서 밀려나도 다시 불러올 수 있고, 하위 작업을 서브에이전트(subagent)에 위임하면 상위 에이전트의 문맥을 가볍게 유지합니다. 진행 상태를 정형화한 기록 파일(manifest)로 남겨 두면 도중에 중단돼도 복구가 가능하며, /compact 같은 압축 명령으로 대화를 정리해 남은 여력을 확보합니다.
실무 예시
대형 모노레포에서 코드리뷰를 자동화하는 팀이라면, 리뷰 대상 파일 목록과 진행 상황을 기록 파일에 남기고 파일 묶음마다 서브에이전트를 나눠 위임합니다. 세션이 중단돼도 그 기록에서 남은 파일부터 이어받아, 처음부터 다시 훑는 낭비를 없앱니다.
5.5 사람 검수와 신뢰도 보정 — 평균 뒤에 숨은 실패 찾기
품질을 사람 손으로 확인할 때, 전체 평균 지표는 특정 구간의 실패를 가릴 수 있습니다. 전체 정확도가 높아 보여도 특정 문서 유형에서만 크게 틀리는 경우가 흔합니다. 그래서 무작위가 아니라 층화 표집(stratified sampling, 유형별로 나눠 표본을 뽑는 방식)으로 검수해야 구간별 약점이 드러납니다. 또 모델이 스스로 매기는 자신감 점수는 라벨이 붙은 검증 자료로 보정(calibration)해야 실제 정확도와 맞고, 항목 단위로 따로 보정하는 편이 정밀합니다. 문서 유형이나 항목의 성격에 따라 검수 경로를 나누면 사람의 손이 필요한 곳에 집중됩니다.
실무 예시
계약서에서 항목을 뽑아내는 파이프라인을 운영하는 설계자라면, 전체 정확도가 높게 나왔다는 숫자에 안심하기 전에 문서 유형별로 표본을 나눠 확인합니다. 특정 양식에서만 날짜 항목이 자주 틀린다면, 그 유형·그 항목만 사람 검수로 돌리도록 경로를 분리합니다.
5.6 다중 출처 종합에서의 출처 추적
여러 자료를 하나로 묶어 답을 만들 때, 각 주장이 어느 출처에서 나왔는지의 연결(claim-source mapping)이 종합 과정에서 끊기지 않아야 합니다. 자료끼리 내용이 어긋나면 한쪽을 조용히 버리지 말고, 어느 출처가 무엇을 말하는지 상충을 명시해 함께 보여 줍니다. 발행일이나 수집 시점 같은 시간 정보(temporal data)도 함께 남겨야 오래된 자료와 최신 자료를 구분할 수 있습니다. 마지막으로 어떤 주제가 자료로 뒷받침되지 않는지, 빠진 범위(coverage gap)를 함께 보고하면 읽는 사람이 결론의 한계를 알 수 있습니다.
실무 예시
시장 조사 보고서를 여러 건 종합하는 리서치 에이전트를 만드는 테크리드라면, 문장마다 근거 출처와 발행일을 유지하고, 두 보고서의 수치가 어긋날 때 '2024년 A사 자료는 X, 2025년 B사 자료는 Y'처럼 출처와 함께 나란히 제시하도록 설계합니다. 다루지 못한 지역·항목은 '자료 부족'으로 분명히 표시합니다.
! 흔한 함정
- 문맥은 길수록 좋다고 여겨 확정 사실을 아무 자리에나 두는 것 — 긴 문맥의 가운데 정보는 모델이 놓치기 쉽습니다(lost-in-the-middle).
- 고객의 감정이나 모델의 자신감 점수를 상위 이관 트리거로 삼는 것 — 신뢰하기 어려운 대리 지표입니다.
- 하위 에이전트의 실패를 조용히 삼켜 버리거나, 반대로 작은 오류에 전체 작업을 멈추는 양극단.
- 전체 평균 지표만 보고 품질을 판정해, 특정 문서 유형이나 항목에서만 나는 실패를 놓치는 것.
HANDS-ON 서브에이전트 위임·/compact·중간 기록으로 오래 작동하는 에이전트의 문맥을 관리하는 실습은 byteforce learn의 4-claude-code 코스에서 손으로 익힐 수 있습니다. learn으로 →
Q 확인 퀴즈
국내 통신사의 고객지원 에이전트가 수십 턴에 걸친 상담에서, 초반에 확인한 요금제 조건을 뒤에서 잊고 엉뚱한 안내를 하는 사고가 반복됩니다.
이 재발을 막기 위한 컨텍스트 윈도우(context window, 모델이 한 번에 참고하는 정보의 총량) 설계로 가장 적절한 것은 무엇입니까?