这次我们来看一个关于智能体(Agent)开发中权限控制的核心议题。当你的Agent学会了调用外部工具,特别是像Bash这样的系统级工具时,安全问题就从“能不能用”变成了“敢不敢用”。一个没有权限管控的Agent,就像一台裸奔的服务器,随时可能因为一个错误的指令或恶意的提示词,导致文件被删、系统被改、数据泄露。本文要探讨的,正是如何为你的Agent构建一套从“完全禁止”到“询问确认”再到“安全放行”的三道权限门:DENY → ASK → ALLOW。

对于正在学习或实践Agent开发的开发者而言,权限管理是项目从玩具走向可用的关键一步。它直接决定了Agent能否在真实环境中安全、可控地运行。本文将围绕这个核心,拆解权限模型的设计思路,并提供一套可落地的实现方案和验证方法。无论你是在构建自动化脚本助手、代码生成工具,还是更复杂的AI应用,这套权限框架都能帮你建立起基本的安全防线。

1. 核心能力速览

在深入细节之前,我们先通过一个表格快速了解本文要构建的Agent权限控制系统的核心特征和设计目标。

能力项 说明
权限模型 三层递进式权限控制:DENY(拒绝)、ASK(询问)、ALLOW(允许)
控制对象 主要针对Agent可执行的命令或工具,特别是 bash shell 等系统命令
决策依据 基于命令内容、参数、目标路径、操作类型(读/写/执行)等进行风险评估
交互方式 在ASK模式下,Agent会暂停执行并向用户(或管理端)发起权限询问
配置方式 通常通过配置文件(如YAML/JSON)或数据库来管理权限规则
适用场景 本地开发测试、内部自动化工具、需要调用系统命令的AI Agent应用
安全目标 防止误操作、阻止恶意指令、实现最小权限原则,平衡灵活性与安全性

这套机制的核心思想不是一味地禁止,而是提供一种梯度化的控制策略,让Agent在安全的边界内发挥能力。

2. 适用场景与使用边界

2.1 谁需要关注Agent权限管理?

  • AI应用开发者 :正在开发能够执行代码、操作文件、调用API的智能体。
  • 自动化运维工程师 :使用Agent来自动化部署、日志分析、系统监控等任务。
  • 技术团队负责人 :需要为团队开发的AI工具制定安全规范和落地机制。
  • 个人开发者与学习者 :希望自己的实验性项目不会意外损坏系统环境。

2.2 能解决什么问题?

  1. 防止灾难性误操作 :避免Agent因错误理解用户意图而执行 rm -rf / del C:\*.* 等危险命令。
  2. 遏制恶意指令注入 :防止用户通过精心构造的提示词,诱导Agent执行窃取数据、破坏系统的操作。
  3. 实现合规与审计 :所有敏感操作(ASK和ALLOW)都可以被记录和审计,满足内部安全流程要求。
  4. 提升系统可靠性 :通过白名单机制,确保Agent只使用经过验证的、稳定的工具和命令。

2.3 不适合什么场景?

  • 对执行效率要求极高的实时系统 :频繁的ASK交互会引入延迟。
  • 完全封闭、可信的内部环境 :如果Agent运行在高度可控、无风险的沙箱中,可能不需要复杂权限控制。
  • 仅进行信息查询和文本生成的Agent :如果不涉及系统调用和文件操作,权限管理的优先级较低。

2.4 安全与合规边界

必须强调 :即使有了权限控制,Agent对系统的操作也必须建立在合法授权的基础上。

  • 数据隐私 :Agent不应被授权访问未经许可的个人隐私数据或商业机密。
  • 系统安全 :禁止配置允许Agent进行提权(如 sudo )、关闭防火墙、修改系统核心配置等规则。
  • 版权与授权 :如果Agent操作涉及软件安装、文件处理,需确保拥有相应版权和授权。
  • 测试环境优先 :任何新的权限规则(特别是ALLOW规则)都应在测试环境中充分验证后再应用于生产。

3. 环境准备与前置条件

在开始实现权限控制之前,你需要一个基础的Agent开发环境。本文的示例将围绕一个能够解析用户请求并调用Bash的简单Python Agent展开。

3.1 基础运行环境

  • 操作系统 :Linux (Ubuntu/CentOS)、macOS 或 Windows (建议使用WSL2以获得一致的Bash体验)。
  • Python版本 :Python 3.8 或更高版本。这是目前多数AI框架和工具链的推荐版本。
  • 包管理工具 pip

3.2 核心依赖库

一个具备工具调用能力的Agent通常会用到以下类型的库:

  • 交互与解析 openai (或其他大模型API SDK)、 langchain (用于工具链编排)。
  • 命令执行 subprocess (Python标准库,用于执行系统命令)。
  • 配置管理 pyyaml json (用于读取权限配置文件)。
  • 日志记录 logging (用于记录权限决策和操作历史)。

你可以通过以下命令安装可能需要的额外包:

pip install openai pyyaml
# 如果使用LangChain
# pip install langchain langchain-openai

3.3 思维转变:从“功能实现”到“安全设计”

在环境准备好后,最重要的准备是思维上的转变。在编写第一行权限代码前,请明确:

  1. 默认拒绝原则 :任何未明确允许的操作,都应该被默认拒绝(DENY)。
  2. 最小权限原则 :只授予Agent完成其任务所必需的最小权限。
  3. 审计追踪原则 :所有权限决策和命令执行都应有日志可查。

4. 权限系统设计与实现

我们将分步构建一个简单的三层权限控制系统。首先定义权限状态,然后实现规则匹配引擎,最后将其集成到Agent的命令执行流程中。

4.1 定义三层权限状态

权限的核心是三种状态,我们可以用一个枚举类来定义:

from enum import Enum

class Permission(Enum):
    DENY = "DENY"   # 明确拒绝,直接阻止执行
    ASK = "ASK"     # 需要询问用户或管理员
    ALLOW = "ALLOW" # 明确允许,直接执行

4.2 设计权限规则

每条规则需要描述:匹配什么命令,以及赋予什么权限。我们可以用字典或类来定义。一个简单的规则结构如下:

# 权限规则示例 (可用YAML/JSON配置加载)
permission_rules = [
    {
        "id": "rule_001",
        "pattern": "rm -rf /",  # 匹配的命令模式
        "permission": Permission.DENY.value,
        "reason": "禁止删除根目录,极度危险。"
    },
    {
        "id": "rule_002",
        "pattern": "ls",  # 匹配简单的ls命令
        "permission": Permission.ALLOW.value,
        "reason": "列出当前目录文件,风险较低。"
    },
    {
        "id": "rule_003",
        "pattern": "cat /etc/passwd",  # 匹配读取敏感文件
        "permission": Permission.ASK.value,
        "reason": "读取系统密码文件,需确认。"
    },
    {
        "id": "rule_004",
        "pattern": "mkdir",  # 匹配创建目录命令(需注意参数)
        "permission": Permission.ASK.value,
        "reason": "创建目录可能影响文件系统,需确认路径。"
    }
]

更复杂的规则可能会使用正则表达式来匹配命令模式,并解析参数。

4.3 实现规则匹配引擎

引擎负责接收一条具体的命令,遍历所有规则,找到最匹配的一条并返回其权限。

import re

class PermissionEngine:
    def __init__(self, rules):
        self.rules = rules
        # 编译所有包含正则模式的规则,提升匹配效率
        self.compiled_rules = []
        for rule in self.rules:
            pattern = rule.get('pattern', '')
            # 简单处理:将规则中的*转换为正则表达式.*
            # 更复杂的实现可以支持完整的正则语法
            regex_pattern = pattern.replace('*', '.*')
            try:
                compiled = re.compile(f'^{regex_pattern}$')
                rule['compiled_pattern'] = compiled
                self.compiled_rules.append(rule)
            except re.error:
                # 如果编译失败,当作普通字符串匹配
                rule['compiled_pattern'] = None
                self.compiled_rules.append(rule)

    def check_permission(self, command: str) -> (Permission, str):
        """
        检查命令权限。
        返回: (权限枚举, 匹配到的规则原因或默认原因)
        """
        for rule in self.compiled_rules:
            pattern_obj = rule.get('compiled_pattern')
            if pattern_obj:
                if pattern_obj.match(command):
                    return Permission(rule['permission']), rule.get('reason', 'Matched by pattern rule.')
            else:
                # 字符串完全匹配
                if rule['pattern'] == command:
                    return Permission(rule['permission']), rule.get('reason', 'Matched by exact rule.')

        # 默认策略:没有匹配到任何规则时,采取ASK策略(保守)
        # 在实际生产中,可能会设置为DENY
        return Permission.ASK, "No matching rule found. Default to ASK for safety."

4.4 集成到Agent执行流程

现在,我们需要在Agent准备执行命令的环节插入权限检查。

import subprocess
import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

class SecureAgent:
    def __init__(self, permission_engine):
        self.permission_engine = permission_engine

    def execute_command(self, command: str, user_feedback_callback=None):
        """
        执行命令的核心方法。
        user_feedback_callback: 一个函数,当权限为ASK时被调用,用于获取用户反馈。
                                应返回True(允许)或False(拒绝)。
        """
        # 1. 权限检查
        permission, reason = self.permission_engine.check_permission(command)
        logging.info(f"Command: '{command}' | Permission: {permission.value} | Reason: {reason}")

        if permission == Permission.DENY:
            return {"status": "denied", "command": command, "reason": reason, "output": None}

        elif permission == Permission.ASK:
            if user_feedback_callback:
                user_decision = user_feedback_callback(command, reason)
                if user_decision:
                    # 用户同意,降级为ALLOW执行
                    logging.info(f"User approved ASK request for command: {command}")
                    permission = Permission.ALLOW
                else:
                    # 用户拒绝,升级为DENY
                    logging.info(f"User denied ASK request for command: {command}")
                    return {"status": "denied", "command": command, "reason": "User denied.", "output": None}
            else:
                # 没有反馈机制,则保守拒绝
                logging.warning(f"ASK required but no callback provided. Denying command: {command}")
                return {"status": "denied", "command": command, "reason": "ASK required but no approval mechanism.", "output": None}

        # 2. 执行ALLOW的命令
        if permission == Permission.ALLOW:
            try:
                # 安全提示:这里使用shell=True有风险,仅作示例。
                # 生产环境应尽可能使用shell=False并以列表形式传递参数。
                result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=30)
                output = {
                    "stdout": result.stdout,
                    "stderr": result.stderr,
                    "returncode": result.returncode
                }
                status = "success" if result.returncode == 0 else "error"
                logging.info(f"Command executed with return code: {result.returncode}")
                return {"status": status, "command": command, "output": output}
            except subprocess.TimeoutExpired:
                logging.error(f"Command timed out: {command}")
                return {"status": "timeout", "command": command, "output": None}
            except Exception as e:
                logging.error(f"Failed to execute command '{command}': {e}")
                return {"status": "exception", "command": command, "error": str(e), "output": None}

5. 功能测试与效果验证

理论设计完成后,我们需要通过一系列测试来验证权限系统是否按预期工作。我们将模拟几个典型场景。

5.1 测试环境搭建

首先,初始化我们的权限引擎和Agent。

# 初始化权限引擎
engine = PermissionEngine(permission_rules)
# 初始化安全Agent
agent = SecureAgent(engine)

# 定义一个简单的用户反馈模拟函数(在实际中可能是前端弹窗或API回调)
def mock_user_feedback(command, reason):
    print(f"\n[ASK] Agent wants to execute: {command}")
    print(f"Reason: {reason}")
    # 模拟用户决策:对于包含‘test’的命令允许,其他拒绝
    if 'test' in command:
        print("Mock user decision: ALLOW")
        return True
    else:
        print("Mock user decision: DENY")
        return False

5.2 测试用例1:明确拒绝(DENY)

测试目的是验证高危命令能否被正确拦截。

print("=== Test 1: DENY Rule ===")
result = agent.execute_command("rm -rf /", mock_user_feedback)
print(f"Result: {result['status']}")
print(f"Expected: denied")
assert result['status'] == 'denied', "高危命令应该被拒绝!"

预期输出 Result: denied 。日志中会记录匹配到了 rule_001 ,权限为 DENY 成功标准 :命令被阻止,没有实际执行。

5.3 测试用例2:明确允许(ALLOW)

测试目的是验证低风险命令能否无阻碍执行。

print("\n=== Test 2: ALLOW Rule ===")
result = agent.execute_command("ls -la", mock_user_feedback) # 注意:我们的规则只允许‘ls’,这里可能触发ASK或默认规则
print(f"Result status: {result['status']}")
# 因为我们的规则是精确匹配‘ls’,而命令是‘ls -la’,可能不匹配,所以结果不确定。
# 这说明了规则设计要全面(使用通配符或正则)。

优化规则 :我们需要修改规则,使 ls * 被允许。

# 在权限规则列表中添加
{
    "id": "rule_005",
    "pattern": "ls *",
    "permission": Permission.ALLOW.value,
    "reason": "列出目录内容,安全操作。"
}

重新初始化引擎后,再测试 ls -la ,预期状态应为 success

5.4 测试用例3:需要询问(ASK)与用户交互

测试目的是验证ASK流程能否正常工作,并正确响应用户决策。

print("\n=== Test 3: ASK Rule with User Approval ===")
# 命令匹配 ASK 规则(如 cat /etc/passwd)或触发默认ASK
result = agent.execute_command("cat /etc/passwd", mock_user_feedback)
print(f"Result status: {result['status']}")
# 由于mock_user_feedback对不含‘test’的命令返回False,所以预期为denied
assert result['status'] == 'denied', "用户拒绝后,ASK应转为DENY。"

print("\n=== Test 4: ASK Rule with User Denial ===")
# 测试用户同意的场景,我们需要一个能返回True的反馈
def mock_approve_all(command, reason):
    print(f"[ASK] Approved: {command}")
    return True

result = agent.execute_command("mkdir test_dir", mock_approve_all) # 假设mkdir在规则中是ASK
print(f"Result status: {result['status']}")
# 如果用户同意,且命令执行成功,状态应为success

预期结果 :测试3结果为 denied ,测试4结果为 success (如果系统允许创建目录)。 成功标准 :ASK机制正确中断执行,等待并遵从用户反馈。

5.5 测试用例4:默认规则(无匹配)

测试目的是验证当命令不匹配任何明确定义的规则时,系统的默认行为。

print("\n=== Test 5: No Matching Rule (Default ASK) ===")
result = agent.execute_command("echo 'hello world'", mock_user_feedback)
print(f"Result status: {result['status']}")
# 取决于mock_user_feedback的决策和默认权限(我们设置为ASK)

成功标准 :系统没有崩溃,并按照预设的默认策略(ASK)进行处理。

6. 进阶:实现更精细的权限控制

基础的命令匹配还不够。一个健壮的权限系统应该能解析命令的语义。

6.1 基于命令和参数解析的规则

我们可以编写一个简单的命令解析器,将 rm -rf /home/user/data 解析为: 工具=rm , 参数=['-rf', '/home/user/data'] , 操作对象='/home/user/data' 。然后规则可以这样定义:

rules:
  - id: "dangerous_rm"
    tool: "rm"
    flags: ["-rf", "--no-preserve-root"] # 匹配危险参数
    target_pattern: "/" # 匹配根目录或关键路径
    permission: "DENY"
  - id: "safe_file_read"
    tool: "cat"
    target_pattern: "/home/user/projects/*.txt" # 只允许读取用户项目下的txt文件
    permission: "ALLOW"
  - id: "restricted_file_write"
    tool: "echo"
    target_pattern: ">> /var/log/app/*.log" # 只允许追加到特定日志文件
    permission: "ASK"

6.2 集成外部策略引擎与API

对于企业级应用,可以考虑集成更专业的策略引擎,如Open Policy Agent (OPA)。将权限决策抽象为策略文件,通过API查询。

# 伪代码示例
import requests

def check_permission_via_opa(command, user, context):
    opa_url = "http://localhost:8181/v1/data/agent/permission"
    payload = {
        "input": {
            "command": command,
            "user": user,
            "context": context
        }
    }
    response = requests.post(opa_url, json=payload).json()
    return response.get('result', {}).get('permission', 'DENY')

6.3 实现批量任务的安全队列

如果Agent需要处理批量任务,权限检查应成为任务队列处理器的一部分。

import queue
import threading

class SecureTaskQueue:
    def __init__(self, permission_engine):
        self.queue = queue.Queue()
        self.permission_engine = permission_engine
        self.worker_thread = threading.Thread(target=self._worker, daemon=True)
        self.worker_thread.start()

    def add_task(self, command, task_id):
        # 入队前进行初步的权限预检(DENY规则)
        perm, _ = self.permission_engine.check_permission(command)
        if perm == Permission.DENY:
            logging.error(f"Task {task_id} rejected at queue: {command}")
            return False
        self.queue.put((task_id, command))
        return True

    def _worker(self):
        while True:
            task_id, command = self.queue.get()
            # 实际执行时,仍需完整的权限检查(处理ASK)
            # 这里可以集成上述SecureAgent.execute_command
            logging.info(f"Processing task {task_id}: {command}")
            # ... 执行命令 ...
            self.queue.task_done()

7. 资源占用与性能观察

权限控制系统本身是轻量级的逻辑判断,其资源占用主要取决于:

  1. 规则数量与复杂度 :规则越多,匹配越复杂(尤其是使用正则表达式时),CPU时间和内存占用会轻微增加。对于上千条规则,需考虑使用更高效的数据结构(如前缀树用于命令匹配)或将规则编译成状态机。
  2. ASK模式的交互延迟 :这是主要的“性能”影响。等待人工反馈会阻塞任务执行。解决方案包括:
    • 设置超时 :如果用户未在指定时间内响应,则自动拒绝(DENY)。
    • 批量审批 :对于非紧急的批量任务,可以累积一批ASK请求后统一由管理员处理。
    • 分级策略 :区分高风险操作(必须人工确认)和低风险操作(可依据历史记录自动放行)。
  3. 日志记录开销 :每条命令的权限决策和执行结果都需要记录。建议使用异步日志库(如 logging.handlers.QueueHandler )避免阻塞主线程,并定期归档清理日志。

监控建议

  • 在Agent日志中增加权限决策的耗时统计。
  • 监控ASK请求的响应时间,如果平均响应时间过长,可能需要优化审批流程或调整规则(将部分ASK转为预定义的ALLOW或DENY)。
  • 定期审计DENY和ASK的记录,分析是否有大量误报,从而优化规则。

8. 常见问题与排查方法

在实现和运行权限控制系统时,你可能会遇到以下问题:

问题现象 可能原因 排查方式 解决方案
所有命令都被拒绝(DENY) 1. 默认权限策略设置为DENY且规则未覆盖。
2. 权限规则文件加载失败,引擎使用空规则列表。
1. 检查 PermissionEngine 初始化时的默认返回值。
2. 检查规则配置文件路径和格式是否正确。
3. 打印加载后的规则列表,确认是否为空。
1. 将默认策略改为ASK或ALLOW(根据安全要求)。
2. 修正配置文件路径或语法错误。
3. 添加一条基础的测试规则(如 {"pattern": "ls", "permission": "ALLOW"} )验证。
ASK请求无响应,任务卡住 1. user_feedback_callback 函数未正确定义或返回 None
2. 回调函数本身存在阻塞或异常。
3. 前端/交互界面未正确接收到ASK请求。
1. 在回调函数入口添加日志,确认是否被调用。
2. 检查回调函数逻辑,确保在所有分支都有明确返回值(True/False)。
3. 检查消息传递机制(如WebSocket、HTTP API)是否畅通。
1. 在 execute_command 中为ASK添加超时机制,超时后自动拒绝。
2. 确保回调函数健壮,避免异常导致线程挂起。
3. 实现一个 fallback 机制,例如在无法获取用户反馈时,根据命令风险级别自动决策。
规则匹配不正确(该拦的没拦,不该拦的拦了) 1. 规则模式( pattern )编写错误,如通配符 * 使用不当。
2. 规则优先级问题,后定义的规则覆盖了前面的。
3. 命令字符串前后可能有空格或换行符。
1. 打印出待检查的命令字符串和正在匹配的规则模式。
2. 按顺序检查规则列表,确认第一条匹配的规则是否符合预期。
3. 在匹配前对命令进行清洗( command.strip() )。
1. 使用更精确的正则表达式,并编写单元测试覆盖边界情况。
2. 明确规则优先级(如DENY规则优先于ALLOW),或实现规则权重/顺序字段。
3. 引入命令解析器,基于抽象语法树(AST)或参数列表进行匹配,而非原始字符串。
权限检查导致性能瓶颈 1. 规则数量庞大,且每次执行都进行线性匹配(O(n))。
2. 正则表达式过于复杂。
3. 每次检查都重新从文件/数据库加载规则。
1. 使用性能分析工具(如 cProfile )定位耗时函数。
2. 统计命令执行频率,优化高频命令的规则匹配顺序。
1. 对规则进行分类索引(如按命令工具 ls rm 建立索引)。
2. 将编译好的正则表达式缓存起来。
3. 在内存中缓存规则,并监听配置文件变化实现热重载。
子进程执行失败,但权限检查通过了 1. 权限系统只检查了命令字符串,但执行环境(用户权限、目录不存在等)导致失败。
2. 使用了 shell=True 但Shell环境变量有问题。
1. 检查 subprocess.run 返回的 stderr returncode
2. 对比在系统终端直接执行该命令的结果。
1. 权限系统应专注于“是否允许执行”,执行失败属于运行时错误,应由Agent的错误处理机制捕获并反馈。
2. 考虑在 ALLOW 之前增加一层环境预检(如检查目标路径是否存在、是否可写)。

9. 最佳实践与使用建议

将权限控制集成到Agent中是一个持续的过程,以下建议可以帮助你更好地管理和维护这套系统:

  1. 从最严格的默认策略开始 :初始部署时,将默认权限设置为 DENY ASK 。只添加完成核心功能所必需的最小 ALLOW 规则集。随着测试和信任的建立,再逐步放宽。
  2. 规则管理版本化 :将权限规则文件纳入版本控制系统(如Git)。任何规则的变更都应经过评审和测试,便于回滚和审计。
  3. 实施全面的日志记录 :记录每一条命令的原始请求、权限决策结果(DENY/ASK/ALLOW)、匹配的规则ID、执行结果(成功/失败/输出)。这些日志是安全审计和规则优化的宝贵数据。
  4. 定期进行“红队”测试 :主动尝试让Agent执行各种危险或边缘命令(在隔离的测试环境中),检验权限规则是否牢固。根据测试结果查漏补缺。
  5. 区分运行环境 :为开发、测试和生产环境配置不同的权限规则集。开发环境可以更宽松以便调试,生产环境必须最严格。
  6. 结合用户身份与上下文 :进阶的权限系统不应只基于命令,还应结合 (用户/角色)在 什么上下文 (时间、IP、项目)中发起请求。这为细粒度授权奠定了基础。
  7. 设计人性化的ASK交互 :当需要用户确认时,提供清晰、易懂的提示信息,说明命令是什么、为什么要执行、潜在风险是什么。避免使用技术黑话。
  8. 法律与合规性前置 :如果Agent处理的是用户数据或执行金融、医疗等敏感操作,权限设计必须符合相关法律法规(如GDPR、HIPAA等)。必要时咨询法律专家。

10. 总结与下一步

为Agent引入DENY→ASK→ALLOW三层权限门,是从“功能实现”迈向“安全部署”的关键一步。它通过技术手段强制植入了安全考量的暂停点,将不可控的“黑盒”执行转变为可审计、可干预的受控过程。

最值得尝试的点 :即使是一个简单的、基于字符串匹配的权限引擎,也能立即消除绝大多数因Agent幻觉或用户错误导致的高危系统操作。实现成本低,安全收益高。

最先应该验证的功能 :从保护系统核心资产开始。首先为 rm format dd chmod 777 wget 到可疑地址等命令添加 DENY ASK 规则。确保你的Agent无法成为破坏系统的第一块多米诺骨牌。

最容易踩的坑

  • 规则过松 :使用过于宽泛的通配符(如 ALLOW * ),使权限形同虚设。
  • 规则冲突 ALLOW DENY 规则重叠且优先级定义不清,导致意外行为。
  • 忽略上下文 :只匹配命令开头,导致 cat /safe/file && rm -rf / 这类拼接命令绕过检查。

后续扩展方向

  1. 可视化规则管理后台 :提供一个Web界面,让管理员可以方便地添加、修改、测试权限规则,查看操作日志。
  2. 机器学习辅助决策 :基于历史日志,训练一个模型来预测新命令的风险等级,辅助或自动生成权限规则。
  3. 与CI/CD集成 :将权限规则的变更作为代码审查的一部分,并自动在测试环境中验证新规则的有效性。
  4. 扩展控制范围 :将权限模型从Bash命令扩展到数据库查询、API调用、云服务操作等更广泛的“工具”范畴。

权限管理不是一劳永逸的,而是一个需要随着Agent能力增长和威胁环境变化而持续迭代的过程。现在就开始为你的Agent装上这道安全门,让它既能高效地为你工作,又不会在关键时刻“捅娄子”。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐