Skip to content

feat(settings): 支持配置会话标题生成 - #1449

Open
deqiying wants to merge 1 commit into
vastsa:mainfrom
deqiying:feat/session-title-settings
Open

deqiying wants to merge 1 commit into
vastsa:mainfrom
deqiying:feat/session-title-settings

Conversation

@deqiying

@deqiying deqiying commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

概述

在 设置 → AI 中新增「会话标题生成」卡片,位于「提示词增强」下方,让首轮会话标题的自动生成(ADR 0186)可以配置。全部保持默认时,发给模型的请求与改动前完全一致。

设置 键 默认值 范围
自定义提示词 sessionTitleCustomPrompt、sessionTitlePrompt 内置标题提示词 ≤ 8000 个码点
默认模型 sessionTitleProviderId、sessionTitleModelId 跟随会话模型 —
思考强度 sessionTitleThinkingLevel off 按所选模型支持的档位收敛
标题理想长度 sessionTitleIdealLength 25 整数 8–60,且不超过截断长度
标题截断长度 sessionTitleMaxLength 80 整数 16–200

决策记录:ADR 0322、D650(修订 D359 / ADR 0186)。

行为说明

  • 整个系统提示词可覆盖:这一点与 ADR 0121 刻意不同。默认提示词就是原内置提示词,只是把规则 3 里写死的 25 换成可选变量 {{idealLength}};按默认长度渲染后与原常量逐字节一致。
  • 自定义提示词不影响输入与输出约束:对话内容由内置的 user message 携带,输出清理、按码点截断、空结果或失败时回退,这些始终生效。
  • 保存默认文本即清除覆盖:保存与默认相同的文本或空白文本,会存为 "" 并关闭 sessionTitleCustomPrompt。这样以后改进内置默认值时,没自定义过的用户也能用上。
  • 由 Electron 主进程按请求读取设置,session/summarizeTitle 的请求结构不变:
    • 模型优先级:请求指定的模型 > 设置中固定的模型 > 会话模型。
    • 固定的模型无法启动时,记一条 warn 日志,然后回退到会话模型。
    • 思考强度默认 off,并按实际启动的模型收敛。
  • 新增 60 秒超时:标题生成复用提示词增强的超时机制(withOneShotTimeout),超时后保留首条提示词生成的回退标题。这是默认配置下唯一的行为变化。
  • 两个长度分别校验:使用时把理想长度收敛到不超过截断长度,Host 不做跨字段拒绝。设置界面里两行的上下限互相约束。
  • 首条提示词回退标题的 48 字符长度固定不变:自动改标题时按完全相同的字符串识别这个回退标题,改长度会让已有的回退标题被误判为手动标题。

实现

  • shared:新增 packages/shared/src/session-title.ts,包含默认提示词、长度常量、解析与渲染函数。AppSettings 新增 7 个字段。
  • agent-runtime:summarizeSessionTitle 接收提示词和长度覆盖;SESSION_TITLE_SUMMARIZE_SYSTEM_PROMPT 保留,作为默认渲染结果的别名。
  • Electron main:session/summarizeTitle 按请求读取设置,加入固定模型回退和超时。新增 one-shot-launch.ts(固定模型与回退);prompt-enhancement-timeout.ts 抽出通用的 withOneShotTimeout。
  • host-core:新增 rpc/one_shot_settings.rs,用同一个模板校验器统一校验提示词增强和会话标题两类一次性设置:长度越界返回 INVALID_PARAMS,空白提示词被规范化。7 个键加入配置同步的可移植应用字段;sessionTitleProviderId 按 provider 引用校验。
  • renderer:
    • 新增 SessionTitleCard。
    • 抽出与提示词增强共用的 OneShotModelRows(模型与思考强度两行)和 OneShotPromptEditorSheet(编辑弹层)。
    • 提示词增强卡片改为复用这两个组件,行为不变。
    • 补充设置搜索关键词。
  • i18n:9 种语言各新增 23 条文案。
  • 文档:
    • 新增 ADR 0322;ADR 0186 补充修订说明。
    • 更新中英文 ADR 索引和中英文决策日志(D650)。
    • 更新 02-agent-runtime.md §4.1 和 01-ipc-protocol.md。
    • E2E 计划扩展 US-UI-06。

兼容性

  • 不改 IPC 请求结构,不改 Host RPC,不改存储 schema 版本。新字段放在现有设置文档里,旧数据缺省即走默认值。
  • 提示词增强的行为不变,相关契约测试只是改为指向抽出的共享模块。

验证

候选提交:5341bd5cb
基线:origin/main @ 72b5e826c

检查 结果
pnpm build:js(含文档站构建) ✅
pnpm -r --if-present typecheck ✅
pnpm lint ✅
cargo fmt --check ✅
cargo clippy -p host-core --all-targets --locked ✅(1 条已有警告,位于未改动的 transcripts.rs:1130)
pnpm --filter @pi-desktop/shared test ✅ 1208/1208
pnpm --filter @pi-desktop/agent-runtime test ✅ 1302/1302
desktop 本次相关契约测试:prompt-enhancement、session-auto-title、settings-general、provider-display-name、settings-search、config-sync ✅ 62/62
node --test test/*.test.mjs(desktop 全量) ⚠️ 3530/3585,详见下方
cargo test -p host-core --locked ⚠️ 770/772,本次新增或改动的 8 个测试全部通过,详见下方

已有失败,与本次改动无关:

总: 设置 → AI 新增会话标题生成卡片,可配置提示词、模型、思考强度、理想长度与截断长度,默认值保持原有行为,标题生成新增 60 秒超时。
分: 抽取提示词增强与标题生成共用的模型行、编辑弹层、模型回退、超时与 Rust 模板校验,并同步 ADR 0322、D650 与相关规格。
@vastsa

vastsa commented Oct 7, 2026

Copy link
Copy Markdown
Owner

您好,这个功能和提示词优化后续会转成插件,您那可以看看,目前宿主能力是否支持,如果有不足的可以提pr拓展能力

This branch has not been deployed

No deployments
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.

2 participants