AI落地实战,Remora是怎么集成AI的?

前言

大家好,这里是新人作者煤球。

停更了很久,干什么去了?做了一个牛逼的东西------Remora。

这是一个正在打磨中的原生 macOS 的 SSH 管理工具,类似于 Termius、Xshell等。

最终的目标,是把一整套日常远程工作流放到一个相对顺手的桌面应用里,比如连接主机、查看文件、进终端处理问题,省的在多个工具之间来回切换。

市面上已经有很多同类产品了,为什么还要再造一个轮子?

答案很简单。

追求足够轻量化,追求100%原生开发,追求100%开源

在这个前提下,也同样补全了AI能力,为这个SSH管理工具补上最后一段体验:当你正在看一段输出、排查一个错误、或者判断下一条命令该怎么下达的时候,让 AI 刚好在旁边帮得上忙。

这是一些截图预览:

言归正传,这篇文章重点还是讲一下我们是如何集成AI能力,涉及了哪些方面的考量,做了哪些技术层面和产品层面的优化等。

如果你也在做或者正准备做AI类产品,也许会有所帮助。

正文

配置能力

用户先选 provider,再选 model、base URL、语言和行为开关,API Key 单独进 Keychain,而不是直接混在普通设置里。

它支持 OpenAI compatible 和 Claude compatible 两套接口,同时又预置了 OpenAI、Anthropic、OpenRouter、DeepSeek、Qwen、Ollama 这些 provider,兼顾开箱即用和自定义 endpoint 的灵活性。

上下文能力

我们并不是简单地把用户输入直接发给模型,而是从终端 runtime 里抽一份上下文快照,大致包含下面这些信息:

  • 当前是本地 shell 还是 SSH
  • 连的是哪台机器
  • 当前工作目录
  • 最近的终端输出
  • 必要时的多轮对话上下文
  • 用户希望回复使用的语言
  • 当然,排除掉所有隐私信息

可能在传统应用里面这块比较简单,但是终端类产品实现起来着实有点费劲。

因为终端上下文本身不是干净可读的文本,而是一堆掺杂了 ANSI 控制序列、提示符、回显、光标控制信息的流式输出。

如果把这些原样扔给模型,AI 大概率会误判,或者干脆被噪音淹没。

所以 Remora 先在 runtime 层做了 transcript 的整理和清洗,只保留适合给模型看的那部分文本。同时,工作目录也不是想当然地从某个状态字段里拿,而是尽量从终端协议本身去推断,拿不到再退回 pwd 探测。

终端里的 AI 如果不知道你当前在哪个目录、刚刚执行了什么、报错是什么,它其实很难给出靠谱建议。

协议层

Remora 没有让模型自由发挥地输出一大段自然语言,它直接要求模型只返回固定 JSON 结构,内容只有三部分:摘要、命令建议、警告。

这是所有AI应用落地都必须遵循的规范,值得参考。

这样做的好处非常直接。

  1. UI 更稳定:前端直接解析JSON就能正常渲染;
  2. 交互更明确:每条命令建议都可以直接做 Insert、Run、Copy;
  3. 可控:就算换 provider、换模型,最终渲染逻辑不需要跟着改;
  4. 错误更容易处理:如果模型没按格式来,服务层能立刻识别,而不是把一坨半结构化文本继续往后传;

做AI类产品,最害怕的就是 UI 和交互因为 AI 的不稳定而变得不可预测。

🌟 记忆能力

任何 AI 产品都会面临记忆问题。

上下文越来越长,请求越来越慢,成本越来越高,带来的后果就是体验越来越差。

Remora 在这里没有才用类似 OpenClaw 这种"无限记忆"的模式,而是更务实的做了上下文压缩。

总要帮用户省点token不是。

当上下文历史超出阈值时,把更早的部分压缩成一个 summary turn,只保留最近几轮原文。

既能保留连续性,又控制了体积,不会每次都把整段历史原样重发。

不同的方案有各自的取舍。

对终端来说,这个取舍也许恰到好处。绝大多数时候,用户不可能在终端里面和AI做长篇讨论,肯定是围绕当前几次命令和刚刚发生的错误继续追问。只要最近几轮还在,前文有一个压缩摘要,体验就已经足够了。

交互能力

Remora 的 Terminal AI 没有做成独立页面,而是做成 terminal pane 旁边的 drawer。

如果 AI 是一个需要切换的单独页面,用户会产生明显的割裂。现在的做法是:终端还左边输出,AI 在右边给解释和快捷介入的按钮。

其实这也是目前主流的交互模式。

在具体交互上,我们做了几个小巧思:

  • 提供了 quick actions (快捷指令):比如 Explain Output、Suggest Next Command、Fix Last Error;
  • 能根据常见报错做 smart assist:比如 permission denied、command not found、no such file;
  • 支持排队提问:前一条还没返回时,后一条会乖乖在后面排队;
  • 支持 thinking 式交互 和渐进式 summary,减轻等待时的停顿感;
  • 还专门处理了输入法场景,避免中文输入过程中按回车被误判成发送;

这些都不是核心能力,但它们离用户更近,也是用户对于一个产品的第一手的体验。

安全边界

所有AI产品都应该严格恪守安全边界。

Remora 允许模型给命令建议,也允许用户一键插入、一键运行、一键复制,但它没有默认让模型自动执行命令。

同时每条建议都有风险等级,用户可以先看目的,再决定要不要用;如果开启了确认选项,运行前还会有确认弹窗。

一定要让用户感知到"建议"和"执行"的区别。

尤其在 SSH 场景下,很多命令的影响是真实而且不可逆的。

比起做一个看起来更智能、但边界模糊的产品,我们更愿意让 AI 负责辅助判断,真正执行的权限还是得抓在手里。

难点复盘

其实每一步都能难 🤣 。

非得挑出来三点,也能唠:

怎么拿到有效的上下文

终端输出天然嘈杂,工作目录也不是总能直接拿到,很多细节都要靠 runtime 层自己清洗和补偿。

怎么收敛 AI 的不稳定性

模型会跑偏、provider 有差异、响应格式也可能不稳定。

如果没有结构化约束和统一解码,UI 会变得非常的脆弱。

怎么让 AI 无感融入产品

入口位置、消息队列、输入法兼容、建议执行确认,这些都跟模型无关,但它们决定了这个功能是不是一个真正可用的产品能力。

相关推荐
hzhsec2 小时前
AI Security Agent:用自然语言做安全巡检,AI 自己跑命令
人工智能·安全·运维开发·ai编程
草捏子2 小时前
为什么你的AI总是"人工智障"?90%的人都错了这一步
ai编程
_张一凡3 小时前
【大语言模型学习】一文详解阿里Qwen3大模型以及全参量微调入门实战教程(代码完整)
llm·aigc·大语言模型·多模态·qwen3·大语言模型微调·全参量微调
AI视觉网奇4 小时前
aigc 生成几何图 整理笔记
笔记·aigc
databook5 小时前
当AI学会编程,我们还能做什么
人工智能·程序员·ai编程
mirson.ho5 小时前
给 Claude Code 装上“长期记忆“:本地部署双重记忆引擎实战
ai·ai编程
小鹿软件办公5 小时前
OpenAI 补齐产品线:GPT-5.4 Mini 与 Nano 正式发布
人工智能·openai
程序员鱼皮5 小时前
万字干货 | OpenClaw 进阶玩法大全:技能 / 多 Agent / 省钱 / 安全,50+ 实战技巧一次学会
前端·后端·ai编程