跳到主要内容

ARC 开发者文档

声明 agent 能看到什么

blocklet 只声明一次内容集合。这份声明决定每个集合抵达哪些面向 agent 的界面,以及匿名调用方能否读取它。

内容工具、按集合切分的 llms 分片、sitemap 和网页,都是 blocklet manifest 里同一份声明的投影。一个集合出现在某个面上,当且仅当声明里点名了那个面。

本页只讲这份声明中 agent 可观察到的部分。manifest 整体见 Blocklets

形状

yaml
collections:
  docs:
    scope: /packages
    indexable:
      - "content/docs/**/content.md"
      - "content/docs/**/content.zh.md"
    readRole: guest
    defaultLocale: en
    fields:
      nav-group: $.nav-group
    summary:
      - $.name
      - $.summary
    faces:
      web: true
      sitemap: true
      llms: true
      mcp: [search, list, get]

决定什么
indexable哪些文件属于这个集合
readRole没有凭证的调用方能否读它
fields哪些 front matter 成为内容工具上的过滤条件
summary结果中出现哪些 front matter,以及顺序
faces这个集合抵达哪些面

face 是显式开启且 fail-closed 的

省略 faces 会关闭所有面。省略 readRole 意味着该集合不匿名开放。两者都不默认开放,因此一个集合不会意外地抵达 agent。

faces.mcp 接受要暴露的动词。[search, list, get] 对应该集合的 search_contentlist_contentget_content

不同集合可以抵达不同的面

face 按集合分别选择,因此同一个 blocklet 可以把某个集合发布到网页,同时完全不让它出现在 agent 面上。

一个有五个集合的站点的实例:

集合websitemapllmsmcp
docsglossaryproducts
articles
events

这样划分背后是「什么值得占用 agent 的 token」这一判断,不是技术限制:参考资料值得进入文本面,大量历史帖子不值得,而一份过往活动清单两者都不服务。

声明是可观察的

不需要拿到 manifest 也能看出结果。两个从外部做的检查:

集合列表会出现在每个内容工具的描述和它的 collection 参数里,所以 tools/list 直接显示哪些集合有 mcp face:

text
Search published content by free text and optional facets. Collections: articles; docs; glossary; products

没有 mcp face 的集合不在这个列表里 —— 上表中就是 events

llms face 同样可见。有这个 face 的集合有分片,没有的返回 404

bash
curl -s -o /dev/null -w '%{http_code}\n' https://<host>/llms-docs.txt      # 200
curl -s -o /dev/null -w '%{http_code}\n' https://<host>/llms-articles.txt  # 404

匿名读取

readRole: guest 才使得没有凭证的调用方能通过内容工具读取该集合。没有它,工具照样注册,但那个集合对匿名调用方不可用。

无论哪种情况,工具名本身都在匿名白名单上;见工具