reader
무엇인가
Reader는 URL을 LLM이 읽을 수 있는 텍스트로 바꾸는 변환 계층이다. RAG 파이프라인과 에이전트가 검색 결과를 컨텍스트에 넣기 전에 거치는 fetch·렌더링·본문 추출 단계를 대신 맡는다. 같은 코드베이스가 두 엔드포인트로 노출된다. r.jina.ai는 URL 하나를 변환하고, s.jina.ai는 검색어를 받아 웹 검색까지 수행한다.
어떻게 동작하나
웹 페이지는 headless Chrome으로 렌더링하거나 curl-impersonate로 가볍게 가져오며, 두 방식 중 하나를 자동으로 고른다. PDF는 PDF.js로 파싱하고, Word·Excel·PowerPoint는 LibreOffice로 변환한 뒤 HTML이나 PDF로 처리한다. 이미지는 비전-언어 모델이 캡션을 붙여 텍스트 전용 LLM에 힌트를 넘긴다. 출력 형식은 x-respond-with 헤더로 정하며 markdown, html, text, screenshot, pageshot, frontmatter, markdown+frontmatter를 지원한다. 페이지 캐시 수명은 3600초다.
무엇과 다른가
에이전트 프레임워크의 웹 검색 함수 호출은 보통 검색 엔진이 준 제목·URL·설명만 돌려준다. 본문이 필요하면 에이전트가 그 URL을 다시 가져와야 한다. s.jina.ai는 검색 후 상위 5개 결과 URL을 직접 방문해 r.jina.ai와 같은 스택으로 본문을 변환해 함께 반환한다. 브라우저 렌더링, 차단, JavaScript·CSS 처리를 호출자 쪽에서 구현하지 않아도 된다.
어떻게 쓰나
사용법은 URL 앞에 https://r.jina.ai/ 를 붙이는 것이다. 검색은 https://s.jina.ai/ 뒤에 URL 인코딩한 질의를 넣고, site 쿼리 파라미터로 사이트 내 검색을 지정한다. 동작은 요청 헤더로 제어한다. x-engine은 browser, curl, auto 중 하나를 강제하고, x-target-selector는 CSS 선택자에 맞는 요소만 반환하며, x-wait-for-selector는 해당 요소가 렌더링될 때까지 기다린다. x-proxy-url, x-cache-tolerance, x-no-cache도 있다. 전체 옵션의 기준은 src/dto/crawler-options.ts다.
전제와 한계
이 저장소는 r.jina.ai와 s.jina.ai 뒤 코드베이스의 오픈소스 브랜치다. MongoDB 기반 SaaS 저장소 계층은 포함되지 않는다. 기본은 무상태 모드로 동작하고, MinIO나 S3 호환 버킷 캐싱은 docker compose로 선택적으로 붙인다. PDF와 오피스 문서는 file 바디 필드로 직접 POST할 수 있다. 호스팅 API에는 요청 한도가 적용된다.
유사 도구
- firecrawl웹 페이지를 검색·스크래핑·크롤링해 LLM이 읽는 Markdown이나 구조화 JSON으로 변환하는 API 서버이자 CLI다.
- markitdownPDF·오피스 문서·이미지·오디오를 Markdown으로 변환해 LLM 파이프라인에 넣는 Python CLI 겸 라이브러리다. 문서 구조를 보존한다.
- doclingPDF·DOCX·PPTX 등 여러 문서 형식을 레이아웃과 표 구조까지 해석해 Markdown·JSON으로 내보내는 Python 라이브러리 겸 CLI다.
- markerPDF·이미지·오피스 문서를 마크다운·JSON·HTML로 변환하는 Python CLI다. 레이아웃 검출과 OCR을 로컬 VLM 서버로 처리하고 LLM으로 정확도를 보강한다.
- synthadocPDF·스프레드시트·영상 등 원본 문서를 LLM으로 컴파일해 출처 인용이 붙은 로컬 Markdown 위키로 만드는 Python CLI다.
- PaddleOCRPDF와 이미지를 Markdown·JSON으로 변환하는 OCR 툴킷이다. 100개 이상 언어를 지원하고 PaddleOCR-VL·PP-StructureV3 파이프라인으로 표·수식 좌표까지 뽑는다.