누구를 위한 도구인가
같은 메뉴를 모델에 붙여 넣는 일은 이제 그만
109페이지 코퍼스(일대일 비교 측정)에서 Clean Web Clipper가 남긴 중복 내비게이션 줄은 102개였고, 다른 추출 엔진 세 개는 282, 478, 491개를 남겼습니다. 남은 HTML 태그는 전혀 없었습니다. 모델에 닿는 것은 기사와, 출처 URL과 게시일을 적은 frontmatter 머리글입니다.
붙여 넣은 페이지의 실제 비용
문서 페이지를 브라우저에서 복사해 채팅에 붙여 넣으면 모델에게 쿠키 안내, 사이드바, 버전 선택기, “이 페이지의 내용” 사이드바, 네 줄짜리 푸터 링크, “함께 읽을 기사” 띠까지 보내게 됩니다. 그 줄 하나하나가 비용을 내는 토큰이고, 읽히기를 바란 두 문단과 주의를 두고 다툽니다.
두 번째 비용은 더 미묘합니다. 반복되는 내비게이션은 구조처럼 보입니다. 페이지를 요약하라고 하면 모델은 메뉴 항목을 주제로 나열하고, 주장의 출처를 물으면 링크 텍스트를 가리킵니다. 허술한 변환기가 남긴 div와 table 마크업은 모델이 문장에 닿기 전에 한 겹 더 헤쳐 나가야 할 층이 됩니다.
비용이 불어나기 시작하는 것은 두 번째로 붙여 넣을 때입니다. 대화가 길어져 기록이 잘리면 페이지를 다시 붙여 넣는데, 그사이 아침과 페이지가 달라져 모델은 조금 다른 텍스트로 추론하고, 스레드 어디에도 그 사실이 남지 않습니다. 실행할 때마다 같은 URL을 가져오는 에이전트도 같은 문제에 요청 제한과 통과할 수 없는 로그인까지 더해집니다. 디스크의 파일은 매번 같은 입력이고, 사이트가 열리지 않을 때도 읽을 수 있습니다.
대신 모델이 받는 것
- 중복 내비게이션이 비교한 엔진 평균보다 약 4분의 1 수준: 반복 줄 102개, 다른 엔진은 282, 478, 491개.
- 테스트한 페이지 512개에서 남은 HTML 태그 0개: 모델이 헤쳐 나갈 마크업이 없습니다.
- frontmatter에 출처 URL과 게시일이 적혀 있으므로, 주장의 출처를 추측하지 않고 밝힐 수 있습니다.
- 단축키 하나로 페이지를 Markdown으로 복사해 어떤 채팅에든 붙여 넣을 수 있습니다.
- 이미지를 완전히 뺄 수 있어서, 긴 이미지 URL이 컨텍스트에서 사라집니다.
- 기사가 없는 페이지는 그렇다고 알립니다. 피드나 검색 결과가 프롬프트 속 링크 300개가 되지 않습니다.
- 토막 줄이 적습니다: 25자 미만 줄의 비율이 0.221로, 비교한 엔진은 0.278, 0.262, 0.263이었습니다. 짧은 줄은 대개 문장 모양을 한 링크 텍스트입니다.
- 참조 링크는 끝에 모인
[^1]각주가 되므로, 본문의 번호 인용이 죽은 앵커로 끊기지 않고 출처로 이어집니다.
---
title: "Coroutines and Tasks"
source: "https://docs.python.org/3/library/asyncio-task.html"
extraction: "dom"
---
## Awaitables
We say that an object is an *awaitable* object if it can be used in an
`await` expression. There are three main types: coroutines, Tasks and Futures.
```python
async def main():
await asyncio.sleep(1)
print("hello")
```프롬프트용으로 설정하기
설정은 두 가지이고 대부분의 값을 공유합니다. 하나는 채팅에 붙여 넣기용, 하나는 에이전트가 읽는 폴더를 채우기용입니다. 둘 다 5분 정도 걸립니다.
- 아이콘을 마우스 오른쪽 버튼으로 눌러 옵션을 열고, 아이콘 클릭 동작을 “클립보드에 복사”로 설정합니다. 가장 짧은 경로입니다. 클릭하고, 채팅으로 전환하고, 붙여 넣으면 됩니다.
- 이미지를 제외로 설정합니다. CDN 이미지 URL 하나가 크기 조정 매개변수로만 200자가 될 수 있고, 텍스트 모델에게는 아무 의미가 없습니다.
- frontmatter 섹션에서
source와date는 켜 두고author와extraction은 끕니다. 모델이 주장의 출처를 밝히는 데는 머리글 두 줄이면 충분하고, 나머지는 돈 내고 보내는 머리글입니다. Alt+Shift+M으로 페이지를 클리핑해 붙여 넣습니다. 확장 프로그램이 “기사 없음”이라고 답하면 그래도 붙여 넣지 마세요. 그 답은 페이지가 대부분 링크 텍스트였다는 뜻이고, 바로 그런 입력이 모델에게 메뉴 항목을 주제로 나열하게 만듭니다.- 채팅이 아니라 에이전트용이라면 저장 위치를 에이전트가 이미 읽는 폴더(예: 프로젝트의
context/)로, 파일 이름 템플릿을{domain}-{title}로 설정합니다. - 작업이 실제로 의존하는 페이지 6~8개를 그 폴더에 클리핑합니다. 에이전트는 로컬 파일을 읽습니다. 가져오기도, 요청 제한도, 통과할 수 없는 로그인도 없고, 실행할 때마다 같은 텍스트입니다.
- 자주 들르는 사이트에는 사이트별 규칙을 둡니다.
reddit.com은 이미지를 제외한 채 전용 하위 폴더로 보내면, 신경 쓰지 않아도 폴더가 정리된 채로 유지됩니다.
컨텍스트 비용을 줄이는 설정
아래 설정은 모두 모델이 읽는 데 비용이 드는 무언가를 없앱니다. 사람들이 가장 자주 틀리는 것은 frontmatter 행입니다. 출처 표기에는 다섯 줄이 아니라 두 줄이면 됩니다.
| 설정 | 값 | 여기서 이 값인 이유 |
|---|---|---|
| 아이콘 클릭 | 클립보드에 복사 | 클릭, 전환, 붙여 넣기: 파일도 창도 대화 상자도 없음 |
| 이미지 | 제외 | 이미지 URL은 길고 텍스트 모델에게 의미가 없으며, 옆 문단보다 긴 경우도 많습니다 |
| frontmatter | `source`와 `date` 켬, `author`와 `extraction` 끔 | 주장의 출처를 밝히기에 충분하고, 모델이 쓰지 않을 필드에 비용을 쓰지 않습니다 |
| 저장 위치(에이전트) | 프로젝트의 `context/` 폴더 | 로컬 파일이면 가져오기도 요청 제한도 없고 매번 같은 입력입니다 |
| 파일 이름 템플릿 | `{domain}-{title}` | 폴더를 grep하는 에이전트가 “Overview” 페이지 두 개를 구분할 수 있습니다 |
| 선택 영역 | 페이지가 아니라 선택 영역 클리핑 | 한 섹션이 질문에 답한다면 나머지 아홉 섹션은 순수한 비용입니다 |
| 사이트별 규칙 | `reddit.com` → 하위 폴더, 이미지 제외 | 스레드와 참고 자료는 따로 쌓아 두는 편이 좋습니다 |
이 페이지에는 본문이 없습니다. 추출된 텍스트의 4분의 1 이상이 링크 텍스트 안에 있었습니다. 피드, 쇼핑몰 진열 페이지, 검색 결과가 이런 모양입니다. 클립보드에는 아무것도 기록하지 않았습니다. 검사한 블록 41 선택된 블록 <section class="cards"> 링크 비율 0.71 실제 텍스트 740자
세 가지 활용 장면
페이지 하나, 질문 하나
명세서를 읽다가 한 섹션을 내가 제대로 이해했는지 모델에게 확인받고 싶습니다. 그 섹션을 선택해 Alt+Shift+M을 누르고 붙여 넣습니다. 도착하는 것은 섹션과 source 한 줄, date 한 줄입니다. 쿠키 안내도, 버전 선택기도, “이 페이지의 내용” 사이드바도, 여덟 열짜리 푸터도 없습니다.
차이는 비용보다 답에서 드러납니다. 붙여 넣은 페이지를 요약하라고 하면, 내비게이션까지 받은 모델은 주제 사이에 메뉴 항목을 나열합니다. 모든 섹션에서 반복되는 문구는 정말로 구조처럼 보이기 때문입니다. 그것을 없애면 실수도 원천에서 없어집니다.
가져오는 대신 에이전트가 읽는 폴더
코딩 에이전트에 SDK의 API 레퍼런스가 필요합니다. 페이지 여덟 개를 도메인과 제목으로 이름 붙여 context/에 클리핑합니다. 에이전트는 로컬 파일을 읽습니다. 가져오는 것도, 요청 제한도 없고, 로그인한 세션 뒤의 페이지도 공개 페이지만큼 잘 읽힙니다.
내용도 가만히 있습니다. 가져온 페이지는 같은 작업을 두 번 실행하는 사이에 바뀔 수 있고, 기록 어디에도 바뀌었다는 말이 남지 않습니다. 클리핑한 파일은 다시 클리핑할 때만 바뀌고, 비교할 이전 파일도 그대로 남아 있습니다.
모델이 전혀 닿을 수 없는 페이지
문서가 SSO 뒤의 사내 위키에 있거나 비용을 내는 구독 서비스에 있습니다. 그 URL을 가져오라고 하면 모델은 로그인 화면을 받고, 검색 도구가 있는 모델은 봇에게 보여 주는 버전을 받습니다. 확장 프로그램은 브라우저가 내 세션으로 이미 렌더링한 페이지를 읽으므로, 내가 볼 수 있는 텍스트가 곧 붙여 넣을 수 있는 텍스트입니다.
그 과정에서 페이지 텍스트는 컴퓨터를 떠나지 않고, 클립 자체도 어디에 업로드되지 않습니다. 클립은 클립보드로 가며, “채팅으로 보내기” 버튼은 스스로 무엇을 전송하는 것이 아니라 복사하고 탭을 엽니다.
페이지를 모델에 넣는 다른 방법과 비교
웹페이지를 모델 앞에 가져다 놓기 위해 사람들이 실제로 쓰는 경로입니다. 아래 각 열은 얻는 것과 치르는 비용이며, 이 확장 프로그램도 포함했습니다.
| 지금 쓰는 방법 | 얻는 것 | 치르는 비용 |
|---|---|---|
| URL 붙여 넣기 | 프롬프트에 한 줄 | 많은 모델이 가져오지 못하고, 가져오는 모델도 봇용 버전을 받을 수 있습니다 |
| 페이지 복사해 붙여 넣기 | 부가 요소까지 전부 | 비교한 결과물에는 중복 메뉴 줄이 282~491개, 여기서는 102개 |
| 멀티모달 모델에 스크린숏 | 보이던 그대로의 페이지 | 이미지 토큰, 출처 줄도 날짜도 없고 나중에 grep할 수도 없음 |
| 페이지를 HTML로 저장 | 디스크의 충실한 사본 | 파일의 대부분이 마크업이고, 보내는 것 중 기사는 일부분 |
| 읽기 모드 후 복사 | 가끔은 더 깔끔한 텍스트 | 페이지에 따라 켜지기도 안 켜지기도 하고, 출처나 날짜 머리글이 없음 |
| Clean Web Clipper | 두 줄 머리글이 붙은 기사 텍스트 | 한 번에 한 페이지, 요약·청크 분할·임베딩은 하지 않음 |
답이 엉뚱하게 돌아올 때
모델이 기사가 아니라 내비게이션을 요약했습니다
피드 페이지가 프롬프트에 하는 일이 바로 그것입니다. 클립 창에 뭐라고 나왔는지 확인하세요. “기사 없음”이었다면 추출된 글자의 약 4분의 1 이상이 링크 텍스트 안에 있었다는 뜻이고, 카테고리 페이지, 검색 결과, 쇼핑몰 진열 페이지의 특징입니다. 기사 페이지 자체를 찾아 그것을 클리핑하세요. 프롬프트 문구를 아무리 다듬어도 이보다 답이 더 크게 바뀌지는 않습니다.
클립이 페이지보다 훨씬 짧습니다
흔한 원인은 두 가지입니다. 스크롤할 때 본문을 불러오는 페이지라서 클리핑하는 순간 렌더링된 부분만 있었거나(끝까지 스크롤한 뒤 클리핑하세요), 섹션이 접힌 아코디언이나 열지 않은 탭 안에 있어서 열기 전까지 DOM에 없었던 경우입니다. 브라우저가 렌더링하지 않은 것은 어떤 확장 프로그램도 읽을 수 없습니다.
모델이 인용할 날짜가 없습니다
페이지가 날짜를 밝히지 않았습니다. 오늘 날짜로 채우지 않고 비워 두는 이유는, 모델의 컨텍스트에서는 자신 있게 틀린 날짜가 빠진 날짜보다 나쁘기 때문입니다. 그 날짜는 사실처럼 다시 인용됩니다. 날짜가 훨씬 드문 코퍼스도 있습니다. 튀르키예와 체코의 상위 50개 목록에서는 게시일이 정말 드물고, 이는 추출이 아니라 그 사이트들의 특성입니다.
이미지 링크가 여전히 컨텍스트를 잡아먹습니다
이미지는 기본적으로 링크로 유지되는데, 읽기에는 맞지만 프롬프트에는 맞지 않습니다. 전체 또는 사이트별 규칙으로 이미지를 “제외”로 설정하면 Markdown에 이미지 참조가 전혀 남지 않습니다. 자리 표시자도, 빈 괄호도 없습니다.
하지 않는 일
어떤 AI 서비스와도 통신하지 않습니다. 클립은 어디에도 전송되지 않고 클립보드나 디스크로 가며, “채팅으로 보내기” 버튼은 복사한 뒤 탭을 열 뿐입니다. 텍스트를 요약하거나 청크로 나누거나 임베딩하지 않습니다. 그것은 클리퍼가 아니라 모델의 일입니다. 크롤러 없이 지금 보고 있는 페이지 하나씩 클리핑합니다. 그리고 페이지가 렌더링하지 않은 것은 캡처할 수 없습니다.