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

17 小时 19 分钟前
 igeeky

    我是 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 助手」,然后直接聊:

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. 完整的聊天体验

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 ) 全程:

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 感兴趣,评论区聊聊。

544 次点击
所在节点    分享创造
1 条回复
teaguexiao
15 小时 47 分钟前
复用现有 Controller 而不是直连 DB ,这个设计决策是整个方案的魂,大多数人给老系统接 Agent 的第一反应都是 SQL 直连然后翻车。不管怎样 40 刀换 24K 行代码这个 ROI 本身就是一个很好的 vibe coding 说明书。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1218511

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX