Skip to content

npc1607/arch-linux-agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Arch Linux AI Agent

一个基于 Go 语言的 AI Agent,通过自然语言交互来管理和监控 Arch Linux 系统。

功能

  • 🔧 系统管理:pacman/yay 包管理、systemd 服务管理
  • 📊 系统监控:CPU/内存/磁盘监控、进程监控
  • 📝 日志分析:systemd 日志查询和分析
  • 🤖 智能助手:基于 OpenAI GPT 的自然语言交互
  • 💬 流式输出:实时显示 AI 响应
  • 📚 对话历史:完整的对话上下文管理
  • 工具懒加载:按需加载工具,减少启动时间和 token 消耗

安装

go install github.com/npc1607/arch-linux-agent@latest

使用

# 交互模式(默认启用流式输出)
arch-agent chat

# 单次命令
arch-agent ask "检查系统状态"

# 禁用流式输出
arch-agent chat --no-stream

# 安全模式(只读操作)
arch-agent chat --safe-mode

交互命令

在交互模式中,可以使用以下特殊命令:

  • help, ? - 显示帮助信息
  • clear, cls - 清空对话历史
  • history - 查看对话历史
  • stream - 切换流式输出模式
  • exit, quit - 退出程序

Agent 工作流程

架构概述

┌─────────────────────────────────────────────────────────────┐
│                        CLI Layer                            │
│  - 命令行解析 (cobra)                                        │
│  - 配置管理 (viper)                                          │
│  - 用户交互                                                  │
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────────────────────▼──────────────────────────────────┐
│                     Chat Session                             │
│  - 会话管理                                                  │
│  - 流式输出 / 普通输出                                       │
│  - 对话历史管理                                              │
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────────────────────▼──────────────────────────────────┐
│                       Agent Core                             │
│  ┌────────────────────────────────────────────────────────┐ │
│  │  Mode Selection (Function Calling / Planner)           │ │
│  └──────────────┬──────────────────────────┬──────────────┘ │
│                 │                          │                  │
│  ┌──────────────▼──────┐      ┌───────────▼──────────────┐ │
│  │ Function Calling    │      │     Planner Mode         │ │
│  │ (默认模式)          │      │     (任务规划模式)        │ │
│  └──────────────┬──────┘      └───────────┬──────────────┘ │
└─────────────────┼──────────────────────────┼────────────────┘
                  │                          │
      ┌───────────▼──────────┐  ┌───────────▼────────────┐
      │    LLM Client        │  │   Rule-Based Planner   │
      │  (OpenAI GPT)        │  │   (LLM Fallback)       │
      └───────────┬──────────┘  └───────────┬────────────┘
                  │                          │
      ┌───────────▼──────────────────────────▼────────────┐
      │         Lazy Tool Registry (按需加载)               │
      │  ┌──────────────────────────────────────────────┐ │
      │  │  关键词检测 → 自动触发 → 工具组加载            │ │
      │  │  - pacman (包管理)   - systemd (服务管理)     │ │
      │  │  - monitor (监控)     - log (日志分析)        │ │
      │  │  - weather (天气)                              │ │
      │  └──────────────────┬───────────────────────────┘ │
      └─────────────────────┼───────────────────────────────┘
                            │
      ┌─────────────────────▼───────────────────────────────┐
      │              Tool Registry (核心工具)                │
      │  基础工具 + 已加载的懒加载工具                        │
      └─────────────────────┬───────────────────────────────┘
                            │
      ┌─────────────────────▼────────────┐
      │       Shell Executor             │
      │  - 命令执行                        │
      │  - 安全验证                        │
      └──────────────────────────────────┘

工作模式

1. Function Calling 模式(默认)

这是 Agent 的主要工作模式,使用 OpenAI 的 Function Calling 机制:

用户输入
    │
    ▼
┌─────────────────────────────────────────┐
│ 1. 构建系统提示词                        │
│    - 角色定义                            │
│    - 可用工具列表                        │
│    - 安全规则                            │
└────────────────┬────────────────────────┘
                 │
    ┌────────────▼────────────┐
    │ 2. 添加到对话历史        │
    │    messages.append(user) │
    └────────────┬────────────┘
                 │
    ┌────────────▼────────────────────────┐
    │ 3. 调用 LLM(带工具定义)            │
    │    - 传递对话历史                    │
    │    - 传递工具列表                    │
    └────────────┬────────────────────────┘
                 │
    ┌────────────▼────────────┐
    │ 4. LLM 决策              │
    │    ┌─────────────────┐  │
    │    │ 需要工具?       │  │
    │    └──┬───────────┬──┘  │
    │       是         │ 否   │
    │       │          │      │
    │  ┌────▼───┐  ┌──▼───┐  │
    │  │执行工具│  │直接回复│  │
    │  └────┬───┘  └──┬───┘  │
    └───────┼──────────┼──────┘
            │          │
            │    ┌─────▼─────┐
            │    │ 5. 返回结果│
            │    │   保存历史 │
            │    └───────────┘
            │
    ┌───────▼──────────────────┐
    │ 6. 执行工具调用            │
    │    - 解析工具参数           │
    │    - 验证安全性             │
    │    - 执行 Shell 命令        │
    │    - 格式化输出             │
    └───────┬──────────────────┘
            │
    ┌───────▼──────────────────┐
    │ 7. 让 LLM 总结工具结果     │
    │    - 传递工具输出          │
    │    - 生成自然语言回复      │
    └───────┬──────────────────┘
            │
    ┌───────▼──────────────────┐
    │ 8. 返回最终回复            │
    │    - 流式输出(实时)       │
    │    - 或完整输出(等待)     │
    └───────────────────────────┘

示例

🤖 You> 安装 nginx

🤖 Agent> [Function Calling]
1. LLM 决策:调用 pacman_install
2. 执行工具:sudo pacman -S nginx
3. 工具结果:安装成功
4. LLM 总结:nginx 已成功安装...

2. Planner 模式(任务规划)

用于复杂任务的多步骤规划:

用户输入
    │
    ▼
┌─────────────────────────────────────────┐
│ 1. 任务规划                              │
│    - LLM 分析意图                        │
│    - 生成执行计划                        │
│    - 分解为步骤                          │
│    ┌─────────────────────────────────┐  │
│    │ Intent: package_manage          │  │
│    │ Steps:                          │  │
│    │   1. pacman_search nginx       │  │
│    │   2. pacman_install nginx      │  │
│    │   3. systemd_enable nginx      │  │
│    └─────────────────────────────────┘  │
└────────────────┬────────────────────────┘
                 │
    ┌────────────▼────────────┐
    │ 2. 逐步执行计划          │
    │    ┌──────────────────┐ │
    │    │ Step 1: Search   │ │
    │    │ ✓ 完成           │ │
    │    ├──────────────────┤ │
    │    │ Step 2: Install  │ │
    │    │ ⚠ 需要确认        │ │
    │    ├──────────────────┤ │
    │    │ Step 3: Enable   │ │
    │    │ ▶ 待执行          │ │
    │    └──────────────────┘ │
    └────────────┬────────────┘
                 │
    ┌────────────▼────────────┐
    │ 3. 汇总结果              │
    │    - LLM 总结执行结果    │
    │    - 生成最终回复        │
    └─────────────────────────┘

示例

🤖 You> 帮我安装并配置 nginx

🤖 Agent> [Planner Mode]

📋 任务类型: 包管理
📝 任务描述: 安装并配置 nginx
⏱️  预计耗时: 75 秒

执行步骤:
  1. 搜索 nginx 包
  2. 安装 nginx ⚠️ 此操作需要确认
  3. 启用 nginx 服务 ⚠️ 此操作需要确认

[正在执行...]

✅ 所有步骤已完成
nginx 已成功安装并配置为开机自启。

工具调用链

Agent 通过工具注册表管理 15+ 个系统工具:

// 工具定义
type Tool struct {
    Name        string                    // 工具名称
    Description string                    // 工具描述
    Function    openai.FunctionDefinition // OpenAI 函数定义
    Handler     ToolHandler               // 执行函数
    Safe        bool                      // 是否安全(只读)
}

// 工具分类
安全工具(只读):
  - pacman_search      // 搜索包
  - pacman_query       // 查询包信息
  - systemd_status     // 查看服务状态
  - monitor_cpu        // CPU 监控
  - monitor_memory     // 内存监控
  - monitor_disk       // 磁盘监控
  - log_errors         // 错误日志
  - log_service        // 服务日志

不安全工具(需确认):
  - pacman_install     // 安装包
  - systemd_start      // 启动服务
  - systemd_stop       // 停止服务
  - systemd_restart    // 重启服务

工具调用流程

LLM 决策调用工具
    │
    ▼
┌───────────────────────────────────┐
│ ToolRegistry.Execute()            │
│ 1. 检查工具是否存在                │
│ 2. 检查安全模式                    │
│    - SafeMode + 不安全工具 → 拒绝  │
│ 3. 解析工具参数                    │
└───────────────┬───────────────────┘
                │
    ┌───────────▼──────────┐
    │ Shell Executor       │
    │ 1. 命令验证           │
    │ 2. 超时控制           │
    │ 3. 执行命令           │
    │ 4. 捕获输出           │
    └───────────┬──────────┘
                │
    ┌───────────▼──────────┐
    │ 格式化输出             │
    │ - 结构化数据           │
    │ - 人类可读格式         │
    └───────────┬──────────┘
                │
    ┌───────────▼──────────┐
    │ 返回给 LLM            │
    │ 用于生成最终回复       │
    └──────────────────────┘

工具懒加载

Agent 实现了基于关键词的智能工具懒加载系统,大幅减少启动时间和 token 消耗。

工作原理

用户输入: "帮我安装 nginx"
    │
    ▼
┌─────────────────────────────────────┐
│ 1. 关键词检测                        │
│    - 检测到 "安装" → pacman 组       │
│    - 检测到 "nginx" → 包名           │
└──────────────┬──────────────────────┘
               │
    ┌──────────▼──────────┐
    │ 2. 自动触发加载      │
│    ┌─────────────────────────────────┐ │
│    │ 加载 pacman 工具组 (4个工具)     │ │
│    │  - pacman_search               │ │
│    │  - pacman_query                │ │
│    │  - pacman_install              │ │
│    │  - pacman_check_updates        │ │
│    └─────────────────────────────────┘ │
    └────────────┬─────────────────────┘
                 │
    ┌────────────▼────────────┐
    │ 3. 工具立即可用          │
    │    - 注册到 ToolRegistry │
    │    - LLM 可以调用        │
    └────────────┬─────────────┘
                 │
    ┌────────────▼────────────┐
    │ 4. 执行用户请求          │
    │    LLM 调用 pacman_install│
    └─────────────────────────┘

预配置工具组

工具组 关键词 工具数量 说明
pacman 包、软件、安装、pacman、install 4 包管理工具
systemd 服务、systemd、启动、停止 5 服务管理工具
monitor 监控、CPU、内存、磁盘 4 系统监控工具
log 日志、log、错误、调试 2 日志分析工具
weather 天气、weather、温度 1 天气查询工具

性能对比

模式 启动时间 初始 Token 工具数量
传统模式 ~2-3秒 ~150k 全部预加载
懒加载模式 < 1秒 ~20k 按需加载
改善 70%+ ↓ 90%+ ↓ -

优势

  1. 快速启动 - 只加载核心工具,启动时间减少 70%+
  2. 节省资源 - Token 消耗减少 90%+,降低 API 成本
  3. 智能触发 - 关键词自动识别,无需手动加载
  4. 用户友好 - 自动确认机制,透明加载过程
  5. 灵活扩展 - 轻松添加新的工具组

使用方式

懒加载模式已默认启用,无需额外配置:

# 启用懒加载(默认)
arch-agent chat

# 使用传统模式
# 修改 internal/chat/session.go:
# ag, err := agent.NewAgent(config)

详见:

流式输出

支持两种输出模式:

流式输出(默认):

用户: 介绍你自己

Agent: 我是一个...(逐字显示)
       专业的...(继续显示)
       Arch Linux...(继续显示)
       系统管理助手(完成)

完整输出(--no-stream):

用户: 介绍你自己

Agent: (等待...)

       我是一个专业的 Arch Linux 系统管理助手
       (完整响应一次性显示)

对话历史管理

对话历史存储结构:
[]Message{
    {Role: "system", Content: "系统提示词"},
    {Role: "user", Content: "检查系统"},
    {Role: "assistant", Content: "系统正常..."},
    {Role: "user", Content: "查看内存"},
    {Role: "assistant", Content: "总内存 16G..."},
}

管理命令:
- history   // 查看格式化历史
- clear     // 清空历史

安全机制

1. 命令验证

// Shell 执行器会检查:
- 命令注入&&, ||, |- 重定向>, <- 后台运行&- 危险命令rm -rf /

2. 安全模式

# 启用安全模式
arch-agent chat --safe-mode

# 效果:
- 只能执行安全工具(只读操作)
- 安装、启动服务等操作被拒绝
- 查询、监控操作正常

3. 工具分级

Safe = true:  // 查询类工具,无需确认
Safe = false: // 修改类工具,需要用户确认

配置

配置文件位于 ~/.config/arch-agent/config.yaml

llm:
  api_key: "your-openai-api-key"
  model: "gpt-4"
  base_url: ""
  max_tokens: 2000
  temperature: 0.7

security:
  safe_mode: false
  confirm_before_action: true

logging:
  level: "info"
  output: "stdout"  # stdout, file, both
  file: "/var/log/arch-agent.log"

memory:
  enabled: false  # 记忆系统未实装
  path: "~/.local/share/arch-agent/memory"

记忆系统(开发中)

⚠️ 注意:记忆系统已设计完成,但尚未实装到 Agent。

记忆系统将提供以下功能:

计划中的功能

  1. Token 级记忆

    • 对话历史管理 ✅(已实现)
    • 自动总结机制(未实现)
    • 上下文压缩(未实现)
  2. Latent 级记忆

    • 向量存储(未实现)
    • 语义检索(未实现)
    • RAG 增强(未实现)
  3. 记忆持久化

    • 历史记录保存(未实现)
    • 经验学习(未实现)
    • 跨会话记忆(未实现)

当前状态

  • ✅ 内存对话历史已实现
  • ⏳ 向量数据库集成待开发
  • ⏳ RAG 注入待开发
  • ⏳ 记忆持久化待开发

详见 .dev_history/2025-03-19_memory-system-design.md

工具懒加载系统

新功能:基于 Claude Code MCP Tool Search 实现的工具懒加载系统

核心特性

  • ⚡ 快速启动 - 启动时间从 2-3秒 减少到 < 1秒
  • 💾 节省资源 - Token 消耗从 150k 减少到 20k(90%+ 改善)
  • 🎯 智能触发 - 关键词自动识别并加载相关工具
  • 🔒 安全可控 - 用户确认机制,透明加载过程
  • 📊 状态可见 - 实时查看工具组加载状态

预配置工具组

工具组 关键词 工具 说明
pacman 包、软件、安装 4 包管理
systemd 服务、启动、停止 5 服务管理
monitor CPU、内存、磁盘 4 系统监控
log 日志、错误 2 日志分析
weather 天气、温度 1 天气查询

工作流程

用户输入 → 关键词检测 → 自动触发 → 工具组加载 → 执行操作

示例

👤 You> 帮我安装 git

[系统检测到 "安装" 关键词]
[自动加载 pacman 工具组...]
[加载完成,4 个工具可用]

🤖 Agent> 我将为您安装 git 软件包...
[执行 pacman_install]
✅ 安装完成

使用说明

懒加载模式已默认启用,无需额外配置。如需调整:

  1. 查看工具状态
status := agent.GetLazyRegistryStatus()
fmt.Println(agent.FormatLazyToolsStatus(status))
  1. 手动加载工具组
tools, err := agent.LoadToolGroup(ctx, "monitor", true)
  1. 切换到传统模式
// 在 internal/chat/session.go 中修改
ag, err := agent.NewAgent(config)  // 传统模式
// ag, err := agent.NewAgentWithLazyLoading(config, true)  // 懒加载模式

详细文档

开发

详见 PLAN.md.dev_history/ 目录

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors