news 2026/10/14 5:08:10

IT自动化运维平台建设实战:从CMDB到作业编排的落地方法论

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IT自动化运维平台建设实战:从CMDB到作业编排的落地方法论

简介:这份PPT是面向IT运维团队与技术管理者的自动化运维平台建设方案,内容系统梳理了从人工运维、自动化运维到智能化运维的演进路径,并给出可落地的总体规划。方案围绕数据整合、任务调度、智能监控、自动运维、风险诊断五个重点阶段展开,既阐述了应用系统维护自动化、巡检自动化、故障处理自动化等方法,也介绍了基于大数据与机器学习的AIOps趋势,能帮助读者理解自动化运维平台的架构设计、关键能力与实施节奏。资源包内包含1个PPT文件,总大小约4.35MB,文件为完整的PPT演示文稿,图文并茂,涵盖总体规划架构、应用蓝图、本期功能架构、整体流程等核心图示,并涉及CMDB、云管平台、Zabbix等系统对接的落地思路,适合用作方案汇报、技术培训或项目立项前的参考材料。目前已有1023人学习浏览,对于正在规划运维转型、搭建自动化运维平台或需要向团队系统讲解运维智能化价值的读者来说,具有直接的参考作用。

1. 先说结论:IT 自动化运维平台建设解决方案不是买来的,是长出来的

提到 IT 自动化运维平台建设解决方案,很多团队的直觉是:上一套开源的执行引擎,再配一块告警面板,就算建成了。我见过不少项目在装完之后陷入同一个困境:CMDB 没人维护、作业没人敢点、告警自愈上线一周就被关掉。干了几年运维平台,我比较确定的一个结论是:自动化平台不是采购回来的,它是跟着运维流程长出来的。PPT 只是立项和汇报的入口,真正决定这套方案能不能活下来的是三件事:资源数据是否准确、执行通道是否统一、变更审批与自动化是否闭环。这套思路适合几十台到几千台主机的团队,愿意为了长期收益改造已有运维习惯。

2. 方案设计第一步:先盘清家底,再选平台形态

我习惯把方案设计拆成三步:盘点现状、划模块边界、再谈选型。跳过第一步直接画架构图,是后面所有返工的起点。很多团队拿到一份现成的自动化运维平台建设解决方案,第一反应是照着里面的分层架构去部署组件,结果装完才发现,自己的资源台账是 Excel、定时任务是散落在几十台机器上的 cron、变更审批靠群里吼,平台能力和真实流程完全对不上。

2.1 把现有运维方式盘成一张表,而不是凭感觉说"很乱"

盘点不是走形式,是把隐性工作量变成可见存量。我一般会让团队把过去三个月里所有"手工在做的运维动作"列出来,每一条都要能回答六件事:做什么、谁触发、凌晨还是上班时间、作用在哪些机器、失败了怎么办、有没有留下记录。这里最容易犯的错是只统计脚本数量,真正的价值在看触发方式和失败处理是否有人盯着。

现有动作触发方式执行对象失败后怎么办是否留痕
数据备份每天凌晨 3 点 cron数据库主机发邮件,偶尔没人看只有日志文件
日志清理每周日 cron应用服务器无人处理,磁盘满了才被发现无
应用发布手工登录跳板机执行订单服务集群现场重试,过程靠人记无
日常巡检人肉执行命令核心业务主机发现问题开群聊截图存聊天记录

把这张表拉完之后,通常能看出三个事实:大部分动作是半夜触发的定时任务,失败后没有标准处理路径,执行记录几乎不可追溯。这也是为什么统一执行通道要排在平台建设的第一优先级,而不是先上炫酷的大屏和报表。盘完这张表,团队对自己处于哪个阶段会有清晰认知:完全是手工加 Excel、半自动脚本、还是已经有一部分平台能力。大多数团队处在第二种,直接上重平台容易水土不服,先收口再扩展才是稳妥路径。

2.2 五大模块的边界:谁负责事实、谁负责动作、谁负责信号

一个能落地的自动化运维平台通常逃不开五块:资源管理、监控告警、作业编排、变更审批、权限与审计。它们之间的数据流要一开始就定死,否则平台会很快长成互相咬合的泥球。

模块核心职责关键产出谁消费它
资源管理(CMDB)维护"有哪些资产、属于谁"资源实例、关系、状态所有模块取资源清单
监控告警维护"现在发生了什么"指标、告警事件作业编排决定是否触发动作
作业编排维护"怎么做"执行计划、执行结果变更流程、审计模块
变更审批维护"能不能做"审批记录、变更单作业编排决定是否放行
权限与审计维护"谁做过"操作快照、权限模型所有模块共用

CMDB 只负责事实,不负责实时状态;监控只负责发信号,不直接登录服务器执行命令;作业编排只负责动作,不自己维护一套资产表。常见反模式是执行引擎里写死 IP 列表、CMDB 里塞监控状态、监控告警直接触发一个没人知道的 shell 脚本,这些都是平台腐化的开始。我建议第一个实施的一定是"事实层",也就是后面要展开的 CMDB,理由很简单:所有执行目标如果从 CMDB 实时取,作业就不会跑在过期清单上。

2.3 选型之前先回答三个问题,别急着比较产品

选型阶段不要陷入"开源免费还是商业稳定"的争论,先回答三个问题。第一,有没有人专职维护平台,代码和脚本也会产生维护成本,没人维护的开源组件半年后就变成新的运维事故来源;第二,被纳管资源的异构程度,物理机、虚拟机、云实例、容器、网络设备混在一起,和清一色物理机是完全不同的工作量;第三,要不要和企业已有的工单、统一认证、审批系统打通,这决定了自研比例。

平台形态适用场景主要代价我的建议
开源组件组合链路单一、机器规模不大自己组装、自己背故障小团队先用它验证流程
商业运维平台预算充足、要快速上线定制难、历史数据迁移重适合没有专职开发团队
基于框架自研资源异构、深度集成多需要稳定开发人力适合长期投入的平台化建设

标题虽然叫解决方案 PPT,落地时选型不是找最好看的架构图,而是找"数据能对上、权限能管住、失败能追到"的最小组合。我在方案阶段会先把数据模型画出来,再去挑组件,顺序反了就会出现组件都挺有名、但彼此的数据对不上的尴尬局面。

提示:方案 PPT 里的分层架构是给别人看的,自己团队落地时,请把第一页画成"数据流图":谁产生数据、谁消费数据、谁对数据负责。

3. CMDB 先行:让资源数据从 Excel 台账变成可用的事实库

CMDB 是自动化运维平台的地基,但也是最容易被跳过的一环。原因很简单:台账整理费力、不出成绩、短期内看不到收益。可一旦平台开始自动化执行,第一个跑偏的一定是资源数据。你会发现作业列表里有大量已下线主机,发版时按 CMDB 选机器漏掉了新增节点,运维开始绕过平台手工操作。前面 2.2 里说 CMDB 是事实层,这一章讲清楚建模、采集和质量三条线。

3.1 建模:先定唯一标识和关系,再讨论字段多少

CMDB 建模最容易犯的错是字段越加越多,最后变成一张谁也填不完的大宽表。我的习惯是只保留两类东西:稳定身份和可变属性。稳定身份是资源的唯一标识,虚拟机和云上实例用实例 ID,物理机用资产序列号,网络设备用出厂序列号,IP 一律当成可变属性——IP 会漂移、会复用,当主键迟早要出事。

建模先定关系链:应用服务挂在集群下,集群包含实例,实例落在物理机或虚拟机上。这套层级对应到自动化场景就是作业的目标怎么选:按应用选、按集群选、按环境选,而不是手动勾选一批 IP。字段设计保持克制,核心字段先覆盖四个方面:资源标识、运行规格、环境归属、负责人。

字段示例说明
instance_keyi-123456 / SN00123唯一键,采集和作业都依赖它
ip / hostname10.20.30.40 / app-node-1可变属性,IP 不做主键
cpu_cores / mem_mb8 / 16384规格信息,来自自动发现
env / app_codeprod / order-service环境与应用的归属关系
owner_team订单研发组故障与变更时的责任人
statusonline / offline由心跳和对账更新

这个精简模型已经能支撑绝大多数自动化场景。业务上需要的其他信息,比如机柜位置、维保日期,放进扩展属性表,按资源唯一键关联,不要塞进主表。扩展属性随时可以加,主表的健壮性一旦被破坏,后续每一条作业都会受牵连。

3.2 自动发现和采集:一条把数据送进 CMDB 的管道

CMDB 上线不能靠一次性导入 Excel,必须有持续更新的管道。常见的采集方式有四种:在服务器上装轻量 agent 上报、对接云平台或监控系统的 API、通过扫描探测发现存活资源、以及少量人工补录。用开源数据库存储时,我一般用 upsert 方式做幂等写入,让同一批数据反复同步也不会产生重复记录。

# cmdb_sync.py —— 把采集结果写入 CMDB,按唯一键 upsert import psycopg2 def upsert_instance(conn, item): # 唯一键优先取云实例ID或资产序列号,IP 会漂移不能当主键 key = item["instance_id"] or item["serial_no"] or item["ip"] with conn.cursor() as cur: cur.execute( """ INSERT INTO cmdb_instance (instance_key, ip, hostname, cpu_cores, mem_mb, env, status, updated_at) VALUES (%s, %s, %s, %s, %s, %s, 'online', NOW()) ON CONFLICT (instance_key) DO UPDATE SET ip = EXCLUDED.ip, hostname = EXCLUDED.hostname, cpu_cores = EXCLUDED.cpu_cores, mem_mb = EXCLUDED.mem_mb, env = EXCLUDED.env, status = 'online', updated_at = NOW() """, (key, item["ip"], item["hostname"], item["cpu_cores"], item["mem_mb"], item["env"]), ) conn.commit() if __name__ == "__main__": # 从云平台或监控系统的接口拉取实时资源列表 conn = psycopg2.connect("host=cmdb-db.example dbname=cmdb user=cmdb_app") for host in collect_from_cloud_api(): upsert_instance(conn, host)

这段代码解决两个问题:一是重复执行不会产生重复数据,ON CONFLICT 让同一条记录反复同步也只保留一份;二是每次采集都会把 status 刷新为 online,相当于一次心跳,连续几个周期没有上报的资源会被后续对账任务标记为 offline。参数上有两个点要注意:instance_key 的取值顺序决定了身份的稳定性,强烈建议云上资源一律以实例 ID 为准,不要用 hostname 拼接;env 字段不要猜测,直接来自云平台的标签,否则后续作业按环境筛选会出错。

注意:采集管道可以分阶段接,先接云平台 API 和监控系统,再考虑 agent 覆盖物理机,最后才处理网络设备。一次接太多采集源,数据对不齐时会很难排查。

3.3 数据质量守住:把"准确率"当成平台的验收指标

CMDB 建完之后没有对账机制,就谈不上质量。我的做法是每月做一次三方对账:拿 CMDB 的存量、云平台返回的资源列表、监控系统里的主机列表做差集,每一个差异都要给出原因,是采集遗漏、资源已释放、还是字段更新失败。对账结果换算成两个指标:发现率,该有的资源是否都存在;准确率,已有资源的属性字段是否和真实情况一致。

可以把这两个指标写进方案验收表里,资源发现率不低于 99%,属性准确率不低于 95%,关键业务系统负责人缺失为零。达不到阈值之前,平台不开放高危作业。这不是限制效率,而是防止自动化跑在不完整的数据上造成更大事故。数据质量问题要落实责任人,资源负责人不更新的字段,平台团队去补是补不干净的,这不仅是技术问题,也是流程问题。

4. 执行层打通:从零散脚本到统一作业编排

CMDB 解决了"对哪些机器做"的问题,执行层要解决的是"怎么做"。很多团队在建设前都有大量脚本,分散在跳板机、服务器 cron、个人电脑里,这些脚本就是一个个黑匣子:执行状态不明、失败没有通知、权限拦不住谁都能跑。统一执行通道不是把脚本搬个家,而是给脚本套上目标、超时、重试、审批、回滚五个约束。

4.1 为什么要统一执行通道:cron 脚本和临时命令就像黑匣子

服务器本地 cron 最头疼的还不是散,而是没有归因能力。某台机器的 cron 半夜执行失败,日志写在本地,第二天没人发现;换人之后脚本逻辑靠猜;又因为没有任何人在流程上把关,高危命令可以直接执行。把 cron 收口到统一作业平台,先禁掉新建的本地 cron,再分批迁移存量脚本,是执行层建设的第一步。

收口时的常见误区是只把脚本内容搬进平台,执行逻辑原封不动。脚本里写死的 IP 要继续用,那就是把散落的问题集中化了。迁移时我一般要求每条作业回答三个问题:目标从哪来,超时多久,失败了下一步做什么。回答不出来的脚本先不迁,等改造完再上平台,宁可放过也不要带病接入。

4.2 最小可用的作业编排模型:用 YAML 定义一次变更

作业编排是执行层的核心,但一开始不需要复杂的可视化拖拽。一个能被团队接受的作业编排模型,用 YAML 定义就够了,重点是让每一步都有明确的执行语义。下面是我常用的作业定义示例,场景是订单服务批量重启。

# order-service-restart.yaml —— 订单服务批量重启作业 id: order-service-restart # 作业唯一ID,用于审计和回滚关联 name: 订单服务批量重启 targets: source: cmdb # 执行目标必须从CMDB动态取 query: "app_code='order-service' and env='prod'" max: 20 # 最多20台,防止误扩 steps: - name: 摘流量 type: script command: "./scripts/drain.sh" timeout: 300 retry: 0 - name: 重启服务 type: script command: "./scripts/restart.sh" timeout: 600 retry: 2 # 重启允许重试2次 retry_interval: 30 on_failure: rollback # 失败进入回滚作业 - name: 健康检查 type: http_get url: "http://{{host}}:8080/health" timeout: 30 approve: required: true users: ["ops_leader", "service_dev"] rollback: order-service-rollback # 关联的回滚作业ID

这份 YAML 的核心是五个参数:targets 不写 IP 而是写 CMDB 查询条件,执行时动态解析,资源变化后作业定义不用改;max 限制单批次最大执行机器数,防止查询条件写宽引发失控;retry 只重试当前步骤,而不是把整个作业重跑一遍,避免前面步骤的副作用叠加;on_failure 把失败流转到显式指定的动作,而不是静默中断;approve 把审批嵌进作业定义,没有审批单执行引擎不放行。这个小模型已经能覆盖大部分发布、重启、扩容场景,后续再逐步加灰度批次和并发控制。

4.3 从编排到闭环:触发、结果回写、通知与回滚

作业编排不能只停留在"能执行",要形成闭环。常见的触发源有三种:定时触发、告警触发、人工触发。定时巡检是最容易编排化的场景,与其写一个又一个巡检脚本,不如做成参数化探针,每天从 CMDB 拉目标列表,执行同样的探测逻辑。

# daily_probe.py —— 每天从CMDB取实例列表做基础探活,结果回写 from cmdb_client import fetch_instances, write_status for ins in fetch_instances(env="prod", kind="compute"): ok = ping_icmp(ins["ip"], timeout=3) and check_ssh_port(ins["ip"]) write_status(ins["instance_key"], "up" if ok else "down")

这段代码说明的是一个设计习惯:巡检不再是"新写一个脚本",而是"新配置一个探针"。探针的筛选条件来自 CMDB,超时和探测方式来自平台配置,结果统一回写,这样脚本数量不会随巡检项增长而失控。闭环的另一半是执行结果要回写:作业执行完,更新 CMDB 里的服务状态、通知变更关联人、把执行日志归档。出了故障要能一键关联到变更单,审计时能说清楚谁在什么时间对哪批机器做了什么,这才算把黑匣子真正打开了。

5. 建设避坑指南:五个让平台空转的隐蔽问题

自动化运维平台建设最大的风险往往不是技术选型,而是上线后的空转。功能都开发了、作业都能跑了,但没人敢用、没人维护,最后回到手工操作。这一章是我这几年踩坑最集中的五个问题,每一条都按"现象、原因、解决"来讲,希望能帮读者少走弯路。

5.1 CMDB 数据不准:平台上线第一天就没人信

现象:平台刚上线时数据是导入的,看起来挺完整。跑了两个月后,作业列表里开始出现已经下线的机器,发版时按 CMDB 选目标主机,漏掉了新扩容的节点。运维逐渐不相信平台里的资源清单,每次执行前还要自己登服务器核对一遍,自动化变成了"半自动"。

原因:CMDB 初始化靠一次性导入 Excel,导入之后没有自动发现管道,也没有周期性对账。配置变更后没有人从源头更新,字段慢慢失真。

解决:把平台建设的上线顺序强制调整为"自动发现 → 对账 → 业务接入"。CMDB 的发现率和准确率连续两周达标后,才允许接低危作业;高危作业再加一道执行前校验:目标主机必须能从 CMDB 实时查到,查不到的机器直接拒绝执行并告警。数据不准不是 bug,是流程缺失,自动化平台团队不能替业务方维护数据,只能把缺失暴露出来。

5.2 作业步骤没有幂等:重试一次和重试三次结果不一样

现象:某次批量重启服务时网络超时,平台按配置重试了两次,结果出现配置重复写入、发布包重复解压、数据修复脚本重复扣减的情况。执行三次和执行一次的结果完全不同,故障反而被放大。

原因:脚本都是按"执行一次"写的,重试时没有判断当前状态。重启脚本只负责重启,不校验服务是否已经健康;配置下发脚本只负责追加,不判断是否已经存在。

解决:给每个关键步骤定义幂等语义。能查前置状态就先查,写操作尽量改成覆盖或 upsert,确保重复执行结果一致;在作业编排里,对可重试步骤显式声明 retry 次数。需要注意,重试次数不是越大越好,重试前必须想清楚这个动作会不会叠加副作用,像扣减类、追加类脚本重试风险极高,retry 设 0 更稳妥。

5.3 告警自愈触发面过宽:故障没处理完,先把平台打垮

现象:磁盘使用率告警一触发,自动清理任务被反复拉起,同一批机器被高频执行,告警系统在风暴中先崩溃。事后复盘,很多自愈动作都是无效的,因为告警条件只看了单指标。

原因:触发条件只写了"指标超过阈值",没有考虑持续时间、发生频率、执行冷却期和故障域范围。任何一条瞬时抖动告警都能拉起自愈作业,平台变成了新的告警制造器。

解决:给自愈动作加三段约束。第一,告警持续 N 分钟才触发,过滤瞬时抖动;第二,同类自愈动作必须有冷却期,同一个目标机器在冷却期内不允许重复触发;第三,单次动作范围限制在故障域内。自愈失败不要无限重试,执行两次不成功就直接转人工工单并提升优先级。我一般要求自愈动作全部留痕,每周复盘一次有效触发率和误触发率。

5.4 审批流程放在平台外面:自动化跑完了,流程记录还在补

现象:作业平台执行很快,但审批还在外部流程系统里签。平台执行完成后,再人工把执行结果补录到工单里。等到审计检查时,发现审批时间和实际执行时间对不上,操作记录和时间线是断裂的。

原因:上线时为了快速见效,把审批留在外部,平台只做了"执行通道"。审批流和作业流没有对接,变成了两本账。

解决:把审批节点内嵌到作业模板里,变更单号作为作业的输入参数,平台自动留三段记录:执行前快照、审批人及审批时间、执行结果。这里注意不要设双重审批,外部审一遍、平台里再审一遍,自动化带来的效率会被流程吃掉。正确做法是只保留一条审批链,平台作为唯一执行入口。

5.5 巡检脚本只增不减:三个月后没人说得清哪些在跑

现象:平台上线三个月,作业数量涨得很快。大部分是巡检类脚本,部分巡检项已经失效,最初的编写人离职后没人敢停,因为说不清有没有其他流程依赖它。

原因:缺少脚本生命周期管理。每条巡检都写成一次性脚本,没有归并成探针配置,没有指定负责人,也没有设置有效性周期。

解决:新建作业时必须填写 owner、触发说明、有效期;每季度做一次作业清单评审,对长期未触发、无 owner、重复覆盖的作业标记废弃并下线。高频巡检尽量收敛成参数化探针而不是新脚本,探针的筛选条件和探测配置由平台管,数量受控。失控的脚本集合才是平台里最大的技术债,比任何组件缺陷都难还。

提示:每次上线新作业前问一句"三个月后这个人还在吗、这条作业还有人解释得清吗",能拦下至少一半的无效脚本。

6. 拿一条链路试运行:验证自动化平台到底值不值得继续投入

平台建设最忌讳全面铺开、遍地开花。更稳妥的做法是选一条高频且可控的链路先试点,用数据证明它比人工更省心,再横向推广。我一般建议从"核心服务标准重启"或"常规应用发布"开始,这类操作每周都在发生、步骤明确、失败影响可回滚,最适合作为自动化平台的第一块试验田。

试点阶段验证目标核心指标达到什么程度算通过
链路试点平台能替代手工作业成功率、平均执行时长连续两周成功率不低于 99%,时长不高于人工
批量推广平台能管住规模核心作业覆盖率、并发稳定性核心作业覆盖率不低于 80%,并发执行无失败
持续运营数据与脚本不腐化CMDB 准确率、作业废置率准确率不低于 95%,季度废置评审按时执行

第一个阶段要记录上线前两周的人工操作基线,没有基线就谈不上"比人工快"。指标不只看速度,还要看失败率:人工操作本身也会出错,自动化能不能把失败率降下来才是核心价值。试点通过后,批量推广时注意单批次控制,别把新场景一次性全量放开,一批一批接。

我给自己定的运营习惯是每个月翻一次作业清单,专门找那些没有 owner、没有触发记录、说不清用途的作业,标记后给负责人一周时间解释,解释不了就下线。这个动作比任何架构评审都管用,它逼着团队把平台当成一个持续维护的产品,而不是一次性的工程项目。另外一定要指定一位"平台刹车人",紧急情况下能一键停掉所有自动化动作,这个人平时不干预,但要有权限,这是平台安全感的最后一道保险。

我自己吃过最大的亏,是把建设进度压在平台功能数量上,而不是压在一两条链路上跑通。后来每次都先找一条高频链路,先让这条链路比人工更省心,再去铺下一个场景。这样管理者看得到结果,运维也愿意用。希望这套思路帮到你。

本文还有配套的精品资源,点击获取

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

从焦虑到从容:构建沉稳、成熟、成长的心智操作系统

1. 从焦虑到从容:重新理解这三个词前两年接手一个从未做过的项目,方案被毙掉三次,团队里有人开始私下抱怨方向不对,我一边要应付上面的追问,一边要安抚下面的情绪,整个人像被拧紧的发条。某天晚上坐在工位上…

作者头像 李华
网站建设 2026/10/14 5:07:44

技术人职场危机与破局生存指南

1. 职场危机背后的现实困境那天下午,我正在茶水间冲咖啡时,突然听到会议室传来压抑的啜泣声。透过磨砂玻璃,隐约看到技术总监老张佝偻的背影。后来才知道,这位服务公司8年的老员工,在接到裁员通知的瞬间情绪崩溃——他…

作者头像 李华
网站建设 2026/10/14 5:07:22

Spark Client与Cluster模式本质区别及生产选型指南

1. 为什么必须搞懂Client和Cluster模式——一个被低估的生产级决策点Spark应用上线前,我见过太多团队在提交命令时随手敲下--deploy-mode client,等集群跑起来才发现Driver进程卡在开发机上,内存爆了、网络断了、日志全丢了。也见过另一些人死…

作者头像 李华
网站建设 2026/10/14 5:06:50

LegendOfMir3_Src本地编译指南:C++传奇2服务端客户端源码实战

简介:本资源为《传奇2》客户端与服务器端完整源码工程,面向游戏开发初学者、网络编程学习者及系统开源研究者,聚焦MMORPG底层架构解析与经典通信机制复盘。包内共494个文件,以187个C源文件(cpp)和160个头文…

作者头像 李华
网站建设 2026/10/14 5:06:32

AI Studio在线GPU跑TensorFlow:显存与训练调优实践

说实话,我已经在AI Studio上把好几个TensorFlow项目从CPU环境换到了GPU环境。踩坑不少,但跑通之后是真的舒服,特别是碰到本地显卡显存不够、驱动各种报错的时候,在线GPU环境几乎是一个“打开就能用”的答案。如果你也想在AI Studi…

作者头像 李华
网站建设 2026/10/14 5:06:11

10分钟AI求助,正在悄悄侵蚀你坚持困难事物的能力

标题说得有点吓人——“用AI10分钟,就会侵蚀你坚持困难事物的能力”。我第一次看到这个说法时觉得夸大其词,但认真复盘了自己过去一年的使用习惯之后,我承认这个现象是真实存在的,而且它比“AI让人变笨”这种烂大街的结论要精准得…

作者头像 李华