推出 NornWeave:为 AI 代理提供专属电子邮件收件箱
Source: Dev.to
请提供您希望翻译的完整文本内容,我将为您翻译成简体中文并保留原始的格式、Markdown 语法以及技术术语。
我不断遇到的问题
每当我尝试让 AI 代理具备读取和发送电子邮件的能力时,我都会碰到同样的壁垒。标准的邮件 API 设计用于事务性发送——发送欢迎邮件、发送收据,完成。它们天生是无状态的。
但代理需要上下文。它们需要知道:
- “客户三条消息前说了什么?”
- “这是一次新对话还是正在进行的线程的一部分?”
- “实际内容是什么,去掉所有 HTML 垃圾和签名块后?”
我发现自己一次又一次地编写相同的线程逻辑、相同的 HTML‑to‑text 转换、相同的 webhook 处理程序。因此,我构建了 NornWeave 来一次性解决这个问题,并与所有面临同样挑战的人分享。
什么是 NornWeave?
NornWeave 是一个开源的、自托管的 Inbox‑as‑a‑Service API,专为 AI 代理构建。它在原始电子邮件之上添加了两层:
| 层 | 描述 |
|---|---|
| Stateful Layer | 虚拟收件箱、会话线程、完整的消息历史 |
| Intelligent Layer | HTML → 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-To、References、Message-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 即会处理其余工作。
架构(一点北欧神话)
| Module | Name | Purpose |
|---|---|---|
| Storage Layer | Urdr (The Well) | PostgreSQL/SQLite 适配器 |
| Ingestion Engine | Verdandi (The Loom) | Webhook 处理,HTML → Markdown,线程化 |
| Outbound Layer | Skuld (The Prophecy) | 邮件发送,速率限制 |
| API Gateway | Yggdrasil | FastAPI 路由,连接所有组件 |
| MCP Resources | Huginn (Thought Raven) | AI 代理的读取操作 |
| MCP Tools | Muninn (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 许可证下发布,代码仓库位于 。
公开构建有点吓人,但也很激动。我已经专注于此一段时间,现在可以看看它是否能与其他解决类似问题的人产生共鸣。
如果你让 AI 代理具备通过电子邮件沟通的能力,我希望 NornWeave 能帮你避免我遇到的一些麻烦。如果它还不能完全满足你的需求——请告诉我原因。我在倾听。
感谢阅读。祝编织愉快。 🧶