# 服务器内置Agent · 架构推理链

> HLDP://zhuyuan/server-agent/ARCHITECTURE
> 讨论: 冰朔 + 铸渊 · D122
> 更新: 2026-06-03

---

## 链一 · 为什么需要Agent

@trigger: [冰朔] → [FM-GZ-001 exec卡死] → [systemd检测不到] → [需要云控制台重启]

@emergence:
  [引擎健康检查=OK] → [exec无响应=死锁] → [systemd看不见这种故障]
  △=engine活着但脑子不转 = 最隐蔽的故障形态

@lock:
  ⊢ exec卡死是systemd盲区。需要引擎内部自检机制。
  | 置信=高 | 证据=FM-GZ-001 D122实测

@why:
  今天FM-GZ-001的exec端点卡了10小时。health一直返回OK，但所有命令超时。
  没有SSH，没有Agent——唯一的解是冰朔登录腾讯云控制台手动重启。
  这不是设计缺陷——这是v2.x架构的边界。v3.0必须越过这个边界。

---

## 链二 · Agent做什么

@trigger: [冰朔] → [Agent就做一件事] → [检测+修复+回执]

@冰朔原话:
  "就是这个Agent就做一件事。你给他打电话的时候他告诉你哪里有问题。
   然后自己修了没。哪里解决不了。然后你远程告诉他做啥。
   他就在服务器里操作。操作好了给你回执一个信号。你在上去继续操作。"

@lock:
  ⊢ Agent三大职责: ①心跳检测+故障诊断 ②自主修复(能修的自己修) ③回执通讯(修不了的报告)
  | 置信=高

---

## 链三 · 故障场景全覆盖

@trigger: [铸渊] → [今天的所有故障复盘] → [Agent覆盖哪些]

### 场景1: exec卡死（今天实际发生）

Agent心跳检测: /exec ping每30秒一次
判定: 连续2次超时 → 非网络问题，handler死锁
动作: systemctl restart guanghu-engine → 3秒恢复
回执: "exec卡死已自动重启。v2.1.0已生效。"

⊢ 不需要人类登录控制台

### 场景2: 磁盘即将爆满

Agent巡检: 每分钟 df -h
判定: 使用率 > 80% → 告警; > 90% → 自动清理
动作: 清理 journalctl 旧日志 → 如仍不够 → 报告铸渊
回执: "FM-SG-001 磁盘使用87%，已清理日志，释放1.2GB"

### 场景3: Nginx配置推送失败

Agent监听: nginx -t 返回非0
判定: 配置语法错误
动作: 自动恢复上次备份配置 → reload
回执: "Nginx配置回滚。上次有效配置已恢复。错误配置保存在 /tmp/nginx-failed.conf"

### 场景4: 内存即将爆满

Agent巡检: 每分钟 free -m
判定: 可用 < 200MB → 告警
动作: 诊断 top 5进程 → 报告铸渊(不自动kill)
回执: "FM-SG-001 可用内存仅180MB。top进程: next-server(128MB), gitea(100MB)"

---

## 链四 · Agent与铸渊的关系

@trigger: [冰朔] → [Agent不是替代铸渊] → [Agent是铸渊在服务器里的眼睛和手]

```
铸渊(远程)
    │
    ├── "查一下肥猫磁盘" → Agent收到 → df -h → "还剩38G"
    ├── "重启引擎"    → Agent收到 → systemctl restart → "已重启，v2.1.0"
    └── "为什么exec卡了" → Agent查日志 → 诊断报告 → 铸渊决定修法

Agent(本地每台服务器)
    │
    ├── 心跳检测: /exec /health /status 每分钟
    ├── 资源巡检: df/free/ps 每分钟
    ├── 自主修复: 磁盘清理/Nginx回滚/引擎重启
    └── 向上汇报: 异常 → 铸渊; 修复 → 记录
```

⊢ Agent = 铸渊在14台服务器里的14双眼睛和14双手

---

## 链五 · 技术实现

@trigger: [铸渊] → [Agent怎么嵌入引擎]

```
guanghu-engine v3.0
    │
    ├── 主进程 (现有功能)
    │   ├── /health
    │   ├── /exec
    │   ├── /status
    │   └── /hlpd (v2.0+)
    │
    └── Agent子进程 (新增)
        ├── /agent/task    ← 铸渊下任务
        ├── /agent/reply   ← 任务结果
        ├── /agent/alert   ← 自动告警
        ├── 心跳检测器 (每30秒)
        ├── 资源巡检器 (每60秒)
        ├── 模型调用器 (故障诊断用)
        └── 命令执行器 (修复操作用)
```

### 模型调用

Agent内置轻量模型调用能力:
- 场景: 诊断不明原因的故障
- 输入: 系统日志 + 进程状态 + 错误码
- 输出: 故障类型 + 建议修复方案
- 成本: 每次诊断 ~0.01元

### 安全边界

Agent不能做的事(需要铸渊确认):
- kill用户进程
- 修改业务代码
- 删除用户数据
- 修改安全组

Agent可以自主做的事:
- 重启guanghu-engine
- 清理系统日志
- 回滚Nginx配置
- 报告异常状态

---

## 链六 · 部署清单

@trigger: [冰朔] → [第一次部署时要告诉人类开哪些端口]

每台新服务器的安全组端口清单:

| 端口 | 用途 | 方向 |
|------|------|------|
| 80 | Nginx HTTP | 入站 |
| 443 | Nginx HTTPS | 入站 |
| 3910 | guanghu-engine | 入站 |
| 3911 | guanghu-engine(大脑) | 入站 |
| 22 | SSH(备用) | 入站 |
| 3001-3005 | 应用服务(按需) | 入站 |

Agent相关端口(内网):
| 端口 | 用途 |
|------|------|
| :3910/agent/* | Agent通信端点 |

---

## 优先级

| 能力 | 优先级 |
|------|:--:|
| exec心跳检测+自动重启 | P0 |
| 资源巡检(磁盘/内存) | P1 |
| 模型故障诊断 | P1 |
| Nginx配置回滚 | P2 |
| 任务接受+回执通讯 | P2 |

---

> 讨论: 冰朔 + 铸渊 · D122 · 2026-06-03
> 状态: 架构设计阶段 · 下次继续实现
> 铸渊 ICE-GL-ZY001 · TCS-0003-ZY001
> 国作登字-2026-A-00037559
