给 AI 删文件的权限太危险

小美爱学习 初级 1小时前 459 浏览 1 点赞 约 1 分钟

直接给 AI 赋予删除文件的 Tool 权限简直是噩梦,我之前试过一次,结果模型直接把文件给删了,完全没经过我同意。在公司里推行这种自动化工作流,如果不对关键操作做拦截,迟早得被运维骂死。后来研究发现 AI SDK 7 在模型调用层级就支持 Tool Approval,也就是说在执行具体的函数之前,可以先暂停下来弹个窗让用户点确认。

这次我用 Nuxt 4 配合 Amazon Bedrock 跑通了这套流程,核心逻辑就是把权限交给用户,而不是完全信任模型。

实操部署步骤

首先得把环境搭起来,注意 Node.js 必须 22+,因为 AI SDK 7 强制要求 ESM。

一、初始化项目并安装依赖

npx nuxi@latest init nuxt-agent-approval
cd nuxt-agent-approval

npm install \
 [email protected] \
 [email protected] \
 [email protected] \
 @ai-sdk/[email protected] \
 @ai-sdk/[email protected] \
 @aws-sdk/[email protected] \
 @nuxt/[email protected] \
 [email protected]

npm install -D @iconify-json/[email protected]

二、配置 Nuxt 运行时环境
nuxt.config.ts 里把 AWS 的区域和模型 ID 暴露出来,避免把密钥写死在代码里。

export default defineNuxtConfig({
 modules: ['@nuxt/ui'],
 css: ['~/assets/css/main.css'],
 runtimeConfig: {
 awsRegion: process.env.AWS_REGION ?? 'us-west-2',
 bedrockModelId: process.env.NUXT_BEDROCK_MODEL_ID
 }
})

三、构建带路径校验的删除工具
为了防止 AI 搞破坏(比如通过 ../../ 删掉根目录文件),必须写一个路径拦截函数。

import { lstat, readdir, realpath, rm } from 'node:fs/promises'
import { resolve, relative, isAbsolute } from 'node:path'
import { tool } from 'ai'
import * as z from 'zod'

function resolveInsideFixtures(inputPath: string): string {
 const root = resolve(process.cwd(), 'fixtures')
 const target = resolve(root, inputPath)
 const rel = relative(root, target)

 if (rel === '' || rel.startsWith('..') || isAbsolute(rel)) {
 throw createError({
 statusCode: 400,
 statusMessage: `Path escapes the fixtures directory: ${inputPath}`
 })
 }
 return target
}

export const deleteFile = tool({
 description: 'Delete a file in the fixtures directory',
 inputSchema: z.object({ path: z.string() }),
 execute: async ({ path }) => {
 const fullPath = resolveInsideFixtures(path)
 await rm(fullPath)
 return { success: true, deleted: path }
 }
})

几点避坑心得

  • 权限隔离: Approval 机制只能决定“要不要执行”,不能决定“执行了之后能干什么”。所以 resolveInsideFixtures 这种物理路径隔离是必须的,否则模型只要骗过你的确认,依然能删掉 package.json
  • 版本依赖: Nuxt 4 和 AI SDK 7 的配合比较微妙,一定要检查 package.json 里的版本号,尤其是 Node 版本不对会导致模块加载直接报错。
  • 交互体验: 在实际业务场景中,建议把 Approval 窗体设计得足够醒目,明确告知用户 AI 准备执行的具体命令,而不是简单地写个“确认执行”。
给 AI 删文件的权限太危险
工作流Amazon BedrockZodNuxtAI SDK 7

全部回复 (3)

前端大鹏 初级 1小时前
试过,但配置起来太折腾了,感觉文档写得不够清晰,你那边跑通了吗?
0 回复
小Ray在路上 中级 1小时前
这真的太关键了,之前我跑个自动化脚本差点把整个测试数据库给删了,现在看到这种权限控制方案感觉心安多了。
0 回复
脚本小子阿强 初级 1小时前
建议把删除动作改成移到回收站,万一删错了好找回来。
0 回复

发表回复

支持 Markdown 格式