@agntn/web (韩语)
十三个搜索API,一个 { url, title, snippet }。你用同样的方式问 Exa, Brave 或你自己的 SearXNG, 你读的页面 后面的一击相同的方式, 没有人会记得 哪个键走进哪个标题.
为什么?
每个搜索API都卖出相同的东西,有10个有标题和片段的链接,每个链接都采用不同的顺序. 埃克萨想要一个POST与 x-api-key勇于行动 X-Subscription-Token塔维利把钥匙放在JSON体内 为什么不呢? 将其中的3个连接到一个特工中 你有三个客户 3个响应形状 以及3个关于日期的想法 所以这是其中13个前面的一个类形状, 搜索,读取和反向图像搜索, 不管是谁回答, 相同的对象都出来了.
医生和一个活探险家: 互联网档案馆的存檔,存档日期2013-12-04。 。 。 .
* 特性
- 🧩 13个后台,一个合同. Brave, Contex.dev, Exa, Firecrawl, Jina, 玛吉纳利娅, Mojeek, OpenAI Codex, SearXNG, SerpAPI, SerpBase, Tavily and TinyFish, 从你这边看, 区别是弦.
- 🔎 搜索,读取,反向图像. 查询结果, URL 到Markdown, 图像 URL 到它显示的页面 。 三个电话,不是三个包裹.
- 🕵️ 页面所隐藏的. 注释,隐藏的形式字段,隐形字符,白上白文字.
web reveal从 HTML 直接逐行列出. - 🌐
all意为一切. 每一个有钥匙的供应商都有一个查询, 被URL拆掉的UTM垃圾. - 🛟 退后不写. 从Firecrawl的信贷中, 利率限制在 SerpAPI 上? 下一个配置的提供者会得到查询和实际回复的答案名.
- 📏 读者有天花板.
maxChars准确的,在代码点中计算, 和一页不匹配的手 一个续作符而不是你没有要求的 400 kB. - 📄 第二页存在. 勇者斗恶龙、马吉纳利亚、莫杰克、SaerXNG、SerpAPI、SerpBase和TinyFish的页面通过结果显示不透明符号.
- 🤖 一个包裹,六个门. CLI,库,AI SDK工具,一款MCP服务器,一款Pi扩展和一款OMP扩展,出道后JSON每款都是一样的.
- 🔐 钥匙不在你的日志里. 关键是从 URL 中被擦去的 在有错误说出来之前.
- 🧠 已登录的编码搜索 . 已签入 Codex, Pi, OMP 或 OpenCode 吗 ? OpenAI网络搜索运行于此,没有API密钥.
QQ 安装
pnpm add @agntn/web
节点.js 26或更新. AI SDK 工具打开 @agntn/web/ai 请求 ai 旁边有7个 主条目从来不碰它:
pnpm add ai
第一次通话
npx @agntn/web "how many r in strawberry"
How many 'r's are in strawberry? And do LLMs know how to spell? - DEV Community
https://dev.to/savannah_norem/how-many-rs-are-in-strawberry-and-do-llms-know-how-to-spell-2513
Well the short answers are three and kind of… but not really. ... Any which way you cut it, there are three ‘r’s in stra...
Language Log » "The cosmic jam from whence it came"
https://languagelog.ldc.upenn.edu/nll/?p=66206
Elle Cordova offers an update from ChatGPT on the number of Rs in "strawberry": ... As of this morning, ChatGPT 4o gives...
How many r are in strawberry? | AI Roundtable by Opper
https://opper.ai/ai-roundtable/questions/how-many-r-are-in-strawberry-fc2d3d2d
Answer: There are exactly three "r"s in the word "strawberry". (All 4 models agreed) ... Answer: There are 3 “r” letters...
三个 所有四个模式都同意,对它们有好处
没有副指挥 没有旗帜 任何没有的 search, (中文(简体) ), read, (中文(简体) ), search-image, (中文(简体) ), reveal, (中文(简体) ), providers 或者说 mcp 是一个查询。 哪个供应商回答? 第一个在您的嵌入器中带有密钥, 按此顺序检查 : exa, Brave, Contex. dev, Firecrawl, Jina, Tavily, TinyFish, SerpAPI, SerpBase, Mojeek, 玛吉纳利亚, 然后是保存的 Codex 登录, 然后是 SearXNG 打开 localhost:8080任何地方都找不到钥匙,就意味着没人可以打电话说. --provider brave 如果你宁愿选择.
阅读是不同的,一个工作 在你的洞里没有任何:
web read https://example.com
[provider=jina requested=auto] read https://example.com/
Example Domain
https://example.com/
This domain is for use in documentation examples without needing permission. Avoid use in operations.
[Learn more](https://iana.org/domains/example)
读数从Jina开始 r.jina.ai,不需要钥匙,然后转到背景。 德夫,Firecrawl,TinyFish,Tavily或Exa 当Jina失利,利率受限,下行或以409的回答. 第一行告诉你谁做了这个工作.
还有几把钥匙,允许:
web search "typescript 7" "node.js 26" --provider all --json
web search "rust 2027 edition" --provider brave --max-results 3
web search "typescript 7" --provider exa --summary --full-text
web search "typescript 7" --include-domains '["github.com"]' --start-published-date 2026-01-01
web read https://example.com --format markdown --max-chars 20000 --json
web search-image https://example.com/image.jpg --max-results 5
web providers
图标
| 命令 | 它会做什么 | 示例 |
|---|---|---|
web <query> | 用第一个配置的提供者搜索 | web "typescript 7" |
web search <query...> | 一个查询或批次,一个提供者或 all | web search "a" "b" --provider all --json |
web search-image <url> | 包含或类似于公共图像的页面 | web search-image https://.../logo.png |
web read <url...> | 一个 URL 或一个批次进入规范内容 | web read https://example.com --max-chars 20000 |
web reveal <url> | 页面对读者的隐瞒 | web reveal https://gsmg.io/theseedisplanted |
web providers | 谁被配置,谁能做什么 | web providers |
web mcp | Stdio上的 MCP 服务器 | web mcp |
--provider 财务报告和审定财务报表 --max-results 在每次搜索中工作。 域名,出处,分类和日期过滤器到了解它们的提供者那里去,被报道为忽略了那些没有被忽略的提供者. 列表为JSON阵列. 无 --json 你读一个模型读 --json 打印下的数据 result,同一对象的MCP发送。 满旗名单在 CLI 指南。 。 。 .
图书馆
import { create, readUrl, searchAll } from "@agntn/web";
const exa = await create("exa"); // reads EXA_API_KEY, loads the Exa adapter and nothing else
const results = await exa.search("typescript runtime benchmarks", { maxResults: 5 });
for (const result of results) {
console.log(result.title, result.url);
}
const everything = await searchAll("typescript runtime benchmarks"); // every configured provider, deduplicated
console.log(everything.map((result) => [result.url, result.providers]));
const page = await readUrl("https://example.com", { format: "markdown", maxChars: 20_000 });
console.log(page.title, page.truncated, page.continuation);
这是大部分,真的. create("brave") 改为 create("exa") 代码里没有其他变化 导入包装入没有适配器, create() 输入您命名的, 然后再运行. searchWithFallback() 选择 CLI 会告诉你的提供者 attempts 他们沿途辍学. searchProviderDetailed() 是同一个搜索与 pagination 附加,通过 continuation 回到第二页 错误是一个家族: 401是 AuthError,使用过的贷项为: PaymentError 不管他们隐藏什么身份 429是 RateLimitError 与 retryAfter,没有任何反应 HTTPError 与状态0 和下面的真正原因。 细节和教训: 搜索中, (中文(简体) ), 风扇出, (中文(简体) ), 阅读, (中文(简体) ), 反向图像搜索。 。 。 .
提供商
| 提供者 | 认证 | 对 | 过滤器 | 页 次 |
|---|---|---|---|---|
| 勇士们 | BRAVE_API_KEY | 搜索 | 日期 | 对 |
| 上下文 | CONTEXT_DEV_API_KEY | 搜索, 读取 | 域 | |
| exa (英语) | EXA_API_KEY | 搜索, 读取 | 域、 类别、 日期 | |
| 相接线 | FIRECRAWL_API_KEY | 搜索, 读取 | 域、来源、类别 | |
| 吉纳 | JINA_API_KEY改为: | 搜索, 读取 | 包括域、 类别 | |
| 边际 | MARGINALIA_API_KEY, (中文(简体) ), public 名称时键 | 搜索 | 无 | 对 |
| 摩吉克语name | MOJEEK_API_KEY | 搜索 | 域,日期 | 对 |
| 打开编码x | 现有登录, 可选 OPENAI_CODEX_ACCESS_TOKEN | 搜索 | 无 | |
| 搜索 | 没有,你自己的情况 | 搜索 | 类别 | 对 |
| 塞尔帕皮 | SERPAPI_API_KEY | 搜索, 搜索图像 | 日期 | 对 |
| 螺旋基团 | SERPBASE_API_KEY | 搜索 | 类别 | 对 |
| 轻快地 | TAVILY_API_KEY | 搜索, 读取 | 域、 类别、 日期 | |
| 小鱼 | TINYFISH_API_KEY | 搜索, 读取 | 域、 类别、 日期 | 对 |
Codex是出局的奇数:没有密钥,它借用了您已经在Codex, Pi, OMP 或 OpenCode 中的登录,以及 snippet 由于模型的答案不是页取出,所以返回为空. 每一个都填什么, 过滤它的荣誉和它咬的地方: 供应商。 。 。 .
代理人
web mcp
pi install git:github.com/agntn/web
omp install @agntn/web
{
"mcpServers": {
"web": { "command": "npx", "args": ["-y", "@agntn/web", "mcp"] }
}
}
web_search, (中文(简体) ), web_image_search, (中文(简体) ), web_read, (中文(简体) ), web_reveal 财务报告和审定财务报表 web_providers,每个定义一个, AI SDK上的同一套(@agntn/web/ai),MCP,Pi,OMP和CLI. 除非模型要求更多,否则阅读会停留在20000个字符,页面链接列表和搜索结果的favicon URL不在此列,除非它也要求这些,所以没有人偶然将整个网站输入上下文窗口. Pi也会得到 /web 财务报告和审定财务报表 /web-providers每个主机的外观和信封: 代理指南。 。 。 .
~ 这不起作用 ~
没有浏览器 。 这里没有任何东西可以让JavaScript,爬行一个站点或取一个截图,以及 search-image 发送一个 URL 并获取页面返回, 它后面没有 OCR 或图像分析 。 昨天的页面版本是 @agntn/存档。 。 。 .
++ 添加提供者
错过你最喜欢的引擎了吗? 扩展 Provider,执行 search, (中文(简体) ), read 或者说 searchByImage电话 register(),和CLI,工具和 all 查看它时没有要编辑的名称 tuple。 一个建筑在其中 得到一个条目 在清单在 src/providers/index.ts 相反,凭借它的能力和懒惰 import() 中,加上其行码 builtinProviders。 。 。 . test/index.test.ts 财务报告和审定财务报表 test/unit/providers-manifest.test.ts 如果你忘了,会告诉你的 合同规定: 自定义提供者。 。 。 .
发展
vp install # installs the library and docs
vp check # format, lint and type-check
vp test
vp run build # obuild, straight into dist/
vp run docs # Docus on :3000, bundling src/ itself
谢谢
这个软件包的存在得益于两个开源程序, Claude 打开源代码 在雅典和纽约 开源代码 在开放AI.