告别手敲命令!个人开源 AI 运维神器 AITerm,用自然语言远程管理服务器
AITerm
AI 驱动的智能终端管理工具,通过自然语言指令远程管理服务器。
项目地址:https://gitee.com/newpc/aiterm
简介
在日常运维服务器过程中,经常需要手动输入大量命令。AITerm 旨在通过自然语言交互,让 AI 自动完成这些任务,提升运维效率。
虽然市面上已有 Claude Code、Openclaw、OpenCode、Codex 等自动化工具,但在部署、使用灵活性方面个人认为仍有不足。AITerm 专注于:
- 快速部署- 一键启动,无需复杂配置
- 模型配置简单- 支持 OpenAI 兼容 API,配置直观
- 提示词自定义- 系统提示词支持完全自定义
- 多端访问- Web 架构,PC 端、移动端均可访问
本系统使用 DeepSeek 官方 API 调试开发,支持
/chat/completions接口,兼容 OpenAI API 格式。
功能特性
- 自然语言交互- 用自然语言描述任务,AI 自动规划并执行
- 多节点管理- 支持管理多台服务器,统一调度执行
- 智能命令生成- AI 自动生成适配目标系统的命令
- 风险评估- 高风险命令自动识别,需人工确认后执行
- 实时执行反馈- SSE 流式输出命令执行过程
- 跨平台支持- 兼容 Windows、Linux、macOS
- 工具系统- 支持自定义工具,大模型可调用工具获取信息
界面展示
对话界面
自然语言交互界面,AI 实时展示思考过程和工具调用。
对话历史
查看历史对话记录,支持继续对话和重新生成。
终端界面
支持在终端中直接执行命令,实时查看执行结果。
节点管理
管理多台服务器节点,支持添加、编辑、删除节点。
技术栈
后端
- Python 3.10+ / FastAPI
- SQLite
- OpenAI 兼容 API
前端
- Vue 3 + TypeScript
- Element Plus
- xterm.js
- CodeMirror 6
快速开始
环境要求
- Python 3.10+
- Node.js 18+
后端启动
cdaiterm-server-python pipinstall-rrequirements.txt python main.py服务默认运行在http://localhost:18084
前端启动
cdaiterm-webyarninstallyarndev前端开发服务器默认运行在 `http://localhost:18085
工具系统
初始化默认工具
运行以下脚本导入预设工具和默认配置提示词
cdaiterm-server-python python init_scripts/init_tools.py python init_scripts/init_settings.py预设工具包括:
| 工具名称 | 显示名称 | 描述 |
|---|---|---|
| get_current_time | 获取当前时间 | 获取当前日期、时间和星期 |
| read_file | 读取文件 | 读取指定路径的文件内容 |
| write_file | 写入文件 | 将内容写入指定路径的文件 |
| list_directory | 列出目录 | 列出指定目录下的文件和子目录 |
| delete_file | 删除文件 | 删除指定的文件 |
| copy_file | 复制文件 | 复制文件到指定路径 |
| move_file | 移动文件 | 移动或重命名文件 |
| http_request | HTTP请求 | 发送HTTP请求,支持GET、POST等方法 |
| download_file | 下载文件 | 从URL下载文件到本地 |
| create_directory | 创建目录 | 创建目录,支持多级创建 |
| get_file_info | 获取文件信息 | 获取文件的详细信息,包括大小、修改时间等 |
| search_files | 搜索文件 | 在目录中搜索匹配的文件 |
工具管理
内置40+工具可以导入
工具编辑可以指定参数、工具名称、描述,自定义工具代码功能,可以测试工具的输入、输出。
系统可以借助 工具+大模型 灵活完成任务。
自定义工具配置,包括工具名称、描述、参数定义和执行代码。
工具调用流程
用户消息 → 大模型 → 判断是否需要调用工具 ↓ 返回 tool_calls(工具名+参数) ↓ 系统执行工具代码 → 返回结果 ↓ 结果返回大模型 → 生成最终回复对话流程
消息展示结构
对话过程中,消息按照以下顺序展示:
┌─────────────────────────────────────────────────────────────┐ │ 用户输入 │ │ "写一个 HTTP Python 服务器文件并保存" │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 🧠 思考中... (实时显示) │ │ ├─ 用户想要创建一个 HTTP 服务器文件... │ │ ├─ 我需要先查看当前目录结构... │ │ └─ 然后创建一个简单的 HTTP 服务器代码... │ │ │ │ ✅ 已思考 (耗时 2.3s) [展开/收起] │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 🔧 调用工具: list_directory (2024-01-15 10:30:15) │ │ ├─ 参数: {"path": "/data/sandbox"} │ │ └─ 结果: {"files": ["test.py", "data.json"]} │ │ │ │ 🔧 调用工具: write_file (2024-01-15 10:30:18) │ │ ├─ 参数: {"path": "/data/sandbox/http_server.py", ...} │ │ └─ 结果: {"success": true} │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 💬 AI 回答 │ │ 我已经为你创建了一个简单的 HTTP 服务器文件 `http_server.py`, │ │ 保存在沙盒目录中。你可以使用以下命令运行它: │ │ │ │ ```bash │ │ python http_server.py │ │ ```│ └─────────────────────────────────────────────────────────────┘多轮工具调用
当任务复杂时,大模型可能进行多轮思考和工具调用:
输入 → 思考1 → 工具调用1 → 思考2 → 工具调用2 → ... → 回答示例流程:
| 步骤 | 类型 | 内容说明 |
|---|---|---|
| 1 | 输入 | 用户发送消息 |
| 2 | 思考 | 大模型分析任务,规划执行步骤 |
| 3 | 工具 | 调用list_directory查看目录结构 |
| 4 | 思考 | 根据目录内容,决定下一步操作 |
| 5 | 工具 | 调用write_file创建文件 |
| 6 | 思考 | 确认文件创建成功,准备回答 |
| 7 | 回答 | 生成最终回复 |
实时显示特性
- 思考过程实时流式输出- 用户可以看到大模型的思考过程
- 工具调用即时反馈- 显示工具名称、参数和执行结果
- 时间信息- 每个思考阶段和工具调用都显示时间戳
- 独立展开控制- 思考和工具调用区域可独立展开/收起
配置选项
在全局设置中可以配置:
| 配置项 | 说明 |
|---|---|
| 显示对话输入 | 是否显示每次调用大模型时的输入内容 |
| 最大迭代次数 | 工具调用的最大循环次数(默认 20) |
| 沙盒路径 | 文件操作允许的路径范围 |
模型配置
配置大模型 API,支持 OpenAI 兼容的 API 接口。
全局配置
系统全局设置,包括提示词模板、沙盒路径、迭代次数等。
用户配置
用户个人设置,包括主题、语言等偏好配置。
自定义工具
工具代码需要定义execute函数:
defexecute(arguments):""" arguments: dict - 工具参数 返回: 工具执行结果 """# 在这里编写你的工具逻辑return{"success":True,"result":"..."}使用示例
- 访问 Web 界面,配置 LLM API
- 在聊天界面输入自然语言指令,如:
- “查看系统内存使用情况”
- “安装 nginx 并配置反向代理”
- “检查磁盘空间并清理临时文件”
- AI 自动生成命令计划,确认后执行
- 实时查看执行结果
项目结构
AITerm/ ├── aiterm-server-python/ # 后端服务 │ ├── app/ # 应用模块 │ │ ├── api/ # API 路由 │ │ ├── db/ # 数据库模型 │ │ ├── models/ # Pydantic 模型 │ │ ├── repositories/ # 数据访问层 │ │ └── services/ # 业务逻辑层 │ ├── scripts/ # 脚本 │ │ └── init_tools.py # 工具初始化脚本 │ └── main.py # 入口文件 ├── aiterm-web/ # 前端应用 │ ├── src/ # 源代码 │ └── public/ # 静态资源 └── README.md完整对话示例
以下是一个完整的对话示例,展示了从用户输入到 AI 回答的完整流程:
对话流程说明
用户请求:“写一个 HTTP Python 的代码文件并保存”
第 1 轮迭代:
| 阶段 | 内容 |
|---|---|
| 思考 | 分析用户需求,决定先查看沙盒目录结构 |
| 工具调用 | list_directory- 查看目录I:/sandbox |
| 结果 | 发现目录中已有flask_app、http_server.py、main.py |
第 2 轮迭代:
| 阶段 | 内容 |
|---|---|
| 思考 | 决定创建一个新的综合 HTTP 示例文件http_demo.py |
| 工具调用 | write_file- 写入完整的 HTTP 服务器代码 |
| 结果 | 成功创建 6.6 KB 的 Python 文件 |
第 3 轮迭代:
| 阶段 | 内容 |
|---|---|
| 思考 | 验证文件是否创建成功 |
| 工具调用 | get_file_info- 获取文件信息 |
| 结果 | 确认文件创建成功,显示文件详情 |
最终回答:
AI 返回了文件创建成功的摘要,包括文件路径、大小、创建时间,以及文件内容说明和使用方法。
流程测试2
测试脚本
测试结果
系统自动规划步骤,逐步骤进行思考、调用工具、生成结果,最后得到答案
标题测试流程3
测试脚本
测试结果
测试过程
