当前,以OpenAI和Anthropic为代表的技术方向正推崇“Folder-as-a-Skill”(文件夹即技能)的理念。这意味着我们无需编写复杂的函数来定义AI工具,只需准备几份结构清晰的Markdown文档,就能为AI赋予感知与执行能力。
本文将通过一个具体的运维告警处理场景进行实战演示:构建一个DevOps智能体(Agent),仅需三个Markdown文件定义的技能,即可自动响应并解决“磁盘空间不足”的报警问题。
场景与需求
假设你作为运维负责人,收到一条报警指令:“服务器/var/log分区报警,空间不足,请立即排查并清理大文件!”
为让AI独立完成此任务,我们需要赋予它三项核心能力:
- 👀 巡检 (SystemCheck):查看磁盘使用情况,确认问题。
- 🔍 侦察 (FileScout):定位占用空间的大文件。
- 🧹 清理 (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思考:
“大文件已压缩。任务完成报告:
- 排查:发现 /var/log 分区使用率96%。
- 定位:发现 error.log 文件占用12GB。
- 处理:已成功压缩该文件,空间已释放。”
✅ [任务完成]
总结
通过这个实战案例可以看到,我们并未编写复杂的if-else业务逻辑来硬编码处理流程。我们仅仅:
- 定义了三个独立的Markdown技能文档(即“做什么”)。
- 实现了一个通用的ReAct循环引擎(即“如何思考”)。
智能体依托大语言模型强大的逻辑推理与规划能力,自动完成了“问题分析 -> 技能选择 -> 命令执行 -> 结果评估”的完整闭环。这揭示了基于人工智能的下一代软件开发的核心理念:开发者专注于抽象和定义能力,而AI负责动态编排这些能力以解决复杂问题。