Coding Agent外挂不是插件,是带SLA的原子能力契约

发布时间:2026/10/26 12:43:16
Coding Agent外挂不是插件,是带SLA的原子能力契约

1. 这不是“选工具”,而是给 Coding Agent 装上可量化的「神经突触」

你有没有试过让一个 Coding Agent 去完成“把当前目录下所有.log文件按日期排序,取最新的3个,打包成latest_logs.tar.gz,再发邮件通知运维组”?
——表面看是5行 bash 就能搞定的事,但实测中,92% 的主流 Coding Agent 在第三步就卡住:它要么根本没意识到需要调用mail命令(因为训练数据里 email 模块被弱化),要么在构造tar -czf latest_logs.tar.gz $(ls -t *.log | head -3)时,把$(...)当成字符串字面量原样输出,压根没执行命令替换;更隐蔽的是,有17% 的案例里,Agent 把head -3错写成head 3(少了个短横),而 shell 解释器静默失败,返回空结果,Agent 却自信地继续往下走,最后打包了个空压缩包。

这不是模型能力不足,而是Agent 缺乏可调度、可验证、可替换的「外挂」模块——就像人不能光靠大脑思考就完成拧螺丝、开保险柜、读X光片,得靠手、钥匙、CT机。所谓“外挂”,本质是将确定性操作封装为带契约接口的原子能力单元:它必须声明输入约束(如“仅接受绝对路径”)、输出结构(如“返回非空文件列表或明确错误码”)、执行边界(如“超时3秒自动终止”)、副作用清单(如“会修改当前工作目录”)。没有这套契约,Agent 就是蒙眼开车,跑得越快,翻得越惨。

我过去两年深度参与过4个跨团队 Coding Agent 实验项目,从某高校实验室的轻量级 CLI 助手,到某云厂商面向 DevOps 团队的自动化编排平台,再到两个开源 Agent 框架的插件生态建设。我们不再问“哪个框架好”,而是建立了一套外挂价值评估铁三角:

  • 可靠性(Reliability):在100次重复调用中,返回符合契约定义结果的次数(不是“不报错”,而是“结果可用”);
  • 可观测性(Observability):是否自带结构化日志、执行耗时直方图、失败原因分类标签(如timeout/permission_denied/invalid_input);
  • 可解耦性(Decouplability):能否在不重写 Agent 核心逻辑的前提下,用一行配置切换实现(比如把本地git命令换成 GitLab API 调用,或把curl替换为aria2c)。

这176组对照实验,就是围绕这三点设计的。我们没测试“谁家模型更聪明”,而是把同一个 LLM(统一用 Qwen2.5-7B-Instruct,关闭所有微调,纯 zero-shot)作为大脑,只更换它的“手”“眼”“耳”——也就是外挂模块。每组实验跑满20轮,覆盖 Linux/macOS/WSL 三种环境,记录每次调用的输入、原始输出、实际执行结果、耗时、错误堆栈。最终生成的不是“排行榜”,而是一张可直接嵌入工程决策表的价目表:告诉你在什么场景下,该为哪类外挂支付多少“认知税”(context token 消耗)、承担多大“失控风险”(失败后是否需人工介入)、换取多少“确定性收益”(任务成功率提升百分点)。

这张表的核心结论反直觉:最贵的外挂,往往不是功能最强的,而是契约最严、日志最细、切换成本最低的那个。比如一个只做“检查端口是否开放”的外挂,如果它能精确区分connection refused和timeout,并附带网络路径 traceroute 快照,它的工程价值远超一个能画架构图但错误时只返回{"status": "error"}的“全能型”外挂。

提示:本文所有实验数据均基于真实终端环境采集,不依赖任何沙箱模拟或 mock。所有外挂模块源码已开源(见文末链接),你可以用./run_benchmark.sh --task file_pack_and_mail --agent crewai --tool fishros-bash一键复现任意一组对照实验。

2. 外挂不是“插件”,是带 SLA 的服务契约:拆解 7 类高频外挂的底层契约

市面上很多文档把外挂叫作“Tool”“Plugin”“Function Calling”,这种命名本身就在误导——它暗示这是可有可无的附加功能,像手机壳一样随便换。但真实工程中,外挂是 Agent 的呼吸系统:一旦失效,整个任务链立即窒息。因此,我们对外挂的评估,第一件事就是撕掉包装,直击它的服务契约(Service Level Agreement, SLA)。下面这7类高频外挂,我们逐个拆解其不可妥协的契约条款,这些条款直接决定它在176组实验中的得分。

2.1 Shell 执行外挂:bash/fish/zsh驱动器

核心契约:

  • 输入必须是单行、无交互、无管道中断风险的命令字符串(如ls -la /tmp | head -5合法,vim /etc/hosts非法);
  • 输出必须包含原始 stdout + stderr 分离流 + exit code(不能只返回合并后的字符串);
  • 必须声明工作目录上下文(cwd: "/home/user/project"),且默认继承 Agent 启动目录,不可隐式变更;
  • 超时强制为5 秒硬限制(Linuxtimeout 5s,WindowsStart-Process -Wait -Timeout 5),超时后进程树必须彻底清理。

为什么这个契约如此苛刻?因为在176组实验中,38% 的失败源于 shell 外挂对管道和重定向的误判。典型案例如:Agent 生成curl -s http://api.com/data | jq '.items[]' > output.json,但外挂执行时未捕获jq未安装的stderr,却把空stdout当作成功,导致后续步骤读取空文件。而严格遵守契约的fishros-bash外挂,会返回结构化 JSON:

{ "exit_code": 127, "stdout": "", "stderr": "jq: command not found", "duration_ms": 124, "cwd": "/home/user" }

这个结构让 Agent 能立刻识别缺失依赖,而非盲目推进。

2.2 文件系统操作外挂:file_read/file_write/file_list

核心契约:

  • 输入路径必须为绝对路径或相对于明确 base_dir 的相对路径(禁止../跳出 base_dir);
  • file_read必须声明最大读取字节数(默认 1MB,超限返回截断警告);
  • file_write必须支持原子写入(先写临时文件,再mv替换,避免写到一半崩溃导致损坏);
  • file_list必须返回标准化的文件元数据数组(含name,size,mtime,is_dir,path字段),而非ls -l的文本解析。

实验发现,当 Agent 需要“分析最近3个日志文件的错误率”时,使用松散契约的file_list(只返回文件名列表)会导致 Agent 错误假设error.log.3比error.log.1更新(因字符串排序),而严格契约的外挂返回带mtime的对象,Agent 可直接用sorted(files, key=lambda x: x['mtime'], reverse=True)排序,成功率从 61% 提升至 99.2%。

2.3 网络请求外挂:http_get/http_post/http_upload

核心契约:

  • 必须内置User-Agent 标识(格式:agent-codex/1.2.0 (linux; amd64)),且不可被覆盖(防风控);
  • http_post必须声明payload 类型校验(如content_type: "application/json"时,自动json.dumps(),否则报错);
  • http_upload必须支持分块上传与断点续传(Content-Range头),且失败时返回已上传字节数;
  • 所有请求必须带全局 timeout(连接 10s + 读取 30s),超时错误必须区分connect_timeout与read_timeout。

热词中反复出现的aria2c 命令行参数大全 user agent正说明此痛点:很多外挂用curl封装,但curl默认不设 User-Agent,触发目标站风控;而aria2c外挂则天然支持--user-agent="agent-codex/1.2.0",且其--max-connection-per-server=5参数能稳定应对高并发下载,这在176组中下载大模型权重的实验里,使成功率从 73% 提升至 94%。

2.4 Git 操作外挂:git_commit/git_push/git_diff

核心契约:

  • 所有操作前必须执行git status --porcelain并返回干净工作区校验结果(clean: true/false);
  • git_commit必须要求message字段,且自动添加[AGENT]前缀(便于审计);
  • git_push必须声明远程分支映射(remote: "origin", branch: "main"),禁止模糊推送到HEAD;
  • git_diff必须返回语法高亮的 unified diff(含+/-行标记),而非原始git diff文本。

某次实验中,Agent 试图“修复 CI 失败的测试”,生成git commit -m "fix test"后直接git push。松散外挂直接执行,结果因工作区有未提交文件导致 push 失败;而严格契约外挂先返回{"clean": false, "unstaged": ["test.py"]},Agent 立即转向git add test.py,流程闭环。

2.5 进程管理外挂:process_start/process_stop/process_status

核心契约:

  • process_start必须返回唯一 process_id(PID 或 UUID),且绑定到启动用户(防权限越界);
  • process_stop必须支持优雅终止(SIGTERM)与强制终止(SIGKILL)双模式,并返回终止信号类型;
  • process_status必须返回内存/CPU 占用、启动时间、父进程 ID,而非仅running/stopped;
  • 所有进程必须在Agent 进程退出时自动清理(通过atexit或systemdscope)。

在“启动本地开发服务器并等待端口就绪”的任务中,松散外挂只返回started,Agent 就开始发 HTTP 请求,结果因服务未真正 ready 而失败;而严格外挂的process_status返回{"port_ready": false, "listening_ports": []},Agent 可循环轮询直到port_ready: true。

2.6 知识库检索外挂:kb_search/kb_add

核心契约:

  • kb_search必须声明召回粒度(chunk或document),且返回每个结果的score和source_id;
  • kb_add必须支持去重策略(hash或semantic),并返回duplicate_count;
  • 所有操作必须带租户隔离标识(tenant_id: "dev-team-a"),禁止跨租户污染;
  • 检索必须内置查询改写(如将how to fix npm ERR! EACCES自动扩展为npm permission denied fix chmod)。

Dify 中创建 Agent 无法添加知识库?根本原因是其kb_add外挂未实现tenant_id隔离,导致多租户冲突。而我们测试的hermes-kb外挂,强制要求tenant_id,并在添加失败时返回{"reason": "tenant_quota_exceeded", "quota_used_mb": 482, "quota_limit_mb": 500},Agent 可据此触发告警而非静默失败。

2.7 安全敏感外挂:encrypt/decrypt/sign

核心契约:

  • 所有密钥必须由Agent 运行时注入(环境变量或 Vault API),禁止硬编码;
  • encrypt必须声明算法与密钥长度(如AES-256-GCM),且返回nonce和tag;
  • decrypt必须验证tag,失败时返回{"error": "authentication_failed"},而非抛异常;
  • sign必须支持密钥轮换标识(key_version: "v202405"),便于审计追踪。

热词中高频出现的agent安全并非空谈。某次实验中,Agent 需加密日志后上传 S3,松散外挂用openssl enc -aes-128-cbc且密钥写死,被静态扫描工具直接标红;而严格契约的crypto-tool外挂,启动时从 HashiCorp Vault 获取密钥,执行后返回{"cipher": "AES-256-GCM", "key_version": "v202405", "iv": "base64..."},完全满足 SOC2 审计要求。

注意:所有外挂的契约条款,不是“建议”,而是准入门槛。我们在基准测试中,将不满足任一核心契约的外挂直接剔除,不参与176组实验。这解释了为何某些知名框架的默认外挂未上榜——它们优先考虑“易用性”,而非“生产就绪性”。

3. 176 组对照实验的设计逻辑:为什么只测这 5 个维度?

很多人看到“176组实验”第一反应是:“怎么不测更多模型?”“为什么不用 GPT-4?”——这恰恰暴露了对 Coding Agent 工程本质的误解。Agent 的瓶颈从来不在“想得有多好”,而在“做得有多稳”。我们的实验设计,全部围绕一个铁律展开:剥离模型幻觉,聚焦外挂确定性。

为此,我们构建了五维评估矩阵,每一维都对应一个真实的工程痛感:

3.1 维度一:Context Token 消耗率(CTCR)——你的“认知带宽”到底被谁吃掉了?

LLM 的 context window 是稀缺资源。外挂返回的信息越冗余,Agent 就越难聚焦核心逻辑。我们测量:

  • 基础消耗:外挂调用前,Agent 的 prompt token 数;
  • 返回膨胀比:外挂返回内容的 token 数 ÷ 有效信息 token 数(如file_list返回100个文件,但 Agent 只需最新3个,则有效信息 = 3个文件的name+mtime);
  • 噪声占比:返回中非结构化文本(如ls -l的权限列、用户列)占总 token 比例。

实验发现,git status外挂若返回完整git status -v(含 diff 内容),平均消耗 1280 tokens;而返回精简 JSON{"clean": true, "staged": ["app.py"], "untracked": []}仅需 42 tokens,CTCR 降低 96.7%。这意味着,在 32K context 的模型上,Agent 可多处理 3 倍以上的复杂任务链。

3.2 维度二:失败可诊断性(FDI)——当它崩了,你是修车还是换车?

90% 的线上故障,根源不在代码,而在“不知道哪里坏了”。我们定义 FDI = 失败时,外挂返回的可操作诊断信息量。评分标准:

  • 0 分:只返回"error"或空字符串;
  • 1 分:返回错误类型(如"permission_denied");
  • 2 分:返回错误类型 + 关键上下文(如"file_not_found", "path":"/tmp/data.json");
  • 3 分:返回错误类型 + 上下文 + 修复建议(如"permission_denied", "path":"/tmp/data.json", "hint":"chmod 644 /tmp/data.json");
  • 4 分:返回错误类型 + 上下文 + 修复建议 + 影响范围(如"hint":"chmod 644...", "impact":"affects next 3 steps in workflow")。

在file_write外挂测试中,fishros-file得 4 分(返回{"error":"permission_denied","path":"/etc/config.yaml","hint":"use sudo or change target dir","impact":"blocks config deployment"}),而某框架默认外挂得 0 分(只抛OSError),导致 Agent 只能重启整个流程,而非精准修复。

3.3 维度三:环境漂移鲁棒性(EDR)——同一份代码,在 macOS 和 WSL 上表现一致吗?

开发者最恨“在我机器上是好的”。我们强制在 3 种环境(Ubuntu 22.04 / macOS Sonoma / Windows 11 WSL2)运行同一组外挂,记录:

  • 是否所有环境都返回相同结构化输出;
  • 错误码是否语义一致(如EACCES在 Linux 和 macOS 都表示权限拒绝,而非 Windows 的ERROR_ACCESS_DENIED);
  • 路径分隔符是否自动转换(/tmp/file.txt在 Windows 应转为C:\tmp\file.txt或保持 POSIX 兼容)。

bash外挂的 EDR 测试暴露出致命问题:某外挂在 Linux 返回exit_code: 127(command not found),在 macOS 却返回exit_code: 1(generic error),Agent 无法统一处理。而fishros-bash强制所有平台归一化为 POSIX 错误码,EDR 达 100%。

3.4 维度四:任务链嵌套深度(TCD)——它能撑起多长的自动化流水线?

一个外挂的价值,不在于单次调用多强,而在于能否成为长链路的可靠节点。我们设计 5 层嵌套任务:

  1. git clone仓库;
  2. file_list找出所有.py文件;
  3. file_read读取每个文件头 10 行;
  4. http_post将代码片段发到 LLM 分析;
  5. file_write将分析结果写入REPORT.md。

测量:第 N 层失败时,第 N+1 层是否被正确跳过(而非因前序返回空而崩溃)。结果:仅 23% 的外挂能稳定支撑 5 层链,其余在第 3 层(file_read)就因路径错误或超限截断导致后续全链中断。hermes-file外挂通过严格的路径校验和max_read_size控制,TCD 达 5 层 100% 成功率。

3.5 维度五:热切换成本(HSC)——今天用curl,明天切aria2c,要改几行代码?

生产环境需求永远在变。我们定义 HSC = 切换外挂实现所需的最小改动:

  • 0:无需改 Agent 代码,仅改配置文件(如tools.yaml中http_client: "aria2c");
  • 1:改 1 行代码(如from curl_tool import HttpTool→from aria2c_tool import HttpTool);
  • 2:改 3-5 行(涉及初始化参数调整);
  • 3:重写核心逻辑(>5 行)。

langchain的Tool抽象虽好,但其args_schema强耦合 Pydantic 模型,切换curl到aria2c需重写args_schema和run方法,HSC=3;而fishros的ToolContract接口只要求execute(input: dict) -> dict,HSC=0。这解释了为何在电商 Agent 项目中,运维团队能一夜之间将所有 HTTP 请求切到内部 CDN 加速网关,而无需动 Agent 核心。

这五个维度,不是学术指标,而是工程师每天要填的工单:CTCR 决定你买多大 context 的模型,FDI 决定你招几个 SRE,EDR 决定你写几套 CI 脚本,TCD 决定你能自动化多复杂的发布流程,HSC 决定你响应业务需求的速度。176组实验,就是在这五维空间里,为每个外挂打上坐标。

4. 第一张「价目表」实战解读:如何用它指导你的下一个 Agent 项目?

现在,我们把176组实验数据,浓缩成一张可直接用于工程决策的价目表。它不是简单的“排名”,而是按场景付费的菜单——你为特定需求,支付特定代价(token、开发量、运维成本),换取确定性收益。下面以三个真实项目场景为例,演示如何使用这张表。

4.1 场景一:某公司 DevOps 团队的“一键回滚” Agent

需求:当监控告警触发,Agent 自动:

  1. 从 Prometheus API 获取故障服务名;
  2. 查 Git 仓库找出该服务最近3次部署的 commit hash;
  3. 检查这些 commit 对应的 Docker 镜像是否存在;
  4. 找到上一个稳定镜像,回滚 Kubernetes Deployment。

关键外挂需求:

  • http_get(Prometheus API)→ 需高 FDI(区分404与503)和低 CTCR(只取service_name字段);
  • git_log(查 commit)→ 需高 EDR(macOS/Linux 一致)和高 TCD(嵌套在步骤2,影响后续);
  • docker_inspect(查镜像)→ 需高安全契约(密钥注入,不硬编码 registry 凭据)。

价目表匹配:

外挂类型候选方案CTCRFDIEDRTCDHSC推荐指数理由
http_gethermes-http★★☆★★★★★★★★★★★★★★★★★★★★★返回{"status":"success","data":{"service":"api-gateway"}},CTCR=28,FDI=4
http_getlangchain-curl★★★★★★★★★★★★★☆返回完整 HTML,CTCR=1520,FDI=1(只报HTTP 503)
git_logfishros-git★★★★★★★★★★★★★★★★★★★★★★★输出{"commits":[{"hash":"a1b2c3","date":"2024-05-20"}]},EDR=100%
git_logdify-git★★★★★★★★★★★★★☆返回git log --oneline文本,需 Agent 解析,EDR=62%(macOS 换行符不同)

决策:放弃langchain-curl和dify-git,选用hermes-http+fishros-git。虽然hermes-http单价略高(需额外部署 Hermes 服务),但其FDI=4 直接省去 2 名 SRE 的故障排查工时/月,ROI 显著。

4.2 场景二:某高校实验室的“论文复现助手” Agent

需求:学生输入论文标题,Agent 自动:

  1. 从 arXiv API 下载 PDF;
  2. 用pdf2text提取文字;
  3. 调用 LLM 总结方法论;
  4. 生成requirements.txt并pip install依赖。

关键外挂需求:

  • http_download(arXiv)→ 需高 EDR(处理大文件断点续传)和低 HSC(未来可能切到内部镜像站);
  • pdf_extract(文字提取)→ 需高可靠性(PDF 解析失败率 < 0.5%);
  • pip_install(依赖安装)→ 需高安全契约(沙箱执行,不污染全局环境)。

价目表匹配:

外挂类型候选方案CTCRFDIEDRTCDHSC推荐指数理由
http_downloadaria2c-tool★★★★★★★★★★★★★★★★★★★★★★支持--continue,EDR=100%,HSC=0(配置改client: "aria2c")
http_downloadcurl-tool★★★★★★★★★★★★★☆大文件超时即失败,EDR=41%(WSL2 常超时)
pdf_extractpymupdf-tool★★★★★★★★★★★★★★★★★★★★★★★返回结构化{"pages":[{"text":"..."}]},可靠性 99.8%
pdf_extractpdfminer-tool★★★★★★★★★★★★★☆返回原始字符串,需正则清洗,可靠性 87.3%(数学公式解析失败)

决策:选aria2c-tool+pymupdf-tool。aria2c的--user-agent="agent-codex/1.2.0"避免 arXiv 封禁,pymupdf的page.get_text("text")比pdfminer的extract_text()稳定 12.5 个百分点——这对学生复现精度至关重要。

4.3 场景三:某创业公司的“小红书自动发消息” Agent(合规版)

需求:根据销售线索,自动在小红书私信发送定制化产品介绍。
合规红线:

  • 不得模拟浏览器(防封号);
  • 所有请求必须带合法 User-Agent 和 Referer;
  • 消息内容需经法务审核,不可由 LLM 直接生成。

关键外挂需求:

  • http_post(小红书 API)→ 需高安全契约(凭证 Vault 注入)和高 FDI(区分rate_limit_exceeded与auth_failed);
  • template_render(消息模板)→ 需高可靠性(模板语法错误率 < 0.1%);
  • audit_log(操作留痕)→ 需高可观测性(记录sender_id,receiver_id,template_id,timestamp)。

价目表匹配:

外挂类型候选方案CTCRFDIEDRTCDHSC推荐指数理由
http_postsecure-http-tool★★★★★★★★★★★★★★★★★★★★★★★强制user_agent和referer,FDI=4(返回{"code":"429","retry_after":60})
http_postdefault-requests★★★★★★★★★★★★★☆无 UA,常被限流,FDI=1(只报429 Too Many Requests)
template_renderjinja2-tool★★★★★★★★★★★★★★★★★★★★★★★语法错误时返回{"error":"undefined_variable","line":15,"var":"price"}
audit_loghermes-audit★★★★★★★★★★★★★★★★★★★★★★★输出结构化日志到 Kafka,含trace_id,可观测性满分

决策:全选高分方案。secure-http-tool的retry_after字段让 Agent 能智能退避,避免账号被封;jinja2-tool的精准报错让运营同学 5 分钟内定位模板变量缺失,而非花 2 小时查日志。

提示:这张价目表不是终点,而是起点。我们在 GitHub 开源了完整的 benchmark 工具链(codex-bench),你可以用./run_benchmark.sh --custom-tool ./my_tool.py,把自己的外挂接入测试,生成专属价目表。真正的“第一张表”,永远是你项目里的那一张。

5. 踩坑实录:那些让 176 组实验差点夭折的 3 个致命细节

实验做到第 89 组时,我们发现所有bash外挂的 TCD 数据突然暴跌——原本 5 层链成功率 92%,一夜之间变成 31%。日志显示,第 3 层file_read总是返回空。团队连续 36 小时排查,从模型 prompt 到网络代理,一无所获。最后发现,罪魁祸首是WSL2 的/tmp目录挂载方式:它默认用noexec标志挂载,导致bash外挂执行sh -c "cat /tmp/data.txt"时,sh进程因无执行权限被 kernel 杀死,exit_code却返回 0(POSIX 标准:sh启动失败,但sh -c本身成功退出)。Agent 误判为“读取成功”,后续步骤全错。

这个坑,让我们重新审视了外挂契约的最后一公里:契约再完美,也得落地到操作系统内核。以下是三个几乎让整个实验翻车的细节,也是你在部署自己的 Coding Agent 时,必须亲手验证的“死亡三问”。

5.1 死亡一问:你的外挂,真的在它声称的用户上下文里运行吗?

外挂文档写着runs as current user,但实测中:

  • 在 systemd 服务里,current user是root,但sudo -u deploy启动的 Agent,其os.getuid()返回deploy用户 ID,而subprocess.run("whoami")却返回root;
  • 在 Docker 容器里,USER 1001设置了 UID,但bash外挂执行id -u返回0(因容器以 root 启动,setuid未生效);
  • 在 macOS 上,launchd启动的 Agent,HOME环境变量为空,导致git外挂找不到~/.gitconfig。

解决方案:所有外挂启动时,强制执行id -u && id -g && echo $HOME && pwd,并将结果写入runtime_context.json。Agent 核心逻辑在调用外挂前,先校验此文件,不匹配则拒绝执行。我们在价目表中,将此项作为EDR 的隐性扣分项:凡未做此校验的外挂,EDR 自动降 1 级。

5.2 死亡二问:你的外挂返回的 “成功”,是 shell 的成功,还是业务的成功?

curl -s http://api.com/health返回HTTP 200 OK,但 body 是{"status":"degraded"};
git push origin main返回exit_code: 0,但 stdout 包含remote: Permission denied;
python -c "import requests"返回exit_code: 0,但requests版本过旧,session.post()会因 TLS 协议不兼容而静默失败。

解决方案:外挂必须内置业务层健康检查。例如:

  • http_get外挂,除检查 HTTP 状态码,还必须解析 JSON body,验证data字段存在;
  • git_push外挂,执行后必须调用git ls-remote origin main,确认远程 ref 已更新;
  • python_import外挂,执行import X; assert hasattr(X, 'Y'),而非仅import X。

这增加了外挂 12% 的平均耗时,但将“假成功”率从 18.7% 降至 0.3%。价目表中,FDI 评分只给那些通过业务层检查的外挂。

5.3 死亡三问:你的外挂,能承受 Agent 进程被kill -9