CLI (onyx-cli)(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/onyx-dot-app/onyx/13.2-cli-onyx-cli
翻译时间:2026-05-27T08:44:49.736Z
翻译模型:deepseek-chat
原文字符数:10110
项目:Onyx (onyx)
---
CLI (onyx-cli)
相关源文件
以下文件被用作生成此维基页面的上下文:
cli/cmd/chat.gocli/cmd/experiments.gocli/cmd/root.gocli/internal/config/config.gocli/internal/config/config_test.gocli/internal/config/experiments.gocli/internal/starprompt/starprompt.gocli/internal/tui/app.gocli/internal/tui/commands.gocli/internal/tui/experiments.gocli/internal/tui/help.gocli/internal/tui/input.gocli/internal/tui/viewport.gocli/internal/tui/viewport_test.godeployment/docker_compose/docker-compose.onyx-lite.ymldeployment/docker_compose/install.ps1deployment/docker_compose/install.shdeployment/helm/charts/onyx/values-lite.yaml
Onyx CLI(onyx-cli)是一个基于 Go 语言的终端界面,提供了一种轻量级、高性能的方式来与 Onyx 服务器交互。它既支持交互式终端用户界面(TUI)聊天会话,也支持一次性命令行查询,使开发者和高级用户无需离开终端环境即可访问 Onyx 知识库。
安装与分发
该 CLI 使用 Go 语言编写,并打包为 Python wheel 格式,通过 pip 或 uv 进行分发。这使其能够在 Linux、macOS 和 Windows 平台上跨平台安装。
- Pip/UV 安装: 用户可以使用
pip install onyx-cli或uv tool install onyx-cli安装 CLI。 - 构建系统: 项目使用
hatchling作为构建后端,并带有自定义构建钩子(hatch_build.py),在 wheel 创建过程中编译 Go 二进制文件。 - 精简部署: 对于资源受限的环境,Onyx 提供了"精简"模式(通过
install.sh --lite或docker-compose.onyx-lite.yml),该模式会禁用 Vespa 和模型服务器等重型服务,同时仍允许通过 PostgreSQL 后端实现 CLI 聊天和文件上传功能deployment/docker_compose/install.sh:33-36,deployment/docker_compose/docker-compose.onyx-lite.yml:4-8。
自动化发布管线
CLI 发布流程由匹配 cli/v*.*.* 模式的 Git 标签触发。GitHub Action 会为 linux、windows 和 darwin 平台构建 amd64 和 arm64 架构的 wheel 包。
配置
CLI 通过配置文件或环境变量来识别目标 Onyx 服务器并进行认证。
配置文件
设置存储在一个 JSON 文件中,路径为: ~/.config/onyx-cli/config.json cli/internal/config/config.go:71-73。目录由 ConfigDir() 确定,该函数会遵循 XDG_CONFIG_HOME 环境变量 cli/internal/config/config.go:59-68。
环境变量
环境变量优先于配置文件 cli/internal/config/config.go:101-120:
ONYX_SERVER_URL:Onyx API 的基础 URL(例如https://cloud.onyx.app)。cli/internal/config/config.go:12ONYX_API_KEY:用于认证的个人访问令牌(PAT)或 API 密钥。cli/internal/config/config.go:13ONYX_PERSONA_ID:要使用的默认代理 ID。cli/internal/config/config.go:14ONYX_STREAM_MARKDOWN:控制流式传输期间是否进行渐进式 Markdown 渲染(true/false)。cli/internal/config/config.go:16
config.Load() 函数负责从文件加载配置并应用环境变量覆盖 cli/internal/config/config.go:98-122。
命令与功能
CLI 使用 cobra 库进行命令路由 cli/cmd/root.go:70-113,并使用 bubbletea 进行 TUI 渲染 cli/cmd/chat.go:44-45。
一次性查询(ask)
ask 命令允许用户执行单次检索增强生成(RAG)查询。CLI 与后端 API 通信,检索相关文档并基于默认或指定的 Persona 生成响应。
交互式 TUI 聊天
交互模式提供完整的基于终端的聊天体验。当未指定子命令时,这是默认命令 cli/cmd/root.go:104-110。首次运行时,交互式设置向导(onboarding.Run)会引导用户完成配置 cli/cmd/chat.go:27-33。
- 斜杠命令: 通过
handleSlashCommand分发cli/internal/tui/commands.go:17。 - 键盘快捷键:
- 视口管理:
viewport结构体管理消息历史cli/internal/tui/viewport.go:52-70。它使用glamour进行 Markdown 渲染cli/internal/tui/viewport.go:73-82。如果启用了streamMarkdown,它会每 100 毫秒渐进式渲染一次cli/internal/tui/viewport.go:49-50,cli/internal/tui/viewport.go:129-143。
- /help:显示可用命令和快捷键 cli/internal/tui/help.go:3-15。 - /clear / /new:重置会话并重新添加启动画面 cli/internal/tui/commands.go:83-101。 - /agent:列出可用代理并允许切换 cli/internal/tui/commands.go:103-110。 - /attach <path>:通过 client.UploadFile 上传文件到后端 cli/internal/tui/commands.go:143-160。 - /sessions:使用 client.ListChatSessions 浏览之前的会话 cli/internal/tui/commands.go:162-169。 - /configure:指示用户运行 onyx-cli configure cli/internal/tui/commands.go:45-47。 - /connectors:在浏览器中打开服务器的索引状态页面 cli/internal/tui/commands.go:52-59。 - /experiments:列出实验性功能及其状态 cli/internal/tui/commands.go:70-72。 - /quit:退出 CLI cli/internal/tui/commands.go:74-75。
- Enter:发送消息。 - Escape:取消当前生成。 - Ctrl+O:切换来源引用显示 cli/internal/tui/help.go:20。 - Ctrl+D:退出(按两次)cli/internal/tui/help.go:21。
SSH 服务模式
CLI 可以通过 serve 命令充当 SSH 服务器 cli/cmd/root.go:99,允许用户通过 SSH 连接到特定端口并立即进入 Onyx 聊天会话。此模式利用了 charmbracelet/ssh 和 charmbracelet/wish。
数据流:CLI 到后端
下图展示了 CLI 如何与核心 Onyx 基础设施交互。
CLI 请求编排
graph TD
subgraph "客户端空间 (onyx-cli)"
A["用户输入(例如 'onyx-cli chat')"] --> B["cmd.Execute()"]
B -- "加载配置" --> C["config.Load()"]
B -- "初始化 API 客户端" --> D["api.NewClient(cfg)"]
B -- "交互式 TUI" --> E["tui.NewModel(cfg)"]
E -- "用户消息" --> D
D -- "HTTP POST /api/chat/send-message" --> F["Onyx 后端 (FastAPI)"]
end
subgraph "后端空间 (onyx-server)"
F --> G["run_llm_loop"]
G -- "精简模式 (DISABLE_VECTOR_DB=true)" --> H["PostgreSQL 缓存/认证"]
G -- "标准模式" --> I["Vespa / OpenSearch"]
I -- "检索结果" --> G
G -- "LLM 响应 (SSE)" --> F
F -- "流式响应" --> D
end
D -- "Token 事件" --> E
E -- "视口更新" --> J["终端显示"]
来源:cli/cmd/root.go:65-113,cli/cmd/chat.go:24-45,cli/internal/config/config.go:98-122,cli/internal/tui/commands.go:17-81,deployment/docker_compose/docker-compose.onyx-lite.yml:55-59
实现细节:TUI 视口
viewport 是用于渲染对话的核心组件。它跟踪 chatEntry 对象,这些对象区分用户消息、代理响应和引用来源。
视口实体关联
graph LR
subgraph "代码实体"
VM["tui.viewport"]
CE["tui.chatEntry"]
GR["glamour.TermRenderer"]
EK["tui.entryKind"]
end
subgraph "渲染逻辑"
VM -- "包含" --> CE
CE -- "类型" --> EK
EK -- "entryUser" --> USER["❯ 前缀"]
EK -- "entryAgent" --> AGENT["● 前缀"]
EK -- "entryCitation" --> CIT["来源 (N)"]
VM -- "使用" --> GR
GR -- "渲染" --> AGENT
end
来源:cli/internal/tui/viewport.go:18-32,cli/internal/tui/viewport.go:52-70,cli/internal/tui/viewport.go:110-117,cli/internal/tui/viewport.go:168-180,cli/internal/tui/viewport.go:220-243
关键函数和类
newChatCmd():初始化chat命令,这是默认的交互式 TUI 模式cli/cmd/chat.go:12-53。Execute():Cobra CLI 的主入口点,负责解析参数和分发命令cli/cmd/root.go:65-113。config.OnyxCliConfig:定义 CLI 配置参数的结构体,包括ServerURL、APIKey和DefaultAgentIDcli/internal/config/config.go:28-32。tui.Model:交互式聊天 TUI 的中央bubbletea模型,管理状态、输入和渲染。tui.viewport:管理 TUI 中聊天消息、代理响应和引用来源的显示cli/internal/tui/viewport.go:52-70。starprompt.MaybePrompt():一次性提示,鼓励用户给 GitHub 项目加星,在 TUI 启动前显示cli/internal/starprompt/starprompt.go:46-83。
来源:cli/cmd/root.go:65-113,cli/cmd/chat.go:12-53,cli/internal/config/config.go:28-32,cli/internal/config/config.go:98-122,cli/internal/tui/viewport.go:18-70,cli/internal/tui/commands.go:17-81,cli/internal/starprompt/starprompt.go:46-83,deployment/docker_compose/docker-compose.onyx-lite.yml:1-33