完整规格见 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 |
kind、status、entity_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 决定 |
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_progress、person) |
summary、journal、叙述性文本 |
locale.generated |
| 原始 OKF 路径 / 引用 |
不翻译 |
| 错误信息 |
跟随 locale.ui |
上层 AI 用英文提问、查询中文知识:允许,检索层是多语的,不要求查询语言与文档语言一致。
| 不做 |
原因 |
| 入库前全文翻译 |
造成失真、二次隐私暴露、污染真源 |
| 默认使用单一英文 embedding 模型 |
中文 IM 内容召回率差 |
| 让 UI 语言强制决定摘要语言 |
用户可能是英文 UI 配中文工作场景 |
| 为每种语言单独部署 LLM |
内存与冷启动成本过高;Qwen3.5-4B 已覆盖中英 |
| 把微信内容自动译成英文供给 MCP |
违背 L1 真源原则 |
generated: auto # zh | en | auto
languages: [zh-Hans, en-US]
asr_language: auto # auto | zh | en
embed_model: multilingual-e5-small-q
model: qwen3-4b-instruct-q4_k_m.gguf
system_locale: zh # system prompt 语言;与 locale.generated 联动