优化AGC客户端同步LLM配置 #292
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题描述
后台管理页面发布新的LLM配置之后,客户端必须手动刷新才能同步最新配置,期望优化这个问题。
可选方案
@kdletters 建议使用哪个方案?
建议先采用方案 A,把模型目录 revision 作为客户端同步契约;SSE 可以在条件刷新已证明不足后再引入。需要先定义 revision 的递增/不变规则、条件请求未变化时的响应,以及项目切换、对话表面挂载、下拉展开、窗口聚焦多个触发同时发生时的去重与竞态处理。
发送前校验应与目录刷新使用同一份快照:所选模型被停用或删除时回退到当前默认模型并给出明确提示;默认模型也不可用时才进入错误分支。保存选择时要保证“最后一次选择”不会被较早的异步响应覆盖,刷新失败也不能把有效的本地选择误清空。
验收建议覆盖:后台发布后各触发点的条件刷新、重复触发只产生必要请求、停用/删除当前模型的回退、并发保存的最后写入获胜,以及离线/超时情况下的可恢复行为。
问题原因
后台在「AGC 模型」页发布新配置后,
GET /api/llm/models只返回models与defaultModelId,没有可比较的版本标识;AGC 客户端只在组件挂载或手动点「刷新模型列表」时拉取目录,所以后台改完后必须手动刷新(或重启客户端)才生效。采用方案(方案 A)
按 @kdletters 的建议先做「revision 契约 + 条件刷新」,SSE 暂不引入:
GET /api/llm/models增加revision,取值来自agc_model_catalog已有的乐观锁 revision(后台每次保存自增);不新增其它字段,仍不返回实际模型名。改动范围
server-rs/crates/shared-contracts/src/llm.rs的LlmModelsResponse增加revision;server-rs/crates/api-server/src/llm/mod.rs的public_model_catalog透出该字段(/api/llm/models不属于/api/external/v1,无需改 OpenAPI)。apps/ai-game-creator-shell的模型目录加载与发送前校验。docs/technical/【技术方案】AGC后台模型别名与对话选择-2026-09-05.md。验收
git diff --check。依赖与风险
ConversationModelSelect。本分支从 master 起,等 #299 合并后会 merge master 并复用其默认回退逻辑,避免重复实现。分支:
feat/agc-client-sync-llm-config(基于 master)