进阶 onorca.dev 2026-10-18 18:52:10 · 19 阅读

第19章 Chat UI(原生聊天界面)

第19章:Chat UI(原生聊天)

基于受支持的 Agent 会话提供的可选聊天界面——支持结构化对话记录、技能调用、模型选择器以及内嵌可视化内容。Chat UI 是叠加在受支持 Agent 会话之上的实验性视图。启用后,Orca 将以结构化原生聊天形式打开受支持的新 Agent——这是一种包含记录区和编辑器的界面,会话状态保存在 Orca 中,因此应用重启后仍可恢复标签页及对话。结构化聊天支持 Claude、Codex、Grok、OpenCode(含 2.x 版本)、Pi 和 OMP。未实现结构化支持的 Agent,以及 WSL 或 SSH 会话,将使用基于终端的 Chat UI。

启用方法

1. 打开 设置 → 实验功能 → Chat UI。 2. 开启 Chat UI。

随后,受支持的新 Agent 标签页将默认以结构化聊天形式打开。若您之前使用的是默认终端模式的 Chat UI,标签页仍将保持在终端中打开,系统会通过一次性提示解释这一变更,并允许您切换至聊天模式。您可以通过标签页的右键菜单(“在新 CLI 中恢复”/“在新原生聊天中恢复”)或 Agent 会话历史将任意对话在聊天与终端之间移动。

结构化聊天

新的本地 Claude、Codex、Grok、OpenCode、Pi 或 OMP 会话将以结构化聊天标签页形式打开,其状态保存在 Orca 中,应用重启后可恢复标签页及对话内容。

结构化聊天适用于本地 macOS、Linux、原生 Windows 上的符合条件的会话,以及由配对 Orca Server 托管的工作区。WSL 和 SSH 会话仍使用基于终端的 Chat UI,未实现结构化支持的 Agent 保持终端模式。现有的终端会话维持原状。

在 设置 → 实验功能 → Chat UI 中,“使用 Shell 环境变量”选项控制传递给新或恢复的结构化聊天的变量。该选项默认开启,此时聊天将接收登录 Shell 导出的变量。关闭后,除基本 Shell 变量(如 PATH、locale、SSH_AUTH_SOCK)外,仅允许传递选定的变量名。基于终端的聊天继续使用其终端 Shell。

结构化聊天在启动 Agent 时,使用 设置 → Agents 中为该 Agent 保存的 命令 和 参数。可在 设置 → 聊天 中调整结构化聊天的文本大小、代码字体大小、宽度和对比度,或开启“匹配终端界面”以跟随终端的字体和颜色(包括后续的主题变更)。“内嵌可视化”允许 Agent 在桌面和手机端的回复中绘制图表、示意图和模型图;需要更多空间时,可在独立标签页中打开可视化内容,Mermaid 图表在深色模式下将遵循聊天主题。

若应用重启中断了结构化聊天,重新连接时 Orca 会提示恢复。您可以关闭该对话框,稍后从状态栏的“待恢复聊天”项进入。当没有可恢复的聊天时,该项消失。关闭的聊天标签页保持关闭状态,不会在右侧重新出现。

编辑器(Composer)

输入消息并发送(或停止正在进行的回合)。若宿主环境支持,可附加文件/图片。您可以从文件树或桌面将文件拖入编辑器——或聊天面板的任何位置——以添加为 Agent 可读取的路径。在更新后的本地 Codex 聊天中,可从应用菜单或剪贴板粘贴图片;待发送的图片显示为可移除的缩略图,点击缩略图可放大预览。附加的文件在编辑器中显示为文件名标签。若宿主环境支持,未发送的草稿文本和附件在断开/重连时保留在当前面板。已确定的对话记录在同一会话重连时保留在屏幕上,不会因加载新内容而变白(桌面和移动端共享此保留机制)。

在草稿中输入 @ 可选择工作区文件并插入为 Agent 可读取的路径。桌面端和移动端 Chat UI 中显示相同的建议弹窗。

在 macOS 上按 Cmd+F,或在 Windows/Linux 上按 Ctrl+F 可在聊天中查找文本。选中 Agent 回复的部分内容,选择“添加到聊天”可将其引用至编辑器;在空草稿中按上/下箭头可追溯发送过的所有提示词。

在 Agent 工作时发送的消息会作为卡片暂存于编辑器上方(可引导至当前运行回合、编辑或删除),若未干预,则会在当前回合结束时发送——即使 Agent 正在提问,也可就地编辑排队消息。移动端编辑器上方也显示相同卡片。

点击“停止”结束当前回合。对于 Claude,这会终止进程(包括后台命令和子 Agent);若 Codex 拒绝或未响应停止请求,Orca 会强制终止。聊天提示“未发送”的消息将保持未发送状态,直至选择“重试”;被引导的消息不会被重发。出站消息显示“发送中…”直到宿主确认,失败时显示“未发送”及原因;因 Orca 崩溃或退出而中断的回复,显示为已完成回合并附带单条解释。若 Orca 不得不截断回复,会说明原因并提供“继续”选项,该选项首先会请求 Agent 检查上一步是否完成。

使用已发送消息上的“回滚到此处”功能(鼠标悬停操作条上的撤销动作)可将对话回退至该节点;该消息返回编辑器供编辑和重发。回滚要求 Agent 处于空闲且无待办事项,Codex 的回滚针对整个回合。

在更新后的结构化 Codex 聊天中,活跃的工具调用在运行期间显示实时进度。工具完成后,其活动收敛为紧凑行,可展开查看命令或结果输出。

工具行标识其执行的操作(包括 MCP 和 Web 搜索任务),而非暴露内部操作名称。您可以从行中停止单个正在运行的任务,而不影响会话中的其他任务。

较长的已发送消息默认折叠,需切换查看;回复之间的思考和工具调用序列合并为一个可展开行,以保持繁忙记录的易读性。

若 Agent 提出带编号选项的问题,按数字键作答;Orca 会自动推进到下一个问题。

使用面板操作可分屏 Chat UI 或将其移动到其他面板,同时保持同一会话。

Agent 的文件编辑以内嵌差异卡片形式呈现。点击记录中的文件路径或链接可在 Orca 中打开。

在结构化聊天中,/clear 在同一面板中开启新对话,保留早期对话于历史记录。/compact 请求 Agent 压缩当前对话上下文以便继续工作;Claude、Codex、Grok、OpenCode 和 OMP 支持此功能。在 Agent 工作时发送 /compact 会排队等待,而非被拒绝。

若 Orca 或 Agent 在消息发送期间重启,Orca 会检查提供商的记录,若能证明消息已到达则确认发送状态。若证明消息未到达,则启用“重试”;若无法区分结果,Orca 将发送标记为“未确认”,以避免重复风险。

若 Orca 能生成名称,新聊天将根据首条消息命名;否则保持为 Claude Chat 或 Codex Chat。设置 → 聊天 → 聊天名称 可选择生成名称的 Agent 和命令,也可通过标签页操作重命名结构化聊天标签页。

在草稿起始处或空白后输入 /,可打开包含斜杠命令和发现技能的分组列表。选择器会插入该 Agent 预期的令牌(Claude 为 /skill,Codex 为 $skill);$ 不再打开独立选择器。在句子中间选择命令时,仅补全令牌而不发送周围草稿。命令和技能目录支持 Agent 感知,并与移动端 Chat UI 共享。在桌面端,若已安装 CLI 提供描述和参数提示,Claude 命令行将显示这些信息。

Agent 专属命令直接透传给 Agent,而非被聊天界面拒绝。包括 Claude 的 /init、/review 和 /help,以及 Codex 的 /goal <目标>;Orca 仍处理其自身的对话命令,如 /clear 和 /compact。

当 Agent 暴露相关选项时,使用模型和选项标签(思考级别、快速模式及其他 Agent 特定会话选项)。若提供商暴露大量模型,“搜索模型…”字段用于过滤选择器。快速模式是感知提供商和模型的切换开关;仅当活跃 Agent 报告支持时显示,并保留提供商支持的路由。Claude 模型选项来自该主机安装的 Claude CLI(非硬编码列表),因此更新 CLI 后新模型即可显示。Codex 支持通过标签页直接选择模型(发送 /model ),裸 /model 仍打开 Agent 选择器,并提供 Ultrafast 作为速度选项。Grok 暴露模型(启动时 -m,会话中 /model)和推理强度(启动时 --reasoning-effort,会话中 /effort);模型列表从已登录的 Grok CLI(grok models)探测,已退役的 ID 会从选择器中移除。强度选项随所选模型变化:Grok 4.6 包含 Extra high,而 Grok 4.5 最高为 High。模型选择器不再等待 Agent 启动:在 Agent 进程启动前,编辑器显示该 Agent 的模型和强度选项,并在首次启动时应用。会话激活后,仅影响运行中回合的标签页在会话就绪前保持禁用或标注状态。实时数值传递给该标签页的 CLI。

在更新后的结构化 Claude 聊天中,模型和强度控制旁的圆环显示对话使用上下文窗口的比例。展开可查看令牌数量,以及消息、工具、内存文件和其他上下文占用的空间。该指标在回合中更新,重新打开聊天时仍可用。

Codex、Pi 和 OMP 在发送前若检测到未登录,会显示提示但不禁用“发送”按钮,以便您修复登录而非等待失败的回合。

对于长结构化对话,记录边缘会出现消息栏,每个用户提示词对应一个标记。悬停或聚焦可预览提示词,选择一个即可跳转回该回合;长历史记录会被采样,以保持消息栏紧凑。

向上滚动查看更早的消息。Chat UI 在您到达顶部前预加载早期历史;若页面加载失败,请使用该处的重试按钮。在桌面端,悬停已发送的文本消息,可通过时间戳旁的按钮复制。

聊天中的围栏代码块和 Shell 命令经过语法高亮,每个围栏块配有“复制代码”按钮。该按钮仅复制代码片段,而非周围消息。

跟随 Agent 工作

结构化聊天在主回合活动及之后,保持委派和后台工作的可见性:

* 后台任务条在工作活跃时保持可见。其摘要统计 Agent、Shell、监控器、工作流和其他任务;展开后可见包含名称、状态点和已用时间的分组行。每个 Claude 或 Codex 子任务在自身工作完成前保持可见,扩展视图显示其任务和结果;Agent 子任务也作为缩进行显示在侧边栏会话下方。Codex 聊天可从行中停止后台命令或子 Agent 而不影响会话其余部分;Grok 聊天可列出并停止其后台运行的命令。Grok 也将子 Agent 显示为子 Agent 行。 * 若 Claude 子 Agent 等待权限提示,其子行显示为“等待”,父会话也显示为“等待”而非“阻塞”——这与 CLI 报告子 Agent 请求批准的机制一致。 * 若结构化聊天在回合中途停止以请求批准或输入,Orca 会像对待其他等待 Agent 一样弹出警报,无需一直盯着记录。 * Claude 的 TodoWrite 和 Codex 的 update_plan 更新渲染为内嵌清单。最新计划还显示在编辑器上方可折叠的进度面板中。 * 活跃的 Codex 目标显示在编辑器上方及其当前状态。使用目标控制可暂停、恢复、清除或展开目标;输入 /goal 可将下一个草稿作为目标发送。 * 运行中的回合在记录末尾有一个活动行。Thinking 表示当前回合正在生成推理;提供商活动(如运行命令)优先显示。已完成或中断的持续时间随回合在重载和应用重启后保留。若 Orca 未观察到回合结束,则省略持续时间而非估算。 * Codex 目标变更在目标设置、暂停、阻塞、完成、停止或清除时显示为记录行。重复的记账更新不会添加重复行。 * 回合结束时,其标题可总结已更改的唯一文件及其新增/删除行数。展开以显示现有的差异卡片。已回答的批准和问题卡片保留为收据,显示您的选择。 * 完成的回合收敛至答案。若 Agent 报告回合失败,回合将终止而非继续显示为运行中。

若结构化聊天在后台成功完成,Orca 将其标签页和工作区标记为未读。这不发送桌面通知或声音。其他注意力控制见 通知与收件箱。

从斜杠命令选择器中选择技能后,其作为标签页保留在草稿中。手动输入或粘贴的技能名称保持为普通文本。安装和更新见 Orca 技能。

Agent 提问

当 Claude 显示 AskUserQuestion(或类似的结构化权限/问题卡片)时,Chat UI 应在记录中渲染问题卡片,以便您通过编辑器路径回答,而非将其视为折叠的工具调用。通过卡片上的“提交”确认。这包括运行在配对的远程 Orca Server / 无头主机上的 Agent——不仅限于本地面板。

在聊天和终端之间移动对话

您可以通过标签页右键菜单或 Agent 会话历史行在结构化聊天和终端之间移动对话:“在新原生聊天中恢复”将早期对话作为结构化聊天打开,“在新 CLI 中恢复”将其分叉至终端。原对话保持不变。一旦对话保留给结构化聊天,请使用聊天而非终端恢复该会话。

可用性

Chat UI 在桌面端发布,支持本地和远程(配对服务器)的受支持 Agent 会话。移动端伴侣应用对相同配对会话复用聊天风格的记录模式。

评论 (0)