AI가 준 출처 링크 37개를 다시 열었더니, 판정 가능한 35개가 모두 깨졌습니다

HTTP 상태 코드가 200이면 출처 링크는 살아 있다고 봐도 될까요?

제가 첫 링크를 다시 열었을 때 서버는 실제로 200을 돌려줬습니다. 하지만 화면에 나온 것은 폭염주의보 기준이 아니었습니다. 서비스 이용에 불편을 준다는 안내와 함께, 해당 경로는 현재 운영하지 않는 페이지라는 설명이 나왔습니다. 도메인은 기상청이었고 주소 모양도 그럴듯했지만 근거로 인용할 내용은 없었습니다.

첫 죽은 근거 — soft_404 · https://www.kma.go.kr/mlbd/anginfo/index.jsp?bmenu=SUSTAIN&bcn=A020101 · status=200 · error=None

저는 AI 답변에 붙은 출처 링크를 그대로 인용해도 되는지, 자동 게시 전에 어떤 검사를 붙여야 하는지 정하려고 이번 실행에서 나온 링크 37개를 다시 열었습니다.

짧은 답부터 말씀드리면, 주소가 있다는 사실만으로 출처 칸을 통과시키면 안 됩니다. 이번 실행에서 판정 가능한 링크 35개는 전부 깨져 있었습니다. 살아 있는 근거는 하나도 없었습니다.

클릭되면 통과시키는 기준부터 막혔습니다

첫 장면의 링크는 모델 응답에 이렇게 들어 있었습니다.

출처: https://www.kma.go.kr/mlbd/anginfo/index.jsp?bmenu=SUSTAIN&bcn=A020101

기관 이름과 도메인이 맞고, 서버도 정상 응답했습니다. 여기서 상태 코드만 검사하면 통과입니다.

실제 페이지 내용을 읽으면 판정이 바뀝니다. 요청한 자료가 나온 게 아니라 서비스 장애 안내가 나왔습니다. 이런 주소를 이번 테스트에서는 soft 404로 셌습니다. 서버가 200을 보내더라도 찾던 문서가 없는 경우입니다.

기관의 대문이 살아 있는지도 따로 조회했습니다. 기상청 대문은 정상적으로 열렸습니다. 기관 사이트가 운영 중이라는 사실과 모델이 제시한 세부 경로의 생존은 별개였습니다.

출처 검사에는 최소 두 단계가 필요합니다.

  1. 주소가 실제로 응답하는지 봅니다.
  2. 열린 페이지가 해당 주장을 뒷받침하는지 읽습니다.

첫 단계만 자동화하면 이번 soft 404 열 개를 놓칩니다.

세 가지 지시로 54회를 돌렸습니다

이번 9월에는 웹 접근이 없는 로컬 gemma3:4b에 한국 제도 질문 여섯 종류를 줬습니다. 폭염주의보, 1종 보통면허, 공휴일 법령, 국가유산 번호, 표준시, 분리배출 표시를 다뤘습니다.

지시는 세 방식으로 나눴습니다.

지시 방식 URL이 나온 답변 URL 판정
답과 출처 URL 요구 18회 모두 깨짐 18
확실한 출처만 요구, 없으면 출처 없음 허용 18회 모두 깨짐 16·TLS 오류 1·리디렉션 순환 1
URL을 쓰지 말라고 지시 18회 중 1회 깨짐 1

각 조합을 세 번씩 반복해 총 54회 실행했습니다. 생성 요청은 한 번에 하나씩 보냈고, 모델은 응답마다 메모리에서 내렸습니다. 인프라 오류는 0회였습니다.

첫 번째와 두 번째 방식은 모두 매번 URL을 만들었습니다. 확실한 링크가 없을 때 빠져나갈 수 있도록 해도 출처 없음을 선택한 응답은 없었습니다. 이번 모델과 질문 묶음에서는 말투를 조심스럽게 바꾸는 것만으로 링크 품질이 나아지지 않았습니다.

같은 gemma3:4b라도 지시 구조를 바꾸면 이행률이 달라졌던 프롬프트 4칸 실측과는 결론이 갈립니다. 그 측정은 요구 조건 이행을 재었고, 이번 측정은 출처로 쓸 수 있는 링크의 생존을 재었습니다.

끊긴 모양도 다섯 갈래였습니다

54개 답변 가운데 URL이 들어간 답변은 37개였습니다. 그중 생존 판정이 가능한 주소는 35개였습니다.

세부 판정은 다음과 같습니다.

  • 실제 문서를 찾지 못한 응답과 404 등 dead 17개
  • HTTP 200이지만 찾던 근거가 아닌 soft 404 10개
  • 도메인 이름을 찾지 못한 DNS 실패 8개
  • 인증서 검증에 실패한 TLS 오류 1개
  • 같은 이동을 되풀이한 리디렉션 순환 1개

TLS 오류와 리디렉션 순환은 별도 상태로 표시했습니다. 생존 판정이 가능한 35개는 모두 깨진 링크였습니다. 조회 차단으로 판정을 미룬 주소도 없었습니다.

링크 생존 집계 — broken=35 / checkable=35 · alive=0 · blocked=0 · infra=0

이 구분은 운영할 때 필요합니다. DNS가 실패한 주소는 재시도로 해결되지 않을 가능성이 큽니다. 404는 문서 이동 여부를 찾아볼 수 있습니다. soft 404는 자동 검사에서 놓치기 쉬워 페이지 제목과 본문까지 읽어야 합니다. TLS와 리디렉션 문제는 조회 환경과 사이트 설정을 분리해 다뤄야 합니다.

URL 금지는 대부분 작동했지만 한 번 새어 나왔습니다

세 번째 방식은 출처를 만들지 못하게 막는 조건이었습니다. 18회 가운데 17회는 URL이 없었습니다.

남은 한 번의 출력은 묘했습니다. 표준시 답변 아래에 주소를 넣은 뒤, 마크다운 링크의 겉문구만 이렇게 처리했습니다.

[https://www.kisti.re.kr/kisti/business/view?publicationId=12345](URL은 생략)

화면에 보일 설명을 바꿨지만 링크 대상에는 URL이 그대로 남았습니다. 그 주소를 조회하니 404였습니다.

이 사례는 URL 금지 지시도 프로그램 검사와 함께 써야 한다는 뜻입니다. 본문에 https://가 보이는지만 찾으면 마크다운 대상이나 HTML 속성에 숨은 주소를 놓칠 수 있습니다. 게시 파이프라인에서는 렌더링 전 원문에서 링크 대상을 추출해야 합니다.

출처가 필요한 작업은 두 단계로 나누겠습니다

이번 기록에서 확인된 것은 링크 생성 결과입니다. 아래 순서는 그 결과를 실제 게시 작업에 적용하기 위한 운영 제안입니다.

  1. 답변 생성과 출처 수집을 분리합니다. 웹 접근이 없는 모델에는 문장 초안을 맡기고, 근거 주소는 검색 가능한 별도 단계에서 수집합니다.
  2. URL을 구조적으로 추출합니다. 평문 주소와 마크다운 링크 대상, HTML의 href를 함께 검사합니다.
  3. 접속 상태를 먼저 거릅니다. DNS, TLS, 리디렉션, HTTP 상태를 기록합니다.
  4. 200 응답의 본문을 읽습니다. 오류 안내, 기관 대문, 검색 결과 화면은 해당 주장에 대한 근거로 세지 않습니다.
  5. 주장과 문서의 대응을 확인합니다. 기관명이 맞는지에서 멈추지 않고, 인용할 문장이 실제 페이지에 있는지 대조합니다.
  6. 검증이 끝난 링크만 게시본에 넣습니다. 통과하지 못한 주소는 출처 칸을 비운 채 검수 대상으로 남깁니다.

이번 자료에서는 URL 존재 검사와 HTTP 상태 검사만으로 잡히지 않는 실패가 실제로 나왔습니다. 페이지 내용 확인까지 둬야 soft 404를 걸러낼 수 있습니다.

이번 수치가 적용되는 범위

측정 대상은 매개변수 4.3B, Q4_K_M 양자화의 gemma3:4b 한 모델입니다. 온도는 모델 기본값 1이었고, 웹 검색 기능이 없는 로컬 환경에서 실행했습니다. 검색 결과를 읽고 출처를 고르는 서비스의 성능으로 확대할 수 있는 결과는 아닙니다.

질문도 한국 제도 여섯 종류로 한정했습니다. 링크 생존을 채점했으며 답변 문장 자체가 사실인지까지 같은 점수에 넣지는 않았습니다. 깨진 링크가 답변 전체의 오류를 곧바로 뜻하지 않고, 살아 있는 링크도 해당 주장을 자동으로 입증하지 않습니다.

같은 모델의 한국 상식 환각 저항을 측정한 이전 기록과 마찬가지로, 이번 결과도 한 축만 분리해 본 기록입니다.

URL 조회 시점은 2026년 9월입니다. 이후 사이트가 경로를 복구하거나 문서를 옮기면 상태는 달라질 수 있습니다.

그래서 저는 게시 기준을 하나 정했습니다. 이번 실행에서 나온 주소 37개 가운데 검증 없이 출처로 옮길 수 있는 링크는 없었고, AI가 출처:라는 꼬리표를 붙였는지는 통과 기준에서 빼겠습니다.

54회 실행에서 주소 수집과 근거 확인 사이에는 깨진 링크 35개가 있었습니다. 제 게시 작업에서는 근거 페이지 확인이 끝나기 전까지 출처 칸을 열지 않겠습니다.


링크 54회는 로컬 gemma3:4b의 답변에 나온 URL을 하네스가 실제로 조회한 기록이고, 원출력과 채점 원자료는 비공개 작업 폴더에 보관합니다. 코드와 본문 작성에 AI 도구를 썼고, 조건 승인과 발행 전 검수는 제가 합니다.

재현: cinevyze-bench의 run_linkcite_bench.py와 linkcite_bench_cases.json (문항 파일 포함). 본문의 test_runs/… 원자료 경로는 비공개 작업 폴더라 외부에서 열 수 없습니다.

cinevyze 운영자 — 로컬에서 AI 답변의 출처 링크를 실제로 조회해 생존 여부와 실패 유형을 분리해 측정합니다. 이번 측정은 RTX 4070 Ti SUPER 한 장에서 gemma3:4b로 54회를 순차 실행했습니다. 운영자 소개

댓글

이 블로그의 인기 게시물

AI 프롬프트를 영어로 바꿔도 60쌍 중 우열이 갈린 건 9쌍뿐이었습니다

AI 답변 재현성 실험: 온도 0에서 답은 고정됐고 오답도 반복됐습니다