解密openclaw底层pi-mono架构系列一:5. 让 AI 住进 Slack —— 自我管理的 Slack Bot 智能体详解

解密openclaw底层pi-mono架构系列一:5. 让 AI 住进 Slack ------ 自我管理的 Slack Bot 智能体详解

>>关注,点赞,转发私信发代码<<

>>关注,点赞,转发私信发代码<<

>>关注,点赞,转发私信发代码<<

前五篇我们依次构建了 pi-ai(统一 LLM API)、pi-agent-core(智能体运行时)、pi-tui(终端 UI)、pi-coding-agent(终端编程助手)、pi-web-ui(浏览器聊天组件)。它们要么在终端里运行,要么在浏览器中运行------但都需要人主动打开才能用 。如果 AI 能住在你团队天天用的 Slack 里,随叫随到、还能自己定时干活呢?这就是本篇主角------pi-mom


目录

  1. [pi-mom 是什么](#pi-mom 是什么)
  2. [整体架构:从终端到 Slack](#整体架构:从终端到 Slack)
  3. 系统提示词:每次消息前动态构建
  4. [事件系统:让 Agent 自己定闹钟](#事件系统:让 Agent 自己定闹钟)
  5. [双层记忆:Agent 的"笔记本"](#双层记忆:Agent 的"笔记本")
  6. [工具系统:Agent 的五把瑞士军刀](#工具系统:Agent 的五把瑞士军刀)
  7. 沙箱模式:安全与自由的平衡
  8. 对话历史:两种日志各司其职
  9. [技能系统:Agent 自己造工具](#技能系统:Agent 自己造工具)
  10. 实战:从零运行示例
  11. 总结与回顾

1. pi-mom 是什么

一句话定义

pi-mom = pi-ai + pi-agent-core + Slack 集成 + 事件调度 + 沙箱执行

它是一个自我管理的 Slack 机器人:你在 Slack 频道里跟它说话,它就像一个全能员工------能执行命令、写代码、安装工具、创建定时任务,甚至自己给自己做"技能扩展"。

类比理解

场景 类比 对应的包
在终端里和 AI 聊天 跟 AI 打电话 pi-coding-agent
在浏览器里和 AI 聊天 跟 AI 视频会议 pi-web-ui
在 Slack 里和 AI 协作 AI 常驻办公室,随时响应 pi-mom

关键区别:pi-coding-agentpi-web-ui 需要你主动打开才能用,而 pi-mom 常驻在 Slack 中 ,还能通过事件系统自己定时干活------不用你叫它,它自己会按时检查邮箱、总结消息、发送提醒。

核心能力

复制代码
pi-mom 能做什么?

1. 即时响应     ← 你在 Slack 里 @mom,它立刻回复
2. 执行命令     ← 它能 bash、装软件、跑脚本
3. 文件操作     ← 读/写/编辑文件,上传到 Slack
4. 定时任务     ← 自己创建闹钟和周期巡检
5. 记忆管理     ← 记住团队信息、频道上下文
6. 技能扩展     ← 自己写 CLI 工具供下次调用

2. 整体架构:从终端到 Slack

架构图

核心模块一览

复制代码
packages/mom/src/
├── main.ts          # 入口:启动 Bot + 事件监听
├── agent.ts         # 大脑:系统提示词 + LLM 交互(最核心,885行)
├── events.ts        # 调度:三种事件的监听与触发
├── slack.ts         # 通信:Slack Socket Mode + Web API
├── context.ts       # 记忆:消息同步 + 设置管理
├── store.ts         # 存储:log.jsonl + 附件下载
├── sandbox.ts       # 沙箱:Host / Docker 双模式执行
├── log.ts           # 日志:彩色终端输出
├── download.ts      # 工具:频道历史下载
└── tools/           # 五个核心工具
    ├── index.ts     # 工具注册
    ├── bash.ts      # Shell 命令执行
    ├── read.ts      # 文件读取
    ├── write.ts     # 文件写入
    ├── edit.ts      # 精确编辑
    └── attach.ts    # Slack 附件上传

消息处理流程

复制代码
① 用户在 Slack #general 发送: "@mom 帮我查看 CI 日志"
    │
    ▼
② SlackBot 通过 Socket Mode 接收消息
    │ → 检查频道是否正在处理(防并发)
    │ → 加入频道消息队列
    │
    ▼
③ handleEvent() 被调用
    │ → 标记频道为 running
    │ → 下载消息中的附件(如有)
    │
    ▼
④ 构建系统提示词(每次都从磁盘重新读取)
    │ ├── MEMORY.md(全局 + 频道)
    │ ├── 技能列表(skills/)
    │ ├── 频道映射(C0A34FL → #general)
    │ └── 用户映射(U0A1MAR → @mario)
    │
    ▼
⑤ Agent 运行(pi-agent-core 驱动的工具循环)
    │ ├── 调用 bash: "tail -50 /workspace/ci.log"
    │ ├── 分析输出
    │ └── 生成回复文本
    │
    ▼
⑥ Slack 消息更新
    │ ├── 主消息:最终回复(用户可见)
    │ └── 线程:工具调用详情 + token 用量(可折叠)
    │
    ▼
⑦ 标记频道为 idle,处理队列中的下一条消息

与前几章的关系

复制代码
第 1 章  pi-ai              → mom 用它调用 Claude API
第 2 章  pi-agent-core       → mom 的 Agent 引擎(工具循环、事件流)
第 3 章  pi-tui              → (mom 不使用终端 UI)
第 4 章  pi-coding-agent     → mom 复用了它的会话管理(AgentSession)
第 5 章  pi-web-ui           → (mom 不使用浏览器 UI)
第 6 章  pi-mom              → 把 Agent 接入 Slack + 事件调度 + 沙箱

3. 系统提示词:每次消息前动态构建

对应 examples/06-pi-mom/01-system-prompt.ts

pi-mom 的系统提示词不是写死的 ,而是每次收到消息前从磁盘动态构建的。这意味着记忆更新、技能安装后,下一条消息立即生效。

系统提示词的七大组成部分

复制代码
┌─────────────────────────────────────────┐
│           pi-mom 系统提示词              │
├─────────────────────────────────────────┤
│ 1. 角色定义                              │
│    "You are mom, a Slack bot assistant"  │
├─────────────────────────────────────────┤
│ 2. Slack 格式说明                        │
│    mrkdwn 语法(*bold* 不是 **bold**)    │
├─────────────────────────────────────────┤
│ 3. 频道/用户映射                         │
│    C0A34FL → #general                    │
│    U0A1MAR → @mario (Mario Z)           │
├─────────────────────────────────────────┤
│ 4. 执行环境说明                          │
│    Docker 模式 or Host 模式              │
├─────────────────────────────────────────┤
│ 5. 工作区目录布局                        │
│    MEMORY.md, events/, skills/, ...      │
├─────────────────────────────────────────┤
│ 6. 技能列表                              │
│    send-email, gh-summary, ...           │
├─────────────────────────────────────────┤
│ 7. 当前记忆内容                          │
│    全局记忆 + 频道专属记忆               │
├─────────────────────────────────────────┤
│ 8. 事件格式说明                          │
│    immediate / one-shot / periodic       │
├─────────────────────────────────────────┤
│ 9. 工具列表                              │
│    bash / read / write / edit / attach   │
└─────────────────────────────────────────┘

为什么要动态构建?

复制代码
传统做法:系统提示词写死在代码里
  → 记忆更新?重启服务才能生效
  → 安装新技能?需要改代码重新部署

pi-mom 做法:每次消息前从磁盘读取
  → Agent 自己编辑 MEMORY.md → 下条消息立刻知道
  → Agent 自己创建 SKILL.md → 下条消息立刻能用
  → 频道列表有人加入 → 下条消息自动包含新频道

类比:传统方式像背课文------写死了就是那些;pi-mom 像带着笔记本上考场------随时翻阅最新笔记。

运行示例 01

bash 复制代码
cd examples
npm run 06:prompt

输出展示两个场景:

场景 1:Docker 沙箱模式

复制代码
You are mom, a Slack bot assistant. Be concise. No emojis.

## Environment
You are running inside a Docker container (Alpine Linux).
- Bash working directory: / (use cd or absolute paths)
- Install tools with: apk add <package>
...

## Slack IDs
Channels:
C0A34FL8PMH  #general
C0B12XY9ZKL  #dev
C0C99TEAM01  #ops

Users:
U0A1MARIO01  @mario  Mario Z
U0B2ALICE02  @alice  Alice L
...

场景 2:带记忆内容

复制代码
## Memory
### Global Workspace Memory
- 团队规模:8人,主要技术栈:TypeScript + React + PostgreSQL
- 部署到测试环境:npm run deploy:staging

### Channel-Specific Memory
- 当前冲刺:用户认证重构(截止 3/15)
- 已知 Bug:iOS Safari 上的登录问题

4. 事件系统:让 Agent 自己定闹钟

对应 examples/06-pi-mom/02-event-system.ts

这是 pi-mom 最有趣的设计之一:Agent 不仅能被动响应消息,还能通过写 JSON 文件主动触发自身。

三种事件类型

复制代码
┌────────────────────────────────────────────────────────────────┐
│                      事件类型对比                                │
├──────────┬──────────────────┬──────────────────────────────────┤
│ 类型      │ 触发条件          │ 典型用途                         │
├──────────┼──────────────────┼──────────────────────────────────┤
│immediate │ 文件出现即触发     │ CI 构建失败通知、Webhook 告警     │
│one-shot  │ 指定时间触发一次   │ 会议提醒、截止日期提醒            │
│periodic  │ Cron 表达式周期触发│ 每日站会总结、定期邮箱检查        │
└──────────┴──────────────────┴──────────────────────────────────┘

事件文件格式

每种事件就是一个 JSON 文件,放在 <workspace>/events/ 目录:

json 复制代码
// immediate --- 立即触发
{
  "type": "immediate",
  "channelId": "general",
  "text": "GitHub CI 构建失败:main 分支 #1234"
}

// one-shot --- 定时触发一次
{
  "type": "one-shot",
  "channelId": "dev",
  "text": "提醒:Sprint 评审会议 15 分钟后开始",
  "at": "2026-03-15T09:00:00+08:00"
}

// periodic --- 周期触发
{
  "type": "periodic",
  "channelId": "general",
  "text": "定期检查:扫描未处理的 Slack 消息并汇总",
  "schedule": "0 9 * * 1-5",
  "timezone": "Asia/Shanghai"
}

事件生命周期

复制代码
                    ┌──────────────┐
                    │ 事件 JSON 文件 │
                    │ 写入 events/  │
                    └──────┬───────┘
                           │
                    ┌──────▼───────┐
                    │ EventsWatcher │
                    │ (fs.watch)   │
                    └──────┬───────┘
                           │
              ┌────────────┼────────────┐
              │            │            │
       ┌──────▼─────┐ ┌───▼────┐ ┌────▼─────┐
       │ immediate  │ │one-shot│ │ periodic │
       └──────┬─────┘ └───┬────┘ └────┬─────┘
              │            │            │
              │       等待到达指定时间    │
              │            │       每个 cron 周期
              │            │            │
       ┌──────▼────────────▼────────────▼──────┐
       │          触发:发送到 Slack 频道         │
       └──────────────────┬────────────────────┘
              │                         │
       ┌──────▼──────┐          ┌──────▼──────┐
       │ 删除文件     │          │ 文件保留     │
       │(immediate/  │          │(periodic    │
       │ one-shot)   │          │ 持续触发)    │
       └─────────────┘          └─────────────┘

[SILENT] 响应机制

周期事件是一个巧妙的设计:

复制代码
周期事件触发 → Agent 检查是否有需要汇报的内容
  │
  ├── 有异常 → 正常回复到 Slack 频道
  │
  └── 一切正常 → 回复 "[SILENT]"
                  → SlackBot 检测到 [SILENT]
                  → 删除"正在处理..."的状态消息
                  → 不向频道发送任何内容(零噪音)

类比:就像保安巡逻------有问题就报告,没问题就安静走过,不用每次都说"一切正常"。

运行示例 02

bash 复制代码
cd examples
npm run 06:events

这个示例会模拟完整的事件生命周期(总共运行约 14 秒):

复制代码
时间线:
  0s   → EventsWatcher 启动
  1s   → 写入 immediate 事件 → 立即触发并删除
  2s   → 写入 one-shot 事件(3秒后触发)
  3s   → 写入 periodic 事件(每3秒触发)
  5s   → one-shot 事件触发并删除
  6s   → periodic 第1次触发
  9s   → periodic 第2次触发
  11s  → 删除 periodic 事件文件 → 周期任务取消
  14s  → 程序退出,输出总结

5. 双层记忆:Agent 的"笔记本"

对应 examples/06-pi-mom/03-memory-and-tools.ts

pi-mom 使用文件系统作为记忆存储,分两层:

记忆架构

复制代码
<workspace>/
├── MEMORY.md              ← 全局记忆(所有频道可见)
│   │
│   │  内容示例:
│   │  - 团队技术栈:TypeScript + React + PostgreSQL
│   │  - 部署命令:npm run deploy:staging
│   │  - 密码策略:最少12位,含大写+数字+特殊字符
│   │
└── C0B12XY9ZKL/           ← #dev 频道目录
    └── MEMORY.md           ← 频道专属记忆
        │
        │  内容示例:
        │  - 当前冲刺截止 3/15,Owner: Alice + Bob
        │  - 已知 Bug: iOS Safari 登录问题
        │  - 已解决: Docker 构建 4min→45s

为什么用文件而不是数据库?

复制代码
用 MEMORY.md 文件的好处:

1. Agent 自己就能编辑    → 用 write/edit 工具直接修改
2. 人也能直接看和改      → 任何文本编辑器打开就行
3. 版本控制友好          → git diff 一目了然
4. 零依赖                → 不需要 Redis、PostgreSQL
5. 每次请求实时读取      → 不缓存,永远是最新状态

记忆更新流程

复制代码
用户: "@mom 我们的部署命令改成 npm run deploy:v2 了"

Agent 的内部思考:
  → 这是需要记住的信息
  → 应该更新全局记忆

Agent 调用工具:
  [bash] grep -n "deploy" /workspace/MEMORY.md
  → 找到第 5 行: "- 部署: npm run deploy:staging"

  [edit] 修改第 5 行为 "- 部署: npm run deploy:v2"

Agent 回复:
  "已更新全局记忆中的部署命令。"

下一次任何频道的消息:
  系统提示词中的记忆部分自动包含新的部署命令 ✓

运行示例 03(记忆部分)

bash 复制代码
cd examples
npm run 06:memory

输出展示记忆的动态加载:

复制代码
[第1次请求] 加载记忆:
### Global Workspace Memory
# Global Workspace Memory
## Team Info
- Stack: TypeScript + React + PostgreSQL
...

### Channel-Specific Memory
# Channel Memory: #dev
## Current Sprint (ends 2026-03-15)
...

[Agent 处理后] 更新频道 MEMORY.md...

[第2次请求] 重新加载记忆:
  → 变化的行: - 2026-03-06: iOS Safari OAuth bug fixed
  → 记忆更新对下次请求立即生效 ✓

6. 工具系统:Agent 的五把瑞士军刀

pi-mom 只有 5 个工具,但覆盖了几乎所有操作需求:

工具一览

复制代码
┌────────┬────────────────────────────────────────┬──────────┐
│ 工具    │ 功能                                    │ 沙箱     │
├────────┼────────────────────────────────────────┼──────────┤
│ bash   │ 执行 Shell 命令(主力工具,做 90% 的事) │ ✓ 容器内 │
│ read   │ 读取文件内容(支持 offset/limit 翻页)   │ ✓ 容器内 │
│ write  │ 创建/覆盖文件                           │ ✓ 容器内 │
│ edit   │ 精确行级编辑(不用重写整个文件)          │ ✓ 容器内 │
│ attach │ 上传文件到 Slack 频道                    │ ✗ Slack  │
└────────┴────────────────────────────────────────┴──────────┘

label 参数:用户体验的小细节

每个工具都有一个必需的 label 参数,显示为 Slack 中的状态指示器:

复制代码
用户在 Slack 中看到的效果:

  mom 正在处理...
  ├── 🔧 正在安装 jq...        ← bash 的 label
  ├── 📖 读取 CI 日志...       ← read 的 label
  ├── ✏️ 更新配置文件...       ← edit 的 label
  └── 📎 上传分析报告...       ← attach 的 label

类比:就像外卖 App 的状态更新------"骑手已取餐"、"正在配送中"------让用户知道 Agent 在做什么。

bash 工具的安全设计

复制代码
bash 工具的限制措施:

  输出截断:超过 1000 行或 50KB → 截取末尾部分
            完整输出存到临时文件,告知 Agent 文件位置

  超时控制:默认超时,防止死循环

  沙箱隔离:Docker 模式下在容器中执行
            即使 rm -rf / 也只影响容器

  进程管理:支持 abort signal
            Agent 被停止时自动清理子进程树

7. 沙箱模式:安全与自由的平衡

pi-mom 支持两种执行模式:

双模式对比

复制代码
┌─────────────┬─────────────────────────┬──────────────────────────┐
│              │ Docker 模式(推荐)       │ Host 模式(开发用)       │
├─────────────┼─────────────────────────┼──────────────────────────┤
│ 启动方式     │ mom --sandbox=docker:名  │ mom --sandbox=host       │
│ 命令执行     │ docker exec 容器内       │ 直接在宿主机上            │
│ 文件系统     │ /workspace(容器内)      │ 真实路径                  │
│ 安装软件     │ apk add(Alpine Linux)  │ 系统包管理器              │
│ 安全性       │ ✓ 隔离(破坏仅限容器)   │ ✗ 危险(可操作宿主机)     │
│ 路径转换     │ 自动:宿主路径 ↔ /workspace│ 不需要                   │
│ 适用场景     │ 生产环境                 │ 本地开发调试              │
└─────────────┴─────────────────────────┴──────────────────────────┘

Docker 容器管理

bash 复制代码
# 使用 docker.sh 管理容器
./docker.sh create ./data    # 创建容器,挂载 ./data → /workspace
./docker.sh start            # 启动容器
./docker.sh shell            # 进入容器调试
./docker.sh stop             # 停止容器

# 启动 mom
mom --sandbox=docker:mom-sandbox ./data

路径自动转换

Docker 模式下,mom 自动处理路径映射:

复制代码
宿主机看到的路径:  /home/user/data/C0A34FL8PMH/MEMORY.md
Agent 看到的路径:  /workspace/C0A34FL8PMH/MEMORY.md

系统提示词中:     /workspace/... (Agent 只知道容器内路径)
实际文件操作:     docker exec → /workspace/...
日志中:          /home/user/data/... (人看宿主机路径)

8. 对话历史:两种日志各司其职

pi-mom 为每个频道维护两份日志,用途截然不同:

context.jsonl vs log.jsonl

复制代码
┌─────────────────┬────────────────────────────────────────────┐
│ context.jsonl   │ log.jsonl                                   │
├─────────────────┼────────────────────────────────────────────┤
│ 完整 LLM 上下文  │ 人类可读的消息摘要                           │
│ 包含 tool calls │ 不包含 tool calls/results                   │
│ 包含 tool results│ 只有用户消息 + Bot 最终回复                  │
│ Agent 的工作记忆  │ 历史搜索用                                  │
│ 格式: LLM 消息格式│ 格式: {date, user, text, isBot}            │
│ 用途: 喂给 LLM   │ 用途: grep 搜索旧历史                       │
└─────────────────┴────────────────────────────────────────────┘

为什么要两份?

复制代码
context.jsonl 的问题:
  - 包含大量 tool results(一次 bash 输出可能几 KB)
  - 格式是 LLM 消息结构,人不好读
  - 文件增长很快

log.jsonl 的好处:
  - 轻量,只保留文本消息
  - 可以用命令行工具快速搜索
  - Agent 搜索历史时用它(不用翻 tool results)

使用示例

bash 复制代码
# Agent 需要查找历史时的常用命令:

# 最近 30 条消息
tail -30 log.jsonl | jq -c '{date: .date[0:19], user: .userName, text}'

# 搜索关键词
grep -i "deploy" log.jsonl | jq -c '{date: .date[0:19], text}'

# 搜索特定用户的消息
grep '"userName":"mario"' log.jsonl | tail -20 | jq -c '.text'

消息同步机制

当 mom 离线期间 Slack 里有新消息怎么办?

复制代码
mom 重启后:
  1. SlackBot 回填频道历史(backfill)
  2. syncLogToSessionManager() 对比 log.jsonl 和 context.jsonl
  3. 找到 log.jsonl 中有但 context.jsonl 中没有的消息
  4. 将缺失的消息注入 LLM 上下文
  5. Agent 获得离线期间的消息 → 可以继续对话

9. 技能系统:Agent 自己造工具

pi-mom 最有创意的设计之一是技能系统(Skills)------Agent 可以自己创建可复用的 CLI 工具。

技能结构

复制代码
skills/
├── send-email/              # 全局技能(所有频道可用)
│   ├── SKILL.md             # 技能说明文件(YAML frontmatter)
│   ├── send.sh              # 实际脚本
│   └── config.json          # 配置文件
│
└── <channelId>/skills/      # 频道专属技能
    └── gh-summary/
        ├── SKILL.md
        └── summarize.py

SKILL.md 格式

markdown 复制代码
---
name: send-email
description: Send email via SMTP using configured credentials
---

# send-email

## 用法
bash skills/send-email/send.sh --to <email> --subject <subject> --body <body>

## 前提
需要在 config.json 中配置 SMTP 凭证。

技能创建流程

复制代码
用户: "@mom 帮我做个工具,能把 GitHub Issues 汇总成报告"

Agent 的行为:
  1. [bash] mkdir -p /workspace/skills/gh-summary
  2. [write] 创建 summarize.sh 脚本(调用 gh CLI)
  3. [write] 创建 SKILL.md 描述文件
  4. 回复: "已创建 gh-summary 技能,使用方式: ..."

下次用户说:
  "@mom 用 gh-summary 看看本周有什么新 Issues"

Agent 的系统提示词中已包含这个技能:
  ### Available Skills
  - **gh-summary**: Summarize open GitHub issues/PRs for a repo
    Location: /workspace/skills/gh-summary

Agent 直接调用:
  [bash] bash /workspace/skills/gh-summary/summarize.sh --repo company/product

类比:就像一个员工不仅能完成当前任务,还会把重复的工作流打包成脚本,下次更高效。


10. 实战:从零运行示例

前提条件

bash 复制代码
# 需要安装
node >= 18        # Node.js 运行时
npm               # 包管理器(随 Node.js 自带)

注意:所有示例都是离线演示,不需要:

  • Slack App Token
  • Slack Bot Token
  • Anthropic API Key
  • Docker

步骤 1:安装依赖

bash 复制代码
cd examples
npm install

这会安装 tsx(TypeScript 运行时)和项目依赖。

步骤 2:运行示例

bash 复制代码
# 示例 1:系统提示词构建(瞬间完成)
npm run 06:prompt

# 示例 2:事件系统演示(运行约 14 秒)
npm run 06:events

# 示例 3:记忆系统 + 工具架构(瞬间完成)
npm run 06:memory

每个示例的输出预期

示例 1(06:prompt)

  • 展示 Docker 模式下的完整系统提示词
  • 展示带记忆内容的系统提示词
  • 输出关键设计决策总结

示例 2(06:events)

  • 实时演示三种事件的创建和触发
  • 展示事件文件的自动删除
  • 展示周期事件的取消

示例 3(06:memory)

  • 演示双层记忆的读取
  • 展示记忆更新后的即时生效
  • 列出 5 个工具的详细参数
  • 对比 context.jsonl 和 log.jsonl 的内容

如果要连接真实 Slack

真实部署需要以下环境变量:

bash 复制代码
export MOM_SLACK_APP_TOKEN=xapp-...     # Slack App Token
export MOM_SLACK_BOT_TOKEN=xoxb-...     # Slack Bot Token
export ANTHROPIC_API_KEY=sk-ant-...     # Claude API Key

# 启动(Docker 模式)
./docker.sh create ./data
mom --sandbox=docker:mom-sandbox ./data

# 启动(Host 模式,开发用)
mom --sandbox=host ./data

11. 总结与回顾

pi-mom 的核心设计哲学

设计决策 选择 为什么
系统提示词 每次动态构建 记忆/技能更新即时生效
记忆存储 MEMORY.md 文件 Agent 自己能读写,人也能直接编辑
事件调度 JSON 文件驱动 外部系统、Agent 自身都能创建事件
执行环境 Docker 沙箱 安全隔离,Agent 可以大胆执行命令
对话历史 双日志分离 context.jsonl 喂 LLM,log.jsonl 给人搜
工具设计 5 个 + label bash 做 90% 的事,label 让用户知道进度
技能系统 SKILL.md 约定 Agent 自我进化,越用越强

一句话记住

pi-coding-agent 是终端里的 AI 编程搭档------你主动找它。
pi-web-ui 是浏览器里的 AI 对话组件------用户主动用它。
pi-mom 是 Slack 里的 AI 常驻员工------它自己也会主动干活。

完整系列回顾

复制代码
第 1 章  pi-ai              统一 LLM API,一套代码调 20+ 模型
第 2 章  pi-agent-core       智能体运行时,工具循环 + 事件系统
第 3 章  pi-tui              终端 UI 框架,差分渲染 + 组件化
第 4 章  pi-coding-agent     终端 AI 编程助手 = ai + agent + tui
第 5 章  pi-web-ui           浏览器 AI 聊天组件 = ai + agent + Web Components
第 6 章  pi-mom              Slack AI 常驻员工 = ai + agent + Slack + 事件 + 沙箱

附录:pi-mom 的 Slack 集成细节

Slack 消息格式

pi-mom 使用 Slack 的 mrkdwn 格式(不是 Markdown):

复制代码
Slack mrkdwn           Markdown(不要用)
─────────────────      ──────────────────
*bold*                 **bold**
_italic_               *italic*
`code`                 `code`(一样)
```code``````code```(一样)
<url|text>             [text](url)
<@username>            @username

消息更新策略

复制代码
Agent 运行时,Slack 中的表现:

主消息(用户可见):
  → 流式更新 Agent 的回复文本
  → 最终结果不超过 40KB(Slack 限制)
  → 超长回复自动分成多条消息

线程(可折叠):
  → 每次 tool call 的参数和结果
  → 执行时长
  → Token 用量和费用

[SILENT] 场景:
  → 删除"正在处理..."消息
  → 不发送任何内容到频道

频道隔离

复制代码
每个频道完全独立:

#general  → 独立的 AgentRunner、MEMORY.md、context.jsonl
#dev      → 独立的 AgentRunner、MEMORY.md、context.jsonl
#ops      → 独立的 AgentRunner、MEMORY.md、context.jsonl

互不干扰:
  - #general 里讨论的内容,#dev 的 Agent 不知道
  - 除非写在全局 MEMORY.md 中
相关推荐
DARLING Zero two♡2 小时前
私人 AI 随身带!OpenClaw+cpolar 外网访问完整教程
人工智能
红龙创客2 小时前
从零到一:我用DeepSeek + Suno + 即梦全AI流程创作了一首歌(实操小白教程)
人工智能
CS创新实验室2 小时前
从硬件抽象到意图对齐:论 AI 时代操作系统演进的逻辑必然与 OpenClaw 的范式价值
人工智能·操作系统·策略模式
东离与糖宝2 小时前
告别996:用ComfyUI App Mode把AI工作流一键打包成桌面应用
人工智能
tiany5242 小时前
养虾记录-openclaw通过chrom扩展程序操作浏览器检索新闻等
人工智能
开放知识图谱2 小时前
论文浅尝 | 简单即有效:图和大型语言模型在基于知识图谱的检索增强生成中的作用(ICLR2025)
人工智能·语言模型·自然语言处理·知识图谱
萤丰信息2 小时前
科技赋能・智慧引领:新时代智慧园区系统性建设与高质量发展路径
人工智能·科技·安全·重构·智慧城市·智慧园区
天疆说2 小时前
【拓扑学+航天轨道动力学】同伦(Homotopy)概念解析
人工智能·算法·拓扑学
新缸中之脑2 小时前
向LLM提供数据的最佳方式
人工智能