옛 규정과 미승인 초안이 함께 검색된다면 AI가 말한 식비 한도를 그대로 써도 될까요? 네 문서와 여섯 질문으로 정답·버전·답변 보류를 구별하는 평가표를 만들어요.
첨부 링크는 이 글의 예제 ZIP으로 연결돼요. 압축을 푼 뒤 링크에 표시된 파일을 열면 입력·코드·완성 자료를 함께 사용할 수 있어요.
문서는 전부 가상이에요. 집필 AI 에이전트가 문서를 읽어 응답 파일 (ZIP: agent-responses.json)을 작성하고 Python으로 근거를 대조했어요. 작성자가 기대 답을 아는 예제이며, 상용 검색 제품이나 별도 검색 API의 정확도 실험은 아니에요.

비슷한 문장보다 먼저 효력을 구분해요
문서 묶음 (ZIP: documents.json)의 첫 세 문서에는 ‘국내 출장 식비’라는 표현이 있어요. 비슷한 문장만 고르면 날짜와 승인 여부를 놓쳐요.
| 문서 ID | 상태와 적용 기간 | 담긴 내용 |
|---|---|---|
| D1, 버전 1 | 2026년 1~8월 적용, 현재는 대체됨 | 국내 식비 1인 1일 50,000원, 영수증 필요 |
| D2, 버전 2 | 2026년 9월 1일부터 현행 | 국내 식비 80,000원, 영수증·팀장 승인 필요 |
| D3, 제안 | 미승인 초안 | 100,000원으로 올리는 안 |
| D4, 버전 1 | 현행 장비 신청 문서 | 키보드 신청, 고장 여부 기재 |
현재 규정만 허용하면 과거 질문에 답하지 못하고, 모든 문서를 허용하면 초안을 사실로 말할 수 있어요. 여기서는 질문 기준일에 유효한 승인 문서를 사용해요. Q1·Q4·Q5는 10월 1일, Q2는 8월 20일로 날짜를 고정했어요. 날짜가 빠진 새 질문은 먼저 확인해요.

정답이 없는 질문에도 기대 행동을 적어요
질문 파일 (ZIP: questions.json)에는 현재·과거 사실, 없는 사실, 세부 조건, 잘못된 전제를 넣었어요. 기대 근거를 먼저 정하면 실패 원인을 분류하기 좋아요.
| 질문 | 이번 응답의 핵심 | 근거·판정 지점 |
|---|---|---|
| 10월 1일 국내 식비 한도는? | 80,000원 | D2 v2, 현행 문서 |
| 8월 20일 당시 한도는? | 50,000원 | D1 v1, 과거 시점 |
| 해외 출장 한도는? | 자료가 없어 보류 | 국내 기준을 확장하지 않음 |
| 10월 정산에 필요한 것은? | 영수증과 팀장 승인 | D2 v2, 조건 누락 여부 |
| 이미 10만 원으로 바뀌었나요? | 승인된 한도는 8만 원 | D2 v2, 잘못된 전제 교정 |
| 야근 택시비 한도는? | 자료가 없어 보류 | 비슷한 비용 규정으로 추정하지 않음 |
보류할 때는 ‘해외 출장 규정이 제공되지 않았어요’처럼 빠진 자료를 지정해요. 반대로 답할 수 있는 질문까지 모두 보류하면 일을 끝낼 수 없어요. 올바른 보류와, 근거가 있는 질문에 실제로 답했는지를 함께 봐요. 이는 사용 맥락에 맞춘 평가를 강조하는 NIST 생성 AI 프로파일을 이 작업에 적용한 판단이에요. 이 문항들은 공식 인증 시험이 아니에요.
assets에서 python3 evaluate.py를 실행하면 6문항이 통과 (ZIP: evaluation.json)해요. 문서 ID·버전·근거 문장 포함 여부와, 없는 질문에 허위 인용을 붙이지 않았는지를 검사해요. 다만 ‘8만 원을 초과해도 된다’처럼 의미가 뒤집힌 문장을 문자열 검사만으로 모두 잡을 수는 없어요. 새 질문이나 실제 검색의 성능도 확인하지 않았어요.
승인된 새 문서가 추가돼도 바로 최신 버전을 고르지 않아요
추가 합성 조건 (ZIP: policy-condition-inputs.json)에서는 D5를 ‘11월부터 9만 원인 승인 문서’, D6을 ‘10월부터 7만 원인 승인 문서’로 만들었어요. D5·D6은 서로 다른 시험에 넣어요. D5 시험에서 D2는 10월 31일에 끝나지만, D6 시험에서는 D2와 D6의 효력이 겹치고 어느 문서가 우선인지 없어요.
| 바뀐 조건 | 10월 1일 질문의 결과 | 다음 조치 |
|---|---|---|
| 11월 시행 D5 추가 | D2, 80,000원 | 시행 전인 D5 제외 |
| 승인 문서 D2·D6 충돌 | 금액 보류 | 두 문서 ID와 기간을 담당자에게 확인 |
| 현행 D2 누락 | 금액 보류 | 9월 이후 승인 규정 확보 |
| 질문 날짜 누락 | 날짜 확인 | 출장일인지 정산일인지도 확인 |
‘가장 큰 버전 번호’만 고르는 대안은 첫 조건에서 90,000원을 내요. 모든 상황을 보류하는 대안은 여전히 답할 수 있는 첫 조건을 놓쳐요. 여기서는 주제·승인·질문 날짜로 거른 뒤 후보가 정확히 하나일 때만 금액을 사용해요. 0개면 자료 부족, 2개 이상이면 문서 충돌로 구분해요. 실제 조직에 우선순위 규칙이 있다면 그 근거를 추가한 뒤 다시 판단해야 해요.
python3 check_policy_conditions.py의 실행 결과 (ZIP: policy-condition-results.json)는 기존 현재·과거 2건과 추가 4건, 총 6조건을 확인했어요. 날짜 양끝을 포함하고 종료일이 없으면 계속 유효하다는 이 예제의 규칙도 명시했어요. 코드는 작성자가 등록한 메타데이터를 비교해요. 승인 사실을 인증하거나 본문에서 금액·효력을 자동 해석한 결과는 아니에요.


실제 적용에서는 검색 후보와 최종 답을 따로 남겨요. 올바른 문서가 후보에 없으면 검색 범위·권한·필터를 확인하고, 후보에 있는데 다른 답을 썼다면 근거 선택을 확인해요. 승인 문서끼리 충돌한다면 답변 표현을 고치기 전에 문서 담당자가 효력을 정리해야 해요. 다음 평가에는 별도 사람이 만든 새 질문과 기준일·문서 목록·도구 설정을 기록하세요.
예제 파일을 한 번에 받아 다시 확인해요
이 글의 입력·코드·완성 자료 ZIP을 새 폴더에 풀면 R16/README.txt, replay.py, assets 폴더가 함께 생겨요. 개별 코드 파일만 저장하면 보조 모듈이나 입력이 빠질 수 있으므로 처음에는 이 묶음을 사용하세요. R16 폴더에서 다음 명령을 실행하면 본문에 사용한 검사를 순서대로 수행해요.
python3 replay.py
확인할 결과는 현재/과거/없는 질문과 승인·기간 충돌 조건별 답변/보류예요. 명령이 성공해도 이 값과 본문의 적용 범위를 함께 대조하세요. 실행 안내 (ZIP: README.txt)에 필요한 파일과 개별 명령을 적었어요. 실행 코드는 evaluate.py (ZIP: evaluate.py) · check_policy_conditions.py (ZIP: check_policy_conditions.py)에서 직접 볼 수 있어요. Python3.12의 표준 라이브러리를 사용하며, 명령이 실패하면 ZIP의 폴더 구조와 오류에 나온 파일부터 확인해요. 실제 앱 실행에 필요한 프로그램은 원래 설명을 따르세요.
작성·확인: 2026년 10월 13일 Codex가 자료·초안을 작성하고 원문 확인과 자동 검사를 수행했어요. 별도 사람의 사용성 검증은 하지 않았어요.
근거가 바뀐 뒤 설명을 갱신할 때는 문서 변경과 지식 관리로 이어서 확인할 수 있어요.
설명 삽화 2장은 GPT로 생성한 개념 설명이에요. 실제 예제의 작업 화면과 실행 결과는 기존 그림·첨부 자료에서 따로 확인할 수 있어요.