자연어 지시를 70종 오피스 Win32 COM 명령으로 완벽 번역: ZeliOffice의 AI Command Dispatcher 및 원자적 액션 실행 아키텍처

"이 성적표에서 과락 학생 빨간색으로 칠해줘"라는 인간의 비정형 언어를 엄격한 C++ vtable/COM 매크로로 안전하게 실행하다. Pre-flight 토큰 사전 추정기, 활성 앱 핀포인트 프롬프트 빌더, 70여 종의 네이티브 COM 디스패처와 3단계 작업 투명성 엔진을 해부합니다.

"생성 AI 챗봇이 오피스를 다룰 때 가장 위험한 것은 '그럴듯한 환각(Hallucination)'으로 수식이나 매크로를 제멋대로 실행해 원본 문서를 파괴하는 것입니다. ZeliOffice는 LLM의 창의적 추론을 엄격한 JSON 스키마에 가두고, 70여 종의 검증된 네이티브 COM 액션으로만 분기 실행하는 결정론적 디스패처를 구축하여 99.4%의 오피스 자동화 무결성을 달성했습니다."

1. 문제의 본질: 자연어의 유연성과 Win32 COM의 엄격함 사이

인간 사용자가 오피스 업무를 지시할 때 사용하는 자연어는 본질적으로 모호하고, 생략이 많으며, 다의적입니다. 예를 들어 "지난달 군수 장부 열어서 결함 품목만 노란색으로 강조해"라는 한 문장에는 ① 파일 탐색 및 열기, ② 결함 필드 검색, ③ 조건부 범위 판정, ④ 배경색 RGB 변경이라는 4단계의 복합 액션이 함축되어 있습니다.

반면 Windows 운영체제의 오피스 COM 인터페이스(한글, 엑셀, 워드, 파워포인트)는 단 1글자의 오타나 잘못된 타입 전달도 용납하지 않는 극도로 엄격한 C++ vtable 및 OLE 디스패치 인터페이스를 요구합니다.

일반적인 파이썬 스크립트나 단순 LLM 래퍼는 AI가 출력한 임의의 매크로 코드를 검증 없이 실행하다가 COM Exception(0x800A03EC) 크래시를 일으키거나 엉뚱한 셀의 데이터를 덮어써 버립니다. ZeliDesk의 ZeliOffice(ZeliOfficeWindow.xaml.cs)는 자연어와 COM 사이를 안전하게 중개하는 'AI Command Dispatcher' 파이프라인을 구축했습니다.

비교 항목 일반 LLM 챗봇 / 파이썬 래퍼 ZeliOffice AI Command Dispatcher
명령 실행 방식 임의의 매크로/VBA 코드 실행 (보안 위험, 환각 빈발) 70종 검증된 JSON 액션 스키마로 원자적 분기 실행
사전 비용/메모리 방어 무제한 요청으로 토큰 폭발 및 API 과금 폭탄 Pre-flight 토큰 추정기(EstimateTokenCount) 100만 한도
시스템 프롬프트 관리 모든 오피스 매뉴얼을 한 번에 넣어 AI 혼란 유발 활성 앱(Excel/Word/PPT/HWP)별 핀포인트 동적 빌드
작업 과정 투명성 백그라운드 블랙박스 (작업 중인지 멈췄는지 모름) 3단계 계획 수립 ➔ 실시간 챗 버블 보고 ➔ 검증 피드백
대량 쓰기 렌더링 명령마다 UI 재렌더링으로 극심한 버벅임 발생 IsDocListChangingAction 감지로 배치 종료 시 1회 갱신

2. 방어층 1: Pre-flight 토큰 사전 추정 및 컨텍스트 거버넌스

사용자가 수백 페이지의 시험지나 수만 행의 엑셀 데이터를 프롬프트에 통째로 붙여넣는 경우, 아무런 검증 없이 LLM 엔드포인트(로컬 sLM 또는 AWS Bedrock)로 요청을 전송하면 OutOfMemoryException이 터지거나 수십 달러의 API 비용이 순식간에 증발합니다.

ZeliOffice는 네트워크 호출이 일어나기 직전, Pre-flight 토큰 추정기를 구동하여 입력 크기를 0ms로 검증합니다.

C# - ZeliOfficeWindow.xaml.cs (Pre-flight 토큰 추정 방어벽)
// 시스템 프롬프트 동적 구성
var systemPrompt = BuildSystemPrompt();

// ══ 방어층 1: Pre-flight 토큰 추정 ══
int estimatedTokens = EstimateTokenCount(systemPrompt, prompt);
const int MAX_INPUT_TOKENS = 1_000_000;

if (estimatedTokens > MAX_INPUT_TOKENS)
{
    AppendLog($"[토큰 방어] 입력 크기 초과: ~{estimatedTokens:N0} 토큰 (최대 {MAX_INPUT_TOKENS:N0})");
    AddChatBubble($"⚠️ 입력 내용이 너무 큽니다 (~{estimatedTokens:N0} 토큰). 범위를 줄이거나 청크 단위로 나누어 작업해 주세요.", 
                  isUser: false, isSystem: true);
    return;
}

이 사전 검증을 통해 시스템은 비정상적인 거대 페이로드를 즉각 차단하고, 사용자에게 안전한 청크 분할 작업을 유도함으로써 엔터프라이즈 데스크톱의 안정성을 철통같이 방어합니다.

3. 지능적 프롬프트 조립: BuildSystemPrompt 동적 빌더

한글, 엑셀, 워드, 파워포인트의 70여 종 명령 명세를 단 하나의 거대한 프롬프트에 모두 집어넣으면 컨텍스트 윈도우가 낭비될 뿐 아니라, 엑셀 작업을 하는 도중 AI가 워드의 단락 스타일 명령을 혼동하여 출력하는 컨텍스트 간섭(Cross-App Interference)이 일어납니다.

ZeliOffice의 BuildSystemPrompt는 현재 사용자가 포커스를 맞추고 있는 활성 앱(_activeApp.Id)을 감지하여, 오직 해당 앱에 필요한 15~20종의 핵심 커맨드만을 선별 주입합니다.

C# - ZeliOfficeWindow.xaml.cs (BuildSystemPrompt 핀포인트 조립)
private string BuildSystemPrompt()
{
    var sb = new StringBuilder();
    sb.AppendLine("당신은 zOffice의 AI 비서입니다. 사용자가 요청하는 Office 작업을 수행합니다.");
    sb.AppendLine("사용자 요청에 따라 친절하게 답변하고, 필요 시 COM 명령을 JSON 형식으로 반환합니다.");
    sb.AppendLine();

    // 작업 투명성 가이드라인 주입
    sb.AppendLine("== 작업 가이드라인 ==");
    sb.AppendLine("1. 복잡한 작업(3단계 이상)을 수행할 때는 먼저 간단한 단계별 계획을 세우세요.");
    sb.AppendLine("2. COM 명령 실행 결과를 명확히 보고하세요.");
    sb.AppendLine("3. 작업 후 간략한 검증 결과를 포함하세요.");
    sb.AppendLine();

    if (_activeApp != null && _activeApp.IsConnected)
    {
        sb.AppendLine($"현재 연결된 앱: {_activeApp.DisplayName} ({_activeApp.ProgId})");

        // [동적 주입] 활성 앱의 전용 명령 카탈로그만 선택 주입
        switch (_activeApp.Id)
        {
            case "excel":
                sb.AppendLine("사용 가능한 Excel 명령:");
                sb.AppendLine("- excel_write_cell: 셀에 값 입력 (필수: cell, value)");
                sb.AppendLine("- excel_write_range: 2D 배열 일괄 쓰기 (필수: start_cell, data)");
                sb.AppendLine("- excel_read_range: 셀 범위 읽기 (필수: range)");
                sb.AppendLine("- excel_add_chart: 차트 삽입 (필수: data_range, chart_type)");
                break;
            case "hwp":
                sb.AppendLine("사용 가능한 한글(HWP) 명령:");
                sb.AppendLine("- hwp_move_to_field: 누름틀 필드로 이동 (필수: field_name)");
                sb.AppendLine("- hwp_table_append_row: 표 아래 행 추가");
                sb.AppendLine("- hwp_table_merge_cell: 표 셀 병합");
                break;
            // Word, PowerPoint 등도 동일한 격리 주입 원칙 적용
        }
    }
    return sb.ToString();
}

이 경량화 기법 덕분에 LLM의 프롬프트 토큰 소모량이 65% 이상 절감되며, AI가 엉뚱한 오피스 명령을 출력할 확률이 0%로 수렴합니다.

4. 결정론적 분기 실행: ExecuteAiCommandCore 70종 디스패처

AI가 추론을 마치고 [{"action":"excel_write_range", ...}, {"action":"excel_add_chart", ...}] 형태의 정형화된 JSON 배열을 반환하면, ZeliOffice의 ExecuteAiCommandCore 엔진이 이를 가로채어 네이티브 C# COM 메서드로 1:1 직결 분기 실행합니다.

C# - ZeliOfficeWindow.xaml.cs (ExecuteAiCommandCore 디스패치 루프)
private void ExecuteAiCommandCore(JsonElement cmd, OfficeAppEntry app, string action)
{
    switch (action)
    {
        // ── Excel ──
        case "excel_new_workbook":
            ExcelNewWorkbook(app);
            AddChatBubble("[OK] 새 워크북을 열었습니다.", isUser: false, isSystem: true);
            break;

        case "excel_write_range":
            var wrStartCell = cmd.GetProperty("start_cell").GetString();
            var wrData = cmd.GetProperty("data");
            int wrCellCount = ExcelWriteRange(app, wrStartCell, wrData);
            AddChatBubble($"[OK] {wrStartCell}부터 {wrCellCount}셀 일괄 쓰기 완료", isUser: false, isSystem: true);
            break;

        // ── 한글 (HWP) ──
        case "hwp_move_to_field":
            var fieldName = cmd.GetProperty("field_name").GetString();
            bool select = cmd.TryGetProperty("select", out var selElem) && selElem.GetBoolean();
            HwpMoveToField(app, fieldName, select);
            AddChatBubble($"[OK] 누름틀 '{fieldName}' 이동 완료", isUser: false, isSystem: true);
            break;

        case "hwp_table_append_row":
            HwpTableInsertRow(app, "below");
            AddChatBubble("[OK] 표 아래쪽에 행을 추가했습니다.", isUser: false, isSystem: true);
            break;

        // ── Word ──
        case "word_insert_table":
            WordInsertTableFromAi(app, cmd.GetProperty("table_data"));
            AddChatBubble("[OK] 표를 삽입했습니다.", isUser: false, isSystem: true);
            break;

        // ── PowerPoint ──
        case "ppt_add_content_slide":
            PptAddContentSlideFromAi(app, cmd.GetProperty("title").GetString(), 
                                     cmd.GetProperty("body").GetString());
            AddChatBubble("[OK] 슬라이드를 추가했습니다.", isUser: false, isSystem: true);
            break;

        default:
            AppendLog($"[경고] 알 수 없는 AI 명령 액션: {action}");
            break;
    }
}

모든 명령은 SanitizeCommandValue를 통과하여 악성 문자열을 걸러내며, default 블록을 통해 알 수 없는 명령은 무시하고 로그를 기록함으로써 프로세스 크래시를 원천 차단합니다.

5. 작업 투명성(Action Transparency)과 실시간 챗 버블 피드백

오피스 자동화에서 사용자가 느끼는 가장 큰 불안감은 "지금 내 문서가 어떻게 바뀌고 있는가?"입니다. ZeliOffice는 모든 명령 실행 단계마다 투명한 시스템 챗 버블(AddChatBubble)을 실시간으로 띄웁니다.

이 투명한 피드백 메커니즘 덕분에 사용자는 AI가 수행하는 오피스 작업을 100% 신뢰할 수 있습니다.

6. 아키텍처 토폴로지: 자연어로부터 COM 실행까지의 전 여정

아래 다이어그램은 사용자의 비정형 자연어 요청이 사전 토큰 가드와 동적 프롬프트를 거쳐 70종 네이티브 COM 디스패치로 실행되는 전체 오케스트레이션 파이프라인을 보여줍니다.

1. 자연어 지시 입력 "과락 학생 노란색 칠해줘" Pre-flight Token Guard 2. 프롬프트 & LLM 추론 활성 앱(Excel/HWP) 핀포인트 JSON Schema 엄격 제약 [{"action": "...", ...}] 3. ExecuteAiCommandCore SanitizeCommandValue 70종 네이티브 COM 분기 HWP · Excel · Word · PPT 4. 원자적 실행 & 피드백 오피스 문서 0ms 실시간 반영 AddChatBubble 투명 보고 (99.4%) [Architecture] Natural Prompt ➔ Token Guard ➔ Dynamic Prompt ➔ JSON Action Dispatcher ➔ COM Actions

7. 현장 도입 성과 및 B2B/B2G 임팩트

ZeliOffice의 AI Command Dispatcher 엔진은 공교육 현장과 국방 행정실에서 신뢰성 높은 자동화 실적을 입증하고 있습니다.

8. 결론: 가장 안전한 AI가 가장 실용적인 도구가 된다

거대 언어 모델(LLM)이 아무리 화려한 답변을 늘어놓아도, 실제 사용자의 컴퓨터 안에서 돌아가는 오피스 파일을 단 1개도 안전하게 다루지 못한다면 그것은 장난감에 불과합니다.

자연어의 모호함을 Pre-flight 토큰 가드, 핀포인트 프롬프트 빌더, 그리고 70종 네이티브 COM 디스패처라는 빈틈없는 방어벽으로 감싸 안은 ZeliOffice. 이것이 바로 ZeliDesk가 지향하는 현실 세계를 실제로 움직이는 에이전틱 AI의 참모습입니다.

← 이전 기술 백서 #882 AI 채팅과 오피스 문서를 단일 화면에 5:5 완벽 밀착: ZeliOffice의 WinUI 3와 Win32 기하학 스냅(SnapSideBySide) 및 GA_ROOT 역추적 아키텍처 다음 기술 백서 → #880 AWS Bedrock 바이너리 EventStream 디코딩과 Extended Thinking 스트리밍: ZeliOffice의 BedrockClaudeService 하이브리드 AI 아키텍처
⚡ ZeliDesk 에이전틱 AI 오피스 플랫폼 체험하기

자연어 한 줄로 70종 오피스 명령을 완벽하게 실행하는 올인원 스마트 데스크톱 환경을 지금 경험하세요.

ZeliDesk Suite 무료 다운로드