AI 에이전트, 비용 절감과 안전성 강화로 재탄생!
AI 에이전트의 비결정론적 특성과 프로덕션 시스템의 결정론적 요구사항 간의 간극을 해소하기 위한 사내 AI 에이전트 '채널랩스' 개선 작업 진행
OpenAI Agents SDK를 도입하여 기존 단발성 API 호출 구조를 agent loop 기반으로 전환하고, HTTP 처리와 작업 로직 분리
파일 첨부, 채널 컨텍스트 전달, 스킬 문서 관리 등에서 토큰 누수 방지 및 비용 효율성을 위한 설계 패턴 적용
AI 에이전트의 비결정론적 특성 관리
AI 에이전트는 본질적으로 비결정론적(Non-deterministic) 실행 흐름을 가지며, 동일한 입력에도 매번 다른 도구를 다른 순서로 호출하는 경향이 있음. 반면, 프로덕션 시스템은 예측 가능한 비용, 잘못된 호출 차단, 토큰 누수 방지 등 결정론적 특성을 요구함. 채널랩스 v2는 OpenAI Agents SDK를 활용하여 agent loop를 표준화하고, HTTP 처리와 실제 작업 로직을 분리하여 이러한 간극을 해소함. 요청 단위의 런타임 컨텍스트(Runtime Context)를 통해 동시 실행 시 상태 섞임을 방지하고, 가드레일(Guardrail) 정책으로 위험한 API 호출을 사전에 차단하는 등 안전성을 강화함.
파일 첨부 구조 개선: Lazy Loading과 범위 제한
기존 채널랩스 v1은 파일 본문을 DB와 모델 컨텍스트에 함께 저장하여 DB 용량 증가 및 매 요청마다 불필요한 토큰 누수를 유발했음. v2에서는 파일 본문을 S3에만 저장하고, 서버는 필요할 때만 다운로드하여 메모리 캐싱하는 레이지 로딩(Lazy Loading) 방식을 적용함. 또한, `read_file` 도구에 텍스트 범위 제한 파라미터를 추가하고, `search_file` 도구를 도입하여 파일 전체가 아닌 필요한 부분만 읽도록 하여 토큰 사용량과 비용을 최적화함. 이는 모델이 항상 파일 전체를 보는 대신, 필요할 때만 외부 데이터로 조회하는 Anthropic의 Just-in-Time Retrieval 패턴과 유사함.
채널 컨텍스트 전달 최적화: 선택적 목록 전달
기존 채널랩스 v1은 매 요청마다 사용자의 전체 채널 목록을 모델 입력에 포함시켜 불필요한 토큰 누수를 발생시켰음. v2에서는 현재 선택된 채널 ID와 이름만 먼저 전달하고, 여러 채널을 탐색해야 하는 경우에만 채널 조회 도구를 호출하는 하이브리드 전략(Hybrid Strategy)을 채택함. 또한, 사용자가 입력 시점에 `@` 멘션 픽커를 통해 채널 ID를 확정하도록 하여 채널 이름-ID 매칭 추론 단계를 제거함. 검색 결과와 쓰기 대상 채널을 분리하고, API 응답 스키마와 도구 응답 스키마를 분리하여 모델이 의사결정에 필요한 최소한의 정보만 받도록 함으로써 비용 효율성과 안전성을 높임.
스킬 문서 관리: 카탈로그 기반 접근 및 응답 크기 제한
기존 채널랩스 v1은 스킬 문서를 매 턴 system prompt에 통째로 주입하여 심각한 토큰 누수를 야기했음. v2에서는 런타임이 제공하는 짧은 스킬 카탈로그를 통해 모델이 필요한 스킬을 선택하게 하고, 실제 스킬 문서 읽기는 서버에서 응답 크기를 제한하는 방식으로 변경함. 모델은 한 번에 하나의 읽기 작업만 수행 가능하며, 결과는 런타임의 상한선에 따라 잘림. 이는 스킬 문서를 LLM prompt의 일부가 아닌, 런타임 외부의 외부 지식으로 취급하고, 제한된 도구 응답으로만 전달하는 구조임. 탐색 범위를 구조화된 메타데이터로 처리하여 불필요한 디렉토리 탐색으로 인한 토큰 누수를 방지함.
Compaction 대신 사전 예산 통제 전략 선택
채널랩스는 작업 실행 에이전트의 특성상, Compaction과 같은 사후 컨텍스트 압축 전략 대신 사전 예산 통제(Pre-budget Control) 방식을 우선 적용함. 작업 실행 에이전트는 이전 턴의 정확한 채널 ID, 파일 범위 등 실행에 필요한 정밀한 값을 유지해야 하므로, 의미 보존 중심의 압축은 정밀도 손실을 야기할 수 있음. 따라서 파일 본문은 필요한 범위만 읽고, 채널 목록은 선택적으로 전달하며, 스킬 문서 응답 크기를 제한하는 등 각 도구 응답이 처음부터 작게 들어오도록 설계하여 토큰 사용량과 비용을 관리함. 이는 '커진 컨텍스트를 사후에 줄이는 전략'보다 '컨텍스트가 처음부터 크게 들어오지 않게 하는 전략'을 선택한 것임.