# @framers/agentos-ext-ml-classifiers 中文文档

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

版本：0\.3\.6
npm 元数据更新时间：2026-11-13T19:51:38.160Z
中文译文更新时间：2026-11-15T12:13:49.485Z
软件包许可：Apache-2\.0

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

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

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

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

## 中文简介

AgentOS的内容分类器-一种当地英国毒性模型(毒伯特、ONNX),然后是LLM判断器或关键词模式

## 安装

```sh
npm install @framers/agentos-ext-ml-classifiers
```

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

## README

# @ framers/ agentos-ext- ml- 分类器

内容分类护栏 [`@framers/agentos`](https://github.com/framerslab/agentos):一个本地的英国毒性模型通过ONNX运行,在没有该模型时有LLM判断器或关键词模式.

## 它会做什么

护栏的成绩分为四类, `toxic`, (中文(简体) ), `injection`, (中文(简体) ), `nsfw` 财务报告和审定财务报表 `threat`返回时 `FLAG` 或者说 `BLOCK` 当一个分数超过它的阈值时。 它检查用户输入和代理的最终响应;它不读取流块. 该包还登记a `classify_content` 工具,可按要求返回相同的分数.

每个文本都到第一层,答案是:

1.  **ONNX. (英语).** 铁道进口 `@huggingface/transformers` (一个可选的依赖) 并加载一个模型, [`Xenova/toxic-bert`](https://huggingface.co/Xenova/toxic-bert),将 ONNX 转换为 [`unitary/toxic-bert`](https://huggingface.co/unitary/toxic-bert),与 `pipeline('text-classification', 'Xenova/toxic-bert', { device: 'cpu' })`每一个护栏都试了一次 当软件包丢失或模型无法装入时,护栏会写出一个带有错误的警告,代之以它使用的分级(参见 [日志](https://npmcn.com/package/%40framers/agentos-ext-ml-classifiers/#readme-logging)),并进入下一层.
2.  **LLM评委.** 当你通过一个 `llmInvoker` 回话,看守员要求模型 对所有四类的JSON判决。 一个失败的呼叫,或者每个分数为0的回复,会进入下一级.
3.  **关键词.** 按类别排列的正则表达式,总是可用的.

### ONNX模型得分多少

`toxic-bert` 有六个标签。 护栏将它们映射到其类别,并保持每个类别最高分:

| 模型标签 | 类别 |
| --- | --- |
| `toxic`, (中文(简体) ), `severe_toxic`, (中文(简体) ), `insult`, (中文(简体) ), `identity_hate` | `toxic` |
| `obscene` | `nsfw` |
| `threat` | `threat` |

-   `nsfw` 从ONNX级是模型的 `obscene` 标签 淫秽语言的分数 这不是一个性内容分类.
-   `injection` 从未被ONNX级打分:它停留在0级. 只有LLM评委和关键词模式得分.
-   该模型用于英文文本:其卡片将培训数据作为维基百科的评论列出 [Jigsaw 毒性评论分类挑战](https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge),一个英文数据集,并为其他语言提供一个单独的多语种模型.

型号的卡片说明其主要限制([单体/毒性](https://huggingface.co/unitary/toxic-bert):

> 如果在评论中出现与起誓,辱骂或亵渎有关的词语,则无论作者的语气或意图,例如幽默/自欺欺人,都有可能被归类为有毒. 这可能对已经脆弱的少数群体造成一些偏见.

## 安装

```bash
npm install @framers/agentos-ext-ml-classifiers
```

同伴依赖 : [`@framers/agentos`](https://github.com/framerslab/agentos)。 。 。 . `@huggingface/transformers` 是可选的依赖关系;没有它,守护者将运行 LLM 判断器或关键词级.

## 快速启动

```ts
import { AgentOS } from '@framers/agentos';
import { createMLClassifierGuardrail } from '@framers/agentos-ext-ml-classifiers';

const agentos = new AgentOS();
await agentos.initialize({
  extensionManifest: {
    packs: [
      {
        factory: () =>
          createMLClassifierGuardrail({
            categories: ['toxic', 'injection', 'threat'],
            flagThreshold: 0.5,
            blockThreshold: 0.8,
            thresholds: { toxic: { flag: 0.6, block: 0.9 } },
            // Optional: an LLM judge for when the ONNX tier is unavailable.
            llmInvoker: async (systemPrompt, userMessage) => callYourModel(systemPrompt, userMessage),
          }),
        enabled: true,
      },
    ],
  },
});
```

以上一个分数 `flagThreshold` (默认为 0.5) 旗帜; 上方 `blockThreshold` (默认为0.8)块. `thresholds` 每类都覆盖.

## 公共 API

-   `createMLClassifierGuardrail(options?, logger?)` 返回一个 `ExtensionPack` 与护栏和 `classify_content` 工具
-   `createExtensionPack(context)` 是工厂 AgentOS 的扩展加载器呼叫; 它读取 `context.options` 财务报告和审定财务报表 `context.logger`
-   `createMLClassifierPack` 是一个已贬值的别名,其名称是: `createMLClassifierGuardrail`

见 [`src/types.ts`](https://npmcn.com/package/%40framers/agentos-ext-ml-classifiers/src/types.ts) 页:1 `MLClassifierOptions`, (中文(简体) ), `LlmInvoker` 财务报告和审定财务报表 `MLClassifierLogger`。 。 。 .

## 调和 : `@framers/agentos-ext-ml-classifiers/moderation`

内容人物互相发送的第二个切入点:一个用作信号的OpenAI moderation守护符,一个AgentOS图像守护符的OpenAI moderation检查符,以及一个你选择的法官模型上的行为分类符. 里面没有装满本地模型.

```ts
import { PhraseListGuardrail, StaticPhraseListSource, moderateContent } from '@framers/agentos';
import {
  InMemoryConductRefusalCache, createAgentOSConductJudge, createConductGuardrail, createOpenAIModerationGuardrail,
} from '@framers/agentos-ext-ml-classifiers/moderation';

// a sequential phrase list runs first: a text it blocks reaches neither vendor
const hardBan = await PhraseListGuardrail.create({
  id: 'hard-ban', sequential: true,
  source: new StaticPhraseListSource({ version: '1', reviewedAt: '2026-11-12', reviewedBy: 'team', entries: [{ phrase: 'banned phrase', match: 'word', onMatch: 'block', ruleId: 'BAN_1' }] }),
});
const openai = createOpenAIModerationGuardrail({ apiKey: process.env.OPENAI_API_KEY!, logger });
const conduct = createConductGuardrail({
  judge: createAgentOSConductJudge({ provider: 'anthropic', model: 'claude-haiku-5-5' }),
  fallbackJudge: createAgentOSConductJudge({ provider: 'openai', model: '<a second vendor model>', thinkingHeadroomTokens: 1024 }),
  attemptTimeoutMs: 1_800,
  cache: new InMemoryConductRefusalCache(),
  logger,
});

const decision = await moderateContent({ text }, {
  guards: [hardBan, openai, conduct],
  context: { userId, sessionId, moderation: { surface: 'public_room', roomId, rating: 'standard' } },
  stopVendorsOn: ['MINOR_SEXUAL_SIGNAL'],
});
// decision.outcome: 'allow' | 'flag' | 'refuse' | 'hold'; decision.unavailable is true when only an outage decided
```

**需求 `@framers/agentos` 0.17.1或更新**中,释放与 `moderateContent()`,持有和持有 `frameUntrustedEvidence()`。在一个更古老的核心上,子路径在连接时失败。 根条目不变,并继续工作在每一个核心的同位素域名上.

两个入境点的申报类型 `.js` 指定符,所以在 TypeScript 下解析 `NodeNext` 模块解析以及 `bundler`:节点无害环境管理决议,其中 `NodeNext` 强制,“需要相对路径包含文件扩展名”([TypeScript 模块理论](https://www.typescriptlang.org/docs/handbook/modules/theory)) (中文(简体) ). 测试套件包装已建套件,并进行打字检查 a `NodeNext` 消费者反对它, `skipLibCheck` 关闭.

### OpenAI 中调后卫

`createOpenAIModerationGuardrail(options)` 将输入的文本发送到 `POST /v1/moderations` (模式) `omni-moderation-latest` 默认; `CreateModerationRequest` 财务报告和审定财务报表 `CreateModerationResponse` 内 [OpenAI 的 OpenAPI 文件](https://raw.githubusercontent.com/openai/openai-openapi/manual_spec/openapi.yaml)) (中文(简体) ). 它通过走自己的13个类别名单来读取第一个结果(A`OPENAI_MODERATION_CATEGORIES`:列表外的密钥被忽略,另一个类型的值使得答案无法被使用. 因此,结果谁 `categories` 或者说 `category_scores` 对象缺失或无效, 将一个类别中的布尔值或分数遗漏出来的对象也是如此 : OpenAI 的 schema 列出了两个对象中的所有十三个, 因此一个带有空的或不完整的地图的答案判断不出什么, 并且从未被读取为干净的。 一个封闭的警卫拒绝作为停产. 一个例外:计划宣布布尔斯 `illicit` 财务报告和审定财务报表 `illicit/violent` 无效( e)[OpenAI 的 OpenAPI 文件](https://raw.githubusercontent.com/openai/openai-openapi/manual_spec/openapi.yaml), (中文(简体) ), `CreateModerationResponse`) (中文(简体) ). 两者的无布尔分数或无效分数读取为无分数的虚假分数,另外11个则决定;他们的密钥必须还在. 任何其它类别都无效,使答案无法使用。 在判决中命名的模型是 警卫建造的,从来没有答案.

-   **规矩.** 每个类别都有规则 `{ flagAt?, holdAt?, blockAt?, reviewCode? }`数字是一个从0到1的分数阈值,在分数达到或超过时达到; `'vendor'` 意思是OpenAI自己为这一类的布尔. 一个街区比一个挡住和一个挡住的旗帜高 任何其他阈值(`NaN`, (中文(简体) ), `Infinity`,数字高于或低于 0,字符串)是 `TypeError` 当守护符或图像检查被构建时;其消息命名选项,绝不是值. 空规则( A)`{}`)是有效的,并取消该类的规则.
-   **默认.** 每个类别旗,在 `'vendor'`· ; `sexual/minors` 现职 `'vendor'` 带有审查代码 `MINOR_SEXUAL_SIGNAL`。没有块:OpenAI的分数拒绝任何消息,除非您设置 `blockAt`。 。 。 .
-   **你的规矩.** 您通过的一个分类规则取代了库的该分类规则。 一个规则你通过 `'sexual/minors'` 除非它命名为 `holdAt` 自己来 规则名称为"不"的控股商 `reviewCode` 属于该类别本身的代码.
-   **原因代码.** `OPENAI_MODERATION_` 和大案的类别, `/` 财务报告和审定财务报表 `-` 写入 `_` (单位:千美元)`OPENAI_MODERATION_SEXUAL_MINORS`),加上规则的审查码.
-   **下来.** 网络出错,非-2xx 答案,超时(`timeoutMs`,默认为3000, 将整个请求绑定: 警卫停止等待一个 `apiKey` 函数,没有发送任何信息)或另一个形状的答案用一个 `moderation.signal_skipped` 由其他警卫决定. `failClosed: true` 反而是停电 错误答案的正文从不被读取;它立刻被取消,所以它的连接被放出. 成功答案可读取至1个小米B(`MAX_MODERATION_ANSWER_BYTES` 在源代码中;一个输入的答案是几千字节:a `Content-Length` 在读完尸体之前,它被否决了, 穿过它的尸体被取消。 两者都是另一种形状的答案.
-   **阶段.** 它是一个平行的(第二阶段)警卫 并读取呼叫 `vendorSignal` 在它提出请求之前,它的关键再次得到解决 `apiKey` 函数可能需要一段时间: 一旦代码在 `stopVendorsOn` 已经中止了,警卫什么也没有发出。 它读了调度员的 `deadlineSignal` 在同一两点上,请求前的第二个右侧:一旦调度员停止等待警卫(其最后期限,或要求的姿势给予的更短一个),文本就无处发送.

### 图像检查

`openAIModerationImageCheck(options)` 是一个 `classify` 检查AgentOS的图像守护, `ImageGuardrail`,则需要 `@framers/agentos` 0.17.1或较新. 需要OpenAI警卫的选择 `stages` 财务报告和审定财务报表 `failClosed`;其默认 id 是 `openai-moderation-image`。 。 。 .

-   **随其所发.** 每个请求一个图像,总是作为所捕获的图像守护字节的数据URL(`data:<mime type>;base64,...`,从没有URL. 对于一个 `image_url` 输入守护者通过您获取图像一次 `loadImage`而OpenAI 判断那些字节, 相同的一个散列支票锯.
-   **其所诵.** OpenAI 六类适用于图像: `self-harm`, (中文(简体) ), `self-harm/intent`, (中文(简体) ), `self-harm/instructions`, (中文(简体) ), `sexual`, (中文(简体) ), `violence` 财务报告和审定财务报表 `violence/graphic` (单位:千美元)`category_applied_input_types` 内 `CreateModerationResponse`, (中文(简体) ), [OpenAI 的 OpenAPI 文件](https://raw.githubusercontent.com/openai/openai-openapi/manual_spec/openapi.yaml)) (中文(简体) ). 其他7个仅适用于文本:支票没有读出任何文本,所以一个被忽略或设定无效(计划声明) `illicit` 财务报告和审定财务报表 `illicit/violent` 无效)留下影像的判断力,你为其中之一通过的一条规则是不会被读取的. 将布尔或六分之一的分数留出,包括空地地图在内的一个答案评为无:它算作另一种形状的答案(见 **下来**永远不要像一个干净的形象。 它的理性代码是六类代码和你的规则审查代码.
-   **默认.** OpenAI 自己布林的每个图像分类旗. 无所不包,无所不包:OpenAI的分数拒绝任何图像,除非您设置一个 `holdAt` 或一个 `blockAt` 内 `rules`在OpenAI的守卫中,每个类别都有工作。 旗上标有六类的分数 一个子类 `.` (单位:千美元)`violence.graphic`),因为图像后卫只保留了字母,数字和 `_ . : -`。 。 。 .
-   **下来.** 它的建造与 `onError: 'skip'`. 网络出错,非-2xx答案,超时(`timeoutMs`,默认值为3000,该值将整个检查绑定:检查停止等待一个 `apiKey` 函数,此时不发送任何信息,图像的数据 URL 仅在密钥解析后才能制作)或者另一个形状的答案(一个超过 1 MiB 的答案,如 OpenAI 守护上) 被图像守护者写成一个 `image_guard.check_failed` 线条,以及您的其他 `classify` 检查决定图像。 当没有人回答时,图像保护人员拒绝提供图像,因为无法提供图像(`IMAGE_CHECK_UNAVAILABLE`) (中文(简体) ). 支票没有写自己的行.
-   **停下来.** 图像守护者读取呼叫 `vendorSignal` 每个字之前 `classify` 检查; 检查一旦解决了密钥, 就会再次读取它, 然后发送什么和计数为没有回答的检查 。 已经发出的请求将一如既往地得到答复.
-   **最后期限.** 与 `@framers/agentos` 0.17.1 图像守护的最后期限没有达到检查:守护者自己回答 `timeoutMs` (默认为15,000起),或者在较短的期限内,需要的姿势给予它,而检查则持续到其自身 `timeoutMs` (违约3000). 所以,设置的支票 `timeoutMs` 在警卫或以下。 如果时间更长,在警卫回答后可能会发出请求,而其答案被抛弃. 那张支票 `timeoutMs` 绑定整张支票, 密钥检查包括: 之后没有发送任何信息 。 一个拿支票的核 `deadlineSignal`,在上下文或图像上,也在该截止时停止检查:一旦中止了任何发送,飞行中的请求被取消.

```ts
import { ImageGuardrail, moderateContent } from '@framers/agentos';
import { openAIModerationImageCheck } from '@framers/agentos-ext-ml-classifiers/moderation';

const images = ImageGuardrail.create({
  id: 'images',
  requireMatch: true,
  checks: [
    hashCheck, // your hash service: { id, kind: 'match', check }
    openAIModerationImageCheck({ apiKey: process.env.OPENAI_API_KEY! }),
    visionJudge, // your own vision model: { id, kind: 'classify', check }
  ],
  loadImage, // fetches an image_url input once, under your own egress rules
});
const decision = await moderateContent({ images: uploads }, { guards: [images], context: { userId, sessionId } });
```

### 行为分类器

`createConductGuardrail(options)` (和 `ConductClassifier`,它包起来)要求一个法官模型,用于一个超过十类的JSON信任对象(A`CONDUCT_CATEGORIES`数字 : `minor_sexual`, (中文(简体) ), `suspected_minor`, (中文(简体) ), `threat`, (中文(简体) ), `sexual`, (中文(简体) ), `violence`, (中文(简体) ), `hate`, (中文(简体) ), `harassment`, (中文(简体) ), `self_harm`, (中文(简体) ), `scam_spam`, (中文(简体) ), `personal_data`页:1 `{"c":{"<category>":<confidence>}}`法官没有写理由,也没有决定;代码决定.

-   **政策.** `policy` 实值 `{ version, sharedPrefix, ratings, defaultRating }`。 。 。 . `sharedPrefix` 持有您的分类定义 和每个评级的规则。 它在图书馆的输出合同后 在一个系统区块里 `UNTRUSTED_EVIDENCE_NOTICE`,结尾处有一个缓存断点,所以每个呼叫都共享一个缓存前缀. 用户转弯控住 `Rating: <rating>` 和由 `frameUntrustedEvidence()`。一个呼叫的评级是 `context.moderation.rating` 当政策列出时, 否则 `defaultRating` (一个) `conduct.rating_unknown` 按未知的评分词排列). `DEFAULT_CONDUCT_POLICY` 平庸而通俗,有一套评分, `standard`。 。 。 .
-   **下关.** `thresholds` 以评级键入,以 `'*'` 每个评分; 每个条目是 `{ flagAt?, holdAt?, refuseAt? }` 每个类别。 您的列表按类别排列在图书馆的类别之上, 所以您不命名的类别保存图书馆的编号 。 一个你名字的分类 整个条目,所有三个数字: `{ '*': { minor_sexual: { refuseAt: 0.9 } } }` 叶子 `minor_sexual` 所以,所有你想要保留的数字。 图书馆:每个类别0.8的拒绝,但 `suspected_minor` 财务报告和审定财务报表 `self_harm`; 0. 5 键 `minor_sexual`, (中文(简体) ), `suspected_minor` 财务报告和审定财务报表 `threat`其余0.5分的旗帜; `self_harm` 只有旗帜。 拒绝排行榜 排行榜 排行榜 达到同一门槛的类别中 信任度最高者决定.
-   **判决.** 拒绝是BLOCK `CONDUCT_<CATEGORY>`。一个被扣是一个 BLOCK 与 `hold: { reviewCode: '<CATEGORY>' }` 和理由代码 `CONDUCT_<CATEGORY>`旗帜是FLAG. `metadata` 持有所找到的类别、决定的类别、评级、政策版本、路线(`primary`, (中文(简体) ), `fallback` 或者说 `cache`和尝试的次数.
-   **严格的答案.** 在去掉白色的空间和一个附加的代码栅栏后,答案必须是合同:一个对象,一个关键 `c` 仅此而已,属于十大类,信心从0到1. 任何其它的,一个包含在对象之前的句子,都是一次失败的尝试,从不读作一无所获. 在输出封顶上停止的答案也是这样,不管其文本是否被解析.
-   **链.** `judge` 尝试 `1 + retries` 时间(`retries` 默认 1),则 `fallbackJudge` 一次 一次吗 每次尝试都 `attemptTimeoutMs` (默认为3000). 没有可用的答案 警卫写 `conduct.unavailable` 掷出 `ConductUnavailableError`。默认关闭(`failClosed: true`),所以AgentOS的调度员回答断电本身:一个 BLOCK `GUARDRAIL_ERROR` 给警卫取名`metadata.guardrailId`页:1 `moderateContent()` 报告为: `unavailable: true` 并排在另一个警卫的拒绝或扣留之下。 与 `failClosed: false` 警卫什么也没有回答。 警卫的最后期限 默认为每一个尝试, `(1 + retries + (fallbackJudge ? 1 : 0)) * attemptTimeoutMs + 500`:一次重试,第二次路线和每次尝试1800毫秒,5.9秒. 半秒覆盖了读取的缓存. 一旦调度员停止等待警卫 `deadlineSignal` AgentOS掌上,没有进一步尝试开始,所以一个文本不会被发送到第二条路由,以获取无人读取的答案.
-   **`stopVendorsOn`。 。 。 .** 一旦电话响了 `vendorSignal` 已中止( OpenAI ) `MINOR_SEXUAL_SIGNAL` 拿着 `stopVendorsOn: ['MINOR_SEXUAL_SIGNAL']`),不再尝试。 已发送的尝试仍然被读取; 没有可用的回答 `conduct.stopped` 并且失败了, 和停止它的决定.
-   **长度.** 传话过来 `maxMessageChars` 拒绝( 默认 8 000 ) `CONDUCT_TOO_LONG` 并且没有模式呼叫: 剪切的文字会留下一个无人阅读的部分. 警卫执行限制; `ConductClassifier.classify()`,呼吁自己,没有.
-   **数字.** `retries` 是一个整数, 0 或更多. `attemptTimeoutMs` 财务报告和审定财务报表 `timeoutMs`这里和OpenAI的后卫是0多毫秒,最多2,147,483,647秒,一个节点计时器等待时间最长;1分后运行时间更长(1分后)[节点的计时器](https://nodejs.org/api/timers.html#settimeoutcallback-delay-args)) (中文(简体) ). 图书馆工作的最后时限被限制在相同的限度内: 这个守卫的默认值 `timeoutMs` (以上总和)和OpenAI警卫的调度人最后期限(其 `timeoutMs` 加上半秒钟). `maxMessageChars` 高于 0 (`Infinity` (无限制). `cacheTtlMs` 超过0和有限,以及 `InMemoryConductRefusalCache`是因为 `maxEntries` 是一个整数, 1 或更多。 其他任何价值 `NaN` 那个 `Number(process.env.NAME)` 给一个未设置的名称,丢出一个 `TypeError` 当警卫或缓存建成时.

### 拒绝缓存

`cache` 单独存放拒绝, 绝不允许, 旗帜或持有,用于 `cacheTtlMs` (默认十分钟). 关键是政策版本的SHA-256,评分,该评分的阈值和文本与收到的完全一致:没有大小写折叠,没有Unicode的正常化,没有外观相像的映射,因为两个不同字母的文本可以命名出两个不同的事物. 一个命中答案 `route: 'cache'` 没有模特儿的电话 密钥为未盐分,可以匹配被猜取的文本的指纹,因此共享的商店持有条目一生的信息数据. `InMemoryConductRefusalCache` (默认的10 000个条目,最老的先出)服务于一个进程;执行 `ConductRefusalCache` (单位:千美元)`get`, (中文(简体) ), `set`在一个共享的商店上,当你运行一个以上。 读到的,或者在250毫秒内没有回答的,被跳过 `conduct.cache_failed` 并询问法官。 写作不等待:拒绝立即返回,失败时写作同一行. 所储存的条目是副本,所以对判决的编辑留下了原样.

### 法官打电话

`createAgentOSConductJudge({ provider, model, apiKey?, baseUrl?, budget?, effort?, thinkingHeadroomTokens? })` 每次尝试都会通过 `generateText()` 与思考(`thinking: false`, (中文(简体) ), `effort` `'low'` 默认,无 `temperature`, (中文(简体) ), `top_p` 或上-k,一次尝试和不倒置提供者,所以分类器的链是唯一的. 不属于 `openai` 需要一个模型。 在克洛德·海库5.5上, "思维是默认的,并算着走向 `max_tokens`"和思考可以关闭在 `low`, (中文(简体) ), `medium` 财务报告和审定财务报表 `high` 努力([催促克洛德·海库 5.5](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-haiku-5-5)),其"移民指南"称省略 `temperature`, (中文(简体) ), `top_p` 财务报告和审定财务报表 `top_k` (单位:千美元)[移徙指南](https://platform.claude.com/docs/en/models/haiku-5-5/migration-guide)) (中文(简体) ). 答案的200个符号是 答案的单独: 一个路线,它的模型总是认为, 或另一个卖家的推理模型,得到 `thinkingHeadroomTokens`,添加到请求的输出封顶中,大小来自您自己的干线.

你写自己的一个引用者是 `(request) => Promise<{ text, stop }>`时 `stop` 实值 `'cap'` 当模型停止在输出封顶和 `'end'` 否则,它扔 `ConductJudgeDeclinedError(category)` 当其供应商拒绝了这一要求时。 它可能会抛出 `ConductJudgeEmptyAnswerError` 当其供应商可以将拒绝变成空洞的答复时(见下文).

### 拒绝的请求

Claude Haiku 5.5运行安全分类器,可以拒绝请求 `stop_reason: "refusal"`,然后再次发送同样的请求通常会返回另一个拒绝([保障拒绝](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-haiku-5-5#safeguard-refusals)) (中文(简体) ). 其他销售商通过内容过滤器下降: OpenAI 的聊天答案以 `finish_reason` `content_filter` "如果由于我们的内容过滤器中的一面旗帜而省略了内容"([OpenAI 的 OpenAPI 文件](https://raw.githubusercontent.com/openai/openai-openapi/manual_spec/openapi.yaml), (中文(简体) ), `CreateChatCompletionResponse`) (中文(简体) ). `createAgentOSConductJudge()` 每个都变成 `ConductJudgeDeclinedError`: 键入字段时出现的一个错误 `content_filter`, (中文(简体) ), `content_policy_violation` 或者说 `safety_violations` (数量) `code` 或者说 `type`, OpenAI 供应商的 `openaiErrorCode` 或者说 `openaiErrorType`,或供应商在 `details.error`,因为AgentOS的提供者 保存一个400的代码, 和一个回答 AgentOS 报告 有完成的理由 `content_filter`无论它的一部分到达。 这个类别是 `cyber`, (中文(简体) ), `bio`, (中文(简体) ), `frontier_llm`, (中文(简体) ), `general_harms` 或者说 `other`中,从错误的输入字段读取,从不读取其信件;过滤器的站点是 `other`。警卫为一个人持有信息: 一个 BLOCK `CONDUCT_JUDGE_DECLINED` 带有审查代码 `JUDGE_DECLINED`,与 `failClosed` 真实或虚假。 它从未被重审过,从未被送到第二路线,也从未被缓存过,还有一个 `conduct.judge_declined` 线条被写入。 多少次你的良性交通下降 是你自己的干线测量.

OpenAI也断然拒绝:一个聊天答覆,其信息有: `refusal` 字符串和无效 `content` (单位:千美元)`ChatCompletionResponseMessage` 内 [OpenAI 的 OpenAPI 文件](https://raw.githubusercontent.com/openai/openai-openapi/manual_spec/openapi.yaml)),或内容包含部分类型的答复 `refusal` (单位:千美元)[拒绝结构化产出](https://developers.openai.com/api/docs/guides/structured-outputs#refusals-with-structured-outputs)) (中文(简体) ). 两端都是普通站. AgentOS 0.17.1没有保留: `generateText()` 返回带有完整理由的空文本 `stop`,它本身会读成一个失败的解析,被重审,然后让第二个路径的干净的答案允许被拒绝的文本. 这么说吧 `createAgentOSConductJudge()` 做两件事:

-   AgentOS将拒绝保留为打出信号的地方(a) `refusal` 字段,或结束原因 `refusal`),法官抛出 `ConductJudgeDeclinedError('other')`,则信息如上所持,而无复试. A 类 `refusal` 字段为 `true` 或字符串,包含的空字符串,是指在任何完成原因(包含输出封顶剪接的答案)和任何文本出现之后的下降. 一个不存在的领域, `undefined`, (中文(简体) ), `null` 或者说 `false` 没有.
-   没有的话,一个空的答案 在普通的一站 `openai` 路由,或者在一条没有指定供应商的路由中,被抛出为 `ConductJudgeEmptyAnswerError`。它像失败的尝试一样在它的路线上被重试(一次) `conduct.attempt_failed` 线条,原因 `empty`) (中文(简体) ). 如果路由的尝试以无可用答案而告终,则电文被扣为(`CONDUCT_JUDGE_DECLINED`,审查代码 `JUDGE_DECLINED`, (中文(简体) ), `declined: 'other'`),与 `failClosed` 真实或虚假。 它从未被发送到第二路线,所以拒绝永远不会在许可中结束. 一个真正解答无所事事的模型被持同:安全的一面是一个人的检讨.

### 活动

`MODERATION_EVENTS` 命名七行 警卫通过 `logger` 您通过 AgentOS 的允许列表记录器上的主机可以添加到其地图中 : `moderation.signal_skipped`, (中文(简体) ), `conduct.attempt_failed`, (中文(简体) ), `conduct.judge_declined`, (中文(简体) ), `conduct.unavailable`, (中文(简体) ), `conduct.stopped`, (中文(简体) ), `conduct.cache_failed` 财务报告和审定财务报表 `conduct.rating_unknown`。它们的字段是ID、固定字和数字。 无一行持有消息的文字,卖家的回答,HTTP机身或出错的消息,没有记录员的警卫写作一无所有.

## 日志

当 ONNX 级无法加载时, 守卫栏杆会写出一条线

```
ml-classifiers: the ONNX tier is unavailable (Xenova/toxic-bert could not load: <error>); classifying with the keyword tier
```

交给伐木工了 `createMLClassifierGuardrail`,否则在包上下文或活化上下文中的记录器,或者控制台.

## 懒惰装入和可选安装

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

激活时没有负载 铁道进口 `@huggingface/transformers` 并装入该模型的第一个分类.

护栏登记员 `config.canSanitize = false` 财务报告和审定财务报表 `config.evaluateStreamingChunks = false`:它从不重写文本,运行在双相调度器(并行分级器)的第二阶段,在输出时只读出最后的响应.

扩展型号见 [扩展如何保持可选和懒惰](https://docs.agentos.sh/extensions#how-extensions-stay-optional-and-lazy) 编辑 [自动加载指南](https://docs.agentos.sh/extensions/auto-loading)。 。 。 .

## 包装什么

已发布的软件包持有 `dist` (已建成的JavaScript,其类型声明及其出处地图), `src` (TypeScript地图指向的),此README和许可证. 测试,工作流程,脚本和构建配置不发布.

## 许可证

Apache 2.0, 参见 repo 根 [自由主义](https://npmcn.com/package/LICENSE)。 。 。 .

## 常见问题

### @framers/agentos-ext-ml-classifiers 是什么？

AgentOS的内容分类器-一种当地英国毒性模型\(毒伯特、ONNX\),然后是LLM判断器或关键词模式

### 如何安装 @framers/agentos-ext-ml-classifiers？

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

### @framers/agentos-ext-ml-classifiers 支持 TypeScript 吗？

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

### @framers/agentos-ext-ml-classifiers 支持 ESM 还是 CommonJS？

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

### @framers/agentos-ext-ml-classifiers 可以商用吗？

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

### @framers/agentos-ext-ml-classifiers 的下载量有多少？

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

### @framers/agentos-ext-ml-classifiers 还在维护吗？

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

