news 2026/8/24 3:47:40

基于QClaw框架构建AI Agent:实现自动化运维与智能值守

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于QClaw框架构建AI Agent:实现自动化运维与智能值守

1. 项目概述:当“章鱼哥”成为你的数字分身

“章鱼哥开始替我值班”,这个标题精准地戳中了许多工科从业者的痛点:我们渴望一场说走就走的旅行,或是需要专注于一个封闭式项目开发,但手头那些重复、琐碎却又必须有人盯着的任务怎么办?服务器日志要不要看?定时脚本跑没跑成功?测试环境的数据同步有没有出错?传统的解决方案无外乎拜托同事、带着电脑旅行,或者干脆放弃计划。

现在,QClaw 的出现,让“数字分身”或“AI Agent”这个概念,从一个酷炫的技术名词,落地成了工科生工具箱里的一件实用工具。它不是一个全知全能的通用人工智能,而是一个可以被你精确“编程”、赋予特定职责的自动化助手。你可以把它想象成《海绵宝宝》里的章鱼哥,虽然可能牢骚满腹(指日志里可能会有一些WARNING),但只要你把工作流程和规则交代清楚,它就能在你离开工位时,一丝不苟地替你完成那些值守任务。

这个项目的核心,就是利用 QClaw 框架,构建一个属于你自己的、高度定制化的 AI Agent,让它成为你在数字世界里的可靠替身。它能够基于你设定的规则,监控系统状态、处理常见告警、执行预定任务,甚至在遇到复杂情况时,通过集成的大语言模型(LLM)进行简单的推理和决策,并通过邮件、钉钉、飞书等渠道向你汇报。这不仅仅是“自动化脚本”的升级,而是赋予了自动化系统一定的感知、分析和应变能力。对于工科生而言,这意味着我们可以将更多精力投入到创造性的设计和深度开发中,而将重复性的运维、监控工作交给这位不知疲倦的“章鱼哥”。

2. QClaw 核心架构与工科思维映射

要驾驭 QClaw,不能只停留在调用 API 的层面,更需要用我们工科生的系统思维去理解其架构。这能帮助我们在设计 Agent 时做出更合理的技术选型,并在出现问题时快速定位。

2.1 核心组件拆解:从传感器到执行器

一个完整的 QClaw Agent,可以类比为一个经典的工业控制系统或机器人系统,主要包括以下核心组件:

  1. 感知模块(Sensors):这是 Agent 的“眼睛”和“耳朵”。在工科场景下,它可能包括:

    • 日志文件监听器:实时 tail 应用或系统日志,匹配错误关键词。
    • API 查询器:定期调用内部或第三方服务的健康检查接口、数据查询接口。
    • 数据库探查器:执行 SQL 查询,监控数据量、数据一致性或特定业务指标。
    • 系统命令执行器:运行top,df,netstat等命令,获取系统资源状态。
    • 消息队列消费者:监听 Kafka、RabbitMQ 等队列,处理特定消息。
  2. 推理与决策核心(LLM Core):这是 Agent 的“大脑”。QClaw 的核心优势在于集成了大语言模型。感知模块收集到的原始、冗长的数据(如一段错误日志),会被提炼成简洁的上下文,提交给 LLM。LLM 的任务不是运行代码,而是进行自然语言理解与生成。例如,它可以根据预设的规则(“如果日志中出现OutOfMemoryError,且频率超过每分钟5次,则判定为一级告警”),或者通过分析日志文本语义(“日志显示‘数据库连接池耗尽’,并且伴随‘响应超时’”,推断出可能的原因是数据库负载过高或连接泄漏),来做出决策判断。

  3. 技能与工具集(Skills/Tools):这是 Agent 的“双手”。决策大脑发出指令后,需要具体的工具来执行。QClaw 允许你定义或集成各种技能:

    • 通知技能:调用钉钉/飞书机器人、发送邮件、拨打电话(通过 Twilio 等接口)。
    • 运维技能:执行预定义的 Shell 脚本(如重启服务)、调用 Ansible Playbook、触发 Jenkins 构建。
    • 数据操作技能:向数据库写入状态记录、更新工单系统、调用云服务商的 API 进行扩容。
    • 逻辑控制技能:实现简单的 if-else 工作流、重试机制、熔断逻辑。
  4. 记忆与状态管理(Memory):这是 Agent 的“短期记忆”。它需要记住刚刚处理过的事件,以避免重复告警(比如,10分钟内已经通知过数据库连接问题,除非情况恶化,否则不再重复通知)。这通常通过一个轻量级的键值存储(如 Redis)或直接利用 LLM 的上下文窗口来实现。

  5. 编排与协调层(Orchestration/Harness):这就是热词中提到的Harness。你可以把它理解为 Agent 的“神经系统”和“骨架”。它不负责具体的推理(那是 LLM Core 的事),而是负责将所有组件串联起来,管理整个 Agent 的生命周期:何时触发感知、如何组织上下文传递给 LLM、如何解析 LLM 的决策并调用正确的技能、如何管理执行状态和错误回退。QClaw 的框架本身,就提供了这样一个强大的 Harness。

2.2 工科生选型:为什么是 QClaw?

面对市面上众多的 AI Agent 框架(如 LangChain、AutoGen、CrewAI),为什么针对“工科生值班”这个场景,QClaw 是一个值得重点考虑的选择?

  • 对工程化部署友好:QClaw 通常提供清晰的 Docker 镜像和 Kubernetes 部署清单,这非常符合工科生和运维团队的习惯。热词中频繁出现的“qclaw部署”、“docker”、“k8s”也印证了这一点。你可以像部署任何一个微服务一样部署你的 Agent。
  • 配置驱动,降低开发门槛:很多功能可以通过 YAML 或 JSON 配置文件完成,无需从头编写大量代码。这对于需要快速原型验证的工科场景来说,效率极高。这也解释了为什么“配置”是相关热词中的高频词。
  • 与现有运维体系集成顺畅:它的设计理念易于和 Prometheus、Grafana、Zabbix(热词中提及)等现有监控告警体系对接,可以作为现有监控的一个智能补充层,而不是完全替代。
  • 强调可靠性与可控性:工科应用最忌“黑盒”和不可靠。QClaw 的架构通常更注重流程的明确性和决策的可追溯性(有清晰的日志记录 LLM 的输入和输出),这让我们更有信心把一些低级值守任务交给它。

注意:框架选型没有绝对优劣。如果你需要极度灵活的研究型 Agent,LangChain 可能更合适;如果需要多 Agent 复杂协作,CrewAI 或 AutoGen 是强项。但对于“稳定、可靠、易部署的专属值班员”这个需求,QClaw 的工程化特性显得尤为突出。

3. 从零到一:构建你的第一个“章鱼哥”值班 Agent

理论说得再多,不如动手搭建一个。我们以一个经典的工科场景为例:监控一个后台服务的日志,当出现特定错误时,自动重启服务并通知负责人。

3.1 环境准备与基础配置

首先,你需要一个可以运行 QClaw 的环境。由于 QClaw 通常是基于 Python 的,我们假设你已经在服务器或本地开发机上准备好了 Python 环境(3.8+)。

  1. 安装 QClaw:最直接的方式是通过 pip 安装。建议使用虚拟环境。

    # 创建并激活虚拟环境 python -m venv qclaw-env source qclaw-env/bin/activate # Linux/macOS # qclaw-env\Scripts\activate # Windows # 安装 QClaw。请务必查阅其官方文档获取确切的包名,这里用 `qclaw` 示意。 pip install qclaw
    • 避坑提示:如果官方提供了特定版本的依赖说明(如某些版本的 transformers 或 torch),最好遵循官方指南,避免版本冲突。网络问题可能导致安装慢,可以配置 pip 国内镜像源(如清华源、阿里云源)。
  2. 配置 LLM 连接:Agent 的大脑需要接入。QClaw 支持 OpenAI API 格式的兼容接口,这意味着你可以使用 OpenAI 的模型,也可以使用部署在本地的开源模型(如通义千问、DeepSeek、GLM 等,只要其 API 与 OpenAI 兼容)。

    • 创建一个配置文件config.yaml
    llm: provider: "openai" # 也可以是 “azure”, “local” 等 api_key: "your-api-key-here" # 如果是本地模型,这里可能是 base_url model: "gpt-3.5-turbo" # 根据实际情况选择,对于值班场景,3.5-turbo 通常足够且成本低 base_url: "http://localhost:8080/v1" # 如果使用本地部署的兼容 OpenAI API 的模型,在此指定地址
    • 实操心得:对于内部值班场景,出于成本和数据隐私考虑,强烈建议部署一个开源模型在内部服务器上。可以使用 FastChat、vLLM 等工具来部署一个 7B 或 13B 参数的模型,并提供兼容 OpenAI 的 API 接口。这样不仅没有网络延迟,也完全不用担心数据外泄。
  3. 配置技能与工具:定义“章鱼哥”能做什么。我们需要“读取日志”、“执行命令”和“发送通知”三个技能。

    skills: - name: "log_monitor" type: "file_tailer" config: file_path: "/var/log/my-backend-service/app.log" watch_interval: 10 # 每10秒检查一次 - name: "shell_executor" type: "command" config: allowed_commands: ["/usr/bin/systemctl", "/opt/scripts/health_check.sh"] # 安全起见,严格限制可执行命令路径 - name: "notifier" type: "webhook" config: webhook_url: "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN" # 钉钉机器人 webhook template: | {“msgtype”: “text”, “text”: {“content”: “【服务告警】\n时间: {{timestamp}}\n服务: my-backend-service\n事件: {{event_description}}\n已执行操作: {{action_taken}}\n请及时处理!”}}

3.2 定义 Agent 的工作流与决策逻辑

这是最核心的部分,即告诉“章鱼哥”在什么情况下做什么。在 QClaw 中,这通常通过一个“工作流”或“策略”配置文件来定义。

agent: name: "backend-watcher" triggers: - on: "log_monitor.new_line" # 当 log_monitor 技能读到新日志行时触发 condition: “{{ ‘ERROR’ in event.line or ‘OutOfMemoryError’ in event.line }}” # 条件:日志行包含 ERROR 或 OutOfMemoryError actions: - step: “analyze_with_llm” # 第一步:交给 LLM 分析 input: | 你是一个运维专家。请分析以下服务器日志片段,判断错误的严重程度(1-5级,5为最高),并给出建议的立即操作。 日志:{{ event.line }} 历史上下文:最近5分钟内类似错误发生了 {{ error_count_last_5min }} 次。 output_variable: “llm_analysis” - step: “decide_action” # 第二步:根据 LLM 分析结果做决策 switch: “{{ llm_analysis.severity }}” cases: - case: “{{ severity >= 4 }}” actions: - “shell_executor.restart_service” # 调用 shell 技能重启服务 - “notifier.send_critical_alert” # 发送严重告警 - case: “{{ severity >= 2 }}” actions: - “notifier.send_warning_alert” # 发送警告通知 - default: actions: - “log_only” # 仅记录,不通知 states: error_count_last_5min: 0 # 用于记录状态的内存变量

关键点解析

  • 条件判断 (condition):这里先用简单的字符串匹配做初步过滤,避免所有日志都丢给 LLM,节省成本和处理时间。
  • LLM 分析 (analyze_with_llm):将过滤后的关键日志,连同一些上下文(如近期错误次数)一起交给 LLM。你给 LLM 的指令(input)非常关键,要清晰定义它的角色和输出格式。这里我们让它输出一个结构化的分析,包含严重等级。
  • 决策流 (decide_action):根据 LLM 分析的严重等级,执行不同的动作分支。这是一个简单的规则引擎,确保了行为的可预测性。
  • 状态管理 (states)error_count_last_5min是一个在 Agent 运行期间保持的状态变量,用于实现简单的频率统计。更复杂的状态可能需要外部的 Redis。

3.3 运行与调试

配置完成后,启动 Agent 通常只需要一条命令:

qclaw run --config config.yaml --workflow workflow.yaml

启动后,你需要密切关注 Agent 自身的日志。QClaw 应该会输出详细的执行过程:

  1. 触发了哪个trigger
  2. LLM 接收到的 prompt 和返回的 response。
  3. 执行了哪个action,结果如何。

调试技巧

  • 先用 Dry-Run 模式:如果框架支持,使用--dry-run参数,让 Agent 只执行流程但不真正调用技能(如不真发消息、不真重启服务)。
  • 模拟日志事件:手动向监控的日志文件echo “模拟 ERROR 日志” >> /var/log/...,观察 Agent 的反应。
  • 检查 LLM 交互:LLM 的输入输出是调试的核心。确保你给它的上下文清晰,它的回复能被正确解析。有时需要调整 prompt 的表述。

4. 进阶场景与架构设计

当你的“章鱼哥”成功处理了单个服务的简单告警后,就可以考虑更复杂的值班场景了。这时,单一的 Agent 可能力不从心,需要考虑多 Agent 协作或更复杂的架构。

4.1 场景一:多服务依赖链监控

假设你有 A、B、C 三个微服务,C 依赖 B,B 依赖 A。当 A 服务宕机时,你会收到 B 和 C 的大量级联错误告警。一个笨的监控系统会轰炸你三次。一个智能的“章鱼哥”应该能推理出根因。

设计方案

  1. 部署三个监控 Agent:分别监控 A、B、C 的日志和健康接口。
  2. 建立通信机制:让 Agent 之间可以发送消息。QClaw 可能支持通过内部消息总线(如 Redis Pub/Sub)或者直接 HTTP 调用进行通信。
  3. 设计根因推断逻辑
    • Agent_B 检测到错误,首先检查其依赖服务 A 的健康状态(通过调用 Agent_A 提供的状态接口或直接查询健康端点)。
    • 如果发现 A 已异常,则 Agent_B 将自身告警标记为“由依赖服务 A 故障引起”,并抑制向人工发送高优先级告警,只记录日志。
    • Agent_C 做类似处理。
    • 最终,只有 Agent_A 会触发最高级别的告警和修复动作。这避免了告警风暴,并直接指向问题根源。

4.2 场景二:基于时序数据的预测性维护

值班不仅是处理已发生的故障,更是预防故障。我们可以让“章鱼哥”学习历史。

设计方案

  1. 数据收集 Agent:部署一个 Agent,定期(如每分钟)采集服务器的 CPU、内存、磁盘 IO、应用队列长度等指标,并存入时序数据库(如 InfluxDB)或向量数据库(用于相似性检索)。
  2. 分析预测 Agent
    • 规则模式:配置规则,如“连续5分钟 CPU 使用率 > 85% 且内存使用率持续增长,则预测可能发生 OOM”。
    • AI 模式:更高级的做法是,定期将近期(如过去1小时)的指标数据作为上下文,提交给 LLM,并提问:“根据这些系统指标趋势,未来15分钟内系统发生严重故障的可能性有多大?主要风险点是什么?” LLM 可以基于对指标描述的理解给出定性判断。
  3. 执行 Agent:收到预测性告警后,可以执行预案,如自动清理临时文件、扩容一个备用实例、或提前通知运维人员介入。

4.3 与现有运维体系(如 Zabbix)集成

很多公司已有成熟的 Zabbix 监控。QClaw Agent 不是替代它,而是增强它。

集成模式

  • Zabbix 作为触发器:Zabbix 检测到异常并产生告警事件。可以配置 Zabbix 的 “Media Type” 或通过 Webhook 将告警事件发送给 QClaw Agent 的接收接口。
  • QClaw Agent 作为智能处理器:Agent 收到 Zabbix 告警后,利用 LLM 分析告警内容(“Zabbix 报告主机DB-Server-01的磁盘空间不足,仅剩 5%”),并结合其他上下文(该数据库的备份任务日志、业务高峰期时间),决定处理动作:是直接调用清理脚本,还是先确认备份已完成再清理,或是直接触发磁盘扩容流程。
  • 反馈闭环:Agent 执行动作后,可以通过 Zabbix API 去更新告警状态、添加处理注释,实现闭环管理。

这种架构下,Zabbix 负责“广泛采集和阈值告警”这个苦力活,而 QClaw Agent 负责“分析决策和智能处理”这个技术活,两者相辅相成。

5. 生产环境部署、安全与成本控制

当你打算让“章鱼哥”7x24小时为你值班时,就必须以生产级的标准来要求它。

5.1 部署与高可用

  • 容器化:将你的 QClaw Agent 及其配置、依赖打包成 Docker 镜像。这保证了环境一致性,便于迁移和扩展。
  • 使用编排系统:在 Kubernetes 中部署 Agent。你可以将其设置为Deployment,并配置livenessProbereadinessProbe来检查 Agent 的健康状态。通过HPA可以实现多个 Agent 实例负载均衡(适用于处理大量异步事件)。
  • 配置管理:切勿将密码、API Key 硬编码在配置文件中。使用 Kubernetes Secrets、HashiCorp Vault 或环境变量来注入敏感信息。
  • 日志与监控:Agent 本身也需要被监控。确保它的日志被收集到中心化的日志系统(如 ELK)。为 Agent 暴露一个简单的/health端点,方便监控其存活状态。

5.2 安全考量

安全是工科系统的生命线,AI Agent 也不例外。

  • 权限最小化:运行 QClaw Agent 的操作系统账户应具有完成其任务所需的最小权限。例如,一个只负责读日志和发通知的 Agent,绝对不应该有sudo权限。
  • 技能白名单:如上文配置所示,对shell_executor这类危险技能,必须严格指定allowed_commands列表,禁止通配符*
  • LLM 输入净化:发送给 LLM 的上下文可能包含敏感信息(如内部服务器名、IP、错误信息中的用户数据)。务必进行脱敏处理,或使用不影响判断的占位符替换。
  • 审计日志:Agent 的所有决策、执行的操作(尤其是修改性操作),都必须有不可篡改的详细审计日志,包括:时间戳、触发事件、LLM 的完整输入输出、执行的具体命令和结果。

5.3 成本优化

使用 LLM 最大的担忧就是成本,尤其是调用云端 API。

  • 本地模型优先:对于值班这类对实时性要求不是毫秒级、且逻辑相对固定的场景,本地部署的中小规模开源模型(如 7B/13B 参数)是完全够用的,且成本固定。
  • 提示词工程:精心设计 prompt,让 LLM 的回复尽可能简短、结构化(如要求返回 JSON),减少不必要的 token 消耗。避免在 prompt 中塞入无关的上下文。
  • 缓存机制:对于相同或相似的输入,可以使用缓存。例如,同一种错误日志在短时间内反复出现,第一次分析结果可以缓存一段时间(如1分钟),后续直接使用缓存结果,无需重复调用 LLM。
  • 分级处理:不是所有事件都需要劳烦 LLM。先用简单的规则引擎过滤掉明显无关或低级别的事件,只有复杂、不确定的事件才提交给 LLM 分析。这就是我们之前配置中先做condition过滤的原因。

6. 避坑指南与经验实录

在实际搭建和运行“章鱼哥”的过程中,我踩过不少坑,也积累了一些让 Agent 更可靠、更聪明的经验。

6.1 LLM 的“幻觉”与不可靠性

LLM 可能会“胡言乱语”,给出错误的判断或建议。这是使用 AI Agent 最大的风险点。

  • 对策一:设定严格的输出格式:在 prompt 中强制要求 LLM 以特定格式(如 JSON)输出,并指定必填字段和枚举值。例如:{"severity": "HIGH|MEDIUM|LOW", "action": "RESTART|NOTIFY|IGNORE", "reason": "简短原因"}。这可以大大降低解析失败的概率。
  • 对策二:增加验证层:在 Agent 的决策流程中,在 LLM 输出后、执行动作前,加入一个“验证”步骤。这个验证可以是一组简单的规则(例如,如果 LLM 建议RESTART,但该服务在过去10分钟内已经重启过两次,则否决该建议,改为NOTIFY),也可以是另一个更轻量级、更确定性的模型或函数进行复核。
  • 对策三:人工确认回路:对于高风险操作(如重启核心数据库、删除生产数据),不要完全自动化。可以让 Agent 生成一个待办事项或审批请求,发送到钉钉/飞书群,等待人工点击“确认”后再执行。

6.2 状态管理与并发问题

当多个事件同时触发,或者同一个事件被快速重复触发时,Agent 可能会陷入混乱。

  • 问题:一个服务崩溃,每秒产生10条错误日志,触发了10次 Agent 流程,可能导致10次重启尝试和10条告警消息。
  • 解决方案
    1. 去重与节流:在触发器层面设置去重窗口。例如,对于同一个服务、同一种错误,5分钟内只处理第一次触发,忽略后续的。
    2. 状态锁:在执行一个长时间任务(如服务重启)时,设置一个全局锁或标记,在这个任务完成前,拒绝处理同一资源的其他操作请求。
    3. 异步与队列:将触发的事件放入一个内部消息队列(如 Redis Streams),由 Agent 的工作线程顺序消费,自然解决了并发问题。

6.3 调试与日志的重要性

一个行为不可预测、日志不清晰的 Agent 比没有 Agent 更可怕。

  • 结构化日志:确保 Agent 输出结构化的日志(JSON 格式),方便被日志系统采集和检索。关键字段应包括:agent_id,event_id,trigger,llm_input_snippet,llm_output,action_taken,result,timestamp
  • 链路追踪:为每个触发的事件生成一个唯一的trace_id,并让这个 ID 贯穿整个处理流程(包括调用 LLM、执行技能)。这样,当出现问题,你可以轻松地通过trace_id把整个决策链条的日志串联起来复盘。
  • 保留 LLM 对话:将每次与 LLM 的完整交互(包括你精心设计的 system prompt, user prompt 和 assistant response)保存到数据库或日志中。这是优化 prompt 和排查 LLM 问题的唯一依据。

6.4 从“自动化”到“智能化”的演进

不要试图一开始就构建一个无所不能的超级 Agent。遵循迭代演进的原则:

  1. 阶段一:完全规则化。用 QClaw 实现一个纯粹的、基于if-else规则的自动化流程。先不接入 LLM。这能帮你验证流程框架和技能集成是否可靠。
  2. 阶段二:LLM 辅助分析。在规则过滤的基础上,将复杂场景交给 LLM 做分析,但执行动作仍由固定规则决定(例如,LLM 只输出严重等级,你根据等级定死对应动作)。这个阶段,LLM 只是一个更聪明的“分类器”。
  3. 阶段三:LLM 建议动作。让 LLM 在分析后直接输出建议动作,Agent 执行。但需要为高风险动作设置“人工确认回路”。
  4. 阶段四:多 Agent 协作与学习。引入多个专项 Agent,并让它们能够从历史决策的成功/失败中学习,动态调整策略(这需要更复杂的架构和可能的外部反馈机制)。

让“章鱼哥”替你值班,不是一个一蹴而就的项目,而是一个持续优化和磨合的过程。从一个小而具体的场景开始,让它先可靠地运行起来,再逐步赋予它更多的职责和智能。最终,你会收获一个真正理解你的工作习惯、能让你安心享受旅行或专注深潜的数字化伙伴。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 3:44:02

企业官网GEO优化全指南:方法、工具及避坑要点

企业官网实现GEO优化的核心是产出结构清晰、语义明确、匹配用户问题的结构化内容,同时多渠道放大品牌语义信号,可借助即推GEO这类专业系统提升落地效率。企业官网GEO优化的核心原则是什么?企业官网GEO优化的核心是让内容同时适配人类阅读和AI…

作者头像 李华
网站建设 2026/8/24 3:42:55

AI时代Java面试实战:50%涨薪路径与工具化准备策略

这类主题最值得先看的不是八股文列表,而是怎么把 AI 工具、项目经验和面试考点串成一条能涨薪的实战路径。我见过不少 Java 程序员在“金九银十”期间,要么只背题不碰 AI,要么只学 AI 不补基础,最后面试时卡在场景题或项目深挖上。…

作者头像 李华
网站建设 2026/8/24 3:42:47

机器人竞赛中轨迹复现与状态恢复技术实战指南

1. 先搞清楚“WRC2026大考场”和“留形”到底指什么看到“WRC2026大考场——留形‘含量’有点高”这个标题,第一反应可能是某个特定领域的竞赛或测试平台。在没有具体正文和关键词的情况下,我们需要先拆解核心概念。这里的“WRC”通常指世界机器人大赛&a…

作者头像 李华
网站建设 2026/8/24 3:42:28

Magisk 安全 Root 完整安装教程:不破坏系统分区的安卓 Root 指南

Magisk 安全 Root 完整安装教程:不破坏系统分区的安卓 Root 指南 【免费下载链接】Magisk The Magic Mask for Android 项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk 你想给手机开 Root,又怕改坏系统分区、银行 App 检测失败、系统一…

作者头像 李华