news 2026/9/7 16:59:21

AI Skills实战:腾讯云上打造生产级Agent工具链

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI Skills实战:腾讯云上打造生产级Agent工具链

做 Agent 开发这几年,我最大的感受是:跑通一个 demo 一天就够了,但把一个 Agent 真正养到“能放手干活”,靠的是把模型、工具、记忆、编排这些环节里的每一个细节都抠到位。尤其是“工具”这一环,很多人一开始只是把函数硬塞给大模型,结果就是调用乱、报错多、维护成本高到怀疑人生。后来我认真走了一遍腾讯云 AI Skills 的实践路线,才找到一套能复用、能工程化、能上生产的做法,也终于理解了为什么“技能”这个抽象层级在 Agent 开发里这么重要。

这篇文章不聊虚的,我会拿我自己做的一个 Agent 项目当主线,把 AI Skills 到底是个什么东西、和 Agent 是什么关系、腾讯云上怎么部署、Skill 怎么设计怎么调优、路上会踩到哪些坑,全部过一遍。正在学 Agent 开发的朋友,或者已经在写 Agent 但总觉得缺一套标准做法的团队,这篇文章应该能给你一个可以直接参考的落地方案。

1. AI Skills 是什么?它和 Agent 的关系得先掰扯清楚

1.1 Agent 不只是大模型,也不只是聊天机器人

很多人把 Agent 理解成“接了大模型的聊天窗口”,这是最大的误区。聊天机器人的特点是“你说一句我回一句”,本质上是一个文本交互界面;而 Agent 的核心是“行动”——它需要理解一个任务目标,拆解成步骤,主动决定调用哪些外部能力去完成任务,并且在执行过程中处理意外情况。

一个真正能用的 Agent,在我看来至少要包含四个部分:

  • 大脑:也就是大模型,负责理解意图、规划步骤、生成输出
  • 手脚:也就是工具或技能,负责执行具体动作,比如查数据、调 API、发消息
  • 记性:也就是记忆系统,负责跨会话保存用户偏好、历史结果、中间状态
  • 编排逻辑:负责决定什么时候调用哪个工具、怎么处理工具返回的结果、如何从错误中恢复

这四个部分缺一不可。很多人做 Agent 总觉得“模型不够聪明”,其实是把手脚和记性做废了。大模型再强,如果它连你内部系统的数据都拿不到、连一个邮件都发不出去,那它就只是个高级聊天框,不叫 Agent。

1.2 AI Skills 就是 Agent 的“标准插头”

AI Skills(技能)解决的是“手脚”这一环的标准化问题。它把一个个离散的能力——查天气、查订单、写文件、调用企业内部接口、读写数据库——封装成带有描述、参数定义、执行逻辑的标准单元。

这里有一个很关键的认知:大模型不是程序员,它不会去看你的源码,它只能通过你这个 Skill 的“说明书”来判断要不要调用、怎么调用。说明书就是 Skill 的描述信息和参数定义。也就是说,Skill 的设计质量,直接决定了 Agent 的调用准确率。

我用一个生活化的比喻。Skill 就像带标准插头的电器:插头规格是参数协议,电器表面的说明标签是功能描述,内部电路是执行逻辑。Agent 就是那个“智能插座”,它不需要知道电器内部怎么造,只需要在合适的场景把插头插上,坏的时候能报错就行。腾讯云 AI Skills 的实践,本质上就是在帮你把“电器”一个个造标准、造好,让 Agent 这个“插座”能即插即用。

1.3 为什么我选择在腾讯云上落地 Skills

其实 Skill 在本地也能写,甚至用一个 Python 脚本就能跑通。但一旦进入真正的项目阶段,事情就会变得复杂:多个 Skill 需要统一的鉴权、需要版本管理、需要灰度发布、需要监控告警、需要应对突发流量。这些靠一台服务器手动维护,基本是不可行的。

腾讯云这边的好处是配套比较全:云函数(SCF)可以做 Skill 的执行载体,API 网关做统一入口和鉴权限流,对象存储(COS)放静态资源和中间文件,向量数据库放知识库内容,整个链路都在一个账号体系里,权限和安全策略可以集中管控。这也是我最后选择它的核心原因——不是因为它花哨,而是因为我可以把精力放在 Agent 逻辑本身,而不是花大量时间搭基础设施。

2. 从零设计一套 Skill 方案:架构、接口与运行载体

2.1 整体架构怎么摆

我实际落地的架构分成了五层,每一层职责单一、互不干扰:

  • 管理面:负责 Skill 的注册、版本管理、发布、权限配置,通常走云控制台或者 CI/CD 脚本
  • 执行面:每个 Skill 对应一个云函数实例,接收 HTTP 请求,执行具体业务逻辑
  • 接入面:API 网关统一暴露 HTTP 入口,做请求鉴权、参数校验、限流
  • 编排面:Agent 运行层,大模型根据用户意图和 Skill 描述,决定调用哪个 Skill、传什么参数
  • 数据面:对象存储、数据库、向量数据库等,给 Skill 提供数据读写能力

这个分层的好处是每一层都能独立扩展。比如某个 Skill 突然流量暴涨,我只需要单独调整那个云函数的并发配置,不会影响其他 Skill。再比如要增加新能力,我只需要新增一个 Skill 和对应的云函数,不需要改动 Agent 主逻辑。

2.2 Skill 的标准接口长什么样

我给所有 Skill 定了一个统一协议,每个 Skill 都包含五个字段:

字段说明示例
name唯一标识,通常用英文小写加下划线query_orders
description功能描述,说清楚干什么、什么时候用根据用户ID查询订单列表
parametersJSON Schema 格式的参数定义user_id、status、page
handler实际执行函数入口index.handler
output标准化的返回结构{ success, data, message }

这里我特别强调 description 的写法。很多人的 Skill 描述就一句话“查询订单”,这远远不够。大模型面对几十个 Skill 的时候,它需要清楚知道“这个 Skill 在什么场景下用、需要哪些参数、返回什么”。描述写得越具体,模型选对的概率就越高。我后面会专门讲描述语的写法。

parameters 我建议统一用 JSON Schema,一方面它可以被大模型直接解析成函数调用的参数结构,另一方面也能在 API 网关层做参数校验。required 字段必须明确声明哪些参数是必填的,否则模型可能会漏传。

2.3 为什么我用云函数而不是常驻服务器

刚开始我试过用一台云服务器常驻跑 Skill 服务,踩了不少坑。首先是弹性问题:高峰期并发一起来,手动扩容根本来不及;空闲时段又白白占着资源。其次是部署问题:每次更新 Skill 要登录服务器、拉代码、重启进程,时间一长就非常痛苦。还有权限问题:所有 Skill 混在一个服务器进程里,权限没法细分到函数级别。

换成云函数之后,三个痛点都解决了:按调用次数计费,空闲不花钱;并发伸缩交给平台,不用操心;每个 Skill 独立部署独立版本,控制台一键回滚。特别是配合 API 网关做自定义域名后,对外暴露的地址也能固定下来,Agent 侧无需频繁变更配置。如果你已经有容器化经验,也可以把 Skill 打成镜像推到腾讯云容器镜像服务,用容器方式来承载,更灵活,但运维复杂度会高一些。

3. 实操全过程:从一个查询 Skill 到一套完整 Agent 能力

3.1 环境准备:账号、服务和本地工具

这一步属于基建,花一次时间,后面一直受益。我当时的步骤是:

  1. 注册腾讯云账号并完成实名认证,这是开通云服务的必要条件
  2. 开通云函数 SCF、API 网关、对象存储 COS,这三个是按量付费的,用量不大时成本很低
  3. 如果需要知识库能力,再开通向量数据库
  4. 本地安装 Serverless 命令行工具,并配置好账号密钥,后面可以一键部署

密钥管理我建议单独用一个只读权限的子账号访问密钥,不要直接用主账号密钥,避免泄露后产生不可控风险。云函数控制台也可以直接编辑器里写代码,小规模调试够用,但正式项目建议还是走代码仓库加命令行部署的流程。

3.2 写第一个 Skill:查询订单

我拿“查询订单”来做示范,因为它是很典型的“读数据”型 Skill,几乎每个业务都会用到。

先定义 Skill 的协议文件,也就是给大模型看的说明书:

{ "name": "query_orders", "description": "根据用户ID查询订单列表,返回订单号、商品名称、金额、状态和下单时间。当用户询问'我的订单''买了什么''发货没'等问题时使用。支持按订单状态筛选。", "parameters": { "type": "object", "properties": { "user_id": { "type": "string", "description": "用户唯一ID,通常从登录态或会话上下文中获取" }, "status": { "type": "string", "enum": ["pending", "paid", "shipped", "completed"], "description": "订单状态筛选条件,不传则返回全部状态" } }, "required": ["user_id"] } }

然后写云函数的执行逻辑,我用的是 Python 运行时:

import json def handler(event, context): # 从 HTTP 请求中解析参数 body = json.loads(event.get("body", "{}")) user_id = body.get("user_id", "") status = body.get("status") if not user_id: return format_response(400, "user_id is required") # 这里换成实际的业务查询逻辑 orders = query_orders_from_db(user_id=user_id, status=status) return format_response(200, { "order_count": len(orders), "orders": orders }) def format_response(code, data): return { "statusCode": code, "headers": {"Content-Type": "application/json"}, "body": json.dumps({"success": code == 200, "data": data}, ensure_ascii=False) }

部署命令很简单:

scf deploy --function-name query-orders --runtime Python3.10 \ --entry-point index.handler \ --trigger http

部署完成后,会得到一个 HTTP 网关地址。这个地址就是 Skill 被外部调用的入口。这里有一个细节:云函数的超时时间要单独检查,默认值如果不改,遇到要查大表或调外部服务的 Skill 很容易超时,我习惯按业务耗时把超时设到 10 秒到 30 秒,但也不宜太长,否则会拖慢整个 Agent 的响应。

3.3 把 Skill 接入 Agent 编排层

Skill 部署好只是第一步,关键是把 Skill 的协议信息注册到 Agent 的编排层里去。这一步有两种常见做法:

  • 第一种:在 Agent 代码里维护一份 Skills 清单,每次启动时加载所有 Skill 的描述信息,组装成大模型工具调用的格式
  • 第二种:通过平台控制台把 Skill 挂载到某个 Agent 上,运行时由编排层自动拉取

我推荐第一种,因为可以走代码仓库做版本管理。具体流程是:把每个 Skill 的 JSON 协议文件放到一个 skills 目录下,Agent 启动时扫描目录,把所有协议转换成统一的工具列表,再塞给大模型。

import json import os def load_skills(skills_dir="skills"): skills = [] for filename in os.listdir(skills_dir): if filename.endswith(".json"): with open(os.path.join(skills_dir, filename)) as f: skill = json.load(f) skills.append({ "name": skill["name"], "description": skill["description"], "parameters": skill["parameters"] }) return skills

到这里,Agent 就已经“认识”这个 Skill 了。用户说“帮我看看我最近买的蓝牙耳机发货了没”,大模型会先解析出 user_id,判断需要用 query_orders,再带上 status 参数发起调用,拿到结果后组织成自然语言回复给用户。整套链路跑通,才算是一个最小的 Agent。

3.4 从单 Skill 到多 Skill:编排与组合

一个全能 Agent 肯定不止一个 Skill。我在项目里陆续加了好几个:customer_profile(查用户画像)、send_message(发消息通知)、knowledge_retrieval(从企业内部知识库检索)、file_export(生成报表导出文件)。

多 Skill 之后,最需要注意的问题是“Skill 冲突”。比如用户问“帮我查一下近期的数据”,到底该调订单查询还是报表导出?这时候光靠描述匹配不够,还需要在编排层做“意图分类”前置处理,或者给每个 Skill 加上触发条件的说明,减少模型选错的可能。

我的做法是给 Skill 描述加上“什么时候用”和“什么时候不用”两个部分。比如:

description: 生成订单数据报表并导出为Excel文件。当用户要求"导出报表""下载数据""生成Excel"时使用。 不要用于:仅查询订单明细的场景,查询请使用 query_orders。

这看起来只是描述文字上的功夫,实际效果却非常明显,模型选错 Skill 的概率能降一个量级。这个细节是我在实际项目里反复调出来的,强烈建议你也试试。

4. 核心细节复盘:描述语、参数设计和成本控制

4.1 描述语怎么写才有效

Skill 描述是写给大模型看的,不是写给文档审查员看的。我总结了一套自己的写法模板:

  • 第一句:一句话说清楚这个 Skill 是干什么的
  • 第二句:列举典型触发场景,用“当用户……时”的句式
  • 第三句:说明参数之间的依赖关系
  • 第四句:补充“什么时候不要用”的反例

举一个我踩过坑的例子。最开始我写“query_orders”的描述就只有一句“查询订单”。结果用户说“我上个月买了些什么”,模型要么不调用 Skill,直接瞎编一个答案,要么调了但把状态参数传错。后来我把描述改成“根据用户ID查询订单列表,返回订单号、商品名称、金额、状态和下单时间,当用户询问‘我的订单’‘买了什么’‘发货没’等问题时使用”,准确率一下就上来了。

这里给一个小技巧:你可以把多个相似 Skill 的描述放在一起,对比看看模型会不会区分。如果你自己读完都觉得“这两个好像都能用”,那模型大概率也会选错。这个时候就该调整边界描述,或者干脆合并成一个 Skill,在参数里加一个 type 字段来做内部路由。

4.2 参数设计的边界问题

参数设计里最常见的问题是“过度设计”和“设计不足”。

过度设计指的是给 Skill 塞了一堆看似有用、实际模型根本不会填的参数。比如一个查询接口你加了 sort_order、sort_field、timezone、include_archived 这些,模型每轮都要纠结怎么传,不仅浪费 token,还容易传错。我的原则是:只保留模型能从用户对话中直接提取的参数,以及业务上必填的参数。内部默认值能解决的,就不要让模型操心。

设计不足则是指缺了关键参数。比如订单查询忘了把分页参数传下去,用户说“看看我全部订单”,结果只返回前十条,这体验就很差。我会在参数说明里写清楚默认值和范围,例如:

"page": { "type": "integer", "description": "页码,从1开始,默认1", "minimum": 1 }

还有一个不太容易被注意的点:参数值尽量用枚举约束,尤其是状态、类型这类有限集合的字段。一旦你把 enum 列出来,模型就不会瞎写一个“已完成啦啦啦”之类的值进去,下游代码也能少做很多防御性校验。

4.3 上下文与 Token 成本控制

Agent 调用 Skill 的过程,本质上会产生多轮上下文:系统 Prompt、用户输入、Skill 列表描述、工具调用参数、工具返回结果、模型最终回复。这些都会占用 Token,成本曲线的上升速度往往超出预期。

我的控制策略有三条:

  • Skill 描述只保留必要的信息,不要写长篇业务背景
  • 工具返回结果要“瘦身”,在 Skill 内部把字段裁剪好,只返回大模型组织答案需要的最小数据集,不要把整张表倒出来
  • 多轮对话里,历史消息做摘要或滑动窗口,不无限堆积

其中第二条最关键。我在做一个报表导出 Skill 时,最初把查询到的几千行明细全部返回给模型,结果不仅 Token 消耗爆炸,模型还会被大量重复数据干扰,回答质量反而变差。后来我改成只在返回里放汇总统计和前五十条明细,需要完整文件时走另一个文件下载通道,效果好了非常多。

成本这块我也建议做好监控。腾讯云控制台能看到云函数的调用次数和资源用量,结合 API 网关的日志,基本能定位到是哪个 Skill 消耗最多。针对热点 Skill,可以做结果缓存,同样的查询在短时间内直接命中缓存,不给模型和大数据层重复加压。

5. 常见报错与排查技巧实录

5.1 调用超时:先分三类再定位

Agent 调用 Skill 报超时,是我遇到最多的一个问题。我习惯把超时归成三类:第一类是 Skill 本身执行慢,比如数据库没有索引、外部服务响应慢;第二类是入参格式不对,云函数解析失败,导致请求在网关层就卡住;第三类是模型侧交互超时,大模型在等待 Skill 返回时自己先断了。

排查路径也很清晰:先看 API 网关日志,确认请求有没有到云函数;再看云函数日志,确认函数有没有正常返回;最后看 Agent 编排层的日志,确认模型是收到了结果但没处理,还是根本没等到结果。有一次我们查了半天,最后发现是数据库连接池打满了,典型的执行慢问题,加索引加连接池就解决了。

注意:云函数默认超时时间可能只有几秒,如果你调外部 API 或者查大表,第一步就把超时时间调到一个合理的业务阈值,同时把外部依赖设计成可中断、可重试的结构。

5.2 权限与网络配置引发的神秘报错

这类问题最让人头疼的地方在于“报错信息不够直白”。有一次我部署了一个新的 Skill,单独用测试工具请求是完全正常的,但让 Agent 去调用就偶尔报错。查了半天发现是 API 网关鉴权配置的问题——新创建的网关触发器没有继承原先的鉴权策略,部分请求被网关直接拦截了。

另一个容易踩的坑是云函数访问其他云资源的授权。函数默认是没有权限操作你的数据库或对象存储的,需要在控制台给函数绑定对应的角色,或者配置好访问密钥。权限配得不好,轻则调用失败,重则在多环境共用账号时互相影响。

我的经验是:先收紧权限,再逐步放开。给每个 Skill 分配最小权限,只允许它访问自己业务需要的数据和服务。这样即使某一个 Skill 被异常调用,损失也被控制在一个小范围内。功能上线前的“权限自查表”我建议一定要走一遍:这个函数能访问哪些资源、能读写哪些桶、能执行哪些数据库操作,逐项核对。

5.3 模型反复选错 Skill:问题往往出在说明书上

如果你发现大模型在一个问题上反复调用错误的 Skill,或者干脆不调用,十有八九不是模型太笨,而是你的 Skill 描述和参数设计有问题。我整理了一张速查表:

现象可能原因解决办法
模型不调用任何 Skill描述太笼统,模型没意识到该用增加典型触发场景的描述
模型总是选错 Skill多个 Skill 描述边界不清加“不要用于……”的反例,或合并 Skill
参数传错、漏传参数缺默认值、required 标注不准仔细核对 JSON Schema,加枚举约束
调用后结果答非所问返回结构里缺少模型需要的字段精简返回字段,突出关键信息

有一次我开发一个“文档检索”Skill,接入后模型经常在用户问技术问题时跑去调“生成日报”的 Skill,原因就是两个 Skill 的描述里都出现了“总结”“信息提取”这样的词。我把后者的描述改成“在用户明确要求生成日报时使用”,并且加了“不要用于普通信息查询”,问题立刻消失。这个排查思路,比盲目换大模型模型参数要有效得多。

5.4 数据一致性:缓存和异步别忘了清理

当你的 Skill 开始加缓存、加异步任务之后,还会遇到一类隐蔽问题:数据不一致。比如用户先发起一个报表生成任务(异步),然后立刻问“报表好了吗”,Agent 如果没做好状态查询,就会给一个错误的回复。

我的处理方式是:所有异步任务统一走任务表,Skill 对外暴露两个接口——一个用于创建任务,一个用于查询任务状态。Agent 侧通过状态轮询判断任务是否完成。这个模式虽然简单,但能避免非常多的“看似玄学”的问题。记住,Agent 的能力边界中,任务编排和状态管理是很重要的一环,别让它都靠大模型“猜”。

6. 把 Agent 养得更全能的几个心得

6.1 记忆不是无限堆对话记录

很多人在做“记忆”时容易陷入一个误区:把所有对话历史都塞给模型。实际上,记忆应该分三层:短期记忆(当前会话的上下文)、长期记忆(跨会话的偏好、关键结论)、外部记忆(企业知识库、文档)。短期记忆可以靠滑动窗口和摘要,长期记忆建议结构化存储,比如用向量数据库做相似度检索,而不是全文重放。

我在项目里的做法是:每次会话结束,让模型生成一条“会话摘要”,把用户的偏好、未完成事项、重要结论提取出来,写入长期记忆。下一轮对话开始前,先检索最相关的记忆条目,再拼接进 Prompt。这样既控制了上下文长度,又让 Agent 有了“连续感”,比无限堆历史聊天记录靠谱得多。

6.2 安全边界和权限最小化

Agent 越全能,越要重视安全。给模型调用所有内部系统的能力,等于给所有潜在的越权操作开了门。我的几个原则:

  • Skill 内部必须做二次校验,不能完全相信模型传过来的参数
  • 涉及敏感操作的 Skill(发消息、删数据、转账),必须有用户确认环节
  • 云函数、存储桶、数据库的访问权限全部走最小化授权

特别是“涉及敏感操作的确认环节”,很多开发者会忽略。模型判断用户意图再完美,也架不住 Prompt 注入或者用户故意诱导。比如用户说“请帮我删除所有订单”,如果 Agent 直接调用删除 Skill,后果不堪设想。我在发送类、删除类 Skill 里都加了“确认描述”,让模型先回显操作内容再执行,这种护栏短期看是多一轮交互,长期看能救你无数次。

6.3 从 Skill 到 Skill 生态

最后想聊聊演进。刚开始你只需要三五个 Skill,但随着业务深入,你会发现 Skill 之间常常有公共逻辑:鉴权、参数校验、日志、错误码、缓存。这时候就要把公共逻辑抽出来做成统一的 SDK 或中间件,而不是每个 Skill 各写一套。我自己把常见的格式化和错误处理封装成了一个公共包,每个 Skill 只写业务逻辑,代码量立刻降下来了。

再往后,Skill 的粒度还会面临调整。有些 Skill 太粗,一个函数里塞了十几个分支,模型调用参数复杂到没人看得懂;有些太细,三个能力明明可以合并成一个。我的建议是:当你发现一个 Skill 的描述超过两百字还说不清楚边界时,就该拆了;当你发现两个 Skill 经常被同时调用时,就该合并了。这个“拆”与“合”的动态调整,是 Agent 项目长期演进里最耗精力、也最体现功底的部分。

我个人在实际操作中的体会是:Agent 开发真正的门槛,不在于模型选得多新、框架用得多炫,而在于你把“工具能力”这一层有没有做扎实。腾讯云 AI Skills 这套思路给我最大的帮助,不是某个具体功能,而是强迫我用工程化的方式去思考每一个能力单元——定义接口、写好说明书、管好权限、盯住成本、记录日志。照着这个思路把一个一个 Skill 打磨好,你的 Agent 自然会从“能跑 demo”慢慢变成“能顶事”。这套方法我已经在自己的项目里反复用了很久,希望对正在折腾 Agent 的你也有帮助。

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

gitru:用 Rust 打造零依赖的 Git 提交信息校验工具

任何一个带过团队、搞过代码评审的人,应该都经历过那种时刻:打开git log,满眼都是“fix bug”“update”“修改”“提交一下”……想定位某个功能是哪次提交引入的,恨不得把作者拽过来当面问。提交信息这件事,听起来特…

作者头像 李华
网站建设 2026/9/7 16:58:47

计算机网络期末复习与实战:从分层模型到路由配置全攻略

1. 期末的计算机网络,到底拼的是“记得住”还是“想得通”每年到了期末,总有一批人被计算机网络这门课折磨得夜不能寐。背了一堆端口号、协议名称、报文格式,走进考场看到一道“从输入URL到页面显示经历了什么”就被打回原形。原因很简单&…

作者头像 李华
网站建设 2026/9/7 16:56:03

Buzz 音频转录工具:在本地离线完成 Whisper 转录与翻译

Buzz 音频转录工具:在本地离线完成 Whisper 转录与翻译 【免费下载链接】buzz Buzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper. 项目地址: https://gitcode.com/GitHub_Trending/buz/buzz Buzz 是一…

作者头像 李华
网站建设 2026/9/7 16:56:01

C++11 constexpr 完全指南:从编译期计算到各版本演进与避坑

C11 里让我觉得“原来还能这样”的特性不少,constexpr 绝对排得上号。它出现得很安静,不过是在函数或者变量前面多了一个修饰词,但效果相当于给编译器开了一条“提前把结果算好”的高速通道。我第一次正儿八经用它,是为了给一个信…

作者头像 李华
网站建设 2026/9/7 16:55:39

SWIOTLB深度解析:从DMA兜底到机密计算安全边界

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 16:54:57

Linux系统信息查看全攻略:跨发行版命令详解与实战

入行这么多年,我接触过的服务器没有一千也有八百台,从最早的物理机到后来的云主机,从 CentOS 6 到现在的 Ubuntu 24.04、Debian 12,每次接手一台新机器,第一件事永远是同一件:把系统信息摸清楚。这个问题看…

作者头像 李华