Skip to main content
OrbitPilot

OrbitPilot 聊天小部件——流媒体、可移动、移动与语音

它是什么

OrbitPilot 现在是一个 全球浮动聊天小部件,适用于登录用户: 一个 🚨 按钮在角落打开一个面板,你可以从 任何 页面使用。这个面板是 非阻塞的(在打开时可以继续浏览),可拖动, 可折叠, 并且它记住位置和你在访问网站时打开的 对话。

新功能

  • 流式回答——回复逐字出现,而不是等待后再显示。
  • 停止——在AI回答中途停止。停止时,保存已经写下的内容 不会消耗你的提问额度
  • 复制 / 下载整个聊天记录——在面板的顶部和底部有按钮 (下载是 .txt 转录文件)。
  • 复制单条消息——将鼠标悬停在任何气泡上可以看到复制图标。
  • 最大化窗口,浏览你的 聊天记录,并开始 新对话
  • 语音输入——轻击麦克风并说话;你的话会被为你输入。

访客(未登录)保持原始主页聊天弹出窗口。

在你的手机上(移动端)

  • 面板 停靠在屏幕底部,永远不会溢出边缘, 无论方向如何——旋转手机会自动重新调整它。
  • 它尊重缺口和主页指示器(安全区域),并利用实时 屏幕高度,以便浏览器的地址栏不会遮挡发送按钮。
  • 在你 说话并发送 后,输入框 会被清空,以便你下一个提问——再次轻击麦克风以进行下一次交谈。

针对开发者

流式需要在 ASGI 下使用 异步视图(同步生成器在第一个字节之前进行缓冲)。 orbitpilot.views.orbitpilot_ask_stream 是一个 async def 返回 StreamingHttpResponse 通过一个异步生成器发出服务器发送事件 (metatoken… → done)。所有 ORM/门控在两个同步帮助程序中运行 (_prepare_ask_stream / _finalize_ask_stream)通过 sync_to_async(thread_sensitive=True)停止 = 客户端中止了 抓取 → 异步生成器被取消 → 部分答案被保存,配额行不被写入。前端位于 templates/_orbitpilot_widget.html + static/css/orbitpilot-widget.css + static/js/orbitpilot-widget.js,仅限授权用户包含在 base.html 中。

移动响应性(工作流 E):整个小部件是 box-sizing: border-box,因此 1px 边框计算在宽度内(旧 iPhone 溢出是 width:100vw + border)。 @media (max-width:575px) 规则去掉 100vw 以适应 left/right: env(safe-area-inset-*) + width:auto,大小 使用 dvh(带有 vh 回退),并通过 env(safe-area-inset-bottom) 填充输入框。在 JS 中,保存的桌面拖动位置在 移动视口上会应用,resize/orientationchange 监听器通过 applyPos() 重新调整位置。 语音清理:语音模块保持以最终化的 saved 缓冲区与输入分开;send() 现在调用一个共享的 resetVoice()(停止识别,清除静音计时器,清空 saved)恰好在清除 input.value 的地方,因此下一轮开始时是空的。

聊天字体大小 + 移动发送修正(2026-07-27)

  • A− / A+ 在小部件头部缩小/增大聊天文本。你的选择会被记住 (通过 localStorageop_widget_font 保存在浏览器中),跨页面和会话。 大小限制在 12−22px。
  • 手机上的发送按钮:输入行现在保持发送(和麦克风)按钮始终可见,紧邻文本框在狭窄屏幕上——之前文本框可能会把发送按钮推到右边缘。

针对开发者:标记 templates/_orbitpilot_widget.html,行为 static/js/orbitpilot-widget.jsapplyFont()/bumpFont(),在初始化时恢复),样式 static/css/orbitpilot-widget.css。按钮调整 --op-chat-font CSS 变量,被消息正文 + 输入读取;输入框上的 min-width:0 和按钮上的 flex:0 0 auto 使得发送按钮始终不会被推到屏幕外。

汉堡菜单 + 全屏模式(2026-07-27)

聊天小部件头部现在有一个 ☰ 菜单 和一个 ⌕ 全屏 按钮:

  • 你的指令——AI 总是考虑的固定说明(就像 ChatGPT 自定义 指令)。通过 orbitpilot_custom_instructions 保存到 OrbitPilotSettings.custom_user_prompt;计划受限于 custom_prompt 功能(如果计划不允许,会出现锁定消息 + 升级链接;服务器也会以 403 强制执行)。
  • 下载——现在明显有两个选项:“仅此对话”orbitpilot_conversation_download)与 “我的所有聊天记录”(新 orbitpilot_history_download)。工具栏按钮重标为“⮅ 此聊天”。
  • 记忆 → 立即重建我的记忆——一个完整的重建 (orbitpilot_rebuild_memory)需要确认费用警告(它重新读取所有内容并重新嵌入, 这需要 AI 信用);不会在一个重建运行时堆叠另一个重建。

全屏模式(⌕)将在新选项卡中打开 /orbitpilot/chat/,提供 ChatGPT/Gemini 风格的 全屏聊天,仅重复使用同一个小部件(通过 body 类 op-fullpage)——因此在小部件和全屏之间切换,会保留同一对话(共享的 op_widget_conv localStorage + 一个 storage 事件监听器)。此外: A− / A+ 更改聊天字体(被记住),在手机上发送按钮始终与麦克风旁边可见。

针对开发者:标记 templates/_orbitpilot_widget.html,行为 static/js/orbitpilot-widget.js,样式 static/css/orbitpilot-widget.css; 全屏视图 orbitpilot.views.orbitpilot_chatorbitpilot/templates/orbitpilot/chat_full.html

快速更新与完整重建(软/硬记忆,2026-07-27)

小部件的 🧠 记忆 菜单现在提供两种重建:

  • ⚡ 快速更新(软)——仅重新读取和重新嵌入你自上次构建后改变的;未改变的项目保持其现有的嵌入,删除的项目被丢弃。价格更便宜,因为 OpenAI 嵌入费用是根据增量而非整个语料库计算的。
  • 🔄 完整重建(硬)——从头开始重新读取并重新嵌入所有内容(使用更多的 AI 信用)。仅当某些内容看起来错误时使用。

针对开发者: run_memory_build(user, settings, build, incremental=True) 在调用 embed_chunks 之前,根据 (source_key, source_id, chunk_index, content_hash)对新块与已经存储的块进行差异化,因此仅嵌入新/更改的块;过期的行在同一个原子块中被删除;未更改的行保持不变。该模式保存在 OrbitPilotMemoryBuild.incremental(迁移 orbitpilot/0025)中, 由 orbitpilot_rebuild_memory 通过 mode=soft|hard 设置。如果 incremental 被省略,run_memory_build 会从构建记录中读取它。完整/硬模式保留了精确的原子删除-全部 + 重新嵌入行为。

聊天驱动的修复(2026-07-28)

分析实际(PII 已删除) OrbitPilot 对话揭示了四个修复:

  • 已损坏的 AI 链接your-app-link):当模型在拥有来自过时手册的相对路径时,发明了一个域。现在(a)系统健康检查警告如果 SITE_URL 在生产中是 localhost,(b)orbitpilot.services.heal_links() 将任何占位符/localhost 链接基础重写为每个答案中的真实站点主机(流式/阻塞/访客)——因此链接甚至在重建之前也能正常工作。永久修复(设置 SITE_URL + 重建)在管理员设置检查清单上。
  • “列出我的 Winks”现在有效pipeline/retrieve.py add_list_intent_sources() 注入源的所有块,当查询是列出请求时(“列出/显示/所有我的 winks/tasks/events”),并且工作区快照会采样 Wink 标题——因此 AI 列出实际项目,而不仅仅是数量。
  • 可点击的后续行动:操作现在是 {label, url}。实际的导航链接显示为可点击的按钮(在新选项卡中打开);否则它是一个预填充的芯片。修复了小部件、访客主页模态(之前删除的动作)和全屏结果。内联答案链接现在也会在新选项卡中打开。
  • 提示润色:核心回答提示停止过于重复用户的标题目标,并优雅地处理“自昨天以来发生了什么变化”(它从当前快照工作,而非日历历史)。

针对开发者: orbitpilot/services.pyheal_links, request_base,
split_answer_actions 现在返回字典,访客 next_actions 层),pipeline/retrieve.py (add_list_intent_sources), adminapp/diagnostics.py_check_site_url),小部件 JS + home.html (动作渲染 + DOMPurify target=_blank 钩子),aihub/prompt_registry.py (核心 + next_actions 默认值;通过 aihub/0007 在未触及的种子默认情况下刷新)。

This guide was translated automatically. Read the English original.

🪐 OrbitPilot