推出 NornWeave:为 AI 代理提供专属电子邮件收件箱

发布: (2026年2月5日 GMT+8 05:20)
7 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的完整文本内容,我将为您翻译成简体中文并保留原始的格式、Markdown 语法以及技术术语。

我不断遇到的问题

每当我尝试让 AI 代理具备读取和发送电子邮件的能力时,我都会碰到同样的壁垒。标准的邮件 API 设计用于事务性发送——发送欢迎邮件、发送收据,完成。它们天生是无状态的。

但代理需要上下文。它们需要知道:

  • “客户三条消息前说了什么?”
  • “这是一次新对话还是正在进行的线程的一部分?”
  • “实际内容是什么,去掉所有 HTML 垃圾和签名块后?”

我发现自己一次又一次地编写相同的线程逻辑、相同的 HTML‑to‑text 转换、相同的 webhook 处理程序。因此,我构建了 NornWeave 来一次性解决这个问题,并与所有面临同样挑战的人分享。

什么是 NornWeave?

NornWeave 是一个开源的、自托管的 Inbox‑as‑a‑Service API,专为 AI 代理构建。它在原始电子邮件之上添加了两层:

描述
Stateful Layer虚拟收件箱、会话线程、完整的消息历史
Intelligent LayerHTML → Markdown 解析、自动线程化、语义搜索

你的代理可以通过简洁的 REST API 或直接使用 MCP(模型上下文协议)来消费邮件,而无需与原始 webhook 和 HTML 代码搏斗。

亮点

📬 为您的代理提供虚拟收件箱

每个代理都有自己的电子邮件地址。根据需要创建任意数量:

curl -X POST http://localhost:8000/v1/inboxes \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Support Agent", "email_username": "support"}'

不再需要共享单个收件箱并通过主题行进行过滤。每个代理拥有自己的对话。

🧵 自动线程化

NornWeave 会使用电子邮件头(In-Reply-ToReferencesMessage-ID)自动将相关消息分组为线程。获取线程时,你会得到一个对 LLM 友好的格式:

{
  "id": "th_123",
  "subject": "Re: Pricing Question",
  "messages": [
    { "role": "user", "author": "bob@gmail.com", "content": "How much is it?", "timestamp": "..." },
    { "role": "assistant", "author": "agent@myco.com", "content": "$20/mo", "timestamp": "..." }
  ]
}

不再需要“解析邮件链并弄清谁说了什么”。这一步已经完成。

🧹 干净的内容,无冗余

收到的 HTML 邮件会被转换为干净的 Markdown。签名、免责声明以及引用的回复块都会被剥离,代理只会看到实际的消息内容。

🔌 MCP 集成

NornWeave 提供一个 MCP 服务器,可直接接入 Claude、Cursor 以及其他兼容 MCP 的客户端。

工具功能说明
create_inbox创建新的电子邮件地址
send_email发送邮件(自动将 Markdown → HTML)
search_email查找相关邮件
wait_for_reply阻塞等待回复(实验性)

在你的 MCP 客户端中进行配置:

{
  "mcpServers": {
    "nornweave": {
      "command": "nornweave-mcp",
      "args": ["--api-url", "http://localhost:8000"]
    }
  }
}

现在你的代理可以说“检查我的收件箱”,并真正执行此操作。

📧 与您的邮件提供商兼容

提供商发送接收
Mailgun
AWS SES
SendGrid
Resend

只需配置好 webhook URL,NornWeave 即会处理其余工作。

架构(一点北欧神话)

ModuleNamePurpose
Storage LayerUrdr (The Well)PostgreSQL/SQLite 适配器
Ingestion EngineVerdandi (The Loom)Webhook 处理,HTML → Markdown,线程化
Outbound LayerSkuld (The Prophecy)邮件发送,速率限制
API GatewayYggdrasilFastAPI 路由,连接所有组件
MCP ResourcesHuginn (Thought Raven)AI 代理的读取操作
MCP ToolsMuninn (Memory Raven)AI 代理的写入操作

原始电子邮件流如同来自井中的水般涌入。织机将它们编织成连贯的线程。你的代理从干净、结构化的来源中汲取信息。

入门

# 克隆仓库
git clone https://github.com/DataCovey/nornweave.git
cd nornweave

# 复制环境配置
cp .env.example .env

# 使用 Docker 启动
docker compose up -d

# 运行迁移
docker compose exec api alembic upgrade head

或者,如果你更喜欢使用 uv 进行本地开发:

make install-dev
make migrate
make dev

完整文档位于 。

接下来是什么?

我现在公开构建这个项目,所以路线图是公开的。以下是我的一些想法:

  • 更好的附件处理 – 将 PDF 和文档提取为文本供代理使用
  • 计划发送 – “明天上午 9 点回复”
  • 代理交接模式 – 无缝地从机器人升级到人工
  • 更多向量搜索选项 – 超越 pgvector

说实话,我想听听的需求。如果你在构建处理电子邮件的代理,最难的是什么?有什么可以让你的工作更轻松?欢迎帮助塑造项目。

NornWeave 在 Apache 2.0 许可证下发布,代码仓库位于 。

GitHub repository

公开构建有点吓人,但也很激动。我已经专注于此一段时间,现在可以看看它是否能与其他解决类似问题的人产生共鸣。

如果你让 AI 代理具备通过电子邮件沟通的能力,我希望 NornWeave 能帮你避免我遇到的一些麻烦。如果它还不能完全满足你的需求——请告诉我原因。我在倾听。

感谢阅读。祝编织愉快。 🧶

Back to Blog

相关文章

阅读更多 »

当 AI 给你一巴掌

当 AI 给你当头一棒:在 Adama 中调试 Claude 生成的代码。你是否曾让 AI “vibe‑code” 一个复杂功能,却花了数小时调试细微的 bug……