1P by GN⁺ | ★ favorite | 댓글 1개
  • AI 봇 차단이 서버에서 정상 동작하는데도 Perplexity가 차단된 글을 요약해, 공개 User Agent와 실제 접근 방식이 다르다는 의심이 커짐
  • 해당 사이트는 3월 30일부터 robots.txt에서 PerplexityBot 등을 막았고, 6월 14일부터 nginx에서 일치 요청에 403 Forbidden을 반환하도록 설정함
  • Perplexity 문서의 PerplexityBot User Agent로 직접 요청하면 403이 반환돼, 문제는 nginx 설정 오류가 아닌 것으로 확인됨
  • 실제 접근 로그에는 PerplexityBot이 아니라 Windows 10의 Chrome처럼 보이는 User Agent와 IP 44.221.181.252가 남았고, 이 요청은 Perplexity의 공개 IP 범위에 없는 것으로 보임
  • 공개 User Agent와 IP 범위만으로는 차단하기 어려운 상황이며, Robb Knight는 Perplexity Discord에 문제를 알리고 버그 채널에 신고함

차단은 동작했지만 Perplexity는 요약을 반환함

  • Robb Knight는 전날 AI 봇을 nginx로 차단하는 글을 올렸고, MacStories에도 같은 방식의 차단을 설정함
  • 차단 설정 뒤에도 Federico는 Perplexity에서 특정 MacStories 글의 인용을 얻을 수 있음을 확인함
  • Robb Knight의 사이트에는 이미 두 단계의 차단이 적용돼 있었음
    • 3월 30일: robots.txt에서 PerplexityBot 등 차단 시작
    • 6월 14일: nginx에서 User Agent가 일치하면 403 Forbidden 반환
  • 차단된 글에 대해 Perplexity에 “이 글이 무엇에 관한 것인가”를 묻자, 추측만으로 알기 어려운 세부사항이 포함된 요약이 반환됨
  • Perplexity가 문서에 공개한 PerplexityBot User Agent로 직접 요청을 보내자 차단은 정상 동작함
    • 사용한 User Agent는 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)
    • 응답은 예상대로 403이었고, nginx 설정 자체는 문제가 아니었음

로그에는 PerplexityBot이 아닌 Chrome User Agent가 남음

  • Perplexity에 robots.txt로 차단된 사이트를 왜 접근했는지 묻자, Perplexity는 웹사이트를 크롤링하거나 robots.txt로 차단된 콘텐츠에 접근할 능력이 없다고 답함
  • 이전에 해당 페이지를 요약한 점을 다시 지적하자, Perplexity는 그 요약을 제공하지 말았어야 했고 제한된 콘텐츠를 요약하는 것은 비윤리적이라고 답함
  • Lewis Dale은 로그에서 PerplexityBot이 포함되지 않은 User Agent를 먼저 확인함
    • Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.3
  • Robb Knight도 접근 로그를 활성화한 뒤 Perplexity에 rknight.me/PerplexityBot 페이지 내용을 물어 같은 형태의 요청을 확인함
    • 로그 예시는 44.221.181.252 - - [15/Jun/2024:14:30:35 +0000] "GET /PerplexityBot HTTP/1.1" 200 22452 "-" "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"
  • 이 User Agent는 Windows 10에서 실행되는 Google Chrome처럼 보였고, Robb Knight는 Perplexity가 헤드리스 브라우저로 콘텐츠를 스크래핑하면서 robots.txt를 무시하고 공개 User Agent 문자열도 보내지 않는다고 판단함
  • 해당 헤드리스 브라우저는 Perplexity의 공개 IP 범위에 포함된 것으로 보이지 않아, IP 범위 기반 차단도 어려워짐
  • 이후 Robb Knight는 Perplexity Discord에 참여해 소개 채널에 문제를 알리고, 버그 채널에는 robots.txt를 존중하지 않거나 올바른 User Agent를 보내지 않아 서버에서 차단할 수 없다는 내용을 신고함

댓글과 토론

Hacker News 의견들
  • 여기엔 서로 다른 두 질문이 섞여 있고, 우리가 무엇을 바라는지 조심해야 함
    첫 번째 우려는 가장 정당함: LLM이 내 데이터로 학습하지 못하게 막을 수 있는가? 이건 가능해야 하고, Perplexity도 학습 차단을 쉽게 제공해야 함
    두 번째는 Perplexity가 내 웹사이트에 실시간 웹 요청을 보내고, 사용자가 원하는 형식으로 내 사이트의 데이터를 보여줘도 되는가임. 이걸 금지해야 한다고 주장하면 매우 위험한 영역으로 들어감
    광고 차단기, 읽기 모드, 스크린 리더도 Perplexity와 본질적으로 같은 일을 하며, 차이는 대체로 로컬에서만 실행된다는 점뿐임. 사용자 에이전트의 본질은 사용자가 도구에 지정한 방식대로 인터넷의 콘텐츠를 자동 조작하는 도구라는 것임
    Perplexity가 출처를 인용하는 한, 이런 방식이 비윤리적이라고 주장하는 건 이미 모두가 쓰는 수많은 도구에도 똑같이 적용될 수 있어 불편함. 웹사이트 소유자가 DRM으로 디자이너가 의도한 방식 그대로만 보이게 강제하는 세상은 원하지 않음

    • 웹 게시자 입장에서는 오히려 반대임. 내 콘텐츠를 모델 학습에 쓰는 건 직접적으로 트래픽을 훔치지 않으니 괜찮다고 봄. “세상의 모든 책을 읽어 AI를 학습시킨다”는 비유에 가까움
      하지만 Perplexity가 사용자 질문에 답하려고 내 콘텐츠를 크롤링하면, 그 사용자가 Google 등을 통해 내 콘텐츠에 올 확률을 낮춤. 이건 받아들일 수 없음
      읽기 모드처럼 기기 안에서 도는 도구와 다르게, Perplexity는 수요 집계 서비스로서 위치를 더 굳힐 것이고, 나는 사람들이 내 콘텐츠로 직접 오게 만들 수 없게 됨
      예를 들어 SaaS 회사가 도움말 문서를 운영한다면, 그 영역의 트래픽을 분석해 사용자가 어디서 막히는지, 어떤 기능을 만들 수 있을지 알 수 있음. 사용자가 Perplexity에 내 SaaS 관련 도움말 질문을 하고 답을 받아버리면, 나는 트래픽을 받지 못해 그런 통찰을 모두 잃게 됨
    • 사용자가 봇에게 웹페이지를 가져오라고 지시한 경우라면 robots.txt는 적용되지 않고, 봇도 이를 따를 필요가 없다는 게 자명해 보임
      Apple의 읽기 모드 같은 도구와 마찬가지로, 사이트가 그 요청을 반드시 허용해야 하는지는 윤리적으로 논쟁적이고, 에이전트 위장은 애매한 영역임. 안타깝게도 이 난제에 대한 좋은 답은 아직 없어 보임
    • 회사들은 “고객이 요청했다”는 접근을 긁어가고 내부화한 뒤, 서서히 후자를 전자로 바꾸거나 자체 도구를 스크레이퍼로 만들 것임
      더 단순하게 물으면 됨: 그 회사가 웹 표준으로 전달된 접근 규칙을 존중하는가? 아니라면 그 회사의 접근은 강하게 거부해야 함
      이런 회사들에게는 한 치도 양보할 필요가 없음
    • 왜 LLM이 내 데이터로 학습하지 못하게 막는 게 가능해야 하나? 데이터 접근을 제한하고 싶다면 공개 웹사이트에 올리지 않으면 됨. 가입과 라이선스 조건 동의를 요구하게 만드는 건 충분히 쉬움
      일부 웹사이트 소유자는 두 마리 토끼를 다 잡으려는 것처럼 보임. 검색 트래픽을 얻기 위해 Google과 다른 크롤러에는 색인되길 원하지만, 다른 회사에 이익이 되는 AI 모델 학습에는 쓰이길 원하지 않음. 어느 시점에는 선택해야 할 것임
    • Perplexity가 하는 일이 불법이라면, 자기 컴퓨터에서 오픈소스 LLM을 실행해 같은 일을 시키는 것도 불법인가? 그렇다면 광고 차단기, 읽기 모드, 스크린 리더는 어떻게 합법인가?
      자기 컴퓨터에서 실행하는 게 합법이라면, 더 많은 GPU가 필요해서 빌린 서버에서 오픈소스 LLM을 돌리는 건 합법인가? 그게 합법이라면 서버에서 폐쇄형 LLM을 돌리는 건 왜 불법인가? Perplexity가 모델 가중치를 공개하고 계속 같은 일을 하면 되는 건가?
  • 글쓴이는 Perplexity 사용자 에이전트가 언제 적용되는지 오해한 듯함
    웹사이트 소유자가 사용자가 어떤 브라우저로 사이트에 접근할지 정해서는 안 됨. Chrome이든 Firefox든 Perplexity처럼 전혀 다른 것이든 마찬가지임
    사용자를 위해 웹페이지를 가져올 때는 브라우저 클라이언트처럼 보이는 UA 문자열을 쓰는 게 적절함
    Perplexity가 학습 데이터를 대량 수집하면서 자기 UA를 쓰지 않는다면 그건 별개고 멈춰야 함. 하지만 이 글은 그걸 보여주지 못함

    • 이 글과 여기 논의 대부분이 큰 오해에 기반하고 있어서 조금 더 자세히 쓰면, robots.txt는 크롤러를 규율함. 사용자가 지정한 URL 하나를 가져오는 건 크롤링이 아님. 크롤링은 링크를 자동으로 따라가며 다음 페이지들을 계속 가져오는 것임
      글이 링크한 Perplexity 문서는 크롤러가 어떻게 동작하는지 설명함. 사용자가 요청했을 때 개별 웹페이지를 가져오는 소프트웨어는 그 크롤러가 아님. 사용자의 대리인으로 행동하므로 일반 사용자 에이전트일 뿐임
      크롤링과 비크롤링의 구분은 수십 년 동안 확고히 자리 잡았음. wget에서도 볼 수 있음. wget [https://www.example.com](<https://www.example.com>;)로 특정 URL을 가져오면 wget은 그 URL만 가져오고 robots.txt는 전혀 가져오지 않음
      wget --recursive [https://www.example.com](<https://www.example.com>;)처럼 재귀 동작을 지시해 사이트를 크롤링하게 하면, wget은 [https://www.example.com](<https://www.example.com>;)을 가져오고 페이지의 링크를 찾은 뒤, 다른 페이지 링크가 있으면 [https://www.example.com/robots.txt](<https://www.example.com/robots.txt>;)를 가져와 이후 링크 접근이 허용되는지 확인함
      이게 웹페이지 가져오기와 웹사이트 크롤링의 차이임. Perplexity는 잘 확립된 규범을 따르고 있음
    • 웹페이지를 가져오는 건 아니지 않나? 콘텐츠를 가져온 뒤 조작하고 있음. Perplexity는 웹 브라우저가 아님
    • UA는 클라이언트가 보내는 서명일 뿐임. 어떤 서명을 쓸지는 클라이언트가 정할 일임
    • 정확한 사용자 에이전트를 설정하는 건 애초에 필수도 아니고, 비매너가 되지 않으려고 하는 것뿐임. Robots.txt는 선택적 표준
      이 글은 Perplexity의 비매너 행동을 짚는 것뿐이고, 그렇게 복잡한 일이 아님
      Perplexity도 자신들이 좋지 않은 행동을 하고 있음을 알고 있는 게 분명함. Chrome으로 위장하는 대신 사용자가 시작한 요청용 대체 UA를 문서화할 수도 있었음. 그러면 신뢰하는 사람들은 학습 UA는 차단하고 대체 UA는 허용할 수 있었음
  • “AI 회사가 기초 모델 학습을 위해 웹사이트를 긁는 것”과 “내가 요청해서 AI 도구가 웹페이지를 가져오는 것”을 한데 묶으면 안 된다고 봄. 최소한 이 둘은 서로 다른 사용자 에이전트여야 하고, 하나는 막고 다른 하나는 허용할 선택지가 있어야 함

    • AI 에이전트가 사용자를 대신해 검색을 수행한다면, 사용자 에이전트가 그 사용자와 같아야 할까?
    • 동의하지만, 최소한 자신을 식별해야 한다고 봄. 범용 사용자 에이전트를 쓰면 안 됨
    • 개인적으로는 그게 핵심 문제라고 보진 않음. 올바른 사용자 에이전트를 선호하긴 하는데, 그건 기본 예의이고 대부분에게 문제가 되지 않아야 함
      AI 회사들이 해야 한다고 기대하는 건 긁어가는 콘텐츠의 라이선스 확인과 준수임. 예를 들어 블로그에 CC BY-NC 4.0 라이선스를 걸었다면, 비상업적 용도라면 그 콘텐츠로 AI를 학습시켜도 됨. 상업적 용도라면 내게 연락해 유료로 적절한 라이선스를 협상해야 함
      개인 GitHub 저장소가 ISC라면 학습해도 괜찮지만, 내 업무 코드가 GPLv3라면 LLM이 반환하는 코드도 GPLv3 아래 있어야 함. AI 회사들 중 무엇이든 라이선스를 확인하는 곳이 있나?
    • 그보다도 브라우저에서처럼 사용자 에이전트를 위장할 수 있게 해주는 도구를 쓰고 싶음
    • 그런데 OpenAI는 “GPTBot” 수집 크롤러나 “ChatGPT-User” 채팅 중 검색 중 하나라도 차단하면, 이 두 활동을 모두 막음
  • Perplexity가 남의 콘텐츠를 가져가도 된다고 생각하는 방식을 알고 싶다면 이 글을 읽어보면 됨
    https://stackdiary.com/perplexity-has-a-plagiarism-problem/
    CEO는 해결해야 할 “거친 모서리”가 있다고 했지만, 제품 전체가 남의 콘텐츠를 훔치는 것 위에 세워져 있음. 그리고 보아하니[0] 큰 출판사들에게 돈을 줘서 그 소음을 잠재우려는 것 같음
    [0]: https://www.semafor.com/article/06/12/2024/perplexity-was-pl...

    • 많이 논쟁됐지만 짧게 말하면, 불법복제는 절도가 아니며 LLM 업계 모두가 남의 콘텐츠를 가져가고 있고 지금까지는 대체로 넘어가고 있음. 진행 중인 소송은 별개임
    • “걸리지 않고 넘어갈 수 있다고 생각한다”라지만, 실제로 못 넘어갈까? 그건 아직 봐야 함
  • Robots.txt를 존중해야 하는 건 학습 크롤러이고, 사용자 에이전트, 즉 사용자가 웹페이지를 가져오라고 해서 가져오는 쪽은 크롤러가 아니므로 그래야 할 이유가 보이지 않음. 그래프를 따라 걷지 않기 때문임
    사용자 에이전트를 “속인다”는 부분도, 2024년 기준 User-Agent 헤더는 버그와 개인정보 문제의 결합처럼 취급됨. 모든 주요 브라우저는 수년 전 인기 있던 브라우저인 척하고, 최근 가장 큰 브라우저들은 앞으로 영원히 동일한 문자열 하나를 보내도록 표준화했는데, 이것도 명백히 거짓임
    이 헤더는 실질적으로 폐기된 상태이고, 모든 사용자 에이전트는 Edge, Chrome, Firefox처럼 “this is mozilla 5”라는 레거시 값을 보내야 함. 새 브라우저가 나올 것을 예상하지 못하고 유지보수도 안 된 사이트 하나만 있어도, 거짓말하지 않으면 인터넷이 깨질 수 있기 때문임
    따라서 Perplexity가 똑같이 하는 건 표준적이고 최선의 관행임

    • 여러 이유로 “속일” 수는 있겠지만, 특정 OS의 특정 Chrome 버전은 여전히 고유한 사용자 에이전트 문자열을 보냄
  • 웹 스크레이핑을 해본 적이 있다면 왜 User-Agent를 속이는지 알 것임. 프로그램이 제대로 동작하길 원한다면 당신도 그렇게 할 것임
    User-Agent 문자열을 기준으로 차별하는 쪽이 비윤리적임

    • 페이지 제작자가 내 프로그램에 그 페이지가 쓰이길 원하지 않는다는 걸 안다면, 나는 하지 않을 것임
      AI 회사에 착취당하지 않으려는 게 비윤리적인가? Robots.txt는 사용자 에이전트로 식별되는 봇에게 무엇을 읽을 수 있는지 알려주려고 만들어진 것임
    • 클라이언트가 전달한 정보를 사용해 내 서버 동작을 바꾸는 게 왜 “비윤리적”인지 자세히 설명해보길 바람. 나는 사람들이 무료 콘텐츠를 소비할 수 있도록 돈과 시간을 쓰고 있다는 점도 감안해야 함
    • 스크레이퍼가 애초에 robots.txt를 지키지 않는다면 어떤가? 스크레이핑을 막기 위한 더 강한 방법을 쓸 만큼 이미 비윤리적인 것 아닌가?
    • AI 회사가 내 콘텐츠를 훔쳐 이윤을 내는 걸 원하지 않는 데는 아무 비윤리적인 점이 없음
  • GitHub를 프록시하면서 텍스트를 뒤섞는 장난성 웹사이트를 하나 운영 중임. CF Workers에서 돌아감
    https://guthib.mattbasta.workers.dev
    지난 한두 달 동안 어떤 AI 회사가 미친 듯이 긁어가서 무료 요청 한도에 닿고 있음. 굳이 막을 생각은 없음. 마음껏 해서 말 그대로 쓰레기 데이터로 색인을 오염시키길 바람. 무차별로 긁는 데이터를 실제로 확인하지 않는 대가임

    • 긁은 뒤에 확인함
    • GitHub는 이걸 어떻게 생각할까? 콘텐츠를 바꾸면서 트래픽은 GitHub로 보내고 있음
  • 여기엔 혼동이 있는 듯함
    Perplexity AI 같은 서비스를 제공할 때 웹사이트 접근에는 두 가지 사용 사례가 있음
    하나는 학습용 스크레이핑으로, 크롤러가 대량 데이터를 수집하는 경우임. 한 사이트를 한꺼번에 두들기지 않고 요청을 부드럽게 분산하기를 바람
    다른 하나는 사용자의 특정 질의에 실시간으로 답하기 위한 사용 사례임. 블로그 글은 이 두 번째 경우를 건드린 것처럼 보임. 이 경우 웹페이지를 가져오는 시스템 구성요소는 크롤러가 아니라, 실제 인간 최종 사용자의 요청을 대신 수행하는 브라우저나 브라우저 플러그인에 가까움
    이 두 사용 사례가 서로 다른 행동 규범을 갖는 건 적절함
    글쓴이는 첫 번째 사용 사례를 생각했지만 실제로는 두 번째 사용 사례를 실행했고, 첫 번째 경우의 동작을 기대한 실수를 한 것 같음

  • 바로 며칠 전 Perplexity CEO Aravind Srinivas가 Google과 OpenAI를 조롱하면서, Perplexity는 인용을 제공하는 반면 폐쇄형 LLM은 거대한 모델에 웹 정보를 외워놓고 출처를 밝히지 않는다며 스스로를 더 도덕적인 위치에 올려놨음
    그런데 robots.txt를 따르지 않고 정체를 숨긴 게 들켰다니 재미있음
    https://x.com/tsarnick/status/1801714601404547267

    • 아무도 robots.txt를 따르지 않음. 모든 사이트의 robots.txt가 Google이 아닌 누구도 보지 못하게 막기 때문임
      그리고 “정체 숨기기”는 Mosaic이 이름을 바꾼 이후 모든 브라우저가 해온 일임
  • 여기 많은 댓글이 크롤링의 두 사용 사례인 학습요약을 혼동하고 있음
    Perplexity가 답변 엔진으로 유용한 이유는 검색 증강 생성(RAG)임. 질문에 답하기 위해 웹을 검색하고, 관련 URL을 크롤링한 뒤 요약함. 사용자 응답에는 출처를 포함하지만, 실제로는 아무도 작은 (1), (2) 링크를 눌러 원문으로 가지 않음
    따라서 그 출처 중 하나라면, 예전 Google이나 Bing 모델이었다면 받았을 트래픽을 잃게 됨. 이 맥락에서 Perplexity가 웹페이지를 크롤링할 때 OP에 따르면 정체를 숨기고 있으며, 게시자가 이를 거부할 방법도 없어 보임
    모델 학습 데이터를 모으는 두 번째 사용 사례에서는 올바른 사용자 에이전트를 쓰고 자신을 식별할 가능성도 있음. 게시자 입장에서는 그 사용 사례가 직접적으로 트래픽을 “훔치지” 않으므로 학습용 크롤링은 허용할 수 있음

    • “실제로는 아무도 작은 (1), (2) 링크를 눌러 출처로 가지 않는다”지만, 나는 그런 인용을 항상 누르는 표본임. 다운로드 링크나 다른 세부 정보를 다시 묻는 것보다 빠르게 찾을 때가 많기 때문임
    • Google과 Bing도 답변 상자와 추천 스니펫으로 점점 같은 일을 하고 있음
    • 진짜 질문은 웹사이트가 그 트래픽, 더 구체적으로는 사람의 눈길을 받을 권리가 있는가임. 그리고 그 권리가 사용자의 선호를 어느 정도까지 무시하게 해도 되는가도 문제임. 사용자가 Perplexity를 쓴다는 행위 자체가 선호를 꽤 분명히 보여줌. Google 검색을 하고 링크를 직접 훑는 대신 Perplexity를 쓰는 이유는 보이는 것 대부분이 쓰레기이기 때문임
      AI에 관한 논의 자체가 여기서는 주의를 흐린다고도 볼 수 있음. LLM 대신 Perplexity가 인간 에이전트를 배정해 같은 일을 한다고 상상해보면 됨. 높은 수준의 질문을 바탕으로 검색어를 만들고, 나온 페이지들을 읽고, 원 출처 참고와 함께 요약문으로 압축하는 것임
      당연히 훨씬 비싸겠지만 결과물은 같고 결과도 같음. 원래의 큰 질문을 한 사람은 답을 만들기 위해 훑어야 했던 모든 콘텐츠에 노출되지 않음. 이게 비윤리적인가? 아니라면, 이 시나리오에서 인간 에이전트를 AI로 바꾸는 순간 왜 비윤리적이 되는가?
      답이 “규모”라면, 부자는 괜찮고 평범한 사람은 안 된다는 말에 불편할 정도로 가까워짐