# @framers/agentos-ext-pii-redaction 中文文档

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

版本：0\.3\.4
npm 元数据更新时间：2026-11-13T05:21:25.018Z
中文译文更新时间：2026-11-15T12:01:30.764Z
软件包许可：Apache-2\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40framers/agentos-ext-pii-redaction
原文对照：https://npmcn.com/package/%40framers/agentos-ext-pii-redaction/?lang=original
项目主页：https://agentos.sh/
源码仓库：https://github.com/manicinc/voice-chat-assistant

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

- 包体积（解压后）：659 kB，78 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：@framers/agentos \>=0\.12\.0
- 首次发布：2026-03-21T23:06:26.940Z
- 最新版本发布：2026-11-13T05:21:24.744Z
- 近 30 天下载量：22709（2026-10-16 至 2026-11-14，npm 官方下载统计）
- 已发布版本数：8（近 12 个月 8 个）

## 中文简介

四级PII检测和校正

## 安装

```sh
npm install @framers/agentos-ext-pii-redaction
```

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

## README

# @ framers/ agentos-ext-pii-redaction 页面存档备份,存于互联网档案馆

四级 PII 检测和校正 [`@framers/agentos`](https://github.com/framerslab/agentos)护栏从代理投入和产出中取出个人可识别的信息 `redactPii()` 对于您即将放入提示、 存储或日志的任何字符串, 都会做同样的操作 .

## 它会做什么

探测管道`PiiDetectionPipeline`分为四级,每级工作需要时:

1.  **缩写**数字 : [打开](https://www.npmjs.com/package/openredaction)'是电子邮件,电话号码,SSN,卡片号码,IBANs,API密钥,AWS密钥,护照,驾驶执照,政府身份证,IP地址,出生日期和密码地址的图案. 当请求的类型需要时运行, 并关闭了 Openredaction 的假阳性过滤器: 当一个词开头的" on","after"或"address"坐落在其中的50个字符之内时, 该过滤器会丢掉一个电话号码, 和一个链接"/"附近的电子邮件地址. 每个图案的验证器仍然运行. openredaction的名称模式没有被使用:它需要大写单词,然后最多可以写出3个字,所以它读作"从树枝来你好"和"这里是天气"作为名称,标题Case标题如"Next Stepes"也使用. 名称为二级和三级. 何时 `entityTypes` 名称 `STREET_ADDRESS` 或者说 `SOCIAL_HANDLE`,这两类类型的包的图案代码也在这个层次上运行([下级](https://npmcn.com/package/%40framers/agentos-ext-pii-redaction/#readme-street-addresses-and-social-handles)) (中文(简体) ).
2.  **NLP 预过滤器**数字 : [折衷](https://www.npmjs.com/package/compromise) 提议名称(得分为0.55),位置(0.45)和组织(0.4).
3.  **NER 模型**数字 : `Xenova/bert-base-NER` 通过变压器.js证实它们。 装入时 `enableNerModel` 没有 `false` 第2级提出了名称、地点或组织,或 `compromise` 没有安装(第2层然后建议什么也没有,而该模型是仅剩的查找名称的层次)。 它如何读取模型的输出如下.
4.  **LLM法官**:重新审查评分在0.3到0.7之间的实体. 它只在当 `llmJudge` 已经设定。 它的答案不能引入外部类型 `entityTypes`:当法官确认某类实体时,东道主没有要求该实体保留自己的类型并取取法官的信任. 缓存判决按要求的类型分开.

然后将重叠的跨度合并起来(一种类型的两个跨度变成一种跨度,因此一个识别器比另一个识别出"约翰·史密斯"更肯定不会在文本中留下"史密斯"),实体下方 `confidenceThreshold` 和编辑引擎`redactText`)在所选择的区域内写出每个跨度 `redactionStyle`。 。 。 .

### NER 层

这个模型是 [dslim/bert-base-NER (英语)](https://huggingface.co/dslim/bert-base-NER) 内 [Xenova的 ONNX 端口](https://huggingface.co/Xenova/bert-base-NER)数字 : `bert-base-cased` 在CoNLL-2003上进行了微调 英语, 标签每个 WordPiece 符号 `O`, (中文(简体) ), `B-`编号 :`I-PER`, (中文(简体) ), `B-`编号 :`I-LOC`, (中文(简体) ), `B-`编号 :`I-ORG` 或者说 `B-`编号 :`I-MISC` (港号) `config.json`) (中文(简体) ). 它的卡片报告测试-集精度90.7并召回91.9,并警告它"偶然地将子词符号标记为实体". 变压器.js 3.x的符号分类管道返回了每个符号的标签,分数和文本,但没有字符抵消("TODO:在其出处中添加对起始和结束的支持"),所以识别器:

-   要求每个迹象, `O` 包括;
-   读取一个单词(一个符号和 `##` 以它的第一个作品的标签和分数来表示,所以一个实体覆盖整个词;
-   在文本中找到每个字,作为标语符读取(它 `BertNormalizer` 将控制字符,如零宽空间,放在CJK象形文字周围的空间,而不小写,也不取出口音),从词尾的位置,从不包含更长的字母和数字,并在文本本身的偏移中读出那个位置;
-   仅在获得0.7或更多分数的单词开始一个实体(`NER_MIN_WORD_SCORE` 内 `src/recognizers/NerModelRecognizer.ts`,在输油管中取一个没有LLM法官的实体的分数;卡片没有给出自己的分数),并加入一个 `I-` 当该实体有其标签且彼此之间只有空格时,该实体的任何分数都用字,因此,该模型的姓氏不太确定与它的名称相同;
-   将每个实体写成文本的长度,从第一个字开始到最后一个字结束,得分为最有自信的字.

| 文本 | NER实体 |
| --- | --- |
| `Hello from the stub.` | 无 |
| `My name is Wolfgang and I live in Berlin.` | `PERSON` "沃尔夫冈"(11至19),, `LOCATION` "柏林" (34-40) (中文(简体) ) |
| `Ask Sam about Lee.` | `PERSON` 萨姆, `PERSON` "李":"二名相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相相去相去相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相 |

第1至3级的图书馆是可选的附属单位。 一个不见了 `compromise` 或者说 `@huggingface/transformers` 跳过其分层,但缺少两个分层 `openredaction` 每当需要类型图案服务时,都会进行检测投掷。 这两种接触类型不需要三个类型.

### 街道地址和社会手柄

两个接触类型, `STREET_ADDRESS` 财务报告和审定财务报表 `SOCIAL_HANDLE`,关闭,除非 `entityTypes` 给他们起名字. `CONTACT_PII_ENTITY_TYPES` 列出两者. `ALL_PII_ENTITY_TYPES` 保留其18个类型并保持默认值 `entityTypes`,所以一个包 建造,没有选项报告.

```ts
import {
  CONTACT_PII_ENTITY_TYPES,
  REGEX_TIER_TYPES,
  createPiiRedactionGuardrail,
} from '@framers/agentos-ext-pii-redaction';

// A public room: the regex tier's structured kinds and the two contact types. No model loads.
const pack = createPiiRedactionGuardrail({
  entityTypes: [...REGEX_TIER_TYPES, ...CONTACT_PII_ENTITY_TYPES],
});
// "I live at 42 Maple Street, Apt 3. Add me on insta: sunny.side"
// reaches the model as "I live at [STREET_ADDRESS]. Add me on insta: [SOCIAL_HANDLE]"
```

`ContactRecognizer` (单位:千美元)[`src/recognizers/ContactRecognizer.ts`](https://npmcn.com/package/%40framers/agentos-ext-pii-redaction/src/recognizers/ContactRecognizer.ts))在regex分级中发现两者都有它自己的图案代码:没有模型,没有网络呼叫,没有依赖性. 不使用Openredaction的两种模式。 内容 `ADDRESS_STREET` 没有验证符,并读取"10多分第一"作为地址 `SOCIAL_MEDIA_HANDLE` 数取一个手柄,只取出一个简短的单词列表,这些单词会留下"insta","snap","discord"和"tg".

| 类型 | 发现什么 | 分数 |
| --- | --- | --- |
| `STREET_ADDRESS` | 一个家号,一个到四个名词和一个街道名词,至少有一个支持 | 0.9 (中文(简体) ) |
|  | 后办公框: `P.O. Box 123`, (中文(简体) ), `PO Box 123`, (中文(简体) ), `Post Office Box 123` | 0.9 (中文(简体) ) |
|  | 没有支持的形状 | 0.45 (中文(简体) ) |
| `SOCIAL_HANDLE` | 连接到配置文件或邀请 | 0.95 (中文(简体) ) |
|  | 服务词和名称 | 0.9 (中文(简体) ) |
|  | 一个赤裸的 `@name` 没有服务单词 | 0.4 (中文(简体) ) |

下辖实体 `confidenceThreshold` (0.5, 除非设定) 放弃。 没有支持的地址形状, 如标题“ 10 More Points for First Place ” , 以及房间本身的 `@mention` 只向降低阈值的宿主报告.

**街道地址**

-   房号为一至六位数,并带有可选字母或第二个数字(`221B`, (中文(简体) ), `12-14`, (中文(简体) ), `4/12`) (中文(简体) ). 它从一个时间,一个小数,一个版本数,一个价格,一个路径或一个标签,所以 `$1200 Park Avenue` 财务报告和审定财务报表 `4.12 Main Street` 没有地址.
-   街道用词有街道,道路,大道,道道,行驶道,法院,大道,道,梯地,地,方,近地,月亮,高速公路,公园道和小道等,有短表形式 `st`, (中文(简体) ), `rd`, (中文(简体) ), `ave`, (中文(简体) ), `av`, (中文(简体) ), `ln`, (中文(简体) ), `dr`, (中文(简体) ), `ct`, (中文(简体) ), `blvd`, (中文(简体) ), `ter`, (中文(简体) ), `tce`, (中文(简体) ), `pl`, (中文(简体) ), `sq`, (中文(简体) ), `cl`, (中文(简体) ), `cres`, (中文(简体) ), `hwy`, (中文(简体) ), `pkwy` 财务报告和审定财务报表 `trl`。 。 。 .
-   道,地,道,道,道,道,道相相相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相相接相相接相接相相相相接相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相 它们只有在大写名词或正文("12 Kings Way")后进行大写时才算数,短文也一样 `av`, (中文(简体) ), `ct`, (中文(简体) ), `ter`, (中文(简体) ), `tce`, (中文(简体) ), `pl`, (中文(简体) ), `sq`, (中文(简体) ), `cl`, (中文(简体) ), `cres` 财务报告和审定财务报表 `trl`. "10多分作为第一位"在任何阈值上都不是地址.
-   一个名称词是字母(包括重音字母)或正文("5th"). 小写函数单词,计数或计量不是一等,所以"出道5英里","一等道"和"主街5平"没有地址. 小写名数:"我住在42枫树街apt 3"是一个地址.
-   支助包括:
    -   一个单位: `apt`, (中文(简体) ), `apartment`, (中文(简体) ), `unit`, (中文(简体) ), `suite`, (中文(简体) ), `ste`, (中文(简体) ), `flat` 或者说 `#` 并用其编号,在街道后("221B Bake Street, Apt 4")或住宅号前("Flat 2, 14 High Street").
    -   街道后60个字符内的邮政编码:一个州后为美国ZIP,一个州后或地区后为澳大利亚邮政编码,一个加拿大邮政编码,一个英国邮政编码.
    -   一个城市和一个地区,在逗号之后,或者在下一行. 该地区是美国的一个州,加拿大的一个省或领土,澳大利亚的一个州或领土,或英国的一个民族,按名称或代码划分. 任何其他地区也都算数,如英国的一个郡,当城市和地区各自遵循一个逗号,并且每个都首都:"国王道12号,读取,伯克郡". 逗号后面的普通话不是地方:"国王道12号,然后我们走,OK"没有支持.
    -   在它面前的40个字符中有一个地址提示:"活","地址","位置","发送到",以及"邮件","船","交付"或"后"来代替"发送".
-   该实体涵盖与街道一起发现的单位,城市,区域和邮政编码. 提示保留在文本中.
-   所涵盖的格式:美国、联合王国、加拿大和澳大利亚的英语地址。 无法检测到以其他语言和其他国家格式的地址.

**社会手柄**

-   链接 : `instagram.com/<name>` (和 `instagr.am`, (中文(简体) ), `t.me/<name>` (和 `telegram.me`,与 `+` 财务报告和审定财务报表 `joinchat/` 请, `discord.gg/<code>` (和 `discord.com/invite/<code>`, (中文(简体) ), `discordapp.com/invite/<code>`, (中文(简体) ), `x.com/<name>` (和 `twitter.com`, (中文(简体) ), `tiktok.com/@<name>`, (中文(简体) ), `snapchat.com/add/<name>`, (中文(简体) ), `wa.me/<digits>` 财务报告和审定财务报表 `reddit.com/user/<name>` (和 `/u/`或无 `https://` 财务报告和审定财务报表 `www.`。该实体覆盖了与其结束的链接。 连接到服务本身的一页(`instagram.com/p/...`, (中文(简体) ), `x.com/home`, (中文(简体) ), `reddit.com/r/...`) 名称为无账户,而不是一个账户.
-   服务词和名. 服务词有Instagram,insta,ig, snapchat, snap, unple, 电报, tg, kik, twitter, tiktok 和 redit; Reddit's `u/name` 计数时没有服务单词.
    -   结肠后,等号或空格后,取名:"Insta: name","ig- name". "名","用户名","手","id"和"tag"等词可以坐到:"discord tag: name#1234"之间. 标签后一个普通的单词(下面列出的被排除在外的单词之一)只有在条款结束或条款要求联系时才算数:"Insta: cool"和"Insta: cool上添加我"给出一个名字,"Reminder on difference: no proyers"和"twitter- What a mess"不会.
    -   空格后,当名称带有一个标记时,它就算不上普通单词(一个 `@`数字、下划线、点、点 `#1234` 标记 : “ tg @name”, “discord name# 1234 ” , 当线上两个单独站立或先于逗号或分号( “ kik name ” , “ snap sunshingside, thanks" ) , 或者当条款要求联系时( “ 将我添加到快速名称上” ) 。 条款询问它何时持有"hmu",或添加之一,dm,pm,msg,消息,文本,被击中,发现,跟随,到达,接触或ping与"我","我们","我"或"我们"接通,或直接在服务词("ad snap name")前"添加". 动词单词不问:"我收到了关于不和的讯息,说我赢了","哪里都找不到不和"没有手柄.
    -   在"是"后,名字以标记来计数,或者在名称结束条款或条款要求联系时,在占有者之后:"我的Insta是名字","我的Insta是名字,添加我". "我的不和又在演戏"说服务如何进行,没有手柄.
    -   被明确标注的名字可以是两个字符,包括一个数字("insta: a1"),或者一个普通词来结束条款("insta: cool"). 没有标签或 `@`,名称至少有两个字母,普通的服务相关词被排除在外:"不和服务器","insta故事","tiktok视频","oh snap that was close","discod anyone".
    -   当一个名称在它的行上只跟随一个全站或感叹标记,或者下一个是逗号或分号时,一个名称就结束了条款.
    -   `ig` 对于"I guess",也简称为"我猜",因此它只在结肠,等号或破折号之前算出,并有标记名,或作为某人名("我的ig是名").
    -   实体是唯一的名字,所以一个字符串在 `allowlist`比如一个房间的账户名称,匹配它.
-   代码参考文件,例如 `twitter: process.env.TWITTER_HANDLE` ; 点名账户名称仍然有效.
-   一个赤裸的 `@name`永远不要 `@` 电子邮件地址,范围套件(`@scope/name`或装饰者.

**何等为主所过.** `entityTypes` (对于一个公共房间, `REGEX_TIER_TYPES` 和两个联系类型,如上) `confidenceThreshold` 及其字符串 `allowlist`。由于这些类型,包没有装入型号:第2级和第3级在装入任何没有需要的型号时返回。 两个选择改变了这一点。 命名 `PERSON`, (中文(简体) ), `ORGANIZATION` 或者说 `LOCATION` 带来二级和三级. `llmJudge` 将每个实体的得分从0.3分到0.7分送到法官的模型中, 有了这些类型,就意味着每一个裸露的 `@name` (0.4)和每一个不支持的地址形状(0.45).

**隐私.** 看守员的判决名称和计数(`reason`, (中文(简体) ), `metadata.entityCount`) (中文(简体) ). 匹配文本仅存在于管道的结果中(`PiiEntity.text`) (中文(简体) ). 一个实体的 `metadata` 命名匹配的图案和所找到的支持类型,并保留文本中的任何内容。 包里没有日志.

**与 `LOCATION` 名称也.** 当NER发现一个城市或里面的其他实体时,一个超过主机阈值并允许列表的街道地址会保持其完整的跨度,甚至更高的分数. 一个允许的或门槛以下的地址不会压制单独的NER检测.

## 安装

```bash
npm install @framers/agentos-ext-pii-redaction
```

同伴依赖 : [`@framers/agentos`](https://github.com/framerslab/agentos) 0.12.0 或较后.

## 编辑字符串

```ts
import { redactPii } from '@framers/agentos-ext-pii-redaction';

const result = await redactPii('Write to sam@mail.invalid or call +1 415 555 0100 about the 1919 treaty.');
// result.found: true
// result.types: ['EMAIL', 'PHONE']
// result.text:  the same sentence with [EMAIL] and [PHONE] where the address and the number were
```

没有选择, `redactPii` 找到 regex 级的类型(`REGEX_TIER_TYPES`数字 : `EMAIL`, (中文(简体) ), `PHONE`, (中文(简体) ), `SSN`, (中文(简体) ), `CREDIT_CARD`, (中文(简体) ), `IBAN`, (中文(简体) ), `API_KEY`, (中文(简体) ), `AWS_KEY`, (中文(简体) ), `GOV_ID`, (中文(简体) ), `PASSPORT`, (中文(简体) ), `DRIVERS_LICENSE`, (中文(简体) ), `IP_ADDRESS`)与NER模型关闭,所以没有模型载荷和名字保持原样. 它每组选择方案建造一条管道并重新使用。 当检测失败时,例如当 `openredaction` 未安装, 因此代码不能通过未编辑的文本停止 .

| 选项 | 默认 | 它的设定 |
| --- | --- | --- |
| `entityTypes` | `REGEX_TIER_TYPES` | 要找到的种类 |
| `redactionStyle` | `'placeholder'` | 找到的跨度是如何写入的 |
| `enableNerModel` | `false` | 第3级是否可以加载 |
| `pipeline` |  | 下方的任何其他包装方案,例如: `confidenceThreshold`, (中文(简体) ), `allowlist`, (中文(简体) ), `nerDtype` 或者说 `llmJudge` |

Regex 级库处理文档域的地址, 如 `example.com` 作为占位符,并把它们留在文本中,所以用地址测试它报告的地址,例如一个在下面的域中 `.invalid`。 。 。 .

`PiiDetectionPipeline` 财务报告和审定财务报表 `redactText` 用于要被检测到的实体本身的代码.

## 护栏

```ts
import { AgentOS } from '@framers/agentos';
import { createPiiRedactionGuardrail } from '@framers/agentos-ext-pii-redaction';

const agentos = new AgentOS();
await agentos.initialize({
  ...config, // the rest of your AgentOSConfig
  extensionManifest: {
    packs: [
      {
        factory: () =>
          createPiiRedactionGuardrail({
            entityTypes: ['EMAIL', 'PHONE', 'SSN', 'PERSON', 'CREDIT_CARD'],
            redactionStyle: 'placeholder',
          }),
        enabled: true,
      },
    ],
  },
});
```

包里有护栏 `pii-redaction-guardrail` 和工具 `pii_scan` 财务报告和审定财务报表 `pii_redact`。默认情况下,护栏会用带有已编辑文本的 SANITIZE 结果来回答。 在输出时,它会缓冲出每个流的文本,并在句子边界和流尾进行扫描.

护栏关了 内容 `config.failClosed` 实值 `true` 除非选项设定 `failClosed: false`,因此当检测抛出时,AgentOS的守护链路调度器会屏蔽文本而不是跳过守护链路,并通过未被刷取的文本来传递. 在编辑模式下,它的配置也设置 `canSanitize: true`它运行在调度员的防毒道中 `evaluateStreamingChunks` 从该名称的选项.

### 拒绝而不是修改

设定 `onDetect: 'refuse'` 拒绝检测到的个人数据,并要求发送者编辑。 警卫回答 BLOCK 用 `PII_PRESENT`、检测的种类、数量和检测等级。 它永远不会返回 SANITIZE,匹配文本,或者在此模式下重写文本.

`refuseTypes` 缩小导致拒绝的类型。 允许它拒绝每一个检测到的类型; 一个空列表拒绝任何类型 。 其他检测到的类型则单独存在. `entityTypes` 决定输油管检测器的型号,所以每次进入 `refuseTypes` 必须是在 `entityTypes` 也 (或默认设置时) `entityTypes` ”)。 警卫 `refuseTypes` 命名一个从未被检测过的类型永远不会拒绝它,因此构建一个掷出: `createPiiRedactionGuardrail({ onDetect: 'refuse', refuseTypes: ['STREET_ADDRESS'] })` 失败, 因为默认集没有联系人类型 .

与 `sequential: true`守卫们在看守之前奔跑 所以一个被拒绝的消息没有传达给他们 两者都有 `config.sequential` 财务报告和审定财务报表 `config.canSanitize`: 核心0.15.124 读取后一,以运行第一期后卫. 此命令请求不会使拒绝模式重写文本 . `sequential` 默认为虚假,只影响拒绝模式.

```ts
import { moderateContent, type IGuardrailService } from '@framers/agentos';
import { CONTACT_PII_ENTITY_TYPES, createPiiRedactionGuardrail } from '@framers/agentos-ext-pii-redaction';

const pack = createPiiRedactionGuardrail({
  entityTypes: [...CONTACT_PII_ENTITY_TYPES],
  onDetect: 'refuse',
  sequential: true,
  guardrailScope: 'input',
});
const guard = pack.descriptors.find((item) => item.kind === 'guardrail')!.payload as IGuardrailService;
const decision = await moderateContent(
  { text: 'my address is 221 Baker Street, London NW1 6XE' },
  { guards: [guard], context: { userId: 'member', sessionId: 'session' } },
);
// decision.outcome === 'refuse'; decision.deciding.reasonCode === 'PII_PRESENT'
// No sanitizedText is returned.
```

例子使用核心0.17.1中可用的温和切入点. 通过较老的看守铁路调度员拒绝,仍然得到现有同伴依赖范围的支持.

对于输出,拒绝模式忽略了流出三角洲和 `evaluateStreamingChunks`并判断完整 `FINAL_RESPONSE` 语句。 东道主如果需要防止产出披露,必须暂停交付,直至最后评价.

两种接触类型单独装入没有模型或可选库. 命名 `PERSON`, (中文(简体) ), `ORGANIZATION`,或 `LOCATION` 启用 NLP 和 NER 级,并可以加载 NER 型号. 设置 `llmJudge` 将模棱两可的候选人送到指定的法官面前,包括 `@name` 跨度为0.4,不支持的地址形状为0.45,即使默认阈值为0.5.

## 选项

`createPiiRedactionGuardrail(options)` 带 `PiiRedactionPackOptions` (见 [`src/types.ts`](https://npmcn.com/package/%40framers/agentos-ext-pii-redaction/src/types.ts):

| 选项 | 默认 | 它的设定 |
| --- | --- | --- |
| `entityTypes` | 18种类型 `ALL_PII_ENTITY_TYPES` | 检测的种类. `STREET_ADDRESS` 财务报告和审定财务报表 `SOCIAL_HANDLE` (单位:千美元)`CONTACT_PII_ENTITY_TYPES`) 仅在此处命名时被检测到 |
| `confidenceThreshold` | `0.5` | 下方的单位被丢弃 |
| `redactionStyle` | `'placeholder'` | `placeholder` (单位:千美元)`[EMAIL]`, (中文(简体) ), `mask` (每个单词的第一个角色被保留,其余的主演), `hash` (单位:千美元)`[EMAIL:a3f2c1d4e5]`,文本的 SHA-256 中的类型和前10个十六进制字符或 `category-tag` (单位:千美元)`<PII type="EMAIL">REDACTED</PII>`(中文(简体) ) |
| `allowlist` | 无 | 找到的文本无论如何等于其中一条字符串的位置 |
| `denylist` | 无 | 找到的文本等于其中之一的字符串分数 1.0 |
| `enableNerModel` | `true` | 第三级是否可以加载;仅限 `false` 关掉 |
| `nerDtype` | `'q8'` | NER模型的重量: `q8` (单位:千美元)`onnx/model_quantized.onnx`,大约109 MB)或 `fp32` (单位:千美元)`onnx/model.onnx`,约431 MB) |
| `llmJudge` | 无 | `{ provider, model, apiKey?, baseUrl?, maxConcurrency?, cacheSize? }`; 打开第4级 |
| `guardrailScope` | `'both'` | `input`, (中文(简体) ), `output` 或者说 `both` |
| `onDetect` | `'redact'` | 已检测到红外线跨度,或 `'refuse'` 与 `PII_PRESENT` 没有重写文本 |
| `refuseTypes` | 所有检测类型 | 在拒绝模式中,只有这些类型块;其他检测则被单独放出. 每个人必须加入 `entityTypes`,或者包 投出当建造 |
| `sequential` | `false` | 在拒绝模式下,在没有消毒的守卫之前运行,包括在更老的核心上运行 |
| `evaluateStreamingChunks` | `false` | 护道配置的旗子为流出块 |
| `maxStreamingEvaluations` | `50` | 每个流的句子边界扫描 |
| `failClosed` | `true` | 扔出文本的护栏评价是否 |

`allowlist` 财务报告和审定财务报表 `denylist` 接受 `RegExp` 条目类型; 检测仅应用字符串条目.

## 公共 API

-   `redactPii(text, options?)`, (中文(简体) ), `REGEX_TIER_TYPES`, (中文(简体) ), `RedactPiiOptions`, (中文(简体) ), `RedactPiiResult`: 一个字符串的编辑
-   `PiiDetectionPipeline`, (中文(简体) ), `redactText(text, entities, style)`: 探测管道和编辑引擎
-   `ContactRecognizer`: 两种接触类型的单独识别器. `recognize(text)` 寻找两者; `recognize(text, { entityTypes })` 名单所列者
-   `createPiiRedactionGuardrail(options?)`: 工厂还原 `ExtensionPack`
-   `createExtensionPack(context)`: AgentOS 扩展使用的可自动发现工厂 自动提取
-   类型和常数 [`src/types.ts`](https://npmcn.com/package/%40framers/agentos-ext-pii-redaction/src/types.ts)其中 `PiiRedactionPackOptions`, (中文(简体) ), `PiiEntity`, (中文(简体) ), `PiiEntityType`, (中文(简体) ), `ALL_PII_ENTITY_TYPES`, (中文(简体) ), `CONTACT_PII_ENTITY_TYPES` 财务报告和审定财务报表 `PII_SERVICE_IDS`

## 实例

-   `test/`: 各种识别器类型的编辑固定装置

## 懒惰装入和可选安装

此软件包是 `@framers/agentos-extensions-registry`每个扩展的登记船舶目录元数据,但 `createCuratedManifest()` 电话 `import.meta.resolve()` 每个条目并默默跳过任何未安装的条目. `npm install @framers/agentos-ext-pii-redaction` 是大门.

NER模型在激活时不加载. 3级问 `SharedServiceRegistry` 页:1 `agentos:nlp:ner-pipeline` 在第一次扫描时需要它,而登记册则建立变压器。 js 管道,然后,在 `nerDtype` 重量: 大约109 MB `q8`,默认值。 之后扫描, 流道护栏和两者 `pii_scan` 编号 : `pii_redact` 工具共享这个实例,所以第一个装入包会决定每个包在登记册上的重量.

可选的 LLM 级法官只在 `llmJudge` 已经设定。 关键是 `llmJudge.apiKey`否则护栏会读出秘密 `<provider>.apiKey`,则 `pii.llm.apiKey`从扩展管理器.

关于完整的DI模型和端到端的走过,见 [扩展如何保持可选和懒惰](https://docs.agentos.sh/extensions#how-extensions-stay-optional-and-lazy) 编辑 [自动加载指南](https://docs.agentos.sh/extensions/auto-loading)。 。 。 .

## 许可证

阿帕奇2.0 (英语). 见 [自由主义](https://npmcn.com/package/%40framers/agentos-ext-pii-redaction/LICENSE)。 。 。 .

## 正在检查安装的释放

`scripts/published-consumer.mjs` 通过操作已安装的 npm 包 `moderateContent()`:地址拒绝而不重写文字,普通行行通过,而默认集仍然是18个类型. Release QA在一空项目中运行,其中包含精确的软件包版本和当前的核心. 它印着 `published PII pack passes: 3 items` 当那些支票通过.

## 常见问题

### @framers/agentos-ext-pii-redaction 是什么？

四级PII检测和校正

### 如何安装 @framers/agentos-ext-pii-redaction？

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

### @framers/agentos-ext-pii-redaction 支持 TypeScript 吗？

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

### @framers/agentos-ext-pii-redaction 支持 ESM 还是 CommonJS？

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

### @framers/agentos-ext-pii-redaction 可以商用吗？

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

### @framers/agentos-ext-pii-redaction 的下载量有多少？

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

### @framers/agentos-ext-pii-redaction 还在维护吗？

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

