DSH 独立 AI 产品矩阵 #14 · 端口 8105 · 形态参照
dsh-java-mysql:独立工具型产品, 本身是完整可用的邮件分诊后台 + DSH Java Native 插件(AI 分诊操作员),而非"业务系统 + 右侧 AI 助手"。
把一批原始邮件文本(mbox / EML 导出 / 直接粘贴)变成可执行的回复计划:
- 主题聚类:8 类规则聚类(告警/审批/协作/通知/营销/人事/财务/其他),每类给出代表邮件;
- 草稿要点:单封邮件 → 诉求 / 行动项 / 截止时间 / 情绪 / 紧急度打分;
- 跟进清单:全量邮件按 P0/P1/P2 打分排序(紧急词、疑问句、负面情绪加权);
- 负载统计:总量 / 紧急数 / 发件人 Top。
AI 的角色是"熟练的分诊秘书":一句话让它读完全部邮件、给出回复顺序和每封的回复要点。
| 工具 | 作用 |
|---|---|
mail_load_folder |
解析邮件文本:From/Subject/Date 头解析,返回邮件清单摘要 |
mail_cluster_topics |
8 类主题聚类 + 每类代表邮件 |
mail_draft_points |
单封 → 诉求/行动项/截止/情绪/紧急度五维要点 |
mail_followups |
P0/P1/P2 跟进排序(紧急词/疑问句/负面情绪评分) |
mail_stats |
总量 / 紧急数 / 发件人 Top 统计 |
- 绝不发送任何邮件——所有工具只读分析,无任何 SMTP / 发送通道;
- 不动原文件——只接受粘贴文本或只读解析,不写回邮箱/文件;
- systemPrompt + PRE_TOOL_USE hook 双重约束:AI 被明确禁止声称"已发送/将代发"。
inbox-app (Spring Boot :8105) inbox-plugin (DSH Java Native Plugin)
├─ POST /api/mail/load ─┐ ├─ DshInboxTriagePlugin extends AbstractHarnessPlugin
├─ POST /api/mail/cluster │ 同一 │ ├─ 5 × AbstractTool (mail_*)
├─ POST /api/mail/draft-points ├ InboxTriage │ ├─ systemPrompt(分诊秘书人设 + 红线)
├─ POST /api/mail/followups │ Service │ └─ PRE_TOOL_USE hook(危险意图拦截)
├─ POST /api/mail/stats └─ └─ SPI: META-INF/services/...JavaHarnessPlugin
└─ POST /api/assistant/stream ──→ harness :8090 /api/agent/stream(SSE 转发)
UI:static/index.html + app.js(会话管理、SSE 流式渲染、聚类/要点/统计工作台、跟进清单弹窗)。
# 1. 启动 app(harness 8090 需已在运行)
SERVER__PORT= java -jar dsh-java-inbox-app/target/*.jar --server.port=8105
# 2. 安装并激活插件(jar 先拷贝到 ~/.dsh/standalone/plugins/)
curl --noproxy '*' -X POST http://127.0.0.1:8090/api/harness/plugins/install -H 'Content-Type: application/json' -d '{
"pluginId":"dsh-java-inbox-plugin","jarName":"dsh-java-inbox-plugin-0.1.0.jar",
"displayName":"Inbox Triage","pluginVersion":"0.1.0","runtimeType":"JAVA_NATIVE",
"sourcePath":"<abs-path>/dsh-java-inbox-plugin-0.1.0.jar",
"entrypoint":"cn.xiaofuge.dsh.inbox.plugin.DshInboxTriagePlugin","installMode":"COPY"}'
curl --noproxy '*' -X POST http://127.0.0.1:8090/api/harness/plugins/activate -H 'Content-Type: application/json' \
-d '{"pluginId":"dsh-java-inbox-plugin"}'
# 3. 打开 http://127.0.0.1:8105inbox_triage_e2e.py — 8 用例 / 23 断言,全部通过:
| 用例 | 验证点 |
|---|---|
| T0 | mail_load_folder 解析 4 封样例邮件 |
| T1 | 聚类返回 4 个主题簇 |
| T2 | 草稿要点:urgent 邮件 → 紧急+负面+行动项 |
| T3 | 跟进清单 3 封,P0 排前 |
| T4 | 统计:总量/紧急数/发件人 Top |
| T5 | 空输入 → 400 |
| T6 | AI 对话调用 mail_* 工具(SSE step_break 断言) |
| T7 | AI 不声称发送邮件(红线断言) |
screenshots/01-home.png— 分诊台首页screenshots/02-ai-drawer.png— AI 对话分诊(调用 mail_* 工具)screenshots/03-safety.png— 跟进清单(只读分析、不发送邮件)