ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

AgentScope 无人值守运行怎么选 BYPASS 还是 DONT_ASK 权限模式?

2026/9/12 16:25:52 拓冰建站 浏览量
AgentScope 无人值守运行怎么选 BYPASS 还是 DONT_ASK 权限模式? AgentScope 无人值守运行怎么选 BYPASS 还是 DONT_ASK 权限模式【免费下载链接】agentscopeBuild and run agents you can see, understand and trust.项目地址: https://gitcode.com/GitHub_Trending/ag/agentscopeAgent 默认运行在DEFAULT权限模式下没有匹配 allow 规则的操作都会弹出交互式确认终端中形如[permission] Bash({command: ls})→allow? [y/N]见 examples/realtime/README.md。一旦把 agent 放到定时任务、后台流水线这类无人值守场景这些确认就会把执行卡死。AgentScope 的权限系统为这类场景提供了两个专用模式——BYPASS和DONT_ASK定义在 PermissionMode。两者策略正好相反BYPASS跳过安全检查直接放行DONT_ASK把所有需要询问的操作转成拒绝。本文说明两种模式的实际行为差异、配置方法和验证方式帮你在无人值守运行时做出选择。README 中的演示bypass 模式下 agent 端到端运行不会为工具调用确认而暂停。两种模式的行为差异以下行为全部可以在 tests/permission_mode_test.py 中找到对应的测试用例PermissionEngineBypassModeTest与PermissionEngineDontAskModeTest分别钉死了两个模式的判定结果操作BYPASS 的结果DONT_ASK 的结果无规则时的默认操作如 Bash 执行npm installALLOWDENY只读操作Read/Glob/Grep、git status等ALLOWALLOW工具自身发出的安全 ASK如rm -rf /、写~/.bashrc、命令注入模式跳过检查ALLOW转为DENY用户配置的 DENY 规则仍然生效bypass-immune仍然生效用户配置的 ASK 规则仍然返回ASK转为DENY用户配置的 ALLOW 规则生效生效工作目录working_directories内的文件写/编辑未单独说明自动ALLOW目录外为DENY几个关键点的源码依据BYPASS的 docstring 明确列出被跳过的安全检查包括rm -rf /、写入~/.bashrc、命令注入模式并提醒 Use deny rules to protect specific paths见 src/agentscope/permission/_types.py#L52-L59。测试test_bypass_skips_dangerous_removal确认rm -rf /在 BYPASS 下返回ALLOW而同样命令在 DONT_ASK 下被安全 ASK 捕获并转为DENYtest_dont_ask_bash_dangerous_command_returns_deny。BYPASS 只跳过安全 ASK不跳过你显式配置的规则test_bypass_deny_rule_returns_deny证明 DENY 规则在 BYPASS 下依旧拒绝test_bypass_ask_rule_returns_ask证明用户 ASK 规则在 BYPASS 下仍会要求确认。DONT_ASK 的不变式是绝不返回 ASK默认落点、ASK 规则命中、安全 ASK 三条产生 ASK 的路径全部转为DENY。转换后的 DENY 决策会保留原来的suggested_rules便于在定时任务失败报告等带外渠道展示给用户test_dont_ask_ask_rule_conversion_preserves_suggestions。只读操作在所有五个模式下都走同一条只读快速路径自动放行PermissionEngineReadOnlyConsistencyTest所以无人值守运行中 agent 自由读取文件、git status等不受影响。如何选择两种模式各自的适用场景直接写在PermissionMode的文档表中BYPASS沙箱环境容器、虚拟机或者你完全信任 agent 的无人值守运行。此时安全边界由沙箱本身提供权限检查只剩你显式配置的 deny/ask 规则和工具 DENY。DONT_ASK定时任务、用户不在场时的后台执行且仍然希望保留安全行为。BYPASS的文档原话是对于仍需要安全的无人值守运行优先用 DONT_ASKFor unattended runs that still need safety, prefer DONT_ASK。决策路径就一条运行环境是否已经隔离容器/VM并且你接受安全 ASK 全部不生效的后果。是——选 BYPASS用 deny 规则保护少数关键路径否——选 DONT_ASK只放行 allow 规则、只读操作和工作目录内的操作其余一律拒绝。DONT_ASK 同时是ACCEPT_EDITS的无人值守对应形态配置了working_directories后目录内的Write/Edit和文件系统 Bash 命令自动放行目录外拒绝test_dont_ask_edit_within_working_directory_allows、test_dont_ask_bash_filesystem_command_working_dir。配置权限模式模式通过PermissionContext挂到 agent 的AgentState上。examples/pipeline/goal/goal_pipeline.py 展示了BYPASS的完整用法——executor 和 verifier 两个 agent 都在LocalWorkspace里无人值守跑完任务from agentscope.state import AgentState from agentscope.permission import PermissionContext, PermissionMode executor Agent( nameExecutor, system_promptYoure a programmer named Executor., model..., toolkitToolkit(toolsawait workspace.list_tools()), stateAgentState( permission_contextPermissionContext( modePermissionMode.BYPASS, ), ), )选 DONT_ASK 时构造PermissionContext的方式相同mode换成PermissionMode.DONT_ASK如果希望目录内的写操作免审按 tests/permission_mode_test.py#L872-L881 的写法传入working_directoriesfrom agentscope.permission import ( PermissionContext, PermissionMode, AdditionalWorkingDirectory, ) context PermissionContext( modePermissionMode.DONT_ASK, working_directories{ /tmp/project: AdditionalWorkingDirectory( path/tmp/project, sourcetest, ), }, )如需保留显式规则BYPASS 下的 deny 防护、DONT_ASK 下的 allow 放行通过PermissionRule添加示例取自测试from agentscope.permission import PermissionRule, PermissionBehavior engine.add_rule( PermissionRule( tool_nameBash, rule_contentrm:*, behaviorPermissionBehavior.DENY, sourcetest, ), )规则匹配方式按工具类型区分见 src/agentscope/permission/_types.py#L5-L13Bash 工具用子串模式匹配命令Write/Read 等文件工具用 glob 匹配文件路径其他工具用通用匹配逻辑。验证模式是否按预期工作配置完成后不用真正跑一次完整 agent 任务可以直接用PermissionEngine离线验证判定结果——这正是tests/permission_mode_test.py的验证方法import asyncio from agentscope.permission import ( PermissionEngine, PermissionContext, PermissionMode, ) from agentscope.tool import Bash, Write async def main() - None: for mode in (PermissionMode.BYPASS, PermissionMode.DONT_ASK): engine PermissionEngine(PermissionContext(modemode)) # 无规则时的默认操作 d1 await engine.check_permission(Bash(), {command: npm install}) # 触发安全 ASK 的操作测试用例中的场景 d2 await engine.check_permission(Bash(), {command: rm -rf /}) d3 await engine.check_permission( Write(), {file_path: /home/user/.bashrc} ) print(mode.value, d1.behavior, d2.behavior, d3.behavior) asyncio.run(main())预期结果与测试断言一致Bash 相关用例要求非 Windows 平台测试中用sys.platform win32跳过BYPASS三项均为ALLOW——默认操作放行安全 ASK 被跳过DONT_ASK三项均为DENY其中d3.decision_reason会同时包含dont_ask与safety字样test_dont_ask_safety_ask_returns_deny的断言说明拒绝来自安全 ASK 被转换而不是普通规则。如果你的运行环境需要 agent 实际完成写文件等任务把对应的 allow 规则或working_directories加上后用同样的check_permission调用再核对一次判定即可。限制与边界BYPASS 下安全 ASK 完全不生效包括危险删除、危险配置路径rm ~/.bashrc经 Bash 执行、命令注入模式、对敏感文件的sedtest_bypass_skips_command_injection等。它唯一的护栏是你显式配置的 deny/ask 规则和工具 DENY——不要把 BYPASS 用在没有隔离的宿主机上。DONT_ASK 下 agent 永远不会弹确认但也不会静默完成被拒的操作ASK 规则命中与安全 ASK 都会变成DENY决策里保留suggested_rules供带外展示。只读操作Read/Glob/Grep、被识别的只读 Bash 命令在所有模式下自动放行这一跨模式不变式由PermissionEngineReadOnlyConsistencyTest锁定。环境要求见 README.mdPython 3.11 及以上uv pip install agentscope安装后即可使用上文的配置与验证代码。【免费下载链接】agentscopeBuild and run agents you can see, understand and trust.项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考