"하네스 엔지니어링 기초 (2/4) — AI 에이전트 작동 원리: 컨텍스트, 도구 호출, 에이전트 루프"

AI 에이전트는 스스로 컴퓨터를 만지는 존재가 아니다. 모델은 텍스트 안에서 다음 행동을 제안하고, 하네스는 그 행동을 실제 도구 호출로 바꾸고, 결과를 다시 컨텍스트로 되돌린다. 이 반복 구조를 이해해야 도구 오용, 컨텍스트 폭발, 장기 작업 실패가 왜 생기는지 설명할 수 있다.


핵심 요약

  • 에이전트의 기본 구조는 대체로 관찰 → 계획 → 행동 → 검증 → 기록의 반복 루프다.
  • 모델은 파일시스템이나 셸을 직접 만지지 않는다. 도구 호출 명령을 생성할 뿐이고, 실제 실행은 하네스가 맡는다.
  • 시스템 지시, 개발자 지시, 사용자 요청, 도구 결과는 모두 같은 텍스트가 아니라 서로 다른 계층의 입력이다.
  • 컨텍스트 창은 무한 저장소가 아니라 공유 예산이므로, 무엇을 넣고 무엇을 바깥에 둘지 결정하는 일이 품질에 직접 영향을 준다.
  • 따라서 에이전트 품질 문제는 종종 모델 지능보다 루프 설계와 입력 구조 문제에 가깝다.

1. 에이전트는 "대답하는 챗봇"이 아니라 "반복 루프"다

일반 챗봇 관점에서는 사용자가 묻고 모델이 답하면 끝난다. 하지만 작업형 에이전트는 대개 한 번의 답변으로 끝나지 않는다. 읽고, 찾고, 실행하고, 다시 판단하는 과정을 여러 번 돈다.

이때 기본 흐름은 보통 다음과 같다.

  1. 현재 목표와 제약을 읽는다.
  2. 지금 부족한 정보가 무엇인지 판단한다.
  3. 필요한 도구 호출을 제안한다.
  4. 도구 결과를 다시 읽고 다음 행동을 정한다.
  5. 완료 조건을 확인하거나, 더 필요한 작업으로 루프를 이어 간다.

이 흐름을 한 줄로 줄이면 다음과 같다.

에이전트 = 모델의 추론 + 하네스의 실행 + 결과의 재주입

즉, 에이전트는 모델 혼자 움직이는 존재가 아니라, 하네스와 함께 도는 루프다.

2. 모델은 직접 실행하지 않고, 하네스가 대신 실행한다

여기서 가장 중요한 오해 하나를 먼저 걷어내야 한다. 에이전트가 파일을 읽거나 셸 명령을 실행할 때, 모델이 운영체제를 직접 만지는 것은 아니다.

실제로 일어나는 일은 더 단순하다.

  • 모델은 "이 파일을 읽어라", "이 명령을 실행해라" 같은 구조화된 호출을 출력한다.
  • 하네스는 그 호출이 허용되는지 검사한다.
  • 허용되면 실제 도구를 실행한다.
  • 실행 결과를 요약 또는 원문 형태로 다시 모델 입력에 넣는다.
  • 모델은 그 결과를 바탕으로 다음 행동을 정한다.

그래서 도구 호출은 단발성 기능이 아니라, 루프의 일부다. 이 구조를 빼고 에이전트를 이해하면 두 가지를 놓치게 된다.

  • 왜 권한과 샌드박스가 중요한지
  • 왜 도구 결과의 길이와 형식이 다음 응답 품질을 좌우하는지

3. 입력은 하나가 아니라 계층이다

에이전트 입력을 그냥 "프롬프트"라고 묶어 부르면 중요한 차이가 사라진다. 실제로는 여러 층의 메시지가 함께 모델에 들어간다.

입력 층 역할
시스템 지시 가장 상위의 기본 원칙과 안전 제약
개발자/프로젝트 지시 저장소별 규칙, 역할 정책, 작업 방식
사용자 요청 이번 턴의 목표와 요구사항
도구 결과 외부 세계에서 가져온 사실과 실행 결과
대화 이력 직전 판단과 중간 상태

이 층을 섞지 않는 이유는 간단하다. 각 층은 중요도와 수명이 다르기 때문이다.

  • 시스템 지시는 오래 유지되어야 한다.
  • 사용자 요청은 현재 작업의 방향을 바꾼다.
  • 도구 결과는 최신성이 중요하지만, 오래 끌고 가면 컨텍스트를 압박한다.
  • 대화 이력은 유용하지만 압축 대상이 되기 쉽다.

이 차이를 이해하지 못하면 흔히 "모든 걸 긴 시스템 프롬프트에 넣는" 식의 과적재가 발생한다.

4. 컨텍스트 창은 공유 예산이다

시리즈 설계 문서와 활용 노트가 공통으로 강조하는 포인트는 분명하다. 컨텍스트 창은 넓을수록 좋다는 단순한 문제가 아니다. 에이전트는 그 공간을 여러 요소가 함께 써야 한다.

  • 지시 파일
  • 사용자가 준 요청
  • 참조 문서
  • 도구 호출 결과
  • 모델이 방금 만든 계획과 답변

즉, 컨텍스트는 큰 서랍이 아니라 작업대에 가깝다. 지금 바로 써야 할 것만 올려놔야 한다.

이 관점이 중요한 이유는 세 가지다.

4.1 모든 자료를 다 넣으면 품질이 오히려 떨어질 수 있다

긴 입력은 중요한 규칙을 묻히게 만든다. 중간 정보가 약해지는 long-context 문제도 여기서 같이 드러난다.

4.2 도구 결과가 생각보다 비싸다

검색 결과, 긴 로그, 대용량 파일 출력은 한 번 들어오면 다음 턴들까지 계속 토큰 예산을 잠식한다.

4.3 "필요할 때 다시 읽는 구조"가 더 강하다

항상 들고 다니는 것보다, 파일 경로나 검색 도구를 통해 필요할 때 읽게 하는 편이 더 안정적이다.

결국 좋은 에이전트는 기억력이 무한해서 잘하는 것이 아니라, 무엇을 바깥에 두고 무엇을 지금만 들여올지를 잘 설계해서 잘한다.

5. 도구 결과도 컨텍스트의 일부다

도구 호출을 "바깥 세계의 실행"으로만 보면 반쪽 이해에 그친다. 도구 결과는 다시 모델이 읽는 입력이 되므로, 곧바로 컨텍스트 설계 문제가 된다.

예를 들어 같은 검색 도구라도 아래 둘은 완전히 다르다.

  • 제목, 날짜, 핵심 요약, 출처만 짧게 돌려주는 도구
  • 원문 수천 줄을 그대로 던져 주는 도구

둘 다 기능은 "검색"이지만, 후자는 다음 판단 품질을 빠르게 망가뜨릴 수 있다.

그래서 좋은 하네스는 도구를 붙이는 데서 멈추지 않는다.

  • 결과 길이를 제한하고
  • 큰 출력은 파일이나 외부 저장소에 남기고
  • 모델에는 요약과 포인터를 먼저 보여 주고
  • 필요할 때만 세부 내용을 재호출하게 만든다

이 지점에서 A4의 도구 엔지니어링 주제와 바로 연결된다.

6. 에이전트 루프를 가장 단순하게 그리면 이렇다

실전에서는 변형이 많지만, 입문 단계에서는 다음 구조만 정확히 이해해도 충분하다.

단계 질문 하네스의 역할
관찰 지금 무엇을 알고 무엇이 비어 있는가 필요한 입력만 조립
계획 다음 행동은 무엇인가 목표와 제약을 유지
행동 어떤 도구를 호출할 것인가 권한 검사 후 실행
검증 결과가 목표에 가까워졌는가 테스트, 리뷰, 재시도 조건 제공
기록 다음 턴이나 다음 세션에 무엇을 남길 것인가 로그, handoff, 상태 파일 저장

이 표가 중요한 이유는, 에이전트 실패를 막연하게 보지 않게 해 주기 때문이다. 문제가 생기면 "모델이 별로였다"가 아니라 어느 단계에서 구조가 약했는지 따져볼 수 있다.

예를 들면:

  • 관찰 실패: 필요한 파일을 안 읽었다
  • 계획 실패: 제약을 무시한 채 바로 실행했다
  • 행동 실패: 잘못된 도구를 선택했다
  • 검증 실패: 틀린 결과를 통과시켰다
  • 기록 실패: 다음 세션이 이어받지 못했다

7. 우리 저장소에 대입하면 더 직관적이다

이 저장소 기준으로 보면 에이전트 루프는 이미 익숙한 구조로 보인다.

루프 구성 저장소 대응 예시
상위 지시 AGENTS.md, CLAUDE.md
읽기 범위 축소 tasks/plan.md, docs/memory-map.md
실행 경계 publish 금지 규칙, config/ 보호
상태 보존 tasks/handoffs/, tasks/sessions/
검증 감각 품질 게이트, 경로 검증, 후속 검토

즉, 에이전트 루프를 이해한다는 것은 새 개념을 외우는 것이 아니라, 이미 존재하는 운영 문서가 루프의 어느 지점을 담당하는지 아는 일에 가깝다.

8. 자주 깨지는 실패 신호

활용 노트와 기존 초안을 재구성하면, 에이전트 작동 원리 이해가 부족할 때 반복되는 실패 신호는 대체로 비슷하다.

8.1 모든 규칙을 한 파일에 욱여넣는다

입력 계층을 구분하지 않으면 시스템 지시와 작업별 지시가 충돌하기 쉽다.

8.2 도구 결과를 무제한으로 다시 넣는다

긴 로그나 검색 결과가 컨텍스트를 오염시키고, 다음 판단이 흐려진다.

8.3 검증 없는 행동 루프가 생긴다

읽고 실행하는 단계는 있는데, 테스트나 리뷰가 빠져서 잘못된 결과가 누적된다.

8.4 세션 단절을 대화 이력으로만 버틴다

긴 작업은 결국 압축되거나 끊긴다. 상태 파일과 handoff 없이 버티면 다음 세션이 처음부터 다시 추론하게 된다.

9. 실무자가 여기서 가져가야 할 최소 원칙

에이전트 작동 원리를 복잡한 다이어그램으로 외울 필요는 없다. 대신 아래 네 가지만 기억하면 된다.

  1. 모델은 직접 실행하지 않는다. 하네스가 실행하고 결과를 다시 넣는다.
  2. 입력은 하나가 아니라 계층이다. 각 층의 역할과 수명이 다르다.
  3. 컨텍스트는 공유 예산이다. 늘리는 것보다 덜어내는 설계가 중요하다.
  4. 에이전트는 루프다. 좋은 루프는 행동뿐 아니라 검증과 기록까지 포함한다.

이 네 가지가 잡히면 이후 주제도 자연스럽게 이어진다.

  • A3에서는 무엇을 어떤 파일에 넣고, 무엇을 세션 밖으로 뺄지 다룬다.
  • A4에서는 도구를 어떻게 설계해야 모델이 더 정확하게 행동하는지 다룬다.

참고 자료

  • docs/blog_series_하네스엔지니어링_총괄_design.md
  • sources/260518_하네스엔지니어링_15장_블로그활용노트.md
  • drafts/blog/260429_하네스시리즈02_컨텍스트엔지니어링_블로그.md
  • WikiDocs, 하네스 엔지니어링 백과사전 2장 활용 메모

이 글은 하네스 엔지니어링 기초 시리즈의 2/4 편입니다. 다음 편: 프롬프트보다 중요한 컨텍스트 설계와 지시 파일.

시리즈 전체 안내: 하네스 엔지니어링 시리즈 안내

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"