运维利器升级:WezTerm集成AI插件,打造高效运维终端

随着大语言模型的飞速发展,开源模型在编码能力上已经逐步逼近GPT-4等顶尖模型,相关API调用的成本也在迅速下降。自动编程工具如雨后春笋般涌现,如cursor、vscode cline、aider等,就连nvim也有avante这样的开源插件支持自动编程。如今,写代码几乎变成了写需求。

然而,本文并非讨论如何用大模型写代码,而是为运维人员提供一个便捷的AI助手,帮助他们在工作过程中更高效地利用大模型,无需频繁复制粘贴或打开网页查询命令。

灵感来源与现状

受aider等工具的启发,我们思考:如果能在命令行直接与大模型交互,使用自然语言生成各种命令,是否能显著提高运维人员的工作效率?遗憾的是,已有公司如warp.dev实现了这一功能,但收费且访问速度受限。于是,我们找到了一个用Rust编写的开源命令行工具——AIChat。

AIChat简介

AIChat是一个功能强大的命令行工具,集成了多种大语言模型(LLM)功能,包括Shell助手、CMD和REPL模式、RAG(检索增强生成)、AI工具与代理等。它支持多平台,安装方便,一个二进制文件即可使用,并且可以与bash集成,通过自然语言生成各种命令。

通过在bashrc中嵌入以下命令,可以绑定快捷键实现自然语言转命令:

_aichat_bash() {
    if [[ -n "$READLINE_LINE" ]]; then
        READLINE_LINE=$(aichat -e "$READLINE_LINE")
        READLINE_POINT=${#READLINE_LINE}
    fi
}
bind -x '"\ee": _aichat_bash'

aichat 命令行使用方法

WezTerm集成AIChat

然而,运维人员经常需要在服务器上操作各种指令。难道要在所有服务器上都安装AIChat工具?显然,这样做太过繁琐。于是,我们引入了WezTerm这个跨平台终端,结合AIChat工具,实现在终端上的AI助理功能。

WezTerm简介

WezTerm是一个跨平台的终端工具,可以通过Lua进行各种配置,包括主题、快捷键、tmux配置等。接下来,我们将利用WezTerm的Lua脚本特性,将AIChat与WezTerm集成在一起,实现跨终端、跨服务器的AI助手功能。

安装与配置

  1. 下载AIChat

  2. 配置AIChat

    • 启动AIChat命令行,配置大模型。例如,使用deepseek-chat,前往deepseek平台申请API密钥,并根据AIChat的向导生成相关配置。
    # $HOME/.config/aichat/config.yaml
    model: deepseek
    clients:
    - type: openai-compatible
      name: deepseek
      api_base: https://api.deepseek.com
      api_key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxx
    
  3. 安装WezTerm

    • 前往WezTerm官网查看详细的安装方法。
    • 安装后,在本地目录创建WezTerm的配置文件$HOME/.config/wezterm/wezterm.lua
  4. 配置WezTerm

    local wezterm = require("wezterm")
    local launch_menu = {}
    if wezterm.target_triple == "x86_64-unknown-linux-gnu" then
      table.insert(
        launch_menu,
        { label = "ai-chat", args = { "aichat"} }
      )
    end
    return {
      launch_menu = launch_menu,
      keys = {
        { key = 'z', mods = 'ALT', action = wezterm.action.ShowLauncher },
        {
          key = "c",
          mods = "ALT",
          action = wezterm.action_callback(function(window, pane)
            local tab = pane:tab()
            local panes = tab:panes_with_info()
            if #panes == 1 then
              pane:split({ direction = "Right", size = 0.4, args = { 'aichat' } })
            elseif not panes[1].is_zoomed then
              panes[1].pane:activate()
              tab:set_zoomed(true)
            elseif panes[1].is_zoomed then
              tab:set_zoomed(false)
              panes[2].pane:activate()
            end
          end),
        },
        {
          key = "x",
          mods = "ALT",
          action = wezterm.action_callback(function(window, pane)
            local dims = pane:get_dimensions()
            local txt = pane:get_text_from_region(0, dims.scrollback_top, 0, dims.scrollback_rows)
            local last_line = txt:match("[^\r\n]+$")
            local selection = window:get_selection_text_for_pane(pane)
            selection = selection or last_line
            window:perform_action(wezterm.action.ClearSelection, pane)
            local success, stdout, stderr = wezterm.run_child_process({"aichat", "-e", selection})
            if success then
              pane:paste(stdout)
            else
              wezterm.log_error("Error running bash command: " .. stderr)
            end
          end),
        },
      },
      font_size = 18.0,
      color_scheme = "Catppuccin Frappe",
    }
    

使用方法

  • 打开WezTerm,通过快捷键ALT+c迅速调出AI对话窗口,可以直接与AI交互。
  • 通过WezTerm的复制粘贴快捷键,可以快速将终端窗口中的文字粘贴到AIChat对话中进行交流。
  • 通过快捷键ALT+x直接将命令行下的自然语言生成bash命令。

通过WezTerm与AIChat的集成,运维人员可以在终端中高效利用AI助手,提升工作效率。