Skip to content

Conversation

@hr-xu
Copy link

@hr-xu hr-xu commented Aug 8, 2025

背景

  • 现有“按换行识别单词与例句”的交互不直观,用户常需手动调整格式。
  • 需要支持自定义 OpenAI 兼容服务的 Base URL 和模型名称。

这次改动做了什么

  • 标记模式(Mark Words)输入解析
    • 在原句中用前缀符号标注目标词,默认前缀为 >>;可选后缀(如 <<)用于短语包裹。
    • 命中标记时,会提取标记词集合,并将移除了标记符后的整句作为例句。
    • 支持多标记、去重、边界标点清理、短语最大词数限制(默认 4)。
    • 命中标记时可“强制添加例句”,无需再依赖“添加例句开关”(可配置)。
    • 未命中标记时,保持对旧的“两行格式(第一行为词,第二行为例句)”的兼容。
  • 设置项可见性优化
    • 对非密钥类字段显式改为“明文输入”(visible/normal),仅保留密钥类为 secure。
    • 更易填写与核对(如 notepadIdopenaiBaseUrlopenaiModelbigModelModel、标记符相关配置等)。
  • 模型与 Base URL 自定义
    • openaiBaseUrl 支持自定义(将被拼接为 ${base}/v1/responses)。
    • openaiModelbigModelModel 支持任意自定义文本值。

新增/调整的配置项(public/info.json

  • 启用标记模式(markWordsEnabled,默认 true)
  • 标记前缀(wordMarkerPrefix,默认 >>
  • 标记后缀(wordMarkerSuffix,默认空;如设置为 << 则支持包裹短语:>>New York<<
  • 标记短语最大词数(maxMarkedWordTokens,默认 4
  • 命中标记时强制添加例句(overrideCanAddSentenceWhenMarked,默认 true)
  • 翻译前移除标记符(stripMarkersBeforeTranslate,默认 true)
  • 同时将非密钥文本项设置为“可见输入”,仅保留 maimemoToken/openaiApiKey/bigModelApiKey 为 secure

行为说明与兼容性

  • 兼容旧格式:未使用标记时,仍支持“第一行单词、第二行例句”的解析。
  • 移除了“像句子但未开启添加例句就直接报错”的早退;现在会优先尝试标记解析,再回退到旧逻辑。
  • 当命中标记时,如开启“强制添加例句”,会直接创建例句并触发翻译。

示例

  • 单词标注:
    • 输入:I like >>apple and >>banana.
      解析:词 = apple, banana;例句 = I like apple and banana.
  • 短语标注(配置后缀为 <<):
    • 输入:>>New York<< is great.
      解析:词 = New York;例句 = New York is great.
  • 自定义 Base URL(需支持 OpenAI Responses API)
    • openaiBaseUrl = https://your-proxy.example.com/
    • openaiModel = gpt-4.1-mini(或第三方侧实际可用的模型名)
    • 注意:若第三方仅实现 Chat Completions 而非 Responses,将导致调用失败(非本 PR 范畴)。

注意事项

  • Base URL 兼容性:当前实现使用 OpenAI Responses API(/v1/responses),不等同于 Chat Completions。如果第三方仅支持 /v1/chat/completions,会翻译失败。
  • 标记后缀:若在设置中配置了后缀(如 <<),输入中也必须成对出现(>>短语<<)才能命中短语模式;仅写 >>word 将不被短语模式匹配。
  • 语言限制:保持原逻辑,仅在 detectFrom === "en" 的场景下添加单词。

文件变更(核心)

  • src/analyze.ts:新增标记解析器(解析标记词、清理句子、参数化配置)
  • src/index.ts:接入标记模式与兼容回退逻辑;放宽早退条件
  • public/info.json:新增并调整配置项、优化输入框可见性
  • src/types.ts:补充新增配置项类型
  • 未提交打包产物(dist),未修改 appcast.json
  • 版本号已按评审建议在 PR 中保持与上游一致(未变更发布版本)

测试要点

  • 输入含 >>word:应识别并添加单词,例句为移除标记符后的文本
  • 输入含 >>短语<<(开启后缀):应识别短语并添加
  • 未使用标记,输入两行(词/句):应与旧逻辑一致
  • 非密钥设置项显示为明文,可见默认值/placeholder

后续可选改进

  • 增加对 Chat Completions 协议的兼容分支,以更好适配“OpenAI 兼容”服务
  • 提供“调试模式”以输出解析详情,帮助用户定位输入格式问题

感谢审阅!如果需要,我可以根据维护者建议进一步拆分 PR 或补充文档与测试说明。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant