Redline-NASAI - NAS 智能管理助手
基于大模型(LLM)的轻量级 NAS 命令行管理工具 支持任意 OpenAI 兼容 API(官方/内网/本地模型),中文对话式交互
目录
- 一、项目简介
- 二、环境要求与安装
- 三、软件更新升级
- 四、Web 界面模式
- 五、REST API 模式(对接飞书/外部系统)
- 六、配置 LLM
- 七、快速上手
- 八、详细使用指南
- 九、风险控制机制
- 十、常见问题排查
- 十一、推送到 Git
- 十二、附录:命令速查表
一、项目简介
它能做什么?
用中文自然语言指挥它管理 NAS:
你 > 查看一下磁盘使用情况
你 > 帮我检查 Docker 容器的运行状态
你 > 列出 /mnt/storage 下的所有文件
你 > 清理一下 /tmp 目录里超过 7 天的日志
核心特性
| 特性 | 说明 |
|---|---|
| 灵活切换 LLM | 支持 OpenAI / vLLM / Ollama / 内网模型,随时切换 |
| 中文对话 | 纯中文界面,自然语言交互 |
| 风险控制 | 高危命令(rm -rf/mkfs/dd等)自动检测 + 用户确认 |
| 轻量级 | 仅依赖 requests,内存占用 < 50MB |
| 4 大工具 | 命令执行、文件读写、目录浏览 |
| 命令历史 | 支持上下键翻历史 |
技术架构
用户输入(中文) → Agent(思维链+工具选择) → LLM API(OpenAI兼容格式) → 工具调用 → 结果返回 → 中文回复
端口说明
| 服务 | 文件 | 默认端口 | 环境变量 | 用途 |
|---|---|---|---|---|
| CLI 命令行 | nas_agent.py |
— (终端交互) | — | 直接 SSH 使用 |
| Web 界面 | web_app.py |
5000 | NAS_WEB_PORT |
浏览器操作 |
| REST API | nas_api.py |
5001 | NAS_API_PORT |
飞书 Bot 对接 |
| 飞书 Bot | bot.py |
9000 | PORT |
飞书消息接收 |
如果端口被占用,启动前设置对应环境变量即可修改,无需编辑代码。
二、环境要求与安装
环境要求
- OS: Linux / macOS / Windows
- Python: >= 3.8
- 内存: >= 256MB
- 依赖: 仅
requests
安装步骤
方式一:一键部署脚本(推荐,适用于 Linux 虚拟机)
# 在虚拟机上直接执行(需要 root 或 sudo)
curl -sSL http://8.140.62.87:7777/redline/Redline-NASAI/raw/branch/master/nas_agent/deploy.sh | bash
脚本会自动:
- 检测操作系统并安装 Python3、Git、pip
- 安装 Python 依赖(requests)
- 从 Git 克隆项目代码
- 交互式配置 LLM API Key
- 验证安装并创建
nasai命令别名
方式二:手动安装(从 Git 克隆)
# 1. 安装系统依赖
apt-get install -y python3 python3-pip git # Debian/Ubuntu
# yum install -y python3 python3-pip git # CentOS
# 2. 安装 Python 依赖
pip3 install requests
# 3. 克隆项目
# ─── 如果仓库不需要认证 ───
git clone http://8.140.62.87:7777/redline/Redline-NASAI.git
# ─── 如果仓库需要用户名密码(方式一:URL 中嵌入) ───
git clone http://你的用户名:你的密码@8.140.62.87:7777/redline/Redline-NASAI.git
# ─── 如果仓库需要用户名密码(方式二:先克隆再配置) ───
git clone http://8.140.62.87:7777/redline/Redline-NASAI.git # 会提示输入密码
cd Redline-NASAI
git config credential.helper store # 保存凭证,之后不再提示
# 4. 进入项目目录
cd nas_agent
# 5. 验证安装
python3 -c "import py_compile; py_compile.compile('nas_agent.py', doraise=True); print('OK')"
# 6. 配置 API Key(任选一种)
export NAS_AGENT_API_KEY=sk-your-key
# 或编辑 nas_agent_config.json
# 7. 启动(任选一种)
# 方式 A:CLI 命令行模式
python3 nas_agent.py
# 方式 B:Web 界面模式(推荐)
python3 web_app.py
# 然后浏览器访问 http://NAS_IP:5000
# 默认密码: admin123
三、软件更新升级
方式一:git pull 更新(推荐)
cd /root/Redline-NASAI
# 拉取最新代码
git pull
# 如果仓库需要认证,在 URL 中嵌入用户名密码:
git pull http://用户名:密码@8.140.62.87:7777/redline/Redline-NASAI.git
# 或保存凭证,只需输入一次密码(推荐):
git config credential.helper store
git pull # 输入一次用户名密码,之后不再需要
方式二:重新执行部署脚本
curl -sSL http://8.140.62.87:7777/redline/Redline-NASAI/raw/branch/master/nas_agent/deploy.sh | bash
脚本会自动检测已有目录并执行 git pull 更新。
方式三:强制覆盖(本地有修改时)
cd /root/Redline-NASAI
git fetch origin
git reset --hard origin/master
⚠️ 注意:
reset --hard会丢弃本地修改。如果修改过配置文件,先备份:cp nas_agent/nas_agent_config.json /tmp/ git reset --hard origin/master cp /tmp/nas_agent_config.json nas_agent/
验证更新
cd /root/Redline-NASAI
git log --oneline -3
输出示例:
82e9a8f fix: only high-risk commands require confirmation
e3db1a6 feat: support git authentication in deploy script
a1b8c04 feat: add deploy.sh and update docs
更新后重启
# 重新启动程序
python3 nas_agent/nas_agent.py
# 或如果设置了别名
nasai
# 或 Web 界面模式
python3 web_app.py
四、Web 界面模式
除了命令行,还可以通过浏览器操作 NAS Agent。
启动 Web 服务
cd /root/Redline-NASAI/nas_agent
# 安装额外依赖
pip install flask
# 启动(默认端口 5000)
python3 web_app.py
访问
http://你的NAS_IP:5000
默认密码: admin123,登录后建议立即修改。
Web 界面功能
| 页面 | 功能 |
|---|---|
| 💬 对话 | 与 AI 对话管理 NAS,支持高危命令确认弹窗 |
| ⚙ 设置 | 修改 LLM 配置(API地址/模型/Key)、修改登录密码 |
后台运行(退出 SSH 后不中断)
# 方式一:screen(推荐)
screen -S nasai-web
python3 web_app.py
# 按 Ctrl+A 然后按 D 断开
# 重新连接: screen -r nasai-web
# 方式二:nohup
nohup python3 web_app.py > web.log 2>&1 &
# 查看日志: tail -f web.log
修改端口
如果 5000 端口已被占用,通过环境变量修改:
export NAS_WEB_PORT=8080
python3 web_app.py
五、REST API 模式(对接飞书/外部系统)
提供 HTTP API 接口,供飞书 Bot、自动化脚本或其他系统调用。
启动 API 服务
cd /root/Redline-NASAI/nas_agent
python3 nas_api.py
首次启动会生成 API Key,格式:na-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
API 地址
http://你的NAS_IP:5001
修改端口
如果 5001 端口已被占用,通过环境变量修改:
export NAS_API_PORT=5002
python3 nas_api.py
认证方式
所有请求头中携带 X-API-Key:
curl -X POST http://localhost:5001/v1/chat \
-H "X-API-Key: na-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"message": "查看磁盘使用情况"}'
API 端点
GET /v1/health — 健康检查
{"status": "ok", "version": "1.0.0", "sessions": 0}
POST /v1/chat — 发送消息
// 请求
{"message": "查看磁盘使用情况", "session_id": "自定义ID(可选)"}
// 普通回复
{"success": true, "type": "text", "content": "磁盘使用情况...", "session_id": "sess-xxx"}
// 高危操作确认
{"success": true, "type": "confirmation", "content": "准备删除文件...",
"confirm": {"command": "rm -rf /tmp/test", "description": "清理临时目录",
"risk_level": "high", "matched_pattern": "..."},
"session_id": "sess-xxx"}
POST /v1/confirm — 确认/取消操作
// 请求(确认执行)
{"session_id": "sess-xxx", "confirmed": true}
// 请求(取消执行)
{"session_id": "sess-xxx", "confirmed": false}
POST /v1/reset — 重置会话
{"session_id": "sess-xxx"}
特殊命令
| 命令 | 作用 |
|---|---|
reset 或 重置 |
重置当前会话 |
对接飞书 Bot
与 feishu-ai-bot 项目配合使用:
- 启动 NAS API:
python3 nas_api.py(记录输出的 API Key) - 编辑飞书 Bot 的
config.json,设置nas_agent配置:
{
"nas_agent": {
"enabled": true,
"api_url": "http://localhost:5001",
"api_key": "na-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"command_prefix": "nas"
}
}
- 在飞书中使用
nas 命令格式发送 NAS 管理指令:
nas 查看磁盘使用情况
nas 检查 Docker 容器状态
nas 列出 /mnt/share 的内容
高危命令会有确认流程:
用户: nas 删除 /tmp/test
机器人: ⚠️ 需要确认
命令: rm -rf /tmp/test
请回复「确认」执行,或「取消」取消
用户: 确认
机器人: ✅ 命令执行成功
后台运行
nohup python3 nas_api.py > nas_api.log 2>&1 &
六、配置 LLM
配置文件
编辑 nas_agent_config.json,首次运行会自动创建。
方案 A:OpenAI 官方 API
{
"llm": {
"api_base": "https://api.openai.com/v1",
"api_key": "sk-your-key-here",
"model": "gpt-4o",
"max_tokens": 4096,
"temperature": 0.1
}
}
方案 B:内网 vLLM 服务器
{
"llm": {
"api_base": "http://192.168.1.100:8000/v1",
"api_key": "token-abc123",
"model": "/data/models/Qwen2.5-7B-Instruct",
"max_tokens": 4096,
"temperature": 0.1
}
}
方案 C:Ollama(需开启 OpenAI 兼容模式)
{
"llm": {
"api_base": "http://localhost:11434/v1",
"api_key": "ollama",
"model": "qwen2.5:7b",
"max_tokens": 4096,
"temperature": 0.1
}
}
方案 D:环境变量(推荐,避免 Key 泄露)
# Linux/macOS
export NAS_AGENT_API_KEY=sk-your-key-here
# Windows CMD
set NAS_AGENT_API_KEY=sk-your-key-here
# Windows PowerShell
$env:NAS_AGENT_API_KEY="sk-your-key-here"
运行时切换
无需编辑配置文件,运行时直接切换:
你 > /model gpt-4o
你 > /api http://192.168.1.100:8000/v1
七、快速上手
启动
cd nas_agent
python3 nas_agent.py
启动后界面:
╔══════════════════════════════════════════════════════╗
║ NAS Agent v1.0 ║
║ 轻量级 NAS 管理助手 ║
╠══════════════════════════════════════════════════════╣
║ 输入 /help 查看帮助,/exit 退出程序 ║
║ 模型: gpt-4o ║
║ API: https://api.openai.com/v1 ║
╚══════════════════════════════════════════════════════╝
第一个任务
你 > 查看一下磁盘使用情况
系统会:调用 LLM -> 决定执行 df -h -> 执行命令 -> 分析结果 -> 中文回复
安全确认示例
你 > 删除 /tmp/test 目录
==================================================
工具调用: execute_command
目的: 删除测试目录
命令: rm -rf /tmp/test
风险等级: 高危
==================================================
是否执行此命令?(y/N):
八、详细使用指南
常用场景
磁盘管理:
你 > 看看还有多少磁盘空间
你 > 检查 /mnt/storage 的目录结构
你 > 哪些目录占用的空间最大?
系统监控:
你 > 查看内存使用情况
你 > CPU 负载怎么样?
你 > 检查系统运行了多久
文件管理:
你 > 列出 /mnt/share 下的所有文件
你 > 读取 /etc/hosts 的内容
你 > 在 /opt/scripts 下创建一个备份脚本
Docker 管理:
你 > 查看所有运行中的容器
你 > 检查 nginx 容器的日志
你 > 列出所有镜像
服务管理:
你 > 检查 nginx 服务状态
你 > 查看系统有哪些服务在运行
特殊命令
| 命令 | 说明 | 示例 |
|---|---|---|
| /exit | 退出程序 | /exit |
| /reset | 重置对话历史 | /reset |
| /help | 显示帮助 | /help |
| /config | 显示当前配置 | /config |
| /model | 切换模型 | /model qwen2.5:7b |
| /api | 切换 API 地址 | /api http://localhost:8000/v1 |
多轮对话示例
你 > 帮我检查一下 Docker 服务的状态
小纳: 好的,我来检查 Docker 服务的运行状态。
── 思考中 (1/10) ──
Token: 520 / 80
工具调用: execute_command
目的: 检查 Docker 服务状态
命令: systemctl status docker
风险等级: 安全
── 结果 ──
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled)
Active: active (running)
小纳: Docker 服务运行正常,状态为 active (running)。
你 > 那看看有哪些容器在运行
小纳: 好的,我来查看运行中的容器。
...
九、风险控制机制
风险等级
| 等级 | 颜色 | 说明 | 需要确认 |
|---|---|---|---|
| 安全 | 绿色 | 只读命令(ls/df/ps等) | 否 |
| 低风险 | 青色 | 未匹配到已知模式 | 是 |
| 高危 | 红色 | 删除/格式化/磁盘操作 | 是 |
| 极度危险 | 红底白字 | 高危中的高危 | 是 |
高危命令检测范围
- 删除操作: rm -rf, rmdir
- 磁盘操作: mkfs, dd, fdisk, parted, lvcreate, pvcreate
- 系统操作: shutdown, reboot, systemctl stop
- 权限操作: chmod -R, chown -R
- 网络操作: curl ... | bash, wget ... | sh
- 包管理: apt remove, dpkg --purge, yum remove
自定义风险规则
编辑 nas_agent_config.json 中的 risk 部分:
{
"risk": {
"enabled": true,
"auto_confirm_patterns": ["\\b(your_safe_pattern)\\b"],
"high_risk_patterns": ["\\b(your_dangerous_pattern)\\b"]
}
}
十、常见问题排查
Q1: 提示 API Key 未设置
原因: 配置文件中 api_key 为空,且未设置环境变量
解决:
1. 编辑 nas_agent_config.json 设置 api_key
2. 或运行: export NAS_AGENT_API_KEY=sk-xxx
3. 或设置: export OPENAI_API_KEY=sk-xxx
Q2: 无法连接到 API 地址
原因: API 地址无法访问
排查:
1. 检查网络: ping <api_base>
2. 检查端口: curl <api_base>/models
3. 确认服务是否启动
4. 防火墙是否放行
Q3: HTTP 401/403 错误
原因: API Key 无效或未授权
排查:
1. 检查 API Key 是否正确
2. 确认 Key 是否有模型访问权限
3. 对于 vLLM: 启动时需加 --api-key 参数
Q4: 模型回复乱码或不相关
原因: 模型能力不足或参数不合适
解决:
1. 降低 temperature(推荐 0.1)
2. 使用更强的模型(如 gpt-4o、qwen2.5-72b)
3. 检查模型是否支持 function calling
Q5: 终端中文显示乱码
# Linux/Mac: 检查 locale
locale | grep LANG
export LANG=zh_CN.UTF-8
# Windows: 推荐使用 Windows Terminal 或 Git Bash
十一、推送到 Git
初始化仓库(首次)
# 进入项目目录
cd /path/to/Redline-NASAI
# 初始化 Git 仓库
git init
git remote add origin http://8.140.62.87:7777/redline/Redline-NASAI.git
# 添加所有文件
git add .
git commit -m "feat: init NAS Agent - LLM-powered NAS management tool"
# 推送到远程
git push -u origin main
# 如果远程已有内容,先 pull 再 push:
git pull origin main --rebase
git push -u origin main
推送更新
git add -A
git commit -m "update: description of changes"
git push
.gitignore 文件
创建 .gitignore:
__pycache__/
*.pyc
.nas_agent_history
.env
*.log
十二、附录:命令速查表
运行时命令
| 命令 | 作用 |
|---|---|
| /exit | 退出程序 |
| /reset | 重置对话(清除历史) |
| /help | 显示帮助 |
| /config | 查看配置 |
| /model | 切换模型 |
| /api | 切换 API 地址 |
常用 NAS 任务示例
"查看磁盘使用情况" → df -h
"查看目录大小" → du -sh /path
"列出目录内容" → ls -la /path
"查看内存使用" → free -h
"查看 CPU 信息" → cat /proc/cpuinfo
"查看系统负载" → uptime
"查看进程" → ps aux
"查看 Docker 容器" → docker ps
"查看 Docker 日志" → docker logs <container>
"查看服务状态" → systemctl status <service>
"查看网络连接" → netstat -tlnp
"查看系统日志" → journalctl -n 50
"读取配置文件" → cat /etc/nginx/nginx.conf
十三、群晖 NAS 部署教程(Step by Step)
本教程针对 群晖 Synology NAS 环境,从零开始一步步部署。
第 1 步:启用 SSH
群晖默认 SSH 是关闭的,先开启:
- 浏览器登录 DSM → 控制面板 → 终端机和 SNMP
- 勾选 启动 SSH 功能,端口默认
22(建议改高位端口如2222) - 点击 应用
第 2 步:SSH 登录 NAS
从你的电脑连接:
ssh 你的用户名@192.168.1.xxx -p 22
密码就是你 DSM 的登录密码。
第 3 步:切换到 root 权限
sudo -i
# 输入你的密码
第 4 步:安装 Python 3 和 Git
方法 A:通过群晖套件中心安装(推荐)
- DSM → 套件中心 → 搜索 Python 3
- 安装 Python 3(群晖官方套件,含 pip)
- 搜索 Git → 安装 Git Server
方法 B:命令行安装
synopkg install Python3
synopkg install Git
python3 --version
git --version
方法 C:使用 Entware(最稳妥,适用于所有版本)
wget -O - http://bin.entware.net/x64-k3.2/installer/generic.sh | /bin/sh
echo 'export PATH=$PATH:/opt/bin:/opt/sbin' >> ~/.profile
source ~/.profile
/opt/bin/opkg update
/opt/bin/opkg install python3 python3-pip git git-http
第 5 步:验证 Python 环境
python3 --version
python3 -m pip --version
python3 -m ensurepip --upgrade
第 6 步:克隆项目
cd /root
git clone http://8.140.62.87:7777/redline/Redline-NASAI-web.git
cd Redline-NASAI-web/nas_agent
第 7 步:安装 Python 依赖
python3 -m pip install requests flask -q
python3 -c "import requests; print('OK')"
python3 -c "import flask; print('OK')"
第 8 步:配置 LLM(大模型)— 最关键的一步
NAS Agent 需要接入一个大模型才能工作。根据你的情况选择配置方式:
方式 A:使用前必须先编辑配置文件(推荐,完整配置)
# 编辑配置文件
nano nas_agent_config.json
找到 llm 部分,修改三个关键字段:
{
"llm": {
"api_base": "https://api.openai.com/v1", ← API 地址
"api_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxx", ← API Key
"model": "gpt-4o", ← 模型名
"max_tokens": 4096,
"temperature": 0.1
}
}
各个场景的配置示例:
👉 场景 1:OpenAI 官方 API
{
"llm": {
"api_base": "https://api.openai.com/v1",
"api_key": "sk-你的OpenAIKey",
"model": "gpt-4o"
}
}
👉 场景 2:其他第三方 API(兼容 OpenAI 格式的都可以)
{
"llm": {
"api_base": "https://api.xxx.com/v1", ← 第三方提供的地址
"api_key": "sk-第三方给你的Key", ← 第三方给的 Key
"model": "他们的模型名" ← 第三方支持的模型
}
}
👉 场景 3:内网自己部署的模型(vLLM)
{
"llm": {
"api_base": "http://192.168.1.200:8000/v1", ← 内网服务器地址
"api_key": "token-abc123", ← 部署时设置的 Key
"model": "/data/models/Qwen2.5-7B-Instruct" ← 模型路径
}
}
👉 场景 4:本地 Ollama(免费,不需要 Key)
{
"llm": {
"api_base": "http://localhost:11434/v1",
"api_key": "ollama",
"model": "qwen2.5:7b"
}
}
保存文件后(Ctrl+X → Y → Enter),配置就生效了。
方式 B:环境变量(仅设置 Key,地址和模型用默认值)
# 只设置 API Key,地址默认用 OpenAI,模型默认 gpt-4o
export NAS_AGENT_API_KEY=sk-你的Key
echo 'export NAS_AGENT_API_KEY=sk-你的Key' >> ~/.profile
方式 C:启动后通过 Web 界面设置
先启动(第 9 步),然后浏览器访问 http://NAS_IP:5000,登录后点 ⚙ 设置,在页面中填写 API 地址、模型名、API Key。
⚠️ 注意:
NAS_AGENT_API_KEY是 LLM 的 API Key,不是后面 NAS API 的 Key(na-xxx格式)。
第 9 步:启动 Web 界面
python3 web_app.py
浏览器访问 http://192.168.1.xxx:5000,默认密码 admin123
第 10 步:后台运行(退出 SSH 后不中断)
cd /root/Redline-NASAI-web/nas_agent
nohup python3 web_app.py > web.log 2>&1 &
tail -f web.log
第 11 步:设置开机自启
- 控制面板 → 任务计划
- 新增 → 触发的任务 → 开机
- 任务名称:
NAS Agent,用户:root - 任务设置 → 运行命令:
sleep 30
cd /root/Redline-NASAI-web/nas_agent
nohup python3 web_app.py > web.log 2>&1 &
第 12 步:防火墙放行端口
- 控制面板 → 安全 → 防火墙
- 编辑规则 → 新增
- 端口:
5000,协议:TCP,动作:允许
第 13 步:外网访问(可选)
路由器设置端口转发:
- 外部端口:
5000→ 内部 IP:你的 NAS IP → 内部端口:5000
常见问题
Q:Python 版本太低? 用 Entware 安装新版(见第 4 步方法 C)
Q:5000 端口被 DSM 占用? DSM 默认使用 5000/5001,启动时换端口:
export NAS_WEB_PORT=8080
python3 web_app.py
Q:如何更新?
cd /root/Redline-NASAI-web/nas_agent
git pull
kill $(pgrep -f web_app.py)
nohup python3 web_app.py > web.log 2>&1 &
nas_agent/
├── nas_agent.py # 主程序 (640行)
├── nas_agent_config.json # 配置文件
├── requirements.txt # 依赖
├── README.md # 本文档
└── .gitignore # Git 忽略规则
最后更新: 2026-07-22