1. 项目概述:构建自我管理的Slack AI助手
在当今快节奏的团队协作环境中,我们经常需要处理各种重复性任务:检查CI构建状态、汇总日报、提醒会议安排等。传统AI助手需要用户主动打开终端或浏览器才能使用,而pi-mom项目创造性地将AI智能体深度集成到Slack工作环境中,打造了一个24/7待命的数字员工。
pi-mom的核心创新点在于:
- 主动服务能力:通过事件系统实现定时任务和自动触发
- 环境感知能力:动态构建的系统提示词确保上下文实时更新
- 自我进化能力:技能系统允许AI自主创建可复用的工具
- 安全执行机制:Docker沙箱隔离危险操作
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 架构设计与核心模块
2.1 整体架构解析
pi-mom采用分层架构设计,各模块职责分明:
code复制应用层
├── Slack交互界面
├── 用户指令解析
└── 可视化反馈
服务层
├── 事件调度引擎
├── 记忆管理系统
└── 技能仓库
核心层
├── AI代理引擎(pi-agent-core)
├── LLM接口(pi-ai)
└── 沙箱执行环境
持久层
├── 文件系统存储
└── 日志系统
2.2 关键模块实现细节
事件调度系统
采用基于文件监听的轻量级设计:
typescript复制// events.ts核心逻辑
const watcher = chokidar.watch('events/')
watcher.on('add', (path) => {
const event = JSON.parse(fs.readFileSync(path))
switch(event.type) {
case 'immediate':
handleImmediate(event)
fs.unlinkSync(path) // 处理完即删除
break;
case 'one-shot':
scheduleOneTime(event)
break;
case 'periodic':
startCronJob(event)
break;
}
})
动态提示词构建
系统提示词由多个动态部分组成:
javascript复制function buildSystemPrompt() {
return [
`# 角色定义\nYou are mom, a Slack bot assistant...`,
`# 环境信息\n${getEnvDescription()}`,
`# 记忆内容\n${readGlobalMemory()}`,
`# 频道记忆\n${readChannelMemory()}`,
`# 可用技能\n${listSkills()}`
].join('\n\n')
}
3. 核心功能实现
3.1 自我管理的事件系统
pi-mom的事件系统支持三种触发方式:
-
即时事件(Immediate)
- 文件创建即触发
- 典型应用:CI失败通知、异常告警
- 生命周期:触发后自动删除
-
单次事件(One-shot)
- 指定时间触发一次
- 典型应用:会议提醒、临时任务
- 示例配置:
json复制{ "type": "one-shot", "channelId": "dev", "text": "代码审查会议10分钟后开始", "at": "2023-08-15T14:00:00+08:00" } -
周期事件(Periodic)
- 基于cron表达式重复触发
- 典型应用:日报生成、定期检查
- 特殊设计:[SILENT]机制避免无意义通知
3.2 双层记忆系统实现
记忆系统采用文件存储方案,具有以下优势:
- 实时性:修改立即生效,无需重启服务
- 可读性:Markdown格式便于人工维护
- 隔离性:全局记忆与频道记忆分离
记忆更新流程示例:
- 用户指令:"我们的测试数据库地址改为test-db2:5432"
- AI识别需要更新全局记忆
- 执行编辑操作:
bash复制[EDIT] /workspace/MEMORY.md
- 原内容:测试数据库:test-db:5432
- 新内容:测试数据库:test-db2:5432
- 下次请求自动包含更新后的信息
3.3 安全工具链设计
pi-mom仅提供5个基础工具,但通过精心设计覆盖绝大多数场景:
| 工具 | 安全措施 | 典型应用场景 |
|---|---|---|
| bash | 输出截断、超时控制、容器隔离 | 执行系统命令、安装软件 |
| read | 路径白名单、大小限制 | 查看日志、配置文件 |
| write | 权限检查、备份机制 | 创建新文件、保存结果 |
| edit | 行级锁定、差异检查 | 修改配置、更新文档 |
| attach | 类型检查、病毒扫描 | 分享报告、上传成果物 |
4. 高级特性与最佳实践
4.1 技能系统深度解析
技能系统允许AI创建可复用的CLI工具,典型开发流程:
-
用户请求创建新技能:
"@mom 需要个工具能自动生成JIRA周报" -
AI分析需求并创建技能骨架:
bash复制mkdir -p skills/jira-report touch skills/jira-report/SKILL.md touch skills/jira-report/generate.sh -
编写技能描述文件(SKILL.md):
markdown复制--- name: jira-report description: Generate weekly JIRA report dependencies: jq, curl --- Usage: bash skills/jira-report/generate.sh --project <PROJ> -
实现核心逻辑(generate.sh):
bash复制#!/bin/bash curl -s "https://jira/api/projects/$1/issues" | \ jq -r '.issues[] | "\(.key): \(.fields.summary)"' -
技能自动纳入系统提示词,后续可直接调用
4.2 生产环境部署建议
-
安全配置
- 使用Docker沙箱模式
- 限制文件系统访问范围
- 设置网络出口白名单
-
性能优化
bash复制# 启动参数优化示例 mom --sandbox=docker:mom-prod \ --memory-limit=1GB \ --concurrency=5 \ /data/workspace -
监控方案
- 日志分析:ELK收集context.jsonl
- 性能指标:Prometheus监控
- 异常报警:通过immediate事件触发
5. 典型问题排查指南
5.1 常见问题速查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 命令执行超时 | 复杂操作未完成 | 增加--exec-timeout参数 |
| 记忆更新不生效 | 文件权限问题 | 检查workspace目录权限 |
| 周期性事件不触发 | 时区配置错误 | 检查event文件中的timezone |
| 附件上传失败 | Slack API限制 | 分卷压缩大文件 |
| 技能无法识别 | SKILL.md格式错误 | 验证YAML frontmatter语法 |
5.2 调试技巧
-
查看完整上下文
bash复制tail -n 50 context.jsonl | jq . -
模拟事件触发
bash复制echo '{ "type": "immediate", "channelId": "test", "text": "debug message" }' > events/debug.json -
进入沙箱环境
bash复制docker exec -it mom-sandbox sh
6. 项目演进与未来方向
pi-mom作为pi-mono架构的重要组成,展示了AI智能体在协作平台中的巨大潜力。在实际使用中,我们发现了几个有价值的改进方向:
-
性能优化
- 实现记忆系统的增量加载
- 引入工具调用结果的缓存机制
- 优化LLM上下文窗口管理
-
安全增强
- 增加操作审批流程
- 实现细粒度的权限控制
- 完善审计日志功能
-
生态扩展
- 支持更多消息平台(Teams/Discord)
- 提供可视化技能编辑器
- 开发应用市场共享技能
这个项目的独特价值在于它不只是简单地将AI接入Slack,而是创造了一个能够自主管理、持续进化的数字员工。通过文件系统这一简单而强大的抽象,实现了AI与人类的高效协作。
