跳转至

AI Agent 架构设计 · 运维手册

适用场景:设计生产级 AI Agent 系统,支撑自动化运维、智能问答、工单处理等场景。


1. Agent 架构模式

1.1 ReAct 模式(推理-行动)

观察 → 思考 → 行动 → 观察 → 思考 → 行动 → ... → 结束

适用场景:单步决策、信息查询、简单诊断

# ReAct Agent
from langchain.agents import create_react_agent

agent = create_react_agent(
    llm=llm,
    tools=tools,
    prompt=react_prompt
)

# 执行流程
result = agent.invoke({
    "input": "Nginx 502 错误,请帮我诊断"
})

1.2 Plan-and-Execute 模式

规划阶段:分析问题 → 制定计划 → 分配工具
执行阶段:按步骤执行 → 检查结果 → 调整计划

适用场景:多步骤运维任务(部署、升级、故障恢复)

from langchain.agents import create_plan_executor_agent

agent = create_plan_executor_agent(
    llm=llm,
    tools=tools,
    planner=SequentialPlanner(),  # 顺序规划器
    executor=ConstrainedExecutor()  # 约束执行器
)

1.3 Multi-Agent 模式

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  Orchestrator│    │  Diagnostic │    │  Remediation │
│  (协调者)    │ ──▶ │  (诊断者)    │ ──▶ │  (修复者)    │
└─────────────┘     └─────────────┘     └─────────────┘
        ▲                    │                    │
        │                    ▼                    ▼
        │             ┌─────────────┐     ┌─────────────┐
        └──────────── │  Verifier   │ ◀── │  Monitor    │
                      │  (验证者)    │     │  (监控者)    │
                      └─────────────┘     └─────────────┘

适用场景:复杂运维流程(告警处理、变更管理)


2. Agent 核心组件

2.1 工具封装

from langchain.tools import Tool
import subprocess

def check_service(service: str) -> str:
    """检查服务状态"""
    result = subprocess.run(
        ["systemctl", "is-active", service],
        capture_output=True, text=True
    )
    return result.stdout.strip()

def query_metrics(metric: str) -> str:
    """查询指标"""
    import requests
    resp = requests.get(
        f"http://prometheus:9090/api/v1/query?query={metric}"
    )
    return resp.text

tools = [
    Tool(
        name="check_service",
        func=check_service,
        description="检查 Linux 服务状态"
    ),
    Tool(
        name="query_metrics",
        func=query_metrics,
        description="查询 Prometheus 指标"
    )
]

2.2 记忆系统

from langchain.memory import ChatMessageHistory
from langchain.vectorstores import Chroma

class AgentMemory:
    def __init__(self):
        self.short_term = {}  # 会话记忆
        self.long_term = Chroma(...)  # 持久化记忆

    def get_context(self, session_id: str, query: str) -> str:
        """获取上下文"""
        # 短期记忆
        history = self.short_term.get(session_id, [])

        # 长期记忆(向量检索)
        similar = self.long_term.similarity_search(query, k=3)

        return f"历史对话: {history}\n相关知识: {similar}"

2.3 错误处理

from tenacity import retry, wait_exponential, stop_after_attempt

@retry(
    wait=wait_exponential(multiplier=1, min=2, max=10),
    stop=stop_after_attempt(3),
    retry_if_exception_type(Exception)
)
def execute_with_retry(agent, input_text):
    """带重试的 Agent 执行"""
    return agent.invoke({"input": input_text})

3. 生产级 Agent 设计

3.1 告警处理 Agent

class AlertAgent:
    def __init__(self):
        self.llm = ChatOllama(model="qwen2.5:7b")
        self.tools = [check_service, query_metrics, read_logs]
        self.memory = AgentMemory()

    def process(self, alert: dict) -> dict:
        # 1. 检索历史相似告警
        context = self.memory.get_context(alert['session_id'], alert['description'])

        # 2. 根因分析
        analysis = self.analyze_root_cause(alert, context)

        # 3. 生成修复计划
        plan = self.generate_remediation_plan(analysis)

        # 4. 执行或等待确认
        if plan['severity'] in ['P0', 'P1']:
            return self.ask_human_confirmation(plan)
        else:
            return self.execute_plan(plan)

3.2 巡检 Agent

class InspectionAgent:
    def __init__(self):
        self.tools = [check_cpu, check_memory, check_disk, check_services]

    def run_inspection(self) -> dict:
        results = {}

        for tool in self.tools:
            try:
                results[tool.name] = tool.execute()
            except Exception as e:
                results[tool.name] = {"error": str(e)}

        # 生成报告
        report = self.generate_report(results)
        return report

3.3 代码审查 Agent

class CodeReviewAgent:
    def __init__(self):
        self.tools = [read_file, run_linter, check_secrets]

    def review(self, pr_url: str) -> dict:
        # 1. 获取 PR 信息
        pr = self.fetch_pr(pr_url)

        # 2. 静态分析
        issues = []
        for tool in self.tools:
            issues.extend(tool.analyze(pr))

        # 3. 生成审查报告
        report = self.format_review(pr, issues)
        return report

4. 人机协作设计

4.1 确认节点

HIGH_RISK_OPERATIONS = [
    "systemctl restart",
    "docker rm -f",
    "kubectl delete",
    "rm -rf",
    "iptables -F"
]

def should_ask_confirmation(operation: str) -> bool:
    """判断是否需要人工确认"""
    for risky in HIGH_RISK_OPERATIONS:
        if risky in operation:
            return True
    return False

4.2 审批流程

class ApprovalWorkflow:
    def __init__(self):
        self.pending_actions = {}

    def submit(self, action: dict, requester: str) -> str:
        """提交审批"""
        action_id = str(uuid.uuid4())[:8]
        self.pending_actions[action_id] = {
            "action": action,
            "requester": requester,
            "status": "pending"
        }
        return action_id

    def approve(self, action_id: str, approver: str) -> bool:
        """审批通过"""
        if action_id in self.pending_actions:
            self.pending_actions[action_id]["status"] = "approved"
            self.pending_actions[action_id]["approver"] = approver
            return True
        return False

5. 性能优化

5.1 缓存策略

from functools import lru_cache

@lru_cache(maxsize=1000)
def cached_tool_call(tool_name: str, args: tuple) -> str:
    """缓存工具调用结果"""
    return execute_tool(tool_name, args)

5.2 并行执行

import asyncio

async def parallel_execution(tasks: list) -> list:
    """并行执行多个工具调用"""
    return await asyncio.gather(*[
        asyncio.to_thread(execute_tool, task['name'], task['args'])
        for task in tasks
    ])

6. 监控与评估

6.1 Agent 指标

指标 计算方法 健康阈值
成功率 成功次数/总次数 > 90%
平均迭代数 工具调用次数 < 5
完成时间 P99 延迟 < 30s
人工干预率 需确认次数/总数 < 20%

6.2 日志记录

import logging

logger = logging.getLogger("agent")

def log_agent_action(agent_name: str, action: dict, result: dict):
    logger.info({
        "event": "agent_action",
        "agent": agent_name,
        "action": action,
        "result": result,
        "timestamp": datetime.now().isoformat()
    })

7. 常见问题排查

问题 1:Agent 循环执行

症状:工具调用次数超过限制

解决: - 设置 max_iterations=5 - 检测重复状态 - 添加终止条件


问题 2:幻觉导致错误操作

症状:Agent 调用不存在的工具

解决: - 增加工具描述 - 使用 function calling - 添加输出验证


问题 3:上下文过长

症状:Token 超限或响应变慢

解决: - 摘要历史对话 - 使用长上下文模型 - 分块处理


8. 延伸阅读


FAQ

如何选择 Agent 架构? 单步骤任务(查询/生成)→ ReAct;多步骤流程(排查→修复→验证)→ Plan-and-Execute;复杂场景(多角色协作)→ Multi-Agent。

Agent 记忆如何设计? 三层记忆:① 短期(当前会话,Redis)② 中期(项目历史,向量库)③ 长期(经验沉淀,知识图谱)。设置 TTL 避免泄漏。

如何防止 Agent 陷入循环? 设置最大迭代次数(5-10次)、检测重复状态、添加超时熔断、引入人工确认环节。

Agent 安全边界如何设定? 工具白名单、命令沙箱、权限最小化、结果审核。高危操作(删除/重启/修改配置)必须人工确认。