OE-CLI 是 openEuler Intelligence 的命令行客户端,提供 AI 驱动的命令行交互体验。支持多种 LLM 后端,集成 MCP 协议,提供现代化的 TUI 界面。
- 多后端支持: 支持 OpenAI API 大模型和 openEuler Intelligence 后端
- 智能终端界面: 基于 Textual 的现代化 TUI 界面
- 流式响应: 实时显示 AI 回复内容
- 部署助手: 内置 openEuler Intelligence 自动部署功能
- 一键认证: 提供浏览器登录流程,自动获得并保存 API Key
-
克隆仓库:
git clone https://gitee.com/openeuler/euler-copilot-shell.git -b dev cd euler-copilot-shell -
安装依赖(建议使用 Python 虚拟环境):
uv venv --python 3.11 .venv
source .venv/bin/activate
uv pip install -e '.[dev]'注意:仅适用于 openEuler 24.03 LTS SP2
sudo dnf install openeuler-intelligence-cli安装完成后,可以使用 oi 命令启动应用程序。
安装 RPM 包后:
oi查看最新的日志内容:
oi --logs设置日志级别并验证:
oi --log-level INFO初始化 openEuler Intelligence 后端(仅支持 openEuler 操作系统):
oi --init选择和设置默认智能体(仅适用于 openEuler Intelligence 后端):
oi --agent通过浏览器登录并自动保存 API Key(需要已配置的 openEuler Intelligence 后端):
oi --login运行前请确保运行环境具备图形界面并能启动默认浏览器;在无图形界面的场景下可使用 X11 转发或直接在目标服务器上执行该命令。
应用启动后,您可以直接在输入框中输入命令。如果命令无效或无法执行,应用程序将基于您的输入提供智能建议。
- Ctrl+S: 打开设置界面
- Ctrl+R: 重置对话历史
- Ctrl+T: 选择智能体
- Tab: 在命令输入框和输出区域之间切换焦点
- Esc: 退出应用程序
当使用支持 MCP (Model Context Protocol) 的后端时,应用程序会在需要工具确认或参数输入时:
- 工具执行确认: 显示工具名称、风险级别和执行原因,用户可选择确认或取消
- 参数补全: 动态生成参数输入表单,用户填写必要信息后提交
应用程序使用内联交互模式,不会打开模态对话框,确保流畅的用户体验。
--init 命令用于在 openEuler 操作系统上自动安装和配置 openEuler Intelligence 后端,它将执行以下步骤:
- 系统检测: 检测当前操作系统是否为 openEuler
- 环境检查: 验证 dnf 包管理器和管理员权限
- 包安装: 通过 dnf 安装
openeuler-intelligence-installerRPM 包 - 服务部署: 运行部署脚本完成系统初始化
使用要求:
- 仅支持 openEuler 操作系统
- 需要管理员权限(sudo)
- 需要网络连接以下载 RPM 包
注意:
- 此命令会自动安装系统服务,请在生产环境使用前仔细评估;
- 如果需要重启或卸载 openEuler Intelligence 后端,请以管理员身份运行
oi-manager并根据指引操作; oi-manager的卸载功能会清空机器上 MongoDB 和 PostgreSQL 的全部数据并重置 nginx 服务,请谨慎操作。
--agent 命令用于在命令行中选择和设置默认智能体,它提供了一个 TUI 界面来管理智能体配置:
- 智能体列表: 自动获取并显示所有可用的智能体
- 可视化选择: 通过图形化界面选择要设置为默认的智能体
- 配置保存: 自动将选择保存到配置文件中的
eulerintelli.default_app字段 - 即时反馈: 设置完成后显示确认信息
使用要求:
- 必须配置为 openEuler Intelligence 后端
- 需要有效的服务器连接来获取智能体列表
- 如果后端不是 openEuler Intelligence,会显示错误提示并引导切换
功能特点:
- 包含"智能问答"选项(无智能体)作为默认选择
- 支持取消操作,不会更改现有配置
- 自动处理网络错误和异常情况
--llm-config 命令用于配置已部署的 openEuler Intelligence 后端的 LLM 和 Embedding 模型参数,它提供了一个简洁的 TUI 界面来管理系统级配置:
- 系统配置管理: 直接修改系统配置文件
/etc/euler-copilot-framework/config.toml和/etc/euler-copilot-rag/data_chain/env - LLM 配置: 设置大语言模型的端点、API 密钥、模型名称、最大输出令牌数和温度参数
- Embedding 配置: 配置嵌入模型的端点、API 密钥和模型名称
- 实时验证: 自动验证 API 连接性和配置有效性
- 服务重启: 配置保存后自动重启相关系统服务(
oi-runtime和oi-rag)
使用要求:
- 仅适用于已部署的 openEuler Intelligence
- 需要管理员权限(sudo)运行
- 需要系统配置文件存在且有写入权限
- 需要网络连接以验证 API 配置
功能特点:
- 分标签页配置: LLM 和 Embedding 配置分别在不同标签页中管理
- 自动验证: 输入配置后自动验证 API 连接性
- 智能检测: 自动检测 function call 类型和 embedding 类型
- 安全保存: 配置验证通过后才能保存
- 服务管理: 自动重启相关系统服务使配置生效
配置项说明:
-
LLM 配置:
- 端点地址: LLM API 的基础 URL
- API 密钥: 访问 LLM 服务的认证密钥
- 模型名称: 要使用的具体模型名称
- 最大输出令牌数: 单次请求的最多输出的令牌数(默认 8192)
- 温度参数: 控制生成随机性的参数(默认 0.7)
-
Embedding 配置:
- 端点地址: Embedding API 的基础 URL
- API 密钥: 访问 Embedding 服务的认证密钥
- 模型名称: 要使用的 Embedding 模型名称
注意:
- 此命令直接修改系统配置文件,请在生产环境使用前仔细评估;
- 配置保存后会自动重启
oi-runtime和oi-rag服务,可能会影响正在运行的服务; - 如果系统配置文件不存在或权限不足,工具会显示相应错误信息并退出;
- 建议在修改配置前备份原有的配置文件。
--login 命令用于通过默认浏览器获取 openEuler Intelligence 的 API Key,并自动写入到本地配置:
- 获取授权地址: 从已配置的 openEuler Intelligence 后端读取登录跳转链接;
- 本地回调服务: 在本地启动一个临时回调服务器,处理浏览器回传的数据;
- 打开浏览器: 自动打开登录页面,用户按提示完成账号登录;
- 保存凭证: 登录成功后自动将返回的访问令牌写入配置文件。
使用要求:
- 已通过
--init或手动方式配置 openEuler Intelligence URL; - 运行环境具备可用浏览器(无头服务器需使用图形转发或在本地执行);
- 登录过程需要网络访问 openEuler Intelligence 后端。
遇到错误时,命令会输出详细的提示信息帮助排查,例如未检测到浏览器或 URL 未配置等情况。
应用程序内置多语言支持,提供英文和中文界面。
- English (en_US) - 默认语言
- 简体中文 (zh_CN)
# 切换到中文
oi --locale zh_CN
# 切换到英文
oi --locale en_US语言设置会自动保存,下次启动时生效。
应用启动时会按以下优先级确定显示语言:
- 用户配置文件中的语言设置
- 系统环境变量(
LANG,LC_ALL等) - 默认语言(英语)
如果系统语言为中文,首次运行时会自动使用中文界面。
如需为应用程序添加新的翻译或了解国际化实现细节,请参考:
应用程序支持两种后端配置,配置文件会自动保存在 ~/.config/eulerintelli/smart-shell.json:
- OpenAI 兼容 API (包括 LM Studio、vLLM、Ollama 等)
- openEuler Intelligence
首次运行时,可通过设置界面 (Ctrl+S) 配置以下参数:
OpenAI 兼容 API 配置:
- Base URL: 如
http://localhost:1234/v1 - Model: 如
qwen/qwen3-30b-a3b - API Key: 如
sk-xxxxxx
openEuler Intelligence 配置:
- Base URL: 如
http://your-server:8002 - API Key: 您的认证令牌
对于 openEuler Intelligence 后端,应用程序支持多智能体切换:
- 默认智能问答: 通用 AI 助手
- 专业智能体: 针对特定领域的专门助手
使用 Ctrl+T 可以在运行时切换不同的智能体。
应用程序支持配置默认启动的智能体:
- 默认智能体配置: 决定应用启动时激活哪个智能体,持久保存
- 运行时智能体切换: 在当前会话中临时切换智能体,不影响默认配置
oi --agent通过图形化界面选择默认智能体,选择会自动保存到配置文件。
直接编辑配置文件 ~/.config/eulerintelli/smart-shell.json,修改 eulerintelli.default_app 字段的值:
- 设置为空字符串
""或删除该字段:使用"智能问答"(没有调用工具的能力) - 设置为有效的智能体ID:使用指定的智能体作为默认
- 设置为无效的智能体ID:应用启动时会自动清理并回退到"智能问答"
- 配置位置:
~/.config/eulerintelli/smart-shell.json中的eulerintelli.default_app字段 - 默认行为: 如果未设置或为空,将默认使用"智能问答"(通用助手)
- 自动应用: 应用启动时会自动加载配置的默认智能体
- 自动清理: 如果配置的智能体ID不存在(如服务器数据更改),会自动清理配置并回退到"智能问答"
配置示例:
{
"backend": "eulerintelli",
"eulerintelli": {
"base_url": "http://your-server:8002",
"api_key": "your-api-key",
"default_app": "your-preferred-agent-id"
}
}应用程序提供多级日志记录:
- DEBUG: 详细调试信息(默认)
- INFO: 基本信息
- WARNING: 警告信息
- ERROR: 仅错误信息
应用程序提供完整的日志记录功能:
- 日志位置:
~/.cache/openEuler Intelligence/logs/ - 日志格式:
smart-shell-YYYYMMDD-HHMMSS.log(使用本地时区时间) - 自动清理: 每次启动时自动删除7天前的旧日志和空日志文件
- 命令行查看: 使用
python src/main.py --logs查看最新日志内容 - 记录内容:
- 程序启动和退出
- API请求详情(URL、状态码、耗时等)
- 异常和错误信息
- 模块级别的操作日志
- Python: 3.11 或更高版本
- 操作系统: openEuler 24.03 LTS 或更高版本
- 网络: 访问配置的 LLM API 服务
核心依赖:
- textual: 5.3.0 - TUI 界面框架
- rich: 14.1.0 - 富文本渲染
- httpx: 0.28.1 - HTTP 客户端
- openai: 1.99.6 - OpenAI API 客户端
开发依赖:
- ruff: Latest - 代码检查器
自动部署功能(--init 命令):
- 仅支持 openEuler 操作系统
- 需要管理员权限(sudo)
- 需要 dnf 包管理器
- 需要网络连接
以下步骤演示如何在 openEuler 24.03 LTS 或更高版本上,使用自带脚本打包生成 RPM 包。
前提条件:
- 操作系统:openEuler 24.03 LTS 或更高版本
- 工具依赖:rpmdevtools、git、bash
- 具有管理员权限(sudo)
构建步骤:
-
克隆仓库并切换到对应分支:
git clone https://gitee.com/openeuler/euler-copilot-shell.git -b dev cd euler-copilot-shell -
为构建脚本添加可执行权限:
chmod +x scripts/build/create_tarball.sh scripts/build/build_rpm.sh
-
运行 RPM 构建脚本:
./scripts/build/build_rpm.sh
脚本执行完成后,会在临时构建目录下的
RPMS和SRPMS子目录中生成相应的二进制包和源码包,并在终端输出具体路径。
smart-shell/
├── README.md # 项目说明文档
├── pyproject.toml # 项目配置与依赖(由 uv 管理)
├── requirements.txt # pip 兼容依赖列表(使用 uv export 生成)
├── uv.lock # uv 生成的锁定文件
├── LICENSE # 开源许可证
├── distribution/ # 发布相关文件
├── docs/ # 项目文档目录
│ └── development/ # 开发设计文档
│ └── server-side/ # 服务端相关文档
├── scripts/ # 部署脚本目录
│ └── build/ # RPM 包构建脚本
│ └── deploy/ # 自动化部署脚本
├── tests/ # 测试文件目录
└── src/ # 源代码目录
├── main.py # 应用程序入口点
├── app/ # TUI 应用模块
│ ├── tui.py # 主界面应用类
│ ├── mcp_widgets.py # MCP 交互组件
│ ├── tui_mcp_handler.py # MCP 事件处理器
│ ├── settings.py # 设置界面
│ ├── css/
│ │ └── styles.tcss # TUI 样式文件
│ ├── deployment/ # 部署助手模块
│ │ ├── agent.py # 智能体部署管理
│ │ ├── models.py # 部署配置模型
│ │ ├── service.py # 部署服务逻辑
│ │ ├── ui.py # 部署界面组件
│ │ └── components/ # 部署组件模块
│ └── dialogs/ # 对话框组件
│ ├── agent.py # 智能体选择对话框
│ └── common.py # 通用对话框组件
├── backend/ # 后端适配模块
│ ├── base.py # 后端客户端基类
│ ├── factory.py # 后端工厂类
│ ├── mcp_handler.py # MCP 事件处理接口
│ ├── openai.py # OpenAI 兼容客户端
│ └── hermes/ # openEuler Intelligence 客户端
│ ├── client.py # Hermes API 客户端
│ ├── constants.py # 常量定义
│ ├── exceptions.py # 异常类定义
│ ├── mcp_helpers.py # MCP 事件辅助工具
│ ├── models.py # 数据模型
│ ├── stream.py # 流式响应处理
│ └── services/ # 服务层组件
├── config/ # 配置管理模块
│ ├── manager.py # 配置管理器
│ └── model.py # 配置数据模型
├── log/ # 日志管理模块
│ └── manager.py # 日志管理器
└── tool/ # 工具模块
├── command_processor.py # 命令处理器
├── oi_backend_init.py # 后端初始化工具
├── oi_llm_config.py # LLM 配置管理工具
├── oi_select_agent.py # 智能体选择工具
└── validators.py # 配置验证器
欢迎贡献代码!请随时提交 PR 或开启问题讨论任何功能增强或错误修复建议。
- 项目整体设计 - 系统架构和整体设计方案
- TUI应用模块设计 - 用户界面模块设计
- 后端适配模块设计 - 多后端支持架构
- 部署助手模块设计 - 自动部署功能设计
- 配置管理模块设计 - 配置管理系统设计
- 日志管理模块设计 - 日志记录系统设计
- 安装部署手册 - 详细的部署指南
本项目采用 MulanPSL-2.0 许可证。详细信息请参见 LICENSE 文件。