하네스 엔지니어링
하네스 엔지니어링(harness engineering)은 언어 모델 주변의 실행 환경을 설계하고 구축하는 공학 분야이다. 모델이 사용하는 도구, 문맥, 메모리, 출력 처리와 안전장치를 포함하는 하네스(harness)를 만드는 작업을 가리킨다.
개요
프롬프트 엔지니어링이 텍스트 입력이라는 단일 채널로 모델과 소통한다면, 하네스 엔지니어링은 모델이 외부 세계와 상호작용하는 모든 경로를 설계한다. 모델을 두뇌에 비유하면 하네스는 감각 기관과 몸에 해당한다.
에이전트 공학 문헌에서 하네스라는 용어는 모델을 둘러싼 환경·도구·문맥을 총칭하는 말로 사용된다. 에이전트 시스템의 성능은 모델의 능력만큼 하네스의 설계에 의해 결정되므로, LLM 애플리케이션 개발의 중심적인 작업이 되었다.
핵심 개념
문맥 관리
모델의 컨텍스트 윈도우는 유한하므로, 무엇을 넣고 무엇을 빼는지가 성능을 결정한다. 대표적인 방법은 다음과 같다.
- 검색 증강 생성(RAG): 필요한 정보를 검색해 프롬프트에 주입한다.
- 대화 요약과 압축: 긴 대화를 요약해 문맥을 유지한다.
- 문맥 선별: 관련도가 낮은 내용을 버리고 중요한 정보를 보존한다.
도구 정의와 호출
하네스의 핵심 요소는 도구(tool)이다. 도구는 함수 호출(function calling) 형태로 모델에 노출되며, 모델이 생성한 호출을 하네스가 실행하고 그 결과를 다시 모델에 돌려준다. 파일 읽기, 웹 검색, API 호출, 데이터베이스 질의 등이 도구로 감싸진다.
출력 처리
모델 출력을 그대로 사용하지 않고 구조를 검증하고 변환한다. JSON 스키마 검증, 형식 오류 시 재시도, 출력 분류와 필터링 등이 포함된다.
메모리
대화 간 정보를 저장하고 꺼내 쓰는 장기 메모리와, 현재 작업의 상태를 유지하는 단기 메모리를 구분해 설계한다.
가드레일
입력과 출력에 대한 안전 규칙, 민감 정보 필터, 토큰·비용 제한 등을 하네스에 배치한다.
설계 원칙
- 문맥은 자원이다: 컨텍스트 윈도우를 효율적으로 사용하도록 설계한다.
- 실패를 예상한다: 도구 호출 실패, 형식 오류, 비정상 출력을 처리하는 경로를 만든다.
- 관측 가능하게 만든다: 입력·출력·도구 호출을 기록해 문제를 진단할 수 있게 한다.
관련 공학 분야
하네스는 프롬프트를 포함하는 상위 계층이다. 프롬프트 엔지니어링으로 해결되지 않는 정보·도구·상태 문제는 하네스에서 다룬다. 하네스 위에서 반복 실행을 설계하는 것이 루프 엔지니어링, 여러 실행 경로를 조율하는 것이 그래프 엔지니어링이다.