在 VSCode 中按 F5 启动调试器
或者,在设置好相应的环境变量后:
- docker compose up -d
- npm run dev
为您的 LLM 提供更好的输入。
Reader 主要做两件事:
- 阅读:通过 https://r.jina.ai/https://your.url 将任何 URL 转换为 LLM 友好的 输入。无需成本即可为您的智能体和 RAG 系统获得更优的输出。
- 搜索:通过 https://s.jina.ai/your+query 在网络上搜索给定查询。这使您的 LLM 能够从网络获取最新的世界知识。
查看 在线演示
或者直接访问这些 URL 亲自体验:(阅读)https://r.jina.ai/https://github.com/jina-ai/reader,(搜索)https://s.jina.ai/Who%20will%20win%202024%20US%20presidential%20election%3F。
欢迎在生产环境中使用 Reader API。它是免费、稳定且可扩展的。我们作为 Jina AI 的核心产品之一,正在积极维护它。查看速率限制
自适应爬虫。它可以递归爬取网站,并为给定网页提取最相关的页面。s.jina.ai 的结果限制在特定域名/网站,您可以在查询参数中设置例如 site=jina.ai,这启用了站内搜索。更多选项,请尝试我们更新的在线演示。s.jina.ai,用于在网络上搜索并返回前 5 个结果,每个结果都以 LLM 友好的格式呈现。在此处阅读有关此新功能的更多信息。x-with-generated-alt: true。Image [idx]: [caption] 作为 alt 标签添加(如果它们最初没有)。这使得下游 LLM 能够在推理、总结等过程中与图像交互。查看示例。r.jina.ai 获取单个 URL只需在任何 URL 前加上 https://r.jina.ai/。例如,要将 URL https://en.wikipedia.org/wiki/Artificial_intelligence 转换为 LLM 友好的输入,请使用以下 URL:
https://r.jina.ai/https://en.wikipedia.org/wiki/Artificial_intelligence
r.jina.ai 获取整个网站 (Google Colab)s.jina.ai 进行网络搜索只需在您的搜索查询前加上 https://s.jina.ai/。请注意,如果您在代码中使用此功能,请确保先对搜索查询进行编码,例如,如果您的查询是 Who will win 2024 US presidential election?,那么您的 URL 应如下所示:
https://s.jina.ai/Who%20will%20win%202024%20US%20presidential%20election%3F
在幕后,Reader 会搜索网络,获取前 5 个结果,访问每个 URL,并对其应用 r.jina.ai。这与许多智能体/RAG 框架中的 网络搜索函数调用 不同,后者通常只返回搜索引擎 API 提供的标题、URL 和描述。如果您想更深入地阅读某个结果,必须自己从该 URL 获取内容。而使用 Reader,http://s.jina.ai 会自动为您从前 5 个搜索结果 URL 获取内容(复用 http://r.jina.ai 背后的技术栈)。这意味着您无需自己处理浏览器渲染、屏蔽或任何与 JavaScript 和 CSS 相关的问题。
s.jina.ai 进行站内搜索只需在查询参数中指定 site,例如:
curl 'https://s.jina.ai/When%20was%20Jina%20AI%20founded%3F?site=jina.ai&site=github.com'
我们强烈建议使用代码生成器来探索 Reader API 的不同参数组合。
正如您在上面已经看到的,可以使用请求头来控制 Reader API 的行为。以下是支持的请求头的完整列表。
x-with-generated-alt: true 请求头启用图像描述功能。x-set-cookie 请求头要求 Reader API 转发 cookie 设置。x-respond-with 请求头绕过 readability 过滤,具体如下:x-respond-with: markdown 返回 不经过 reability 处理的 markdownx-respond-with: html 返回 documentElement.outerHTMLx-respond-with: text 返回 document.body.innerTextx-respond-with: screenshot 返回网页截图的 URLx-proxy-url 请求头指定代理服务器。x-cache-tolerance 请求头(整数,单位为秒)自定义缓存容忍度。x-no-cache: true 请求头(相当于 x-cache-tolerance: 0)绕过缓存页面(缓存寿命为 3600 秒)。x-target-selector 或 x-wait-for-selector 来指示 Reader API 专注于页面的特定部分。x-target-selector 请求头设置为 CSS 选择器,Reader API 将返回匹配元素内的内容,而不是完整的 HTML。当自动内容提取未能捕获所需内容时,设置此请求头非常有用,您可以手动选择正确的目标。x-wait-for-selector 请求头设置为 CSS 选择器,Reader API 将等待匹配的元素渲染完成后再返回内容。如果您已经指定了 x-wait-for-selector,并且计划等待相同的元素,则可以省略此请求头。r.jina.ai 获取单页应用程序 (SPA)如今许多网站依赖 JavaScript 框架和客户端渲染,通常称为单页应用程序 (SPA)。得益于 Puppeteer 和无头 Chrome 浏览器,Reader 原生支持获取这些网站。然而,由于某些 SPA 的开发方式特殊,可能需要采取一些额外的预防措施。
根据 Web 标准定义,URL 中 # 之后的内容不会发送到服务器。为了解决这个问题,请使用 POST 方法并在请求体中包含 url 参数。
curl -X POST 'https://r.jina.ai/' -d 'url=https://example.com/#/route'
一些 SPA,甚至一些并非严格意义上的 SPA 的网站,可能会先显示预加载内容,然后再动态加载主要内容。在这种情况下,Reader 可能捕获的是预加载内容而不是主要内容。为了解决这个问题,以下是一些可能的解决方案:
x-timeout当明确指定超时时,Reader 将不会尝试提前返回,而是会等待网络空闲直到达到超时时间。这对于目标网站最终会达到网络空闲状态的情况很有用。
curl 'https://example.com/' -H 'x-timeout: 30'
x-wait-for-selector当明确指定 wait-for-selector 时,Reader 将等待指定的 CSS 选择器出现,直到达到超时时间。当您确切知道要等待哪个元素时,这很有用。
curl 'https://example.com/' -H 'x-wait-for-selector: #content'
当您发现标准模式提供的结果不完整时,流式模式很有用。这是因为 Reader 会等待更长时间,直到页面稳定渲染。使用 accept 请求头来切换流式模式:
curl -H "Accept: text/event-stream" https://r.jina.ai/https://en.m.wikipedia.org/wiki/Main_Page
数据以流的形式传入;每个后续块包含更完整的信息。最后一个块应提供最完整和最终的结果。 如果您来自 LLM 领域,请注意这与 LLM 文本生成的流式行为不同。
例如,比较下面这两个 curl 命令。您可以看到流式模式最终会提供完整的信息,而标准模式则不会。这是因为这个特定网站的内容加载是在页面完全加载之后由某些 js 触发的,而标准模式返回页面“过早”。
curl -H 'x-no-cache: true' https://access.redhat.com/security/cve/CVE-2023-45853
curl -H "Accept: text/event-stream" -H 'x-no-cache: true' https://r.jina.ai/https://access.redhat.com/security/cve/CVE-2023-45853
注意:
-H 'x-no-cache: true'仅用于演示目的,以绕过缓存。
如果您的下游 LLM/智能体系统需要即时内容交付,或者需要分块处理数据以交错 I/O 和 LLM 处理时间,流式模式也很有用。这允许更快的访问和更高效的数据处理:
Reader API: streamContent1 ----> streamContent2 ----> streamContent3 ---> ...
| | |
v | |
您的 LLM: LLM(streamContent1) | |
v |
LLM(streamContent2) |
v
LLM(streamContent3)
请注意,在完整性方面:... > streamContent3 > streamContent2 > streamContent1,每个后续块包含更完整的信息。
这仍处于非常早期的阶段,结果并不是一个“有用”的 JSON。它只包含 url、title 和 content 三个字段。尽管如此,您可以使用 accept 请求头来控制输出格式:
curl -H "Accept: application/json" https://r.jina.ai/https://en.m.wikipedia.org/wiki/Main_Page
JSON 模式在 s.jina.ai 中可能比在 r.jina.ai 中更有用。对于启用 JSON 模式的 s.jina.ai,它返回一个包含 5 个结果的列表,每个结果的结构为 {'title', 'content', 'url'}。
页面中所有缺少 alt 标签的图像都可以由 VLM(视觉语言模型)自动添加描述,并格式化为 !(Image [idx]: [VLM_caption])[img_URL]。这应该为您的下游纯文本 LLM 提供足够的提示,以将这些图像纳入推理、选择和总结中。使用 x-with-generated-alt 请求头来切换此功能:
curl -H "X-With-Generated-Alt: true" https://r.jina.ai/https://en.m.wikipedia.org/wiki/Main_Page
您需要以下工具来运行此项目:
- Node v18(Node 版本 >18 会导致构建失败)
git clone git@github.com:jina-ai/reader.git
npm install
thinapps-shared 子模块?您可能会注意到对 thinapps-shared 子模块的引用,这是我们用于在产品间共享代码的内部包。虽然它没有开源,并且对 Reader 的功能不是必需的,但它主要帮助处理装饰器、日志记录、密钥管理等。目前可以忽略它。
也就是说,这是 https://r.jina.ai 背后的单一代码库,因此我们每次在这里提交时,都会将新版本部署到 https://r.jina.ai。
请提出 issue 并附上您遇到问题的 URL。我们将进行调查并尝试修复。
Reader 由 Jina AI 支持,并基于 Apache-2.0 许可证授权。