关于 Deliverd Screen
Deliverd Screen 是供团队和开发者在将提示词发送给 AI 模型前检查文本的本地工具包。它可检测个人信息、机密和自定义词项,以可还原的占位符替换匹配内容,并提供 MCP 工具、命令行及集成方式。
主要功能
- 01检测个人信息和机密
- 02用可还原占位符替换匹配内容
- 03添加自定义机密词项
- 04提供命令行及提交前或 CI 检查
- 05集成 Vercel AI SDK 和可选 Purview
适用场景
- 01发送提示词前替换其中的身份信息
- 02通过 MCP 避免机密进入 Agent 上下文
- 03在提交前或 CI 中检查文档
- 04应用自定义词项和可选的 Purview 规则
MCP 相关
MCP 服务提供 `screen_text` 工具,返回判定结果和脱敏文本,不会返回被替换的值。配置后也可执行可选的 Microsoft Purview 检查。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 3 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | 要检查的文本。 |
| terms | array | 否 | 不要发送的自定义词语:clients、code names。 |
| personalData | boolean | 否 | 目标是否可以接收个人数据。默认值为 false。 |
| classification | enum | 否 | 目标可以接收的最高分类级别。默认值为 internal。public | internal | confidential | restricted |
详细介绍
Deliverd Screen
发送前检查每条提示词。 在文本发送给 AI 模型之前,查找并遮蔽个人数据、秘密信息和你自己的机密术语。
- 本地运行。 无需账户、密钥或网络调用。文本不会离开你的进程,除非你启用可选的 Microsoft Purview 检查;此时文本只会发送到你自己的 Microsoft 租户。
- 可还原。 值会替换为占位符,例如
[EMAIL_1](同一个值在全文中会使用同一个占位符),而restore()会在模型的回答中将其还原。 - 自行提供用于识别人名的模型。 模式无法查找人名,但模型可以。可接入 Hugging Face token 分类器、Presidio,或任何输出格式相同的模型。
- 无依赖项。 MIT。
npm install @deliverd/screen
import { screen } from "@deliverd/screen";
const checked = await screen("Reply to [email protected] about IBAN IE29AIBK93115212345678");
checked.verdict; // "redact"
checked.text; // "Reply to [EMAIL_1] about IBAN [IBAN_1]"
const answer = await model.generate(checked.text);
checked.restore(answer); // the real values, back in the answer
可查找的内容
电子邮件地址、电话号码、IBAN、支付卡号(经 Luhn 算法校验)、英国 National Insurance 号码、爱尔兰 PPS 号码(校验字符)、美国 Social Security 号码、IP 地址(v4 和 v6)、出生日期、API 密钥和令牌(AWS、GitHub、Slack、Stripe、Anthropic、OpenAI、Google、JWT 等)、私钥、连接字符串和 .env 文件中的密码、标记健康或宗教等特殊类别数据的词语,以及你自己的 terms。
四种判定结果
默认情况下,模型可以接收内部数据,但不能接收个人数据。对于已获准接收更多数据的模型,可传入 allow: { personalData: true, classification: "confidential" }。
| 判定结果 | 操作 |
|---|---|
allow | 发送 text,即原文。 |
redact | 发送 text,其中无法发送给模型的内容已替换为占位符。 |
ask | 由人工决定(默认适用于特殊类别数据)。allowed 为 false。 |
deny | 不发送任何内容。默认拒绝秘密信息。 |
人名:接入模型
import { pipeline } from "@huggingface/transformers";
import { tokenClassifier, presidio } from "@deliverd/screen/adapters";
const ner = await pipeline("token-classification", "Xenova/bert-base-NER");
const checked = await screen(prompt, { detectors: [tokenClassifier((t) => ner(t))] });
// or a Presidio analyzer you run yourself:
// docker run -p 5002:3000 mcr.microsoft.com/presidio-analyzer
await screen(prompt, { detectors: [presidio({ url: "http://localhost:5002" })] });
检测器是一个将文本转换为 { kind, start, end } 区间的函数,因此任何模型都适用,包括 Perplexity 的 PII-Tracer 和 GLiNER。发布模型前,请检查其许可证。在文本当前所在的位置运行检测器:如果检测器会将文本发送到托管服务,那么文本已经被发送出去了。
Vercel AI SDK
import { generateText, wrapLanguageModel } from "ai";
import { screenMiddleware } from "@deliverd/screen/ai-sdk";
const model = wrapLanguageModel({ model: openai("gpt-5"), middleware: screenMiddleware() });
const { text } = await generateText({ model, prompt });
中间件会一次性检查整段对话,因此同一个值在不同消息中会使用同一个占位符。它会还原回答,包括以流式方式接收、且占位符被拆分到多个数据块中的回答。遇到 deny 或 ask 时,它会抛出 ScreenBlockedError,且不会调用模型。默认适用于 AI SDK 7;对于 AI SDK 6,请传入 specificationVersion: "v3"。
CLI、提交前检查和 CI
cat prompt.txt | npx @deliverd/screen --redact # the redacted text
npx @deliverd/screen --json notes.txt # kinds and offsets, never values
npx @deliverd/screen --fail evals/*.jsonl # exit 1 if anything is found
npx @deliverd/screen --terms clients.txt doc.md # your own words, one per line
在 GitHub Actions 中,使用 uses: deliverd-dev/deliverd-screen@v0 和 paths: 可运行相同的检查;对于 pre-commit,钩子 ID 为 deliverd-screen。两者都位于 deliverd-dev/deliverd-screen。
MCP
claude mcp add deliverd-screen -- npx -y @deliverd/screen mcp
这会为 Claude Code、Cursor 或 Codex 中的 Agent 提供一个工具 screen_text。它会返回判定结果和已遮蔽的文本,不会返回被替换的值,因此这些值不会通过该工具进入 Agent 的上下文。
Microsoft Purview
如果你的组织使用 Microsoft Purview 编写数据丢失防护规则,这些相同的规则也可以在此处应用于任何模型和任何工具。通过 Purview 检查后,以更严格的判定结果为准:Purview 阻止时会拒绝,警告时则需要确认。
import { entraAppToken, purviewCheck, screen } from "@deliverd/screen";
const purview = purviewCheck({
token: entraAppToken({ tenantId, clientId, clientSecret }),
userId: entraObjectIdOfThePerson,
app: { name: "Claims assistant", entraAppId: clientId },
});
const checked = await screen(prompt, { purview });
这是此软件包中唯一会使用网络的功能,而且只有在你传入它时才会使用:文本会发送到 Microsoft Graph(processContent),且只会发送到你自己的租户。Entra 应用需要 Content.Process.All 权限,并且 DLP 规则必须使用 New-DlpComplianceRule 创建(Purview 不会将仅在门户中创建的规则应用于已在 Entra 中注册的应用)。
对于 MCP 服务,请设置 DELIVERD_PURVIEW_TENANT_ID、DELIVERD_PURVIEW_CLIENT_ID、DELIVERD_PURVIEW_CLIENT_SECRET 和 DELIVERD_PURVIEW_USER_ID(还可选择设置 DELIVERD_PURVIEW_ON_UNAVAILABLE:allow、ask 或 deny)。
一张网,而非证书
结构化标识符可以被可靠地检测出来。名称能否检测出来,取决于你接入的模型。经过脱敏的个人相关文本,在 GDPR 下仍属于个人数据。使用此工具可以减少发送的标识符,但绝不能将其视为提示词已清理干净的证明。
需要由人来决定时
库只能告诉你停止操作。Deliverd 的 Data Gate 会作出决定。@deliverd/sdk 中的 deliverd.screen() 会在你的机器上运行这些相同的检测器,只向 Deliverd 发送计数(“两个电子邮件地址、一个 IBAN”)。最终判定取决于你所在组织的策略,以及其 AI 注册表批准各个模型接收的内容。遇到 ask 时,它会通过 Slack、Teams 或手机向合适的人员提问,并记录每次检查。它使用相同的 detectors。
许可证
MIT。检测器与 Deliverd 的 SDK 共享,并统一使用一组测试向量:packages/conformance/screening.json。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。