LLM 엔지니어링10장 · MCP 와 Prompt·Context Engineering10 / 22← 이전목차다음 →MetaContents

10장. MCP 와 Prompt·Context Engineering

컨텍스트 줄이기

회의록을 한 달 치 다 들고 회의에 들어가지 않고, 지난 회의의 요약 한 장과 오늘 안건에 필요한 자료만 들고 갑니다. 컨텍스트도 골라 넣고, 요약하고, 오래된 것은 덜어 냅니다.

검색으로 고르기, 오래된 대화 요약, 최근 대화만 남기기, 도구 결과 다듬기의 네 방법을 카드로 놓은 그림

네 카드가 컨텍스트를 줄이는 방법입니다. 문서는 다 붙이지 말고 검색으로 몇 조각만 고르고(6~7장), 오래된 대화는 요약 한 단락으로 바꾸고, 최근 몇 턴만 그대로 두고, 도구가 돌려준 긴 결과는 필요한 칸만 남깁니다. 여기서 요약 한 장이 대화 요약, 오늘 안건 자료가 검색한 조각입니다.

방법 견주기

방법줄어드는 것잃을 수 있는 것
검색으로 고르기문서검색이 놓친 조각
오래된 대화 요약대화 기록요약에서 빠진 숫자, 이름
최근 N 턴만대화 기록오래전에 말한 조건
도구 결과 다듬기도구 결과지운 칸에 있던 정보

최근 대화만 남기기

Python
history = [{"role": "user" if i % 2 == 0 else "assistant", "content": f"{i}번째 말"} for i in range(12)]

def trim(messages, keep_last=4, summary=None):
    """시스템 지시는 늘 두고, 앞부분은 요약 한 줄로, 최근 keep_last 개는 그대로"""
    system = [{"role": "system", "content": "당신은 사내 도우미입니다."}]
    if summary:
        system.append({"role": "system", "content": "앞선 대화 요약: " + summary})
    return system + messages[-keep_last:]

short = trim(history, keep_last=4, summary="사용자는 회의실 예약을 묻고 있다.")
print(len(history), "→", len(short), "개 메시지:", [m["content"] for m in short])

메시지 12개가 시스템 지시와 요약 2개, 최근 대화 4개로 줄어 6개가 됩니다. 요약은 보통 LLM 에게 따로 한 번 시켜 만듭니다.

코드에 나오는 함수

코드쉬운 뜻
"user" if i % 2 == 0 else "assistant"짝수 번째는 사용자, 홀수 번째는 모델(assistant, 조수)의 말로 번갈아 정한다
[{…} for i in range(12)]그 꼴의 메시지 12개를 한 번에 만든다. 연습용 대화 기록이다
keep_last=4그대로 남길 최근 메시지 수의 기본값이다
summary=None요약 글의 기본값이다. 주지 않으면 요약 메시지를 넣지 않는다
system.append(…)시스템 메시지 목록 끝에 요약 메시지를 하나 더한다
messages[-keep_last:]목록의 끝에서 keep_last 개를 잘라 온다. 음수 번호는 뒤에서부터 센다
system + messages[-keep_last:]두 목록을 이어 붙여 새 목록을 만든다. 원래 history 는 그대로 남는다

이 코드가 뜻하는 것

회의에 들고 갈 서류철을 꾸리는 일로 읽어 봅니다. 맨 앞에는 늘 회사 규칙 한 장을 넣고, 다음에 지난 회의의 요약 한 장, 뒤에는 최근 회의록 몇 장만 넣습니다. 오래된 회의록은 서류철에서 빼지만 버리지는 않습니다. 여기서 회사 규칙이 시스템 지시, 요약 한 장이 요약 메시지, 최근 회의록이 messages[-keep_last:], 빼 둔 회의록이 원래의 history 입니다.

줄하는 일쉽게 말하면
history = [...]주고받은 메시지 12개를 만든다한 달 치 회의록
system = [{"role": "system", ...}]늘 넣을 시스템 지시를 둔다맨 앞의 회사 규칙
if summary: system.append(...)요약이 있으면 시스템 메시지로 하나 더한다지난 회의 요약 한 장
return system + messages[-keep_last:]최근 4개만 붙여 돌려준다최근 회의록 네 장
print(len(history), "→", len(short), ...)줄기 전과 뒤의 개수, 남은 내용을 찍는다서류철 두께 견주기

결과에서 남은 대화는 8번째 말 부터 11번째 말 까지입니다. 0번부터 7번까지의 말은 요약 한 줄이 대신합니다. 이 예의 요약은 사람이 미리 적어 둔 문장이고, 실제로는 LLM 에게 따로 시켜 만듭니다.

주의할 점

  • 사용자가 처음에 말한 조건("예산은 30만원 이하")이 요약에서 빠지면 뒤의 답이 틀립니다. 요약에 꼭 남길 것(숫자, 이름, 조건)을 지시에 적습니다.
  • 도구 결과를 다듬을 때 숫자 칸을 지우지 않습니다. 모델이 숫자를 지어내는 원인이 됩니다.
← 이전 절10장 · 컨텍스트 엔지니어링다음 절 →10장 · 실패의 종류