核心概念
Monstrum 是一个 AI Agent 管控平台。本文解释平台的核心概念和设计理念,帮助你理解”平台在做什么”以及”为什么这样设计”。
设计理念
Bot 是行为主体,不是工具
传统的 AI 应用把大模型当工具——你输入问题,它返回答案。但在 Monstrum 中,Bot 是一个独立的行为主体:它可以自主决策、调用工具、访问外部系统、甚至委派任务给其他 Bot。
就像组织中的员工需要身份证明、行为边界、操作审计一样,Bot 作为数字世界的行为主体,也需要一套完整的治理体系:
| 自然人 | Bot | Monstrum 实现 |
|---|---|---|
| 身份证 | 身份 | Bot 名称、描述、所属工作区 |
| 法律约束 | 权限策略 | 角色权限(允许的操作 + 参数范围) |
| 工作授权 | 资源绑定 | BotResource(绑定哪些系统、用什么身份) |
| 密钥/钥匙 | 凭据 | Credential(加密存储,Bot 看不到明文) |
| 薪资预算 | Token 预算 | 月度预算 + 成本追踪 |
| 行为记录 | 审计日志 | 全链路操作日志 |
| 经验/记忆 | Bot 记忆 | 分区存储、自动提取的记忆系统 |
平台强制,而非 AI 自律
AI Agent 有能力但不可信——它会幻觉、会被 prompt 注入、会越权。Monstrum 的核心主张:安全由平台架构保证,不依赖 AI 的自我约束。
- LLM 说”我不会访问那个仓库”?→ 不够。平台让它根本看不到那个仓库的工具
- LLM 说”我不会泄露 API Key”?→ 不够。平台从不把明文凭据交给 LLM
- LLM 说”我只操作授权范围”?→ 不够。平台在每次工具调用后校验参数是否越界
治理三原则
1. 最小权限 — 看不到 = 不存在
Bot 只能看到被显式授权的工具。未绑定的资源对 Bot 完全不可见——不是”可见但禁止调用”,而是 LLM 根本不知道它们的存在。
2. 凭据隔离 — LLM 永远碰不到密钥
凭据加密存储。执行时由平台解密注入到执行层,LLM 在整个生命周期中接触不到任何明文。即使 LLM 被 prompt injection 攻击,也无法泄露凭据。
3. Fail-Closed — 出错就停
任何环节出错,结果是”Bot 什么也做不了”,而不是”不受限制”:
- 工具解析出错 → 返回空工具列表(Bot 没有任何工具可用)
- 权限校验出错 → 拒绝请求
- 事件投递前 re-check 失败 → 阻止投递
资源模型
Monstrum 的资源管理是三层抽象:声明能力 → 实例化连接 → 授权绑定。
三层结构
ResourceType(资源类型) → Resource(资源实例)+ Credential(凭据) → Bot
ResourceType(资源类型)
能力声明。定义一类集成”能做什么”。例如 SSH 类型声明了 ssh_execute 工具、主机白名单和命令白名单的权限维度、SSH Key 和密码两种认证方式。
平台内置 6 种资源类型:
| 资源类型 | 用途 |
|---|---|
| SSH | 远程服务器命令执行 |
| MCP | 连接 Model Context Protocol 工具服务器 |
| Bot | Bot 间任务委托 |
| Web Access | 网页搜索与内容抓取 |
| Monstrum Agent | 本地 Agent 桥接自定义工具 |
| Web3 (EVM) | EVM 区块链操作 |
此外,插件市场提供更多资源类型(如 GitHub、GitLab 等)。
Resource(资源实例)
一个资源类型的具体连接。例如,你可以创建两个 SSH 类型的 Resource:“生产服务器”和”测试服务器”,各自配置不同的主机地址和凭据。
Credential(凭据)
加密存储的认证信息(API Key、SSH 密钥、OAuth Token 等)。凭据与 Resource 关联,Bot 通过 Resource 间接使用凭据——但 Bot 永远看不到凭据明文。
BotResource(资源绑定)
Bot 与 Resource 之间的授权关系。一个绑定包含:
- 绑定哪个 Resource:Bot 可以通过这个绑定使用该 Resource
- 使用哪个凭据:从 Resource 的凭据中选择
- 权限约束:允许哪些操作、参数范围限制
绑定是权限的核心载体——没有绑定,Bot 就不知道这个 Resource 的存在。
权限模型
两层权限过滤
Monstrum 的权限检查分两层独立运行。任何一层都可以阻止越权行为:
第一层:Pre-LLM(工具可见性过滤)
在 LLM 推理之前,平台根据 Bot 的资源绑定过滤工具列表。LLM 只会看到 Bot 被授权使用的工具。未绑定的资源及其工具对 LLM 完全不可见。
第二层:Post-LLM(参数级权限校验)
在 LLM 返回工具调用后,平台校验调用参数是否在授权范围内。例如,Bot 虽然有 SSH 工具的调用权限,但如果它尝试连接未授权的主机,请求会被拒绝。
用户消息 → [Pre-LLM: 过滤工具列表] → LLM 推理 → [Post-LLM: 校验参数] → 工具执行
权限维度
每种资源类型声明自己的权限维度(Scope Dimension),定义”需要检查哪些参数”。例如:
| 资源类型 | 权限维度 | 含义 |
|---|---|---|
| SSH | hosts | 允许连接的主机(glob 匹配) |
| SSH | commands | 允许执行的命令(glob 匹配) |
| Web Access | domains | 允许访问的域名(glob 匹配) |
| Web3 | recipients | 允许转账的地址 |
| Web3 | contracts | 允许调用的合约地址 |
| Bot | bots | 允许调用的目标 Bot |
在创建资源绑定时,你可以为每个维度设置约束值(如 hosts: ["10.0.*", "prod-*"]),平台会自动校验每次工具调用的参数是否符合约束。
委派权限(Delegate Scope)
当 Bot A 将任务委托给 Bot B 执行时,可以为委托设置约束:
- 工具白名单:限制 Bot B 在执行委托任务时可以使用哪些工具
- 参数约束:进一步限制 Bot B 的参数范围
Bot B 执行委托任务时的有效权限 = Bot A 的委派约束 ∩ Bot B 的自身权限。权限只会缩小,不会放大。
角色(Role)
角色是预设的权限模板。你可以创建角色(如”只读运维”、“仓库管理员”),定义允许的操作和参数约束,然后在创建资源绑定时快速应用。角色支持继承,子角色在父角色基础上进一步限制权限。
详见 角色与权限。
两类工具
Bot 的工具分为两类,平台对它们的治理策略截然不同:
外部资源工具
Bot 代表用户访问外部系统——就像员工用公司账号访问 GitHub。
- 需要通过 Resource + Credential 绑定
- Pre-LLM 层根据绑定过滤工具可见性
- Post-LLM 层通过权限维度校验调用参数
- 例子:SSH 命令执行、MCP 工具调用、Bot 间委托、Web 搜索
Bot 自有能力工具
Bot 操作自己的数据——就像员工在自己的笔记本上写备忘。
- 不需要 Resource 绑定,由 Bot 运行时配置开关控制
- 不走权限维度校验(数据归 Bot 自己所有,所有权天然保证安全)
- 例子:记忆读写、创建定时任务、管理工作流、向渠道发送消息
判断标准:数据归谁所有?操作的是 Bot 自己的数据 → 自有能力;操作的是外部系统或其他 Bot → 外部资源。
工具发现模式
不同资源类型的工具以不同方式被发现:
| 模式 | 说明 | 代表类型 |
|---|---|---|
| 静态 | 工具在资源类型中预定义,不会变化 | SSH、Bot、Web3 |
| 动态 | 工具在运行时自动发现(连接后探测) | MCP、Monstrum Agent |
| 配置式 | 工具定义固定,行为由配置决定 | Web Access(搜索引擎可选) |
对于动态发现类型,Bot 绑定资源时使用工具 glob 模式(如 list_*、get_menu)来控制可用工具,而非操作名。
Bot vs Agent vs LLM
这三个概念容易混淆,需要区分:
| 概念 | 是什么 |
|---|---|
| LLM | 大语言模型,纯推理引擎。接收 prompt 和工具定义,返回文本或工具调用。自身不执行任何操作。 |
| Bot | Monstrum 平台上的受管 AI 实体。拥有身份、权限、资源绑定、记忆、预算。它使用 LLM 作为”大脑”,但 Bot ≠ LLM。 |
| Agent | 用户在本地运行的程序,通过 WebSocket 接入平台,将本地工具桥接到平台。 |
简单来说:LLM 是引擎,Bot 是平台管控的实体,Agent 是本地工具的桥梁。
会话与任务
Bot 有两种执行模式:
会话模式(Session)
用户通过 IM 渠道(Slack、飞书、Telegram 等)或 Web 对话与 Bot 交互。
- 多轮对话,保持上下文
- 空闲 30 分钟自动回收
- 支持会话持久化(下次创建时恢复历史)
- 超过 80 条消息时自动压缩(LLM 总结旧消息,保留最近 50 条)
任务模式(Task)
通过 API、定时调度、Bot 间委托或事件触发的单次执行任务。
- 独立上下文,执行完毕即结束
- 支持进度上报和 checkpoint(断点恢复)
- 适合批量操作、定时任务等场景
工作区(Workspace)
工作区是 Monstrum 的租户隔离单元。所有实体(Bot、Resource、审计日志等)按工作区隔离。
- 一个用户可以属于多个工作区
- 工作区成员有 4 种角色:所有者 > 管理员 > 成员 > 访客
- 每个工作区有独立的 LLM Provider 配置、提示词模板、Bot 和资源
事件系统
平台内部有完整的事件发布/订阅体系,覆盖全生命周期:
| 事件类型 | 示例 |
|---|---|
| 任务事件 | task.completed、task.failed |
| 工作流事件 | workflow.completed、workflow.failed |
| 调度事件 | schedule.fired |
| 会话事件 | session.created、session.expired |
| 自定义事件 | custom.deploy_done(Bot 发布的自定义事件) |
Bot 可以订阅事件(使用 fnmatch 模式匹配),在事件触发时自动执行指定指令。事件也可以触发工作流执行。
详见 工作流自动化。
记忆系统
Bot 的记忆按作用域分区管理,决定记忆在什么场景下可见:
| 作用域 | 可见范围 |
|---|---|
| 全局记忆 | 所有场景 |
| 频道记忆 | 特定 IM 频道的会话 |
| 任务记忆 | 特定任务执行期间 |
| 资源记忆 | 绑定了特定 Resource 的场景 |
记忆有两种来源:
- 手动添加:用户在 Bot 详情页手动创建的记忆条目
- 自动提取:任务完成或会话过期时,LLM 分析对话内容自动提取重要信息
详见 记忆系统。
提示词管理
平台的提示词按三层优先级解析:
Bot 级自定义 > 工作区级模板 > 系统默认值
你可以在工作区级别定制所有 Bot 共用的提示词模板,也可以在单个 Bot 级别覆盖特定提示词。
详见 提示词模板。