---
title: "在有人点开之前，先判断一封可疑邮件"
description: "一个关于邮件风险的是非问题，加一个关于处理方式的单选问题，再用概率分流。成本足够低，可以对每封收到的邮件跑，而不只是被举报的那些。"
canonical: "https://system-one.dev/zh-CN/use-cases/phishing-triage"
language: "zh-CN"
---

# 在有人点开之前，先判断一封可疑邮件

**要点**

1. 钓鱼邮件分流是两类有界判断：这封邮件是否在通过链接或附件套取凭证，以及它该被怎么处理。
2. 有了每封邮件的概率，就能为隔离、提醒用户、人工复核设不同区间，而不是一个是非标签。
3. 它只是分流信号，不是结论：漏掉的情况仍要上报，最终决定留给安全团队。

## 为什么概率区间比标签好用

只回答“钓鱼”或“不是钓鱼”的过滤器只有两个动作：投递或丢弃。但真正麻烦的邮件都在中间——域名差一个字符的供应商发票，或者带短链的密码重置通知。

有了概率，你可以把结果拆成几档：

- **高**：隔离并通知收件人。
- **中**：投递时加提示条，或先留住等复核。
- **低**：正常投递，并作为负样本喂给下一轮阈值调整。

## 问题形状

```ts
import { booleanQuestion, choice } from '@system-one-ai/core';

export const mailQuestions = {
  credentialRisk: booleanQuestion(
    'Does this message try to obtain credentials or payment through a link or attachment?',
  ),
  handling: choice('What should happen to this message?', {
    deliver: 'Deliver as normal',
    warn: 'Deliver with a warning to the recipient',
    quarantine: 'Quarantine and notify the recipient',
    review: 'Send to the security team',
  }),
};
```

把发件人、主题、正文和链接域名作为 state。先去掉脚本和远程图片：模型读的是文本，你不希望分流本身触发一次远程请求。

## 按数字分流

```ts
export async function triageMail(client, message: { from: string; subject: string; body: string; links: string[] }) {
  const result = await client.evaluate({
    state: message,
    questions: mailQuestions,
  });
  const p = result.answers.credentialRisk.probability;
  // 占位区间；请用你自己标注的邮件样本校准
  if (p >= 0.85) return 'quarantine';
  if (p >= 0.5) return 'review';
  if (p >= 0.25) return 'warn';
  return 'deliver';
}
```

> 示意代码，未经过实际运行测试。

## 它抓不到的情况

- **它读不了的附件。** Jev 只读文本和 JSON；扫描版 PDF 或带宏的文档对它不可见。先把文本抽出来，或者换一个能读图的模型。
- **近似域名**：除非把发件域名放进 state。请把域名和链接主机显式传进去。
- **被盗用的合法账号。** 措辞可能完全正常，因为是真实的人写的。

把关键字段传进去，把问题问窄。通用做法见 [Agent 护栏](https://system-one.dev/zh-CN/blog/agent-guardrails)。

## 费用

每 4KB 算一块，不足 4KB 也按一块。费用 = 块数 × 问题数 × 模型单价。一封短邮件就是一块，所以 Jev 上两个问题的一次请求是 2 积分。

新账号注册即送 100 积分，积分不会过期。详见 [定价](https://system-one.dev/zh-CN/pricing)。

[在线试用钓鱼邮件示例（需登录）](https://system-one.dev/zh-CN/demo/phishing-email)，用示例数据看同一组问题。


## 常见问题

### 它能取代邮件安全网关吗？

不能。它是邮件层面的判断，用来补充现有过滤；附件、链接、发件人信誉与策略仍由网关处理。

### 它会读附件吗？

它只读文本和 JSON。先抽取文档文本，或改用能读图的模型。

### 区间怎么设？

先标注一批真实邮件，再按你所在组织对漏判与误判的代价选区间，并定期复核。

### state 里该放什么？

发件地址与域名、主题、纯文本正文、链接主机，以及这封邮件是否来自组织外部。去掉脚本和远程图片。
