来源
Docsbook 源是一个存储库、网站或单个页面,项目的助手和代理可以从中获取内容。连接一个源后,“更新文档”或“此页面仍然准确吗”这类操作就会从阅读开始,而不是凭回忆。
打开项目管理面板中的来源部分,就在 MCP 和代理下方。
你将获得什么#
- 一个助手可以访问的地址。 当你询问产品价格时,它会针对这个问题获取你的定价页面,而不是根据训练中吸收的内容作答。
- 在你自己的工具中使用相同的注册信息。 构成功能的两个工具
list_sources和read_source通过项目的 MCP 端点提供,因此你在此处连接的来源,在 Claude Code 或 Cursor 中也代表相同的含义。 - 每个来源都附带你写的一句话。 你写下的备注(“参考页面所描述的 API 服务器”)会被之后读取该来源的所有工具作为指令读取。
- 明确报告失败的读取操作。 无法访问的存储库会以错误和提示返回,而不会以看似空存储库的空列表返回。
- 没有计划限制。 来源对所有计划开放,这是经过刻意设计的:在这里设置付费墙,就等于出售讲述事实的能力。
我可以将哪些内容连接为来源?#
底层存在四种类型——网站、页面、仓库和仓库文件夹——表格将它们呈现为所有者实际会询问的命名对象目录,分为五组:你的项目、文档平台、知识库、代码和 API以及社区。无论由谁构建,已发布的文档站点都是网站,因此 Mintlify、GitBook、ReadMe、Docusaurus、Read the Docs、MkDocs、Nextra、VitePress、Starlight、Redocly、Stoplight、Scalar 以及其他平台都无需按供应商分别构建。
表格列出了 Docsbook 所知的每一种类型,无论是否已连接,都可以通过筛选器菜单进行缩小范围,而不是拆分为多个部分。每个连接各占一行:两个已连接的网站会显示为两行。
灰色表示两种不同的含义,具体是哪一种会在行中说明:
- 未连接 — 该行提供连接选项。现在即可读取,通过与其他每个
url行相同的公共获取方式完成。 - 尚不可用 — 该行不提供按钮,而是显示其所需的条件:一次性授予的授权(Notion 工作区、Confluence、Coda)、机器人令牌(Telegram、Discord、Slack),或 Docsbook 尚未支持读取的仓库托管平台的读取器(GitLab、Bitbucket)。如果存在变通方案,该行会将其注明——公共帮助中心目前可以作为网站连接。
没有按钮的行是有意如此设计的。只有当 read_source 确实能够按当前状态读取它时,该行才允许提供连接选项;无法完成连接的连接选项会让屏幕上的其他行都失去可信度。
如何连接来源?#
点击某一行中的连接,或点击表格上方的新建来源。无论哪种方式,都只有一个字段,而地址决定来源是什么——不是你点击的那一行。你点击的行只会设置占位符和标题,如果两者不一致,对话框会在你提交前提示这一点。
| 你粘贴的内容 | 它会变成 | 读取时返回的内容 |
|---|---|---|
github.com/acme/api |
仓库 | 其中可读的文件,优先读取 README 和文档;也可以按名称读取任意路径 |
github.com/acme/api/tree/main/docs |
仓库文件夹 | 仅该子树中的内容——且仅限其中的提交 |
acme.com 或 acme.com/docs |
网站 | 其中的多个页面,从其自身的 sitemap.xml 中查找 |
acme.com/pricing.html |
页面 | 完整读取该页面 |
acme.mintlify.app、acme.gitbook.io、acme.notion.site…… |
归入该供应商的行下 | 与网站相同,但归入你查找它的位置 |
路径中的文件扩展名决定这是页面还是网站。从 issue 或拉取请求中粘贴的链接连接的是仓库,而不是 issue——将 /issues 作为子树存储,会导致该来源读取结果永远为空。跟踪参数(utm_*、fbclid、gclid、ref、si……)会被去除,因此从推文和从地址栏粘贴的同一页面会成为一个来源,而不是两个。裸主机会获得 https://;你有意输入的 http:// 则会保持不变,因为静默升级会导致没有 TLS 的网站返回 404,而且无法从该行看出原因。
私有仓库需要使用选择器,而不是粘贴地址。对于“私有”和“不存在”,GitHub 返回相同的 404,因此粘贴地址无法告诉 Docsbook 它属于哪一种情况;而手动输入私有地址会以公开仓库连接,读取不到任何内容。请在对话框中使用或选择一个 GitHub 仓库:选择器知道其状态,标记为私有的来源会以静态加密的方式存储连接账户的 GitHub 授权,因此即使预定运行时没有浏览器会话,也仍然可以读取仓库。该授权永远不会离开服务器——API 返回 has_token,而不是令牌——如果 GitHub 已拒绝某个令牌,系统会提示“重新连接此仓库”,而不是默默重试。
有两项内容会在你未添加的情况下出现,且在此处都不能重命名、暂停或移除:
- 此网站的仓库——用于构建文档的仓库。它已经在被读取;让你“连接”它会暗示它此前并未连接。
- 来自 Branding——如果你的工作区设置了网站来源 URL,则会显示该 URL。它仍位于 Branding 卡片上。
再次粘贴已连接的地址会更新该行,而不是失败或创建重复项;如果重新粘贴时没有添加备注,也不会清除你第一次输入的备注。
哪些内容会读取已连接的来源?#
只有三类,没有其他内容。已连接的来源不会按定时器抓取,不会添加到已发布的文档中,也不会被文档网站上面向读者的聊天功能搜索——该聊天功能只会从你自己的页面中作答(回答质量是它使用的处理流程)。
管理面板中的助手。 list_sources 和 read_source 位于其基础工具箱中,而不是隐藏在查找功能之后,因为发现某项能力需要额外往返请求时,模型就会转而凭记忆作答——这些来源正是为了防止这种确切的失败情况而存在。
你自己的 MCP 代理。 通过项目的 MCP 端点使用相同的两个工具,此外还有 connect_source 和 configure_source,无需打开浏览器即可设置代理。后两者需要读写 MCP 令牌。
后台运行。 计划提示和代理运行也会读取这些来源,这正是它们最重要的地方:因为那里没有人坐着粘贴链接。
并非每次自动运行都会访问某个来源,因此面板会标明哪些运行会访问,而不是暗示它们都可以访问。在列出运行的位置,标记会显示为三种状态:
- 亮起 — 此运行会获取该来源:你网站的页面、你代码库中的文件。
- 未亮起 — 此运行知道该来源已连接并会提及其名称,但从未声明会离开当前属性范围,因此不会获取它。请改为询问助手;它没有这样的限制。
- 完全没有 — 此运行不会访问任何来源。设置写入不应读取你的代码库,而此处显示标记则会传达相反的信息。
源是如何获取的,返回的内容有多新?#
不会预先获取任何内容,也不会镜像任何内容。工具请求读取时,才会针对实时地址进行读取,其限制如下:
| 代码仓库 | 网站 / 页面 | |
|---|---|---|
| 不带路径读取 | 可读取的文件列表,按 README → docs/、guides/、specs/ 下的正文 → 其他正文 → 根目录配置 → 其他所有内容排序,最多前 300 个路径 |
最多 10 个页面,从 sitemap.xml 中发现 |
| 带路径读取 | 默认分支中的该文件 | 根据源自身的 URL 解析出的该页面 |
| 大小上限 | 每个文件 25,000 个字符,截断时会报告 | 单个页面 25,000 个字符;多页面读取时每页 8,000 个字符 |
| 其他可用内容 | 最近的 10 次提交 — sha、主题、作者、日期,以及仓库的默认分支;对于仓库文件夹则限定在对应路径下 | — |
| 新鲜度 | 默认分支缓存 1 小时,文件树缓存 5 分钟;文件内容和提交不使用缓存,每次都重新获取 | 实时获取,每次调用都会重新获取 |
| 超时 | 由 GitHub 自行决定 | 每页 15s,站点地图 8s |
代码、锁文件和构建输出会从列表中筛除(node_modules、dist、build、.next、coverage 等),但不会从读取结果中筛除:带路径的 read_source 可以获取任何文件,筛选器只决定哪些内容会在未被请求时不显示名称。
站点地图范围按路径边界匹配,而不是按字符串前缀匹配。Connect acme.com/docs 和 /docs-for-fintech 不会被纳入其中。对于站点地图下没有列出任何内容的分区,只会回退到入口页面,而绝不会回退到整个网站;结果会说明三种情况中的哪一种:页面来自站点地图、网站有站点地图但你的分区下没有内容,或根本没有站点地图。一次精简读取绝不允许被当作一个内容精简的网站。
每次出站获取都会经过 Docsbook 网页读取所使用的同一套防护机制:会遵守 robots.txt,重定向会手动跟随,并在最多五次跳转中的每一跳重新验证地址;同时会拒绝私有地址段和链路本地地址段,因此公共 URL 无法跳转到云元数据端点。使用 JavaScript 渲染内容的页面会返回“未找到可读取文本”的说明,而不是空页面。
在线、暂停,以及绿色圆点的含义#
每个已连接的来源都会显示一个绿色圆点和在线一词。暂停的来源会显示一个灰色圆点和已暂停。
在线表示来源已连接,您的代理可以读取它。这不是健康检查。不会向主机发送 ping,也不会检查存储库是否仍然存在。真正可靠的信号是上次使用时间列,该列仅在工具实际成功获取来源时写入——获取失败时不会记录时间。
断开连接会保留该行,并停止所有读取它的操作;再次按下它(此时显示为连接)即可恢复。移除会彻底删除该连接,以及附加到该连接的任何 GitHub 授权。打开会访问该地址。停止读取来源有两种方式,这是有意为之的:“暂时停止读取此来源”不应导致您稍后重新输入地址。
当无法读取源时会发生什么#
每次失败都会给出下一步操作,而不会返回空结果:
| 情况 | 工具返回的内容 |
|---|---|
| 源已暂停 | 指出该源,并说明它已在此工作区的 Sources 选项卡中关闭 |
| 无法加载存储库树 | “该存储库可能是私有的、已重命名或已删除。应直接说明这一点,而不是凭记忆回答其中包含什么。” |
| 文件路径错误 | 建议先列出存储库 — 文件可能位于其他文件夹下 |
| 私有存储库中保存的授权已停止工作 | “GitHub 拒绝了使用为其存储的授权进行的操作。请从 Sources 重新连接存储库。” — 绝不会返回空的提交列表 |
网站宕机、阻止服务器端抓取,或不允许 robots.txt 中的路径 |
说明具体是哪种情况,并表示应报告该情况,而不是凭记忆描述网站 |
| 完全没有连接任何内容 | NO_SOURCES,并附带“不要自行编造一个” |
最后一行正是整个设计的核心。源所防止的失败模式不是错误消息 — 而是一段关于无人读取过的存储库的自信描述。
读取来源的成本是多少?#
来源本身连接和保留都是免费的。通过 MCP 调用时,四个工具中有两个会按用量计费,价格取决于实际提供这些服务的成本:
list_sources读取 Docsbook 已存储的行,按普通读取计费。read_source会离开 Docsbook 网络,访问 GitHub 或某个网站——而网站来源会在一次调用中获取多个页面——因此按出站调用计费,与fetch_url属于同一类别。
两者的费用都会从发起调用的项目余额中扣除。具体金额请参阅定价页面。
为什么这是正确的方法(证据)#
| Docsbook 中的规则 | 有效原因 | 来源 |
|---|---|---|
| 获取源内容,而不是要求模型回忆 | 在一个针对当前世界知识问题构建的基准测试中,“所有模型(无论模型规模大小)在涉及快速变化的知识和错误前提的问题上都表现不佳”——你的价格、限制和端点正属于这类事实 | Vu 等,2023 年 — FreshLLMs(ACL 2024 论文集) |
| 无论使用什么模型,都应将助手自身的知识视为过时的 | Docsbook 管理员助手背后的模型公布了“知识截止时间”为“2026 年 2 月”。你的产品在其提供商知识截止时间之后发生的任何变化,只有在模型获取到相关内容时才对它可见 | OpenRouter — gpt-5.6-luna 模型页面(供应商报告) |
| 从网站自身的站点地图中发现页面,而不是猜测路径 | <loc> 包含“页面的 URL”,并且该协议存在的目的就是让网站能够“向搜索引擎提供有关其页面的详细信息”——这是网站对“我有哪些页面”这一问题的自身回答 |
sitemaps.org 协议(规范) |
每次获取源内容时都遵守 robots.txt |
RFC 9309 规范化了“服务所有者[可以]控制其服务提供的内容如何被访问……访问者是被称为爬虫的自动客户端”这一机制 | RFC 9309(IETF 标准) |
| 将获取的源标记为可引用的数据,而不是要遵循的指令 | “当 LLM 接受来自外部来源(例如网站或文件)的输入时,就会发生间接提示注入”——模型读取的内容可能包含针对模型的指令 | OWASP GenAI — LLM01:2025 提示注入(行业标准) |
| 在每次重定向跳转时重新验证地址,并拒绝链路本地范围 | 云实例元数据通过链路本地地址提供——AWS 记录了 http://169.254.169.254/latest/meta-data/,“仅对实例有效”——因此,若重定向最终到达该地址,页面获取就会变成凭据读取 |
AWS — 访问 EC2 实例的实例元数据(供应商文档) |
限制#
- 源是按需读取的,不会被索引。 不存在后台爬取、存储副本,也不保证两次调用之间内容保持最新。工具看到的,就是该地址在当时提供的内容。
- 绿色圆点不代表可访问性检查。 见上文。一个今天早上被删除的仓库,在某个操作尝试读取它之前,仍会显示为在线。
- 手动输入的私有仓库会以公开仓库连接,且读取不到任何内容。 Docsbook 无法仅凭地址区分私有仓库和不存在的仓库。请使用能够进行区分的仓库选择器。
- 只有 GitHub 仓库会作为仓库读取。 GitLab 和 Bitbucket 行存在,但不提供连接选项;其中任一平台上的公开项目页面都可以作为网站连接,此时读取的是渲染后的页面,而不是目录树。
- 网站源不是爬虫。 每次调用最多读取十个页面,且仅从站点地图读取,不递归,也不跟随链接。大型文档网站最好作为其仓库进行连接。
- 由 JavaScript 渲染的页面返回为空。 抓取器不会执行脚本。结果会对此进行说明,因此空结果绝不会被报告为没有内容——但你仍然没有获得任何内容。
- 备注是指令,而你有责任确保其准确。 任何读取源的操作都会将你的备注作为指导。过时的备注(“v1 API,已弃用”)与正确的备注一样,都能有效地引导代理。
- 我们不会发布有关源在多大程度上减少错误答案的测量结果。 机制如上所述,相关证据来自外部;针对客户语料库进行前后对比的数值并不是 Docsbook 已经开展过的测量。请将“源能提高你文档的准确性”视为有充分支持的预期,而不是我们已经测量出的数据。