Skip to content

对话功能

zhenhun edited this page Sep 4, 2026 · 2 revisions

中文 | English

流式输出

前后端全链路流式:上游 SSE → Rust 逐行解析 → Tauri Event → 前端逐字渲染。助手消息支持 Markdown(react-markdown + remark-gfm):加粗、列表、表格、代码块。

  • 多字节字符(中文/emoji)跨 TCP 分块不会乱码:流按字节缓冲、按完整行解码
  • 上游返回非标准格式时自动模糊识别正文(兼容 content 数组、legacy text、output_text 等变体)
  • finish_reason 大小写/别名自动归一化(length / MAX_TOKENS / max_output_tokens 等),截断会显式标注
  • 上游拒绝 tools 参数(4xx 报错含 tool/function/schema)时自动降级为文本约定协议,下个会话重新探测

多模态

对话输入支持粘贴/选择图片(data URL 数组),后端转为 OpenAI / Claude / Gemini 各自的多模态 content 格式发送。

消息队列与拖拽排序

AI 忙碌时继续输入的消息进入队列,逐条自动发送:

  • 每条排队消息带序号(pill 样式)
  • 鼠标按住拖拽可实时调整发送顺序,松开落位
  • 双击 pill 移除该条消息
  • 兼容 WKWebView(macOS),不依赖 HTML5 拖放 API

上下文与缓存命中率

  • 历史窗口 96 条,超出时按 8 条为步长对齐回退——相邻请求的消息前缀逐字节一致,命中各家提示词缓存(OpenAI / Gemini 自动,DeepSeek / Kimi 等兼容端同样有效)
  • 输入区实时显示缓存命中率统计,颜色分级:≥80% 绿、50–80% 灰、<50% 黄

工具调用过程

  • AI 一条回复可发起多个工具调用,并发执行(上限 16),结果按调用顺序回喂
  • 调用过程以卡片形式逐行展示在对话中
  • 任一工具失败(或被中断)不会丢弃:错误详情回传给模型继续推理
  • 会话可随时中断:请求与工具执行立即停止

提示词缓存友好

工具描述与系统提示词全英文(对旧模型兼容性最好),会话内历史对齐策略保证长对话不被过早截断。

Clone this wiki locally