跳转到内容

语言与多语策略

完整规格见 00-product-spec.md。关联文档见 13-inference-and-dependencies.md

YZOS 用户的典型场景是中文 IM(微信/飞书)+ 英文代码/文档 + 混合 OCR。语言策略原则是:不翻译用户原始内容,检索与推理层中英兼修,UI 与 MCP 输出语言可配置

flowchart TD
  subgraph L1["L1 user content (source of truth)"]
    A["OKF / entity names / chat excerpts (never auto-translated)"]
  end
  subgraph L2["L2 processing (auto-detect, multilingual)"]
    direction LR
    OCR["OCR"] --> ASR["ASR"] --> EMB["Embedding"] --> PII["PII"] --> FTS["FTS"] --> TRI["LLM triage"]
  end
  subgraph L3["L3 presentation (configurable)"]
    UI["Tauri UI"]
    MCP["MCP summaries"]
    ROLL["Rollup exports"]
    CLI["CLI output"]
  end
  L1 --> L2 --> L3
策略
L1 真源 微信中文就存中文,GitHub 英文就存英文;入库前整篇翻译被禁止
L2 处理 组件默认支持 zh + en;自动检测作为兜底,不强制单一语言
L3 呈现 用户 locale 决定 UI 与生成式摘要语言;检索不受其限制
默认 说明
目标用户首要语言 zh-CN 文档与 Tauri UI 首期以中文为主
次要工作语言 en 代码、技术文档、部分 IM
OKF / Memory 书写 用户原生语言 允许中英混排
MCP JSON 字段名 en kindstatusentity_id 是稳定契约
MCP / 摘要正文 locale 配置 默认 zh
activity_summaries.language zh 06-data-model.md

模态级专用模型总表(OCR / VLM / 视频抽帧 / 语音分轨)见 15-modality-models.md

选型
引擎 Vision.framework(macOS)
识别 zh-Hans + en-US 自动;可选按窗口的 locale hint
策略 中文 IM 窗口优先 zh-Hans;IDE/浏览器窗口不强制
首期不做 日文/韩文专用模型(等用户量数据验证后再加)
选型
引擎 sherpa-onnx SenseVoice int8
语言 auto(中英日韩粤);YZOS 默认 auto
说话人 3D-Speaker embedding,针对中文优化
输出 转写保持原语言;不翻译
选型
模型 multilingual-e5-small(384d)
前缀 passage: / query:(必须实现)
备选 bge-small-en-v1.5,仅当用户设置 languages: [en](纯英文配置)时启用
原则 中英混排段落不拆分;整段嵌入
阶段 方案
P0 jieba-rs 预分词 + to_tsvector('simple', ...)
P1 pg_jieba + yzos_zh 配置(ascii -> english_stem,word -> jieba)
英文代码 english_stem 覆盖 ASCII token
混合查询 用户搜「DNS 排查」时向量检索与 FTS 并行执行,不依赖单一分词器
选型
模型 Qwen3.5-4B-Instruct GGUF(llama-server,全平台通用;thinking: false
理由 中英质量均衡(C-Eval 85+);单一技术栈同时覆盖轻量 vision;结构化 JSON triage 通过 grammar POC 实现
System prompt 默认使用中文指令;locale: en 时切换为英文
输入 OCR/聊天文本原文直接输入,不预先翻译
输出 跟随 locale;JSON 键名始终为英文
grammar schema 字段名固定为英文;summary 等内容字段的语言由 locale 决定
~/.yzos/config.yaml
locale:
ui: zh-CN # Tauri 界面
generated: zh # LLM 摘要、rollup、MCP 叙述性文字
# generated: en | auto(auto = 按会话主导语言检测)
层级 语言覆盖
L0 rules_cn 中国大陆身份证、大陆手机号、银联卡、中文地址启发式规则
L0 rules_en SSN、US phone、email、JWT、API key 模式
L1 NER multilang-pii-ner(以拉丁语系语言为主)
原则 中文 IM 以 L0 规则为主;NER 是规则的补充,不替代规则

不引入独立的语言识别模型。按以下优先级推断 session.lang

flowchart TD
  START["Infer session.lang"] --> Q1{"Chat locale or window title script ratio?"}
  Q1 -->|"available"| R1["Use platform locale (CJK vs Latin)"]
  Q1 -->|"none"| Q2{"OCR available?"}
  Q2 -->|"CJK ratio > 30%"| ZH["zh"]
  Q2 -->|"otherwise"| EN["en or mixed"]
  Q2 -->|"none"| MIX["Default: mixed"]

用途:

  • 写入 activity_summaries.language
  • locale.generated: auto 时用于选择摘要语言
  • 用于丢弃与检测语言不匹配的内容
阶段 范围
P0 UI 文案硬编码为 zh-CN
P1 i18n 骨架(zh-CN + en);设置页提供 locale.ui
不做 自动翻译 OKF 内容展示

实体 display_name、聊天摘录:原样显示,不随 UI 语言翻译。

输出类型 语言
结构化字段 英文枚举(in_progressperson
summaryjournal、叙述性文本 locale.generated
原始 OKF 路径 / 引用 不翻译
错误信息 跟随 locale.ui

上层 AI 用英文提问、查询中文知识:允许,检索层是多语的,不要求查询语言与文档语言一致。

不做 原因
入库前全文翻译 造成失真、二次隐私暴露、污染真源
默认使用单一英文 embedding 模型 中文 IM 内容召回率差
让 UI 语言强制决定摘要语言 用户可能是英文 UI 配中文工作场景
为每种语言单独部署 LLM 内存与冷启动成本过高;Qwen3.5-4B 已覆盖中英
把微信内容自动译成英文供给 MCP 违背 L1 真源原则
~/.yzos/config.yaml
locale:
ui: zh-CN
generated: auto # zh | en | auto
ocr:
languages: [zh-Hans, en-US]
voice:
asr_language: auto # auto | zh | en
inference:
embed_model: multilingual-e5-small-q
llm:
model: qwen3-4b-instruct-q4_k_m.gguf
system_locale: zh # system prompt 语言;与 locale.generated 联动
  • 微信风格中英混排 OCR 场景下,embedding 召回率 @5 不低于纯 MiniLM 基线
  • 英文 IDE 窗口与中文飞书窗口处于同一 session 时,triage 不丢事件
  • locale.generated: en 时实体 summary 输出为英文,JSON 字段名仍为英文
  • locale.generated: zh 时 rollup 日报为中文
  • PII:中文 IM 片段中的大陆手机号被 L0 规则 100% 命中
文档 内容
13-inference-and-dependencies.md 多语模型与 FTS
04-okf.md OKF 内容语言
06-data-model.md language 字段