# @framers/agentos-ext-public-sources 中文文档

规范地址：https://npmcn.com/package/%40framers/agentos-ext-public-sources/

版本：0\.2\.3
npm 元数据更新时间：2026-11-11T16:29:41.711Z
中文译文更新时间：2026-11-15T11:53:19.145Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40framers/agentos-ext-public-sources
原文对照：https://npmcn.com/package/%40framers/agentos-ext-public-sources/?lang=original
项目主页：https://github.com/framerslab/agentos-extensions/tree/master/registry/curated/research/public-sources#readme
源码仓库：https://github.com/framerslab/agentos-extensions

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：85.7 kB，28 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：1 个
- peer 依赖：@framers/agentos \>=0\.10\.40
- 首次发布：2026-10-10T02:00:28.202Z
- 最新版本发布：2026-11-11T16:29:41.312Z
- 近 30 天下载量：30215（2026-10-16 至 2026-11-14，npm 官方下载统计）
- 已发布版本数：6（近 12 个月 6 个）

## 中文简介

AgentOS 引用检查的公开来源:英语维基百科的搜索和页 HTML作为可归属段落

## 安装

```sh
npm install @framers/agentos-ext-public-sources
```

也可以使用：`pnpm add @framers/agentos-ext-public-sources`、`yarn add @framers/agentos-ext-public-sources`、`bun add @framers/agentos-ext-public-sources`

## README

# @ framers/ agentos-ext- public- sources (英语)

AgentOS引用检查的公开来源. 特工系统 `CitationVerifier` 这个图书馆从公共来源取取这些段落并保留其归属。 它载着英国维基百科的供应商 `PublicSourceProvider` 界面:通过一个简短的专题短语进行搜索,用其键读取被击中的页 HTML,以及文章作为纯文本的块,其页名、参考标记、维护标记、表格、数字、引文、代码、数学和导航被删除.

`citationSources(document, cut)` 将取来的文章变成段落,每个句子一个 `cut` 每个街区都有 一个段落是 `VerificationSource` (单位:千美元)`content`, (中文(简体) ), `title`, (中文(简体) ), `url`),也带有站点,文章的钥匙,其修改,被读取的时间,许可证,句子的块并抵消. 图书馆没有自己的句子规则:通过你的管线其余部分使用的句子,所以权利主张和通道同样被剪去.

## 安装

```bash
npm install @framers/agentos-ext-public-sources
```

它需要节点22或以后,因为 `@framers/agentos` 已经 它的一次性依赖是 [htmlparser2 软件](https://github.com/fb55/htmlparser2)· ; `@framers/agentos` 是一个同行.

以下例为其句子规则, `sentenceSpans`从 `values` 地面警卫的进入, 包自己的。 安装到此边, 将示例按正文运行, 或通过任何函数, 将一个块的句子解析为:

```bash
npm install @framers/agentos-ext-grounding-guard
```

## 示例

```ts
import { citationSources, SourceLimiter, WikipediaSourceProvider } from '@framers/agentos-ext-public-sources';
import { sentenceSpans } from '@framers/agentos-ext-grounding-guard/values';

const wikipedia = new WikipediaSourceProvider({
  client: { name: 'MyApp', version: '1.2.0', contact: 'https://example.org/contact' },
  limiter: new SourceLimiter(), // one for every caller on this host: Wikimedia's limits apply per client
});
const found = await wikipedia.search('Treaty of Versailles', { limit: 2 });
if (found.kind === 'hits' && found.hits[0]) {
  const page = await wikipedia.read(found.hits[0]);
  if (page.kind === 'document') {
    const passages = citationSources(page.document, sentenceSpans); // VerificationSource[] with attribution
  }
}
```

## 读取任何页面

`htmlToBlocks(html, { mode: 'page' })` 读取非百科全书文章的一页,如引用名的一页. 它保留了表格,数字,引文,代码和笔记的页面显示,使每个表格单元格,标题,引文和代码都屏蔽了自己的块,因此两个单元格从未读作一句. 它仍然会降低页面本身的标题,脚本,样式,模板,内置的SVG,数学,元素带有 `hidden` 属性,以及维基百科的参考标记,维护标记,参考列表和导航框. 文章模式,即默认,是维基百科提供者所读取的.

```ts
import { htmlToBlocks } from '@framers/agentos-ext-public-sources';

const html = '<table><tr><th>Plan</th><td>$20 per month</td></tr></table>';
htmlToBlocks(html, { mode: 'page' }); // ['Plan', '$20 per month']
htmlToBlocks(html); // []: the article mode drops tables
```

## 结果

`search` 回答如下:

-   `{ kind: 'hits', hits }`最多为 `limit` 点击数( 默认为2个), 每一个都有一个 `key` (单位:千美元) `title`· ;
-   `{ kind: 'limited' }`: 限制器拒绝, 或您的 `onSend` 没有,没有寄出去;
-   `{ kind: 'failed', status }`: 当一个答案出现时, HTTP 状态, `null` 对于一个运输故障,截止日期,或者一个没有地址的短语(一个持有替代对的一半),没有发送任何信息.

`read` 答题 `{ kind: 'document', document }`, (中文(简体) ), `{ kind: 'limited' }`,或 `{ kind: 'skipped', status }` 对于不是200 HTML 的答案,一个超过大小上限的答案,一个运输失败,一个最后期限,或者一个无法携带地址的密钥。 拒绝或失败时不使用任何方法; 中止自己的 `signal` 抛出它的理由.

`onSend` 一旦搜索有其插槽,并在发送之前运行。 掷出 `new LimiterRefused('caller')` 从它进行搜索,直到达到你自己的配额;搜索然后回答 `limited` 没有寄出 限制器也没有用完 当搜索发送时, 在之后, 一个搜索的开始 `onSend` 已经安定下来了 所以 `onSend` 这需要一段时间,从未将两个请求比间隔更接近。 搜索还可以回答 `limited` 之后 `onSend` 当一个429或一个503同时阻断了限制器,或当间隔将超过2秒时,则已运行,没有发送任何信息(`waitMs`(时间) `onSend` 磁带不计为等待.

## 维基媒体的限制和用户代理

每个请求都经过一个 `SourceLimiter`:最多一次3个,至少相距250米(5秒以内),最多200个在任何60秒内开始,最多2秒后等待一个槽或间隔,在429个或503个之后,一个街区直至 `Retry-After` 已经过去了( 5秒, 当信头缺失, 最多一小时) 。 3分一秒,5分一秒,200分一秒,5秒是维基媒体的 [费率限额](https://www.mediawiki.org/wiki/Wikimedia_APIs/Rate_limits) 财务报告和审定财务报表 [机器人政策](https://wikitech.wikimedia.org/wiki/Robot_policy) 给一个未认证的客户端一个符合要求的用户代理;2秒等和小时上限是这个库的自有.

限制适用于每个客户,限制者只计算自己程序的要求。 一个提供者在无一被通过时会自己做一个限制器,所以在一个过程中给每个提供者一个相同的一个,当一个主机上的若干个进程读取维基百科时,通过其中一个发送他们的请求.

提供者发送用户代理 `<name>/<version> (<contact>)`,维基媒体的形式 [用户代理政策](https://foundation.wikimedia.org/wiki/Policy:Wikimedia_Foundation_User-Agent_Policy) 在政策允许的情况下,将图书馆部分排除在外。 给客户端自己的名字和版本,并联系策略接受:网站,电子邮件地址或维基用户. 每个请求都会发出 `Accept-Encoding: gzip`正如机器人政策所要求, 不再遵循方向, 也不发送饼干.

## 大小和最后期限

| 选项 | 默认 | 它的束缚 |
| --- | --- | --- |
| `timeoutMs` | 3 000个 | 从发送到阅读其身体 |
| `searchMaxBytes` | 65 536个 | 一个搜索答案的身体 |
| `pageMaxSentBytes` | 1 500 000美元 | 页:1 `content-length` 宣布一个页面答案 |
| `pageMaxBytes` | 6 000 000美元 | 页面上的身体曾经被解开 |
| `textBudget` | 30万个 | 从一页中保留文本的字符 |

页面答覆可能不宣布长度( 块形的答案从未如此), 因此 `pageMaxBytes` 是每个读数的上限.

## 归属

维基百科中的相关条目: 克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克 [CC BY-SA 4.0 (英语)](https://creativecommons.org/licenses/by-sa/4.0/),每个文件和通道都标注为 `licence` (单位:千美元)`WIKIPEDIA_LICENCE`) (中文(简体) ). 无论你在哪里展示一个通道, 显示它:

-   该句,作为 `content` 拿着它;
-   与本条款的联系(`url`),以其名称命名 `title`· ;
-   "CC BY-SA 4.0",链接到 `licence.url`· ;
-   文本被修改:库去掉了参考标记和维护标记并崩溃了白空间,而CC BY-SA 4.0要求一个再用户"如果修改了许可的材料"(其第3(a)(1)(B)节) [法典](https://creativecommons.org/licenses/by-sa/4.0/legalcode.en)) (中文(简体) ).

维基百科上的相关页面 [重新使用其内容](https://en.wikipedia.org/wiki/Wikipedia:Reusing_Wikipedia_content) 完整描述归属. `revision` 财务报告和审定财务报表 `readAt` 指定一个段落的准确文本.

## 页面路径

提供者从 `/api/rest_v1/page/html/{key}` (单位:千美元)`PAGE_PATH`),缓存接口 机器人政策名称. [RESTBase 软件](https://www.mediawiki.org/wiki/Wikimedia_REST_API),它背后的服务, 正在贬值:通过 `pagePath: '/w/rest.php/v1/page/{key}/html'` 从MediaWiki自己的REST API读取相同的HTML。 读取使用搜索点击器 `key`,所以它不遵循方向;在两条路径上重定向答案307和读取答案的标题 `skipped`。 。 。 .

## 文档的字段

A 类 `SourceDocument` 是供货商的 `read` 答案 : `site` (消息来源的名字作为一个读者看到它), `key`, (中文(简体) ), `title`, (中文(简体) ), `url` (地址是归属链接), `revision` (当源名称无时取消), `readAt` (取出时,以毫秒计), `licence` (单位:千美元)`name` 财务报告和审定财务报表 `url`和 `blocks`。有两个字段是可选的,对于从页面读取它们的来源: `publisher`,网站的名称作为页面说明 `pageDate`,页面以毫秒表示自己的日期。 维基百科的供应商没有设置; `@framers/agentos-ext-citation-check`网页来源将每个页面设置在其中.

## API 密码

| 导出 | 这是什么 |
| --- | --- |
| `PublicSourceProvider` | 公共源执行的接口: `site`, (中文(简体) ), `search(phrase, options)`, (中文(简体) ), `read(hit, options)` |
| `WikipediaSourceProvider` | 英文维基百科的提供者,或另一个维基通过 `origin` |
| `SourceLimiter`, (中文(简体) ), `LimiterRefused`, (中文(简体) ), `retryAfterMs` | 限制器、其拒绝和 `Retry-After` 读取 |
| `htmlToBlocks(html, { budget, mode })` | HTML 作为纯文本的块, 白空间崩溃了, 在 NFC 中: 文章的散文 (`article`,默认值)或页面显示的一切(`page`(中文(简体) ) |
| `citationSources(document, cut)` | 取来的文章作为其归属和位置的段落 |
| `wikipediaUserAgent`, (中文(简体) ), `articleUrl`, (中文(简体) ), `WIKIPEDIA_LICENCE`, (中文(简体) ), `SEARCH_PATH`, (中文(简体) ), `PAGE_PATH` | 用户代理、文章地址、许可证和提供者使用的路径 |
| `SourceHit`, (中文(简体) ), `SourceDocument`, (中文(简体) ), `CitationSource`, (中文(简体) ), `SourceLicence`, (中文(简体) ), `SearchOutcome`, (中文(简体) ), `ReadOutcome`, (中文(简体) ), `CallOptions`, (中文(简体) ), `WikipediaOptions`, (中文(简体) ), `WikipediaClient`, (中文(简体) ), `LimiterOptions`, (中文(简体) ), `BlockMode`, (中文(简体) ), `HtmlToBlocksOptions` | 点击类型、文件、段落、结果和选项 |

## 许可证

阿帕奇 - 2.0

## 常见问题

### @framers/agentos-ext-public-sources 是什么？

AgentOS 引用检查的公开来源:英语维基百科的搜索和页 HTML作为可归属段落

### 如何安装 @framers/agentos-ext-public-sources？

在项目目录运行 npm install @framers/agentos-ext-public-sources，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@framers/agentos（\>=0\.10\.40）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @framers/agentos-ext-public-sources 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @framers/agentos-ext-public-sources 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @framers/agentos-ext-public-sources 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @framers/agentos-ext-public-sources 可以商用吗？

@framers/agentos-ext-public-sources 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @framers/agentos-ext-public-sources 的下载量有多少？

根据 npm 官方下载统计，@framers/agentos-ext-public-sources 在 2026/10/16 – 2026/11/14 这 30 天内被下载 30,215 次，日均约 1,007 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @framers/agentos-ext-public-sources 还在维护吗？

最新版本 0\.2\.3 发布于 2026/11/12（4 天前）；至今共发布 6 个版本，其中过去 12 个月发布了 6 个；首次发布于 2026/10/10。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

