爱意满满的作品展示区。
igeeky

Wolf RBAC 五年来最重要的更新: 40 刀 vibe coding,给开源权限系统接了个 AI Agent

  •  
  •   igeeky · 17h 27m ago · 545 views

        我是 Wolf 的作者。Wolf 是一个开源 RBAC 权限系统,维护了五年多,一直在做「稳」的事——加字段、修 Bug 、补文档。

    0.7.1 之后终于做了一件真正大的:在 Console 里内嵌了一个 AI Agent ,可以用自然语言直接管理 RBAC。这是 Wolf 五年来最重要的功能更新,没有之一。

    整个 Agent 框架基于 pi-mono@mariozechner/pi-agent-core + @mariozechner/pi-ai),不是另起炉灶写一套管理后台,而是让 AI 通过 Tool Calling 去调 Wolf 现有的 Controller——鉴权、参数校验、缓存刷新、审计日志,全部走原链路。

    能干什么

    说人话就是:你在 Console 左侧点「 AI 助手」,然后直接聊:

    • oa-app 下有哪些角色?每个角色绑了哪些权限?」
    • 「在 pi-mono 下新建一个 viewer 角色,把所有 read_ 开头的权限给它。」
    • 「最近 7 天有没有 403 的访问记录?」
    • 「重置用户 lily 的密码。」

    AI 能做什么 = 当前登录用户在 Console 上能做什么,不会越权。所有写操作进 access_logappID = 'ai-agent',和人工操作区分开,事后能查。

    覆盖了 8 个领域、31 个工具:Application / User / Role / Permission / Resource / Category / UserRole / AccessLog 。

    几个设计上我比较在意的点

    1. 不是 SQL 直连,是复用 Controller

    后端用 InternalCaller 构造 mock Koa ctx ,进程内调现有 Controller 。AI 不是数据库后门,工具权限还会按 super / admin 自动裁剪。

    2. 完整的聊天体验

    • 多会话:新建 / 切换 / 重命名 / 删除,AI 自动总结标题
    • SSE 流式输出,工具调用有独立卡片( running / done / error )
    • Markdown + Mermaid 渲染,查权限关系可以直接出图

    AI 助手主界面

    工具调用与 Markdown 表格

    RBAC 关系 Mermaid 图

    3. 用户记忆

    新建会话时,AI 会异步从上一段对话提取「记忆」(偏好 / 已知信息 / 历史决策 / 操作模式),下次自动注入 System Prompt 。也可以手动增删改。

    记忆面板

    4. 多 Provider

    OpenAI 兼容网关、Anthropic 、Gemini 、Mistral 、Groq 、OpenRouter 等都支持,环境变量或 config.js 配置。没配 Key 也不影响 Wolf 其它功能,只是 AI 页会友好提示。

    未配置时的提示

    这次改了什么(相对 0.7.1 )

    0.7.1 → 当前 master,5 个 commit ,117 个文件,+24063 行

    模块 内容
    后端 server/src/ai/ Agent 工厂、系统提示词、记忆提取、会话标题生成、8 组 Tool
    控制器 ai-chat.js SSE 流式对话、会话 CRUD 、消息持久化
    数据库 新增 ai_chat_session / ai_chat_message / ai_user_memory 三张表
    前端 console/src/views/ai-chat/ 完整聊天页:会话列表、消息气泡、工具卡片、记忆面板
    安全加固 Cookie 安全属性、开放重定向防护、应用级访问控制、Captcha 一次性销毁等
    测试 新增 ~5000 行 AI 相关单测 / 集成测(工具、中间件、控制器、SSE 等)
    文档 README-AI-AGENT-CN.mddocs/ai-agent-cn.md、截图 12 张

    开发过程 & 花了多少钱

    这次是 AI 辅助开发( vibe coding ) 全程:

    • 主力:Cursor( Claude 模型),2 次订阅,20 刀 + 20 刀 = 40 刀
    • 验证阶段:Claude + MiMo v2.5-pro(小米赠送额度)跑测试用例和回归,用了约 25M Tokens

    40 刀换来的是:117 个文件、+24063 行代码、完整的前后端 + 测试 + 文档。说实话,用 AI 写 AI 功能这件事本身挺魔幻的——某种程度上是 AI 在帮自己造运行环境。

    为什么不写 Skill ,而是直接集成 Agent ?

    也有人问过:为啥不写一个 Skill / MCP ,让 Cursor 、Claude Code 、Hermes 、OpenClaw 这类外部 Agent 去调 Wolf API ?

    Skill 当然也能把接口定义清楚,但它是开发者工具——Wolf 的用户是运维和管理员,不是人人桌上都有这些 Agent 客户端。内嵌 Agent 是产品能力:浏览器登录就能用,AI Key 管理员统一配。

    另外,内嵌方案工具进程内直调 Controller ,和点表单走同一条链路;鉴权、审计(appID = 'ai-agent')、按角色动态裁剪工具列表,都天然对齐。成功率、流式输出、工具卡片、Mermaid 图、会话记忆这些,也更适合做成 Console 里的一体化体验。

    一句话:Skill 适合个人提效,内嵌 Agent 适合把 AI 做成产品功能。

    如果你也想给存量系统接 Agent ,我的体会是:

    1. 先钉死边界:AI 只能走现有 API/Controller ,别让它直连 DB
    2. 工具粒度对齐业务接口:一个 Controller 方法 ≈ 一个 Tool ,权限自然继承
    3. 测试要舍得写:Agent 行为不确定,单测 + 集成测是兜底
    4. 选个成熟的 Agent 运行时:pi-mono 的 streaming / tool loop 省了不少轮子

    链接

    Docker 快速体验:quick-start-with-docker/docker-compose.yamlserver 服务已预留 AI 环境变量,至少配这几项:

    AI_API_KEY=sk-...          # 必填
    AI_PROVIDER=openai         # 或 deepseek / anthropic 等
    AI_MODEL=deepseek-v4-flash # 具体模型 ID
    AI_BASE_URL=https://api.deepseek.com/v1  # OpenAI 兼容网关地址
    

    docker compose up 后登录 Console ,左侧点「 AI 助手」即可。

    欢迎 Star / Issue / PR 。

    做完这个功能,我意识到:权限管理这件事之所以烦,不是因为逻辑复杂,而是因为要点的表单太多。现在 AI 能替你点了,感觉权限系统该有的样子本来就应该是这样的。

    如果你也在做「给老系统接 Agent 」或者对 Wolf 感兴趣,评论区聊聊。

    1 replies    2026-06-07 12:02:57 +08:00
    teaguexiao
        1
    teaguexiao  
       15h 55m ago
    复用现有 Controller 而不是直连 DB ,这个设计决策是整个方案的魂,大多数人给老系统接 Agent 的第一反应都是 SQL 直连然后翻车。不管怎样 40 刀换 24K 行代码这个 ROI 本身就是一个很好的 vibe coding 说明书。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   861 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 19:58 · PVG 03:58 · LAX 12:58 · JFK 15:58
    ♥ Do have faith in what you're doing.