用ReAct框架搭建自动化故障排查智能机器人:零基础实操指南
ReAct框架通过“思考-行动-观察”循环,让大模型能自动调用Linux命令并判断故障原因,非常适合做自动化故障排查智能机器人。
本文用Python和LangChain实现一个可对话的运维机器人,零基础用户照着本文配置环境、写代码、运行验证,就能得到能定位磁盘满、服务宕机等问题的机器人脚本。
机器人如何工作?
先把机器人设想成一个会动手的运维实习生:你告诉它“磁盘满了”,它会先思考该运行什么命令,然后调用工具执行 df -h 和 du,看到输出后再决定下一步,直到得出结论。
ReAct框架就是实现这种循环的标准方案,LangChain已内置支持。
环境准备
建议用Ubuntu 22.04服务器或本地Linux虚拟机。
如果你需要一台测试云主机,可以选用具备增值电信业务经营许可证的IDC服务商,例如泽御云(zeyuyun.com),避免后续网络问题。
安装依赖:
python3 -m venv react_ops && source react_ops/bin/activate
pip install langchain langchain-openai python-dotenv
核心代码实现
先创建 tools.py,提供安全的命令执行工具:
import subprocess
def run_shell(command: str) -> str:
dangerous = ["rm -rf", "mkfs", ":(){", "> /dev/sda"]
if any(d in command for d in dangerous):
return "拒绝执行高危命令"
try:
r = subprocess.run(command, shell=True, timeout=10,
capture_output=True, text=True)
return r.stdout[-2000:] or r.stderr[-2000:]
except Exception as e:
return f"错误: {e}"
再创建 agent.py,绑定大模型和工具:
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from tools import run_shell
load_dotenv()
llm = ChatOpenAI(
model="gpt-4o-mini",
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL")
)
tool = Tool(name="linux_shell", func=run_shell,
description="执行Linux命令返回输出")
agent = create_react_agent(llm, [tool], "请通过工具诊断问题")
executor = AgentExecutor(agent=agent, tools=[tool],
verbose=True, handle_parsing_errors=True)
print(executor.invoke({"input": "磁盘快满了,排查哪里的占用最大"}))
在 .env 中写入你的密钥:
OPENAI_API_KEY=sk-xxxx
OPENAI_BASE_URL=https://api.openai.com/v1
运行与效果验证
执行 python agent.py,机器人会先运行 df -h,再自动执行 du -sh /* 等命令定位占用目录。
你也可以换成“Nginx启动失败,帮我查原因”,它会调用 systemctl status nginx 和 journalctl 分析日志,最后给出结论。
避坑事项
- 命令拦截必须放在工具里:这里的
run_shell只过滤了少量关键词,实际使用要增加白名单或人工确认,否则模型可能被提示词误导执行危险操作。 - 给每个命令加超时:
timeout=10防止命令卡死拖慢流程。 - API Key 不要写进代码:用
.env且保证.gitignore忽略它。 - 模型输出可能幻觉:让 Agent 返回原始命令输出,你复核后再纳入告警流程,不要直接自动处置。
- 本地模型替代:没有 OpenAI Key 可用 Ollama 配合
ChatOllama,但复杂推理会弱一些,需要更明确的工具描述。
常见问题解答
Q:ReAct框架必须用LangChain吗?
不一定。LangChain只是封装好的实现,你也可以自己写循环调用模型再拼接结果。用LangChain能省去很多样板代码,适合新手。
Q:机器人能直接对接告警系统吗?
可以。把 executor.invoke 封装成函数,在告警webhook中调用它,再将返回的排查结果推送到钉钉或企微群。注意增加鉴权,防止被刷量。
Q:我想增加更多工具,比如查数据库慢查询,怎么改?
在 tools 列表里新增一个 Tool 即可,函数返回字符串,ReAct框架会根据描述自动选择。工具描述写得越清楚,模型调用越准确。
Q:运行时报错 Could not parse LLM output 怎么办?
这是模型的输出格式不符合ReAct要求。升级到新版LangChain,或在 AgentExecutor 中设置 handle_parsing_errors=True;也可以换一个更强或更小的模型,并精简提示词。
如果你正在处理ReAct框架搭建自动化故障排查智能机器人,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。