AI 입찰서 작성기가 거짓말을 거부하게 만든 1년의 실패 기록
Making an AI bid writer refuse to lie
TL;DR Highlight
구조적 검증을 붙였더니 입찰 AI가 근거 없는 요건 11개를 스스로 밝혔다
Who Should Read
문서 분석·초안 생성 LLM 파이프라인이 그럴듯한 거짓을 쓰고 '완료'로 보고해서 고민인 백엔드 개발자
Core Mechanics
- 모델은 그럴듯한 문장을 쓴다
- 입찰서에서 'our certifications include' 뒤에는 보유 여부와 상관없이 인증 목록이 이어지기 쉽다.
- 평가자가 검증하는 주장에서 그럴듯함과 진실이 갈라진다.
- 없는 파트너사를 지어냈다
- NHS 입찰 테스트 초안에서 요건 42개를 존재하지 않는 컨소시엄 파트너에게 떠넘겼다.
- 회사명은 [PARTNER_NAME]으로 문서 맨 아래에서야 밝혀졌다.
- 자체 검증기는 키워드 매칭이라 42개 중 대부분을 충족으로 판정했다.
- 파트너 문제는 프롬프트가 아니라 구조로 고쳤다
- 초안 작성 전에 입찰자 실제 프로필과 요건을 맞춰 보는 capability-fit check를 먼저 돌린다.
- 증명 못 하는 요건은 눈에 보이는 파트너 슬롯으로 보내고 개수를 초안 맨 위 배너에 띄운다.
- 입찰 권고가 '입찰 비추천'이면 초안 작성 자체를 거부한다.
- 조용한 커버리지 붕괴가 가장 무섭다
- 같은 99쪽 NHS 문서에서 추출 요건이 366개에서 184개로 줄었는데 매번 'completed'로 보고됐다.
- 청크 하나가 빈 결과를 반환했고 코드가 빈 집합을 그대로 합쳤다.
- 고친 방법은 빈 청크 금지, 페이지 범위 기준 커버리지 측정, 누락 항목 재탐색 패스다.
Community Reactions
How to Apply
- 빈 결과를 에러로 바꾸기
- 오늘 청크·배치 단위 LLM 호출 결과가 비었을 때 예외를 던지도록 고친다.
- 총 추출 개수를 문서 페이지 수와 함께 로그에 남기고 지난 실행과 비교한다.
- 인용문 검증 전에 텍스트 정규화하기
- 원문과 모델 인용문 모두 공백·줄바꿈·하이픈 분리를 정리한 뒤 비교한다.
- 검증기 오탐은 샘플 20~30개를 손으로 확인해 측정한다.
- 모르는 값은 슬롯으로 남기기
- 프롬프트에 '입력 프로필에 없는 이름·인증·수치는 [SLOT_이름]으로 남겨라'를 넣는다.
- 출력 상단에 슬롯 개수를 집계해 보여준다.
- 생성 전에 게이트 걸기
- 초안 작성 전에 요건별로 근거 보유 여부를 판정하는 단계를 둔다.
- 근거가 없으면 생성하지 말고 사용자에게 공백 목록을 먼저 보여준다.
Try It
# Claude 또는 ChatGPT에 그대로 붙여넣기 (원문 방법의 간이 버전)
너는 입찰서 초안 작성자다. 아래 [회사 프로필]에 명시된 사실만 주장으로 쓸 수 있다.
규칙:
1. 각 요건마다 프로필에서 근거 문장을 그대로 인용해 '근거'로 적는다. 없으면 '근거 없음'이라고 쓴다.
2. 근거 없음 요건은 절대 답변을 쓰지 말고 [PARTNER_OR_EVIDENCE_NEEDED] 슬롯으로 남긴다.
3. 프로필에 없는 회사명·인증·금액·사람 이름을 만들지 않는다.
4. 출력 맨 위에 'Read this first: N개 요건은 근거가 없습니다'와 해당 요건 목록을 쓴다.
[회사 프로필]
{{회사 프로필}}
[요건 목록]
{{요건 목록}}
이어서 해 볼 것: 결과를 다시 붙여넣고 '근거로 인용한 문장이 프로필에 글자 그대로 있는지 하나씩 확인해 줘'라고 요청해 보자.Terminology
관련 논문
The Judge Can Debias Itself: LLM-as-a-Judge가 스스로 편향을 고치게 하는 법
심사 프롬프트에 편향 경고를 넣거나 스스로 비판시켰더니 21개 중 20개 조합에서 정확도가 올랐다
미국 노동시간의 90%는 AI 벤치마크가 제대로 다루지 못하는 일이다
벤치마크 29개를 직업 과제에 매핑했더니 노동시간 90%가 커버 밖
Postgres 19, AI 코드 리뷰가 버그를 너무 많이 찾아 출시 연기
LLM 코드 리뷰가 버그를 쏟아내 Postgres 19가 11월로 밀리고 기능 8~10개가 빠졌다
StarSkirmish Bench v0.2: LLM이 1시간 만에 짜는 StarCraft 봇 대결
LLM에게 1시간 동안 StarCraft 봇을 짜게 했더니 GPT-6 Astra가 1위
그럴듯한 설명 하나면 멀티모달 LLM 심사위원도 속는다 (JUPE 벤치마크)
정답은 그대로 두고 설명만 붙였더니 MLLM 심사위원의 오답 거절률이 12.7~13.8%p 떨어졌다
신경망은 이미 깔끔하다: polysemanticity의 원인 재해석
뉴런을 직접 들여다봤더니 대부분 한 가지 역할이 있었다는 주장
Linus Torvalds의 첫 LLM 보조 패치 시리즈
Linus가 LLM으로 folio 조회 패치 10개를 만들어 read() 벤치가 10배 빨라졌다