找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1887

积分

0

好友

248

主题
发表于 2025-12-25 12:41:57 | 查看: 33| 回复: 0

当前,以OpenAI和Anthropic为代表的技术方向正推崇“Folder-as-a-Skill”(文件夹即技能)的理念。这意味着我们无需编写复杂的函数来定义AI工具,只需准备几份结构清晰的Markdown文档,就能为AI赋予感知与执行能力。

本文将通过一个具体的运维告警处理场景进行实战演示:构建一个DevOps智能体(Agent),仅需三个Markdown文件定义的技能,即可自动响应并解决“磁盘空间不足”的报警问题。

场景与需求

假设你作为运维负责人,收到一条报警指令:“服务器/var/log分区报警,空间不足,请立即排查并清理大文件!”

为让AI独立完成此任务,我们需要赋予它三项核心能力:

  1. 👀 巡检 (SystemCheck):查看磁盘使用情况,确认问题。
  2. 🔍 侦察 (FileScout):定位占用空间的大文件。
  3. 🧹 清理 (LogCleaner):压缩旧日志文件以释放空间。

下面,我们通过定义技能和组装引擎来实现这个AI运维智能体。

第一步:以Markdown文件定义技能

我们在项目skills/目录下创建三个.md文件,它们将构成智能体的“技能库”。

1. 巡检技能 (skills/system_check.md)

此技能用于系统健康检查,是确认问题的第一步。

# Skill: System Check
## Description
Use this skill to check disk usage and system health.
Always start with this when the user reports "space issues" or "disk full".

## Usage
- Check disk space: `df -h`

2. 侦察技能 (skills/file_scout.md)

此技能用于在指定目录中查找大文件,定位问题根源。

# Skill: File Scout
## Description
Use this skill to find large files in a specific directory.
Use this AFTER checking disk space to identify the culprit.

## Usage
- Find files larger than 100M: `find {directory} -type f -size +100M`
- List top 5 large files: `du -ah {directory} | sort -rh | head -n 5`

3. 清理技能 (skills/log_cleaner.md)

此技能专门用于压缩日志文件,安全释放磁盘空间。

# Skill: Log Cleaner
## Description
Use this skill to compress large log files to save space.
Only use this on `.log` files.

## Usage
- Compress a file: `gzip {filename}`

第二步:组装智能体引擎

我们需要一个简单的Python脚本来加载这些Markdown技能,并将其作为上下文提示(Prompt)提供给大语言模型(如DeepSeek或GPT-4),同时实现ReAct(思考-行动-观察)决策循环。

import os
import re
import subprocess
from openai import OpenAI

# 1. 加载所有Markdown技能文档
def load_skills():
    skills = []
    for filename in ["system_check.md", "file_scout.md", "log_cleaner.md"]:
        with open(f"skills/{filename}", "r", encoding="utf-8") as f:
            skills.append(f.read())
    return "\n\n".join(skills)

# 2. 初始化智能体客户端
client = OpenAI(api_key="sk-...", base_url="https://api.deepseek.com")
skills_docs = load_skills()

system_prompt = f"""
你是一个高级运维Agent。你拥有以下技能:
{skills_docs}

工作原则:
1. 像人类专家一样思考,一步步解决问题。
2. 要使用工具时,将Shell命令包裹在 ```bash ... ``` 中。
3. 必须根据上一步的执行结果(Observation)来决定下一步行动。
"""
history = [{"role": "system", "content": system_prompt}]

# 3. 运行ReAct决策循环
def run_agent(task):
    print(f"🚨 [任务]: {task}")
    history.append({"role": "user", "content": task})

    for i in range(5): # 最多执行5轮思考-行动循环
        # A. 思考 (Think)
        response = client.chat.completions.create(
            model="deepseek-chat", messages=history, temperature=0
        )
        ai_msg = response.choices[0].message.content
        print(f"\n🤖 [思考第 {i+1} 步]:\n{ai_msg}")
        history.append({"role": "assistant", "content": ai_msg})

        # B. 行动 (Act)
        cmd_match = re.search(r"```bash\n(.*?)\n```", ai_msg, re.DOTALL)
        if cmd_match:
            cmd = cmd_match.group(1).strip()
            print(f"⚡ [执行]: {cmd}")
            # 模拟执行命令并获取结果(真实环境应使用subprocess)
            observation = mock_execute(cmd)
            print(f"📄 [结果]: {observation}")

            # C. 观察 (Observe)
            history.append({"role": "user", "content": f"Command Output:\n{observation}"})
        else:
            print("\n✅ [完成]")
            break

# --- 模拟服务器执行环境 ---
def mock_execute(cmd):
    if "df -h" in cmd:
        return "Filesystem      Size  Used Avail Use% Mounted on\n/dev/sda1       50G   48G  2.0G  96% /var/log"
    if "find" in cmd or "du" in cmd:
        return "./access.log  5.0G\n./error.log   12.0G" # 发现超大日志文件
    if "gzip" in cmd:
        return "gzip: error.log replaced with error.log.gz"
    return "Command executed."

if __name__ == "__main__":
    run_agent("服务器 /var/log 空间报警,请排查并处理!")

第三步:运行与效果展示

执行上述脚本,AI智能体将如同一位经验丰富的运维工程师,自主调用技能,一步步解决问题。以下是模拟的控制台输出流程:

第一轮:巡检(调用 System Check)

🤖 AI思考:
“收到空间报警。首先,我需要确认/var/log的磁盘使用情况,看看是不是真的满了。使用System Check技能。”

df -h

⚡ 系统执行: df -h
📄 返回结果: /dev/sda1 ... 96% /var/log (确认磁盘使用率高达96%)

第二轮:侦察(调用 File Scout)

🤖 AI思考:
“磁盘使用率高达96%。接下来我需要找出是哪个文件占用了这么多空间。使用File Scout技能查找/var/log目录下的大文件。”

du -ah /var/log | sort -rh | head -n 5

⚡ 系统执行: du ...
📄 返回结果: 12.0G ./error.log (成功定位到占用12GB的error.log文件)

第三轮:清理(调用 Log Cleaner)

🤖 AI思考:
“发现error.log占用了12GB。为了释放空间,我应该对其进行压缩。使用Log Cleaner技能。”

gzip /var/log/error.log

⚡ 系统执行: gzip ...
📄 返回结果: gzip: error.log replaced with error.log.gz (文件压缩成功)

第四轮:复查与总结

🤖 AI思考:
“大文件已压缩。任务完成报告

  1. 排查:发现 /var/log 分区使用率96%。
  2. 定位:发现 error.log 文件占用12GB。
  3. 处理:已成功压缩该文件,空间已释放。”
    ✅ [任务完成]

总结

通过这个实战案例可以看到,我们并未编写复杂的if-else业务逻辑来硬编码处理流程。我们仅仅:

  1. 定义了三个独立的Markdown技能文档(即“做什么”)。
  2. 实现了一个通用的ReAct循环引擎(即“如何思考”)。

智能体依托大语言模型强大的逻辑推理与规划能力,自动完成了“问题分析 -> 技能选择 -> 命令执行 -> 结果评估”的完整闭环。这揭示了基于人工智能的下一代软件开发的核心理念:开发者专注于抽象和定义能力,而AI负责动态编排这些能力以解决复杂问题。




上一篇:AI时代如何辨别真相:生成式AI对认知结构与验证能力的冲击
下一篇:单点登录(SSO)原理与架构详解:基于CAS协议的企业级应用认证方案
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-10 09:11 , Processed in 0.455038 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表