엔지니어링 노트도구와 실행

양식 복사·가이드 읽기는 도구가 하고, 모델에는 인자로 묻는다

사내 양식으로 견적서를 만드는 일은 두 단계입니다. 양식을 새 경로로 복사하고, 그 사본에 값을 채웁니다. 복사를 모델이 따로 부르는 도구로 두면 모델은 이 단계를 자주 건너뜁니다. 그러면 편집이 「대상 파일 없음」으로 실패하거나, 모델이 양식 원본 경로를 편집 대상으로 넘겨 원본이 제자리에서 바뀝니다. 다음 사람이 그 양식을 열면 지난번 고객사 이름과 금액이 들어 있습니다. 문서를 만들기 전에 형식별 작업 가이드를 읽는 단계도 같은 모양이고, 같은 식으로 빠집니다.

이런 단계는 정답이 매번 같습니다. 양식은 늘 복사해야 하고, 워드 문서를 만드는 모델에게는 늘 워드 가이드가 필요합니다. 그래서 OwlAI는 이런 단계를 모델에게 맡기지 않고 도구가 호출 안에서 합니다. 모델에게는 경우마다 답이 다른 것만, 지금 부르는 호출의 인자로 묻습니다. 이 글은 어떤 단계를 도구 안으로 넣었는지, 모델에게는 무엇을 어떤 꼴로 묻는지를 설명합니다.

따로 불러야 하는 단계는 모델이 건너뛴다

흔한 접근은 도구 설명과 시스템 프롬프트에 순서를 적는 것입니다. 「편집하기 전에 복사 도구로 사본을 만들어라」, 「문서를 만들기 전에 가이드를 불러와라」. 문장으로는 분명하지만, 실제로 지켜지는 비율은 낮습니다.

실운영 환경 한 곳에서 이 비율을 쟀습니다. 가이드를 불러오는 도구를 따로 두고 「먼저 불러오라」는 안내를 도구 설명에 적었을 때, 2026년 4월 27일부터 8월 5일까지 3,955턴 가운데 그 도구는 6번 불렸습니다. 같은 기간 가이드가 있는 보고용 문서를 만들고도 가이드를 읽지 않은 턴이 53번이었습니다. 가이드 목록 첫머리에 불러오는 법을 한 문단 더 적은 설정에서는, 같은 설치의 2026년 9월 7일 집계로 1만 4,773턴 가운데 76번이었습니다. 턴 수 대비 0.5%입니다.

같은 기간 도구를 켜는 도구는 1,255번 불렸습니다. 두 도구 모두 필요할 때 부르는 구조인데 결과가 이만큼 갈린 이유는 하나입니다. 도구를 켜지 않으면 모델은 아무 일도 할 수 없지만, 가이드를 읽지 않아도 문서는 만들어지고 답은 나갑니다. 건너뛰어도 결과가 나오는 단계는 문장을 더 다듬어도 건너뜁니다. 양식 복사도 같은 모양입니다. 복사를 빼먹은 편집이 실패하는 것은 그 뒤의 일이고, 원본 경로로 편집하면 실패조차 하지 않습니다.

가이드는 도구를 켤 때 함께 실린다

OwlAI는 문서·파일 도구 같은 도구 상당수를 처음부터 모델에게 보여 주지 않고, 모델이 이름을 골라 켜게 합니다(「도구 185개 정의는 9만 9천 토큰, 이름만 싣고 고른 도구만 펼친다」). 가이드는 이 켜는 단계에 붙였습니다. 도구를 켜는 도구는 방금 켠 도구에 연결된 작업 가이드의 본문을 결과에 함께 실어 보냅니다. 워드 편집 도구를 켜면 워드 편집 가이드가 같은 결과로 도착합니다. 모델이 가이드를 고를 차례가 없습니다.

가이드에는 그 형식에서 파일이 깨지는 자리와 피하는 법이 적혀 있습니다. 예를 들어 파워포인트 양식(.potx)을 .pptx로 복사해 편집할 때는 파일 안의 문서 종류 표시도 바꿔야 합니다. 바꾸지 않으면 파워포인트가 사본을 계속 양식으로 엽니다. 모델이 이런 규칙을 모른 채 문서를 만들지 않게 하는 것이 가이드를 싣는 이유입니다.

가이드는 도구를 켤 때마다 다시 실립니다. 대화가 길어져 압축되면 예전 결과가 지워지는데, 「이미 보냈다」고 건너뛰면 지워진 뒤로는 가이드가 다시 실리지 않기 때문입니다.

양식 복사는 편집 도구가 template 인자로 한다

워드·파워포인트·엑셀·한글(hwpx) 편집 도구는 선택 인자 template을 받습니다. 이 인자에 양식 경로를 주면 도구가 양식을 산출 경로 path로 복사하고, 모델이 쓴 편집 코드는 그 사본에 적용됩니다. 모델이 다루는 편집 대상은 사본이고, 양식 파일은 복사의 출발점으로만 쓰입니다. 양식 채우기는 편집 도구를 한 번 부르는 일이 됩니다.

양식 채우기: 복사를 모델이 따로 부를 때와 편집 도구가 복사할 때
그림 1. 양식 채우기: 복사를 모델이 따로 부를 때와 편집 도구가 복사할 때

template 유무와 path에 파일이 있는지에 따라 결과는 네 가지로 정해져 있습니다.

template path의 파일 결과
없음 있음 그 파일을 제자리에서 편집
없음 없음 대상 없음으로 거절
있음 없음 양식을 복사해 채움
있음 있음 덮어쓰기로 거절

마지막 줄을 거절하는 이유는 그 자리에 이 대화가 이미 사용자에게 건넨 문서가 있을 수 있어서입니다. 양식에서 다시 시작하려는 것인지, 방금 채운 문서를 이어 고치려는 것인지는 모델이 밝혀야 합니다. 도구가 한쪽을 고르면 다른 쪽 문서가 아무 신호 없이 사라집니다.

인자를 더하지 않는 길도 있었습니다. 「없는 경로를 편집하면 양식을 읽어 새 파일을 만든다」는 규칙입니다. 스키마에 인자가 하나 줄어드는 장점이 있습니다. 하지만 이 규칙에서는 같은 호출이 파일이 있으면 편집이고 없으면 생성이 됩니다. 호출만 봐서는 어느 쪽인지 알 수 없어서 이 규칙은 두지 않았습니다.

다음 경우는 편집 코드를 실행하기 전에 거절합니다. 실행한 뒤에 거절하면 모델 호출 한 번이 헛돌고, 사용자 작업 폴더에 반쯤 만든 파일이 남습니다.

  • 양식 경로에 파일이 없을 때.
  • 확장자가 그 도구의 형식과 다를 때. 형식마다 자기 확장자와 양식 확장자만 받습니다(.docx·.dotx, .pptx·.potx, .xlsx·.xltx, 한글은 .hwpx).
  • 매크로가 든 변종일 때. 산출 확장자가 매크로 없는 형식이라, 받으면 매크로가 사라진 파일이 나갑니다.
  • 새 문서를 만드는 생성 도구에 template을 줬을 때. 생성 도구의 스키마에는 이 인자가 없습니다. 양식을 준 요청에 백지 문서가 나가지 않게 하려는 것입니다.

양식을 읽는 일은 모델에게 남겼습니다. 양식 구조를 모르고 채우면 「고객사명」 같은 라벨 칸을 값으로 덮어씁니다. 그래서 편집 도구 설명은 같은 형식의 읽기 도구로 양식을 먼저 보라고 안내합니다. 어느 칸에 무엇을 넣을지는 문맥을 읽어야 하는 판단이고, 복사는 정답이 하나뿐인 동작입니다.

플레이북에서는 실행부가 모델보다 먼저 복사한다

플레이북은 반복 업무를 단계로 저장해 사람 없이 실행하는 절차입니다. 플레이북의 문서 단계는 양식 경로와 산출 경로를 설정으로 이미 알고 있습니다. 그래서 플레이북 실행부가 모델을 부르기 전에 양식을 산출 경로로 복사하고, 모델에게는 그 형식의 편집 도구와 읽기 도구만 줍니다.

채팅처럼 template 인자를 쓰지 않은 이유는 모델이 쥐는 경로의 수입니다. 실행부가 미리 복사하면 읽기 도구와 편집 도구가 같은 경로 하나를 가리킵니다. 인자로 넘기면 읽을 경로(양식)와 쓸 경로(산출물)가 갈립니다. 사람도 화면 확인도 없는 실행에서 모델에게 경로를 하나 더 쥐게 할 이유가 없습니다. 방법은 다르지만 채팅과 플레이북 모두 복사는 코드가 합니다.

칸 몇 개를 채우는 일은 셀 목록 인자로 받는다

엑셀 양식을 채우는 요청은 대부분 「이 칸에 이 값」입니다. 편집 도구가 코드만 받으면 모델은 칸 몇 개를 채우려고 호출마다 zip·XML 처리 스크립트를 새로 씁니다. 2026년 10월 1일 실운영 환경에서 견적 양식 하나를 채운 호출은 161초 걸렸고, 출력이 2만 2천 토큰이었습니다.

그래서 엑셀 편집 도구는 코드 대신 셀 목록을 받습니다. 항목마다 시트, 셀 주소, 값을 주고, 날짜는 형식을 표시하면 엑셀 날짜로 바꿔 씁니다. template과 함께 쓰면 양식 복사와 값 채우기가 스크립트 없이 호출 한 번에 끝납니다. 다음 칸은 실행하기 전에 거절합니다.

  • 수식이 든 칸. 그 수식이 읽는 입력 칸을 채우라고 돌려줍니다.
  • 병합 범위에서 왼쪽 위가 아닌 칸.
  • 표의 머리글 칸.
  • 드롭다운 목록 밖의 값. 거절 사유에 허용 값을 실어 돌려줍니다.

시트가 아닌 부분은 바이트 단위로 그대로 둡니다. 수식의 저장된 결과는 비워서, 파일을 열 때 엑셀이 다시 계산하게 합니다.

실패한 뒤 다음에 할 일도 도구가 정해 준다

실패 다음에 할 일이 매번 같다면 그것도 도구가 결과에 적어 돌려줍니다.

template으로 채우다 편집 코드가 실패하면 도구는 사본을 양식 상태로 되돌리고 지우지는 않습니다. 이때 같은 인자로 다시 부르면 「이미 파일이 있다」로 거절됩니다. 그래서 오류 문구가 「template 없이 같은 path로 다시 불러라」를 정확히 지목합니다. 사본을 지워 재시도 인자를 첫 호출과 같게 만드는 방법도 있었지만, 그러면 이미 만든 사본을 버리게 됩니다.

차트 위젯 도구가 한 턴 안에서 연달아 두 번 검증에 실패하면 서버는 결과의 지시를 「다시 시도하라」에서 「표로 보여 주라」로 바꾸고, 모델이 넘겼던 행과 열을 그대로 돌려줍니다. 모델은 데이터를 다시 지어낼 필요가 없고, 사용자는 실패 메시지 대신 표를 봅니다.

경우마다 다른 판단은 기본값 없는 인자로 묻는다

반대로 정답이 경우마다 다른 판단은 모델이 합니다. 문서를 만드는 도구 아홉 개와 파일 복사 도구는 attach 인자를 받습니다. 이 파일을 사용자에게 다운로드 카드로 건넬지, 모델이 다시 읽을 중간 파일로 둘지를 정하는 인자입니다. 사용자의 요청을 읽은 모델만 이 답을 압니다.

이 인자에는 기본값을 두지 않고 필수로 받습니다. 기본값이 있으면 그 값이 판단을 대신하고, 어느 쪽으로 정해도 한쪽의 실패가 아무 신호 없이 묻힙니다. 기본값이 「건넨다」면 디버그용 파일까지 다운로드 카드로 쌓이고, 「건네지 않는다」면 사용자가 요청한 파일이 조용히 사라집니다.

모델이 이 판단을 할 수 있다는 근거도 실측입니다. 실운영 환경에서 파일 복사 도구가 attach를 쓴 77건을 대화 내용과 대조하니 어긋난 것은 1건이었습니다. 양식을 사본으로 뜬 47건은 모두 건네지 않았고, 완성한 산출물을 복제한 30건 가운데 29건은 건넸습니다. 별도 도구를 먼저 부르는 일은 0.5%였는데, 지금 부르는 호출의 인자 하나를 고르는 일은 77건 중 76건이 맞았습니다. 그래서 모델에게 판단을 맡길 때는 별도 호출이 아니라 그 호출의 필수 인자로 묻습니다.

template을 넘길지도 모델이 고릅니다. 양식이 있어도 백지에서 새로 그려 달라는 요청이 있어서입니다.

설계에서 고른 것

도구 안으로 넣은 단계마다 스키마와 결과가 커집니다. 인자마다 뜻과 거절 조건을 설명에 적어야 하고, 그 설명은 매 호출의 토큰입니다. 가이드 본문은 도구를 켤 때마다 다시 실려, 같은 가이드가 대화에 두 번 들어갈 수 있습니다. 그래서 도구 안으로 넣는 단계는 정답이 매번 같고, 빠졌을 때의 피해가 실측으로 드러난 것에 한정했습니다. 양식 원본이 바뀌는 사고, 가이드 없이 만든 문서, 칸 몇 개에 161초가 그런 예입니다.

template은 형식마다 자기 확장자와 양식 확장자만 받습니다. 매크로가 든 문서는 받지 않으므로, 그런 양식을 채울 때는 모델이 복사 도구로 직접 사본을 만든 뒤 template 없이 편집합니다. 복사를 모델이 하는 경로가 이 경우에만 남습니다. 매크로가 사라진 파일이 아무 신호 없이 나가는 것보다 이쪽을 골랐습니다.

실패한 편집의 사본을 남겨 두기 때문에 재시도 인자는 첫 호출과 달라집니다. 그 차이는 오류 문구가 짚어 주고, 모델은 이미 만든 사본에 이어서 편집합니다.

attach를 필수로 둔 대가로 모델은 호출마다 인자를 하나 더 채웁니다. 대신 판단은 언제나 모델이 합니다.

양식을 채우거나 형식별 규칙을 지켜야 하는 문서 도구가 있다면, 프롬프트에 적은 순서 가운데 「건너뛰어도 결과가 나오는 단계」를 먼저 찾아볼 만합니다. 그 단계의 정답이 매번 같다면 문장을 다듬기보다 그 단계를 도구 안으로 옮기고, 남는 판단은 기본값 없는 인자로 묻는 편이 낫습니다.

어떤 문제를 해결하나요?

도구와 실행의 다른 글