跳到正文
Hacker News· goodnight000·· 9 天前AI 评分71

API Anything 发布:把任意网站变成智能体可调用的 API

Turn any app/website into an API

AI 导读

API Anything 发布,通过记录网站自身页面发出的请求,把网站学习成可复用的 operation,智能体可用 MCP、CLI 或 TypeScript 调用并拿到 JSON。

正文 · AI 翻译

教你的智能体一次网站。之后,它就像调用 API 一样调用该网站,而不是驱动浏览器。

API Anything 会观察网站自身页面发出的请求,并学习其中哪些部分是你的输入。它把结果保存为一个操作。你的智能体通过 MCP、CLI 或 TypeScript 用新的输入调用该操作,并通过纯 HTTP 拿回 JSON。

Two agents race on the same Google Flights task: one drives Chrome, one calls API Anything

同一个智能体(Claude Opus 5.5),同一个提示词,同时启动。左:它通过 Playwright MCP 驱动无头 Chrome。右:它调用 API Anything 的 Google Flights 操作。以 3 倍速播放,无剪辑;计时器显示真实经过的时间。录制于 2026-09-28。MP4 · 录制方式

Median time and cost per task. 1 date: browser 12.9 s and $0.166, API Anything 8.4 s and $0.074. 5 dates: browser 41.6 s and $0.154, API Anything 21.1 s and $0.152.

每个任务各运行 5 次,使用 API Anything 的智能体回答快 1.5 到 2 倍,读取的 token 大约只有一半,成本相同或更低。全部 20 个答案都正确。 方法、原始数据和局限。

安装

把这段粘贴到 Claude Code、Codex 或其他编码智能体中:

Set up API Anything for me: https://github.com/goodnight000/api-anything/blob/main/INSTALL.md

智能体会检查 Node 22.13+,构建并安装 api-anything 命令,确认调用可用,然后把 MCP 服务器和技能连接到自身。重启智能体,然后问它类似“Goodreads 给 Piranesi 打几分?”的问题。

手动安装

该包尚未发布到 npm。不要使用 npm install -g github:...,因为它在 npm 11 下会失败。

git clone https://github.com/goodnight000/api-anything.git && cd api-anything
npm ci && npm install -g "$(npm pack --silent)"
api-anything call hacker-news search query=sqlite
{"ok":true,"class":"ok","tier":1,"data":[{"title":"Hosting SQLite databases on GitHub Pages or any static file hoster","url":"https://phiresky.github.io/blog/2021/hosting-sqlite-databases-on-github-pages/", ...}, ...],"ms":111}

tier: 1 意味着不使用浏览器的纯 HTTP。失败会返回 ok: false,其中包含 class、reason 和 next 步骤。用 codex mcp add api-anything -- api-anything mcp、claude mcp add --scope user api-anything -- api-anything mcp 或这个 MCP 条目连接智能体:

{ "mcpServers": { "api-anything": { "command": "api-anything", "args": ["mcp"] } } }

通过 MCP,智能体调用操作,使用四个工具:list_sites、list_operations、call_operation 和 login。要创建操作,智能体需要一个 shell 和技能。只有在创建操作和浏览器回退时才需要 Google Chrome。设置详情。

教它一个新网站

给它带占位符的页面 URL,以及两个示例输入:

api-anything add hn-demo links \
  --trigger 'https://news.ycombinator.com/from?site={domain}' \
  --example domain=github.com --example2 domain=github.io --match path=/from \
  --html '{"items":"tr.athing","fields":{"title":".titleline > a","url":".titleline > a@href"}}'

api-anything call hn-demo links domain=arxiv.org      # 30 arxiv.org stories, tier 1

无头 Chrome 为每个示例加载一次页面。请求中随输入变化的部分成为参数,其余部分存储为模板。智能体(或你)选择请求和字段。API Anything 无需 LLM 即可构建模板。 录制演示。

从意图出发映射网站

告诉智能体你需要从某个网站获取什么。技能会让它按顺序执行以下操作:

  1. 询问请求中任何不清楚的地方。
  2. 提出操作并等待你的批准。
  3. 用 capture --outline 侦察每个页面。这是每个请求返回内容的摘要,这样智能体就不必读取完整响应。
  4. 构建每个操作,并用一个非示例的输入进行检查。

Goodreads 自 2020 年起就没有公开 API。一次运行耗时 6.3 分钟,花费 1.19 美元。它生成了搜索、书籍详情、某位作者的书和评论:

api-anything call goodreads searchBooks q=piranesi
api-anything call goodreads getBook bookId=50202953
Goodreads, median of 5 runs. 1 book: browser agent 16.8 s and $0.156, API Anything 14.4 s and $0.048. 5 books: browser 182.5 s and $0.122, API Anything 30.5 s and $0.107.
  • 在未见过的书籍上测试。测试使用了 30 本书,构建操作期间没有人用过这些书。对于搜索找到的 29 本书,每个检查的字段都与 Chrome 渲染的页面匹配:标题、评分、评分数量和页数。全部 146 次调用都通过纯 HTTP 进行。
  • 智能体对比。使用这些操作的智能体在 30.5 秒内回答了 5 本书;浏览器智能体用了 182.5 秒。对于一本书,成本只有三分之一。
  • 无需智能体。一个普通脚本(examples/reading-list.mjs)在 16 秒内构建出同样的五本书表格,无需模型。

它是如何被探索、测试和对比的。

包含内容

9 个网站上的 22 个读取操作:

  • google-flights:搜索、热门航班、价格日历
  • hacker-news
  • x 和 instagram 个人资料
  • 在 youtube、airbnb 和 amazon 上搜索
  • linkedin:个人资料、公司和搜索,使用你自己的登录
  • goodreads:搜索、图书、作者列表和评论,均由上方的探索器构建

它们只覆盖选定的功能,而非整个网站。api-anything ops <site> 列出了参数和注意事项。

工作原理

  • 学习。Chrome 会记录页面针对两个示例输入发出的请求。跟随这些输入之后的请求会变成一个带槽位的模板,而 cookie 和令牌则变成对本地存储的引用。
  • 调用。填充槽位,并用 Node 的 fetch 发送请求。如果网站拦截了该请求,就从 Chrome 页面内部发起抓取。作为读取操作的最后手段,运行页面本身并读取它自己的响应。
  • 修复。如果请求停止工作(id 轮换、字段移动),就重新学习它,并且只有在重放成功后才保存新版本。否则调用会返回错误,而不是别人的数据。

详情 · 设计

限制

  • 它是一个本地工具,不是托管 API。它使用你的机器、你的网络和你的会话。
  • 它只知道被教过的操作。它并不支持每个网站的所有功能。
  • 修复可能会失败。它不解决 CAPTCHA,如果网站对真实 Chrome 发起挑战,你必须手动通过挑战。
  • 没有捆绑任何写操作。LinkedIn 消息功能未捆绑,也未针对 LinkedIn 进行过测试。写操作仅针对本地测试夹具进行过测试,并且需要 --allow-writes。HTTP 2xx 并不能证明消息已送达。
  • 凭据保存在 ~/.api-anything 中,而规格只保存引用,绝不保存值。请阅读每个网站的条款:你要为自己的使用方式负责。

所有限制

文档

基准测试 · 演示 · 面向代理的设置 · 参考 · 设计 · 发布检查 · 贡献

MIT 许可。

来源:Hacker News · github.com