"SLA 뜻을 알려주고, 지난주 진행 보고서도 써줘." 한 문장에 두 부탁이 들어왔다. 용어 설명과 보고서 작성은 모두 할 수 있는 AI 비서라도, 어느 일을 먼저 할지와 어떤 자료를 읽을지는 따로 결정해야 한다. 이를 건너뛰면 용어집 문장을 보고서 양식처럼 쓰거나, 빠진 보고서 내용을 용어 정의에서 끌어오는 엉뚱한 답이 나올 수 있다.
AI 업무 비서는 왜 요청을 먼저 분류해야 할까?
업무 비서가 맡는 일을 업무 할당, 보고서 작성, 용어 설명 세 가지로 한정해 보자. 각 작업에는 필요한 자료가 다르다. 담당자 추천은 검증된 조직 정보, 보고서 초안은 선택된 양식, 용어 설명은 용어집을 본다. 작업을 고르기 전에 모든 자료를 한꺼번에 넣는 것은 자료를 많이 준다는 장점보다, 엉뚱한 자료를 근거처럼 섞는 위험이 크다.
요청이 "SLA가 뭐야?"라면 용어 설명으로 시작할 수 있다. 하지만 첫 문장처럼 용어와 보고서를 동시에 부탁하면 한 작업으로 단정하지 말자. 둘 다 가능하다고 곧장 두 문서를 이어 붙이는 것보다, "용어부터 설명할까요, 보고서부터 만들까요?"가 더 정확한 첫 답일 때가 있다. 두 작업의 입력과 검수 기준이 다르기 때문이다.
선택한 모드에 맞는 지식베이스만 어떻게 열까?
모델이 제안한 mode는 후보로 받고, 애플리케이션 코드가 허용된 작업과 자료를 다시 검사한다. 아래 도식은 한 작업이면 해당 자료로 보내고, 두 작업이면 자료를 열기 전에 질문으로 돌려보내는 경계다.
도식의 분기점은 모델의 추측을 바로 실행하지 않고, 허용된 모드인지와 요청이 하나로 좁혀졌는지를 코드에서 다시 확인하는 자리다. 이 경계를 작은 라우터로 옮겨 보자.
SOURCES = {
"term": ("terms",),
"report": ("report_form",),
"assign": ("org_chart",),
}
REPORT_TYPES = {"instruction", "progress", "result"}
def plan(candidate, report_type=None):
modes = candidate.get("modes", [])
if len(modes) != 1 or modes[0] not in SOURCES:
return {"status": "clarify", "question": "먼저 처리할 작업을 하나 골라 주세요."}
mode = modes[0]
if mode == "report" and report_type not in REPORT_TYPES:
return {"status": "clarify", "question": "어떤 종류의 보고서인가요?"}
return {"status": "ready", "mode": mode, "sources": SOURCES[mode]}SOURCES는 자료 내용을 담은 변수가 아니라 이 작업에서 접근을 허용할 자료의 이름이다. 실제 문서 조회는 ready가 나온 뒤에만 한다. 특히 사용자·조직별 읽기 권한은 이 목록만으로 해결되지 않으므로, 자료를 여는 코드에서 따로 검사해야 한다.
두 작업이 한 문장에 들어오면 무엇을 확인할까?
분류기가 같은 문장에서 term과 report를 모두 제안했다고 가정하자. plan()은 하나를 임의로 고르지 않는다. 보고서만 요청했더라도 양식 종류가 빠져 있으면 마찬가지로 되묻는다.
print(plan({"modes": ["term"]}))
print(plan({"modes": ["report"]}, report_type="progress"))
print(plan({"modes": ["term", "report"]}, report_type="progress"))
print(plan({"modes": ["report"]})){'status': 'ready', 'mode': 'term', 'sources': ('terms',)}
{'status': 'ready', 'mode': 'report', 'sources': ('report_form',)}
{'status': 'clarify', 'question': '먼저 처리할 작업을 하나 골라 주세요.'}
{'status': 'clarify', 'question': '어떤 종류의 보고서인가요?'}이 코드는 한국어 문장을 분류하는 모델이 아니다. 분류 결과가 이미 들어왔을 때 허용된 작업만 실행할지 검산하는 예제다. 실제 분류기의 정확도는 따로 평가해야 한다. 그리고 term 모드에서 용어집에 없는 말을 물었다면, 그 다음 단계에서는 없는 용어라고 답해야지 보고서 양식에서 비슷한 문장을 찾아 정의를 지어내면 안 된다.
운영에서는 어떤 경계를 더 확인해야 할까?
모드와 자료를 묶는 것만으로 답의 사실성이 보장되지는 않는다. 조회한 자료가 실제 답을 뒷받침하는지, 사용자에게 그 자료를 볼 권한이 있는지, 자료의 문장이 시스템 지시처럼 실행되지 않는지를 따로 점검한다. 특히 분류기가 확신하지 못하거나 여러 모드를 제안할 때는 clarify로 보내는 기준을 테스트 데이터로 유지하자. 조용히 첫 번째 모드를 고르는 구현은 잘못된 답을 그럴듯하게 만들기 쉽다.
핵심 요약
여러 일을 하는 AI 비서는 요청 분류 → 한 모드 확정 → 허용 자료 선택 → 답변 검증 순서로 움직여야 한다. 두 일이 섞였거나 보고서 종류가 빠졌다면 먼저 묻는다. 프롬프트에는 역할을 설명하고, 허용 모드·자료 범위·읽기 권한은 애플리케이션에서도 검사하자.

