8000 daiso-mcp/experiments/web-read-lab at main · hmmhmmhm/daiso-mcp · GitHub
[go: up one dir, main page]

Skip to content

Latest commit

 

History

History

web-read-lab

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

README.md

Web Read Lab

독립 Worker에서 웹 읽기 도구의 실패 조건을 비교합니다. 모든 상품과 수량은 가상 데이터이며 운영 API를 호출하지 않습니다. 기존 MCP 도구와 인증·중계·캐시 바인딩을 공유하지 않습니다.

실험 목록: https://daiso-web-read-lab.hmmhmmhm.workers.dev/run/round2

도메인 비교용 별칭: https://web-read-lab.aka.page/run/domain-test

두 주소는 동일한 Worker와 관측 로그를 사용합니다. 호스트별로 다른 실행번호를 사용해 요청을 구분하세요. 별칭의 배포 완료와 웹 읽기 성공은 별도로 검증합니다.

링크 입력 실험

목록의 링크로 검색어 만들기에서 한글 초성·중성·완성 글자 또는 영문·숫자 링크를 선택하고 입력 완료로 결과를 확인합니다. 고정 검색어 예제 없이 임의의 한글·영문·숫자·공백·하이픈 조합을32자까지 만들 수 있는지 확인합니다. 외부 상품 조회는 하지 않으며 결과는 입력한 문자열을 되돌려주는 가상 데이터입니다.

직접 URL을 조립하지 말고 각 응답의 실제 링크 ID로 이동하세요. 새 실험번호에서 시작하고 최종 requestId를 관측 기록과 비교합니다. 입력은 URL과 응답에 포함되므로 개인정보를 넣지 마세요. 애플리케이션 관측 로그에는 입력 원문을 저장하지 않습니다. 문자 선택 페이지는 no-store 및 noindex를 사용하지만 웹 도구의 사본 재사용을 막는다고 보장하지 않습니다.

2026-10-26 실험 결과

배포: .github/workflows/deploy-web-read-lab.yml. Worker 이름은 daiso-web-read-lab이며 배포 결과의 workers.dev URL을 사용합니다.

실행

입력 완료 화면의 실제 조회 링크는 별도 운영 서비스로 이동합니다. 실험 Worker 자체는 운영 API를 호출하지 않습니다. 사용자가 선택한 상품 검색은 최대3개 결과이며, 상품 검색 성공은 매장 재고 확인과 구분합니다. 이 경로의 실제 웹 도구 동작 여부도 서버 관측과 별도로 기록합니다.

  1. 실험 목록을 연 뒤 새 실험 시작 링크를 한 번 따라 다음 실행으로 이동합니다. 웹 읽기에서는 URL을 다시 조립하지 말고 실제 링크 ID로 click합니다. 직접 open 실패도 별도 조건으로 기록합니다. 새 링크는 문서를 새로 생성할 때 고유합니다. 웹 읽기가 캐시된 목록을 재사용하면 링크도 재사용되므로 독립 실행을 보장하지 않습니다. 이전에 본 실행번호이면 재사용하지 말고, 새로 열린 목록의 다음 링크를 한 번 따라가세요. 관측 기록에서 실행번호와 실제 신규 도착 시각을 대조하고 섞인 실행은 독립 표본에서 제외합니다.

  2. 같은 번호 아래 링크를 한 번씩 열어 응답 여부, requestId, generatedAt, 웹 도구의 Crawled 정보를 기록합니다.

  3. /observations/{번호}를 일반 HTTPS로 읽고 도착 기록과 비교합니다. 관측 조회 자체는 기록하지 않습니다.

  4. 독립된 두 번째 번호로 순서를 바꿔 재현합니다. 직접 open과 링크 click은 별도로 기록합니다.

경로 변경 조건
html / text / json 같은 가상 상품 데이터의 Content-Type 및 표현
wallet / 지갑 / query?q=wallet / query?q=지갑 ASCII·한글 경로와 쿼리
redirect 같은 실행의 html로302이동
delay1 / delay2 / delay3 / delay5 / delay15 응답 생성 전 고정1/2/3/5/15초 대기
large64 / large256 전체 UTF-8 본문64/256KiB, 앞 데이터와 뒤 END-MARKER 비교
cache public,max-age=300 헤더. CDN 캐시 저장을 강제하지 않음
noindex X-Robots-Tag:noindex,follow
javascript 브라우저 JavaScript만 상품 데이터를 화면에 표시

기본은 no-store이며 모든 응답에 서버 생성 requestId가 있습니다. 표시된 문서가 과거인지 판정할 때 서버 기록과 이 번호를 비교합니다. 각 경로 이름도 데이터에 포함되므로 바이트 단위 동일 비교는 아닙니다.

관측의 한계

received는 Worker 도착, prepared는 응답 생성 완료입니다. prepared가 있어도 웹 읽기 클라이언트가 수신·파싱에 성공했다고 볼 수 없습니다. 기록이 없으면 Worker 도달을 확인하지 못한 것이며 Cloudflare 앞단 차단과 도구 내부 거절을 이것만으로 구별하지는 못합니다.

User-Agent는 chatgpt-user/oai-searchbot/browser/other로만 분류하며 인증된 신원이나 클라이언트 원본을 증명하지 않습니다. IP·쿠키·토큰·전체 UA·자유 쿼리는 저장하지 않습니다. 공개 관측 기록은 최대128개/24시간이며 많은 요청이 들어오면 앞 기록이 사라질 수 있습니다. 관측 URL에 개인정보를 넣지 마세요.

새 링크 하나가 실패했다는 사실만으로 JSON·한글·크기 등이 원인이라고 결론 내리지 않습니다. 기준 HTML도 실패하면 그 실행에서는 내용별 한계를 비교할 수 없습니다. 검색 사본 갱신은 보장하지 않습니다.

최초 지연·결과 저장·접수 비교

새 실행번호에서 delay5(매번5초), cold5(처음5초 뒤 결과 저장), start5(즉시 pending 접수), result5(저장 상태 읽기)를 비교합니다. 최초 cold5 연결이 끊겨도 같은 실행의 Durable Object 알람이 고정 가상 결과를 완성합니다. 완료 결과의 resultId와 completedAt은24시간 동안 유지하고 이후 정리합니다. HTML은 no-store이며 서버의 저장 결과와 웹 도구 사본 재사용은 구분합니다. pending/not-found에는 수량이 없습니다.

접수·결과 응답에는 같은 작업의 새로운 실제 결과 확인 링크와 완성 resultUrl을 제공합니다. 이전 pending 주소를 반복하지 말고 새 링크를 최대3번 선택합니다. 반복 후에도 pending이면 미확인으로 보고합니다. 실제 ChatGPT에서 원본 도착·requestId·jobId·resultId를 대조하고, 일반 HTTP 성공만으로 웹 도구 성공을 판정하지 않습니다. 관측 조회는 예열하지 않지만 결과 URL을 미리 여는 것은 표본을 오염시키므로 하지 않습니다.

0