做了个工具,用自然语言和服务器聊天排查问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
hmmmbiubiubiu
V2EX    分享创造

做了个工具,用自然语言和服务器聊天排查问题

  •  
  •   hmmmbiubiubiu 1 月 27 日 1418 次点击
    这是一个创建于 33 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个完全由 AI 编写的开源运维工具,支持中文交互,多模型自动切换

    写在前面

    作为运维工程师,你是否遇到过这些场景:

    • 凌晨 3 点被告警吵醒,脑子一片混乱不知道从哪里开始排查
    • 面对陌生的系统,不知道该用什么命令诊断问题
    • 需要查手册、搜 StackOverflow ,才能找到合适的诊断命令
    • nginx 日志几万行,不知道如何快速定位异常

    现在,你可以直接问 AI:"服务器负载很高,帮我排查原因"

    项目简介

    AI Shell Assistant (aiassist) 是一个基于大语言模型的智能终端工具,通过自然语言交互为运维人员提供诊断分析、方案建议和命令执行指导。

    GitHub: https://github.com/llaoj/aiassist

    核心特点

    自然语言交互 - 用人话提问,AI 给出专业诊断
    智能命令建议 - 自动分析并给出最合适的 Shell 命令
    连续对话分析 - 自动传递上一条命令的输出,支持最多 10 层递归诊断
    管道模式 - 直接分析日志输出,支持 13,000 行 nginx 日志
    多模型支持 - 通义千问、GPT-4 、DeepSeek 等,自动切换
    安全可控 - 查询命令和修改命令差异化展示,严格确认机制
    完美中文 - 支持中文输入、光标编辑、Ctrl+C 退出

    实际使用场景

    场景 1:服务器负载异常排查

    $ aiassist "服务器负载很高,帮我排查原因" [AI] 让我们先检查系统负载和 CPU 使用情况: [查询命令] top -b -n 1 | head -20 是否执行此命令? (y/n, exit 退出): y [执行成功] top - 03:24:15 up 127 days, 5:32, 2 users, load average: 8.45, 7.23, 6.89 Tasks: 256 total, 3 running, 253 sleeping... PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1234 nginx 20 0 2.156g 1.234g 12.3m R 98.3 15.6 124:56 nginx [AI] 发现 nginx 进程 (PID 1234) CPU 占用 98.3%,内存使用 1.2GB 。 让我们查看 nginx 的连接状态: [查询命令] ss -ant | grep :80 | wc -l 是否执行此命令? (y/n, exit 退出): y [执行成功] 15234 [AI] 发现当前有 15,234 个活跃连接到 80 端口。建议检查是否遭受 DDoS 攻击... 

    场景 2:管道模式分析日志

    # 直接分析 nginx 访问日志 $ tail -1000 /var/log/nginx/access.log | aiassist "分析访问日志" [AI] 分析结果: 1. 发现来自 192.168.1.100 的异常请求:1 分钟内发起了 523 次请求 2. 路径 /api/login 被频繁访问,可能存在暴力破解 3. 建议执行: - 检查该 IP 的请求模式 - 临时封禁该 IP - 启用限流策略 # 分析 Docker 容器状态 $ docker ps -a | aiassist "帮我看看容器有什么问题" [AI] 发现 3 个容器处于 Exited 状态: - redis-cache (退出码: 137) - 内存不足被 OOM Killer 杀死 - app-worker (退出码: 1) - 启动失败,建议查看日志 - nginx-proxy (退出码: 0) - 正常退出 

    场景 3:交互式问题诊断

    $ aiassist ??? 请输入问题: 为什么我的磁盘满了 [AI] 让我们先查看磁盘使用情况... [查询命令] df -h ??? 请输入问题: /var 目录占用最大 [AI] 让我们查看/var 目录下哪些子目录占用空间最大... [查询命令] du -sh /var/* | sort -hr | head -10 ??? 请输入问题: /var/log 占了 80GB [AI] 让我们查看具体是哪些日志文件... 

    技术亮点

    1. 智能递归分析

    支持最多10 层递归命令分析,AI 会:

    • 自动读取每条命令的输出
    • 将输出作为上下文传递给下一轮分析
    • 逐步深入定位问题根源

    2. 内存保护机制

    • 防止内存耗尽和无限递归

    3. 严格的安全控制

    • 查询命令(绿色) → 一次确认 → 执行
    • 修改类命令( rm 、chmod 等)强制二次确认
    • 最大限度防止误操作

    4. 完美的中文支持

    • 支持中文输入编辑
    • 光标左右移动
    • 删除字符时提示符不消失
    • Ctrl+C 优雅退出

    5. 多模型自动切换

    # 配置文件按优先级排列 providers: qwen: # 优先使用 enabled: true gpt4: # Qwen 失败后切换 ```yaml # 配置文件按优先级排列 providers: qwen: # 优先使用 enabled: true gpt4: # Qwen 失败后切换 enabled: true deepseek: # 最后备选## 快速开始 ### 一键安装 ```bash curl -fsSL https://raw.githubusercontent.com/llaoj/aiassist/main/scripts/install.sh | bash 
    • macOS (Intel, Apple Silicon)
    • Windows (x86_64, ARM64, i386)
    • FreeBSD (x86_64, ARM64)

    配置大模型

    aiassist config 

    按向导提示配置:

    1. 选择语言(中文/English )
    2. 添加 LLM Provider (支持 OpenAI 兼容接口)
    3. 输入 API Key
    4. 配置模型列表
    5. (可选)设置 HTTP 代理

    支持的模型:

    • 通义千问( Qwen )
    • OpenAI GPT-4/3.5
    • DeepSeek
    • 其他 OpenAI 兼容接口

    开始使用

    # 交互式对话 aiassist # 单次问答 aiassist "服务器负载很高,帮我排查" # 管道模式 tail -f /var/log/nginx/access.log | aiassist "分析日志" docker ps -a | aiassist "检查容器状态" 

    项目背景

    这个项目有个特别之处:完全由 AI 编写

    从需求分析、架构设计、代码实现、文档编写,全部由 AI ( Claude )完成。这也从侧面证明了 AI 在代码生成领域的能力已经相当成熟。

    技术栈:

    • Go 1.21+
    • Cobra (CLI 框架)
    • Liner (行编辑)
    • Viper (配置管理)

    适用人群

    运维工程师 - 快速诊断生产环境问题
    SRE - 自动化故障排查流程
    DevOps - CI/CD 环境调试
    新手运维 - 学习 Shell 命令最佳实践
    开发者 - 快速解决服务器问题

    第 1 条附言    1 月 28 日
    兄弟们觉得咋样 花了四天时间 全让 ai 搞出来的
    8 条回复    2026-01-29 12:16:55 +08:00
    vodmaker
        1
    vodmaker  
       1 月 28 日
    我也做了一个: https://github.com/YUHAI0/shex
    hmmmbiubiubiu
        2
    hmmmbiubiubiu  
    OP
       1 月 28 日
    @vodmaker 想到一块去了. 就是不知道各位运维老哥们是否喜欢这样的工具.
    hmmmbiubiubiu
        3
    hmmmbiubiubiu  
    OP
       1 月 28 日
    @vodmaker 你自己手撸的?
    hbytw1
        4
    hbytw1  
       1 月 29 日
    PS D:\aiassist> .\aiassist-windows-amd64.exe
    Configuration file not found
    Please run: aiassist config
    PS D:\aiassist> aiassist config
    aiassist : 无法将“aiassist”项识别为 cmdlet 、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保
    路径正确,然后再试一次。
    所在位置 行:1 字符: 1
    + aiassist config
    + ~~~~~~~~
    + CategoryInfo : ObjectNotFound: (aiassist:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

    PS D:\aiassist> .\aiassist-windows-amd64.exe aiassist config
    Configuration file not found
    Please run: aiassist config
    PS D:\aiassist> aiassist version
    aiassist : 无法将“aiassist”项识别为 cmdlet 、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保
    路径正确,然后再试一次。
    所在位置 行:1 字符: 1
    + aiassist version
    + ~~~~~~~~
    + CategoryInfo : ObjectNotFound: (aiassist:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

    PS D:\aiassist>
    hbytw1
        5
    hbytw1  
       1 月 29 日
    实际工作中,大部分运维工程师都是使用 windows 终端进行运维的,还得把 windows 兼容性做好才行。
    vodmaker
        6
    vodmaker  
       1 月 29 日
    @hmmmbiubiubiu cursor 做的
    hmmmbiubiubiu
        7
    hmmmbiubiubiu  
    OP
       1 月 29 日 via iPhone
    @hbytw1 嗯 需要把 aiassist-windows-amd64.exe 修改为 aiassist ,并把目录加入 path
    hmmmbiubiubiu
        8
    hmmmbiubiubiu  
    OP
       1 月 29 日 via iPhone
    @hbytw1 嗯 谢谢兄弟提示 我感觉应该使用更快捷的安装方式 还需要完善文档 增加测试
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4776 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 10:01 PVG 18:01 LAX 02:01 JFK 05:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86