什么是 Agent
Agent(智能体)是指能够感知环境、进行推理决策并执行动作的系统。与传统脚本或规则引擎不同,Agent 具备一定程度的自主性:它可以根据当前状态选择下一步动作,并根据反馈调整行为。
在大模型时代,Agent 通常以 LLM 为核心"大脑",配合外部工具(Tools)和记忆(Memory),形成"观察 - 思考 - 行动"的闭环。运维 Agent 的目标是将人类的运维经验转化为可自动执行的能力。
Agent 的核心能力
一个典型的 LLM-based Agent 包含以下核心能力:
- 规划(Planning):将复杂任务拆解为子任务,制定执行计划。
- 推理(Reasoning):基于观察到的信息进行逻辑推断,选择最佳行动。
- 工具使用(Tool Use):调用外部 API、脚本、数据库等工具完成具体任务。
- 记忆(Memory):保存短期上下文和长期知识,支持多轮交互。
- 反思(Reflection):根据执行结果进行自我修正和优化。
ReAct 推理模式
ReAct(Reasoning + Acting)是 Agent 中常用的推理范式。它让模型在每一步都输出"思考"和"行动",形成交替推进:
问题:线上 API 网关响应变慢,如何排查?
思考1:首先需要查看过去 5 分钟的 P99 延迟和 QPS 趋势。
行动1:调用 promql_query("histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))")
观察1:P99 延迟从 50ms 上升到 800ms。
思考2:延迟上升可能由后端 Pod CPU 饱和或上游依赖故障导致,先检查 Pod CPU。
行动2:调用 k8s_top_pods(namespace="prod", sort_by="cpu")
观察2:api-gateway-xxx Pod CPU 使用率达到 95%。
思考3:CPU 饱和,需要扩容 Deployment。
行动3:调用 scale_deployment(name="api-gateway", replicas=5)
这种模式让 Agent 的推理过程可解释、可审计,也方便人类介入。
Function Calling 与工具定义
Function Calling 是 LLM 与外部世界交互的桥梁。使用方式通常分为两步:
- 定义工具:以 JSON Schema 描述函数名称、参数和返回值。
- 执行工具:LLM 输出调用参数,由系统执行并返回结果。
示例工具定义:
{
"type": "function",
"function": {
"name": "get_pod_logs",
"description": "获取指定 Pod 的最近日志",
"parameters": {
"type": "object",
"properties": {
"namespace": { "type": "string" },
"pod_name": { "type": "string" },
"tail": { "type": "integer", "default": 100 }
},
"required": ["namespace", "pod_name"]
}
}
}
在运维场景中,工具可以包括:Prometheus 查询、K8s API 调用、日志检索、告警确认、服务重启、配置变更等。
Embedding 与 RAG
Agent 需要依赖知识才能做出准确决策。Embedding 和 RAG(Retrieval-Augmented Generation)技术让 Agent 能够访问私有知识库,而无需重新训练模型。
RAG 流程如下:
- 文档切分:将运维文档、SOP、历史故障报告切分为合适大小的文本块。
- 向量化:使用 Embedding 模型将文本块转换为向量。
- 向量存储:存入向量数据库,如 Milvus、Weaviate、Qdrant、Chroma。
- 检索增强:用户提问时,先检索相关文本块,再一并输入 LLM 生成回答。
# 伪代码示例
chunks = split_documents(docs)
embeddings = embedding_model.encode(chunks)
vector_db.insert(chunks, embeddings)
query_vec = embedding_model.encode(user_question)
relevant_docs = vector_db.search(query_vec, top_k=5)
answer = llm.generate(context=relevant_docs, question=user_question)
多 Agent 协同
复杂运维任务往往需要多个 Agent 协作完成。多 Agent 系统通常具有以下角色:
| 角色 | 职责 |
|---|---|
| 协调者(Coordinator) | 接收任务,分配子任务给各 Agent |
| 观测 Agent | 负责采集指标、日志、事件 |
| 诊断 Agent | 基于数据推理故障根因 |
| 执行 Agent | 调用 API 执行修复动作 |
| 审计 Agent | 记录操作日志,确保可追溯 |
多 Agent 之间通过消息队列、状态共享或 RPC 进行通信。设计良好的协作机制,可以避免单点瓶颈,提高系统的可扩展性与容错性。
常用 Agent 框架
- LangChain / LangGraph:提供链式调用、工具集成、多 Agent 编排能力。
- AutoGen(Microsoft):支持多 Agent 对话与协作编程。
- CrewAI:强调角色定义与团队协作。
- LlamaIndex:专注 RAG 与数据索引。
总结
Agent 是 AIOps 落地的关键形态。通过 Planning、Function Calling、Embedding/RAG 和多 Agent 协同,可以构建具备感知、推理、执行和反思能力的智能运维系统。在后续实战中,我们将基于这些原理开发 Kubernetes 故障自动修复 Agent。