Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit45765b7

Browse files
committed
feat(llm): refactor LLM settings for improved user experience and add GitHub Copilot model support
1 parent6c332a7 commit45765b7

18 files changed

+2406
-159
lines changed

‎CHECKBOX_DELAY_FIX.md‎

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
#复选框延时刷新问题修复
2+
3+
##问题描述
4+
5+
`SimplifiedLLMSettingComponent` 中,当用户点击 "Use default model for all categories" 复选框时,会出现延时刷新的问题。
6+
7+
##原因分析
8+
9+
###原始实现问题
10+
```kotlin
11+
privatefunupdateCategoryDropdownsVisibility() {
12+
// 这会重新构建整个面板,导致延时
13+
applySettings(settings)
14+
}
15+
```
16+
17+
**问题根源**
18+
1. 每次复选框状态改变时,都会调用`applySettings(settings)`
19+
2.`applySettings` 方法会重新构建整个UI面板
20+
3. 重建过程包括:
21+
- 清空面板 (`panel.removeAll()`)
22+
- 重新加载所有下拉框数据 (`updateAllDropdowns()`)
23+
- 重新加载表格数据 (`updateLLMTable()`)
24+
- 重新构建整个FormBuilder结构
25+
- 调用`panel.invalidate()``panel.repaint()`
26+
27+
这个过程非常耗时,特别是当需要从GitHub Copilot加载模型数据时。
28+
29+
##解决方案
30+
31+
###优化后的实现
32+
33+
####1. 添加独立的分类面板
34+
```kotlin
35+
// Category section panel for dynamic visibility
36+
privatevar categoryPanel:JPanel?=null
37+
```
38+
39+
####2. 创建独立的分类面板方法
40+
```kotlin
41+
privatefuncreateCategoryPanel():JPanel {
42+
val categoryFormBuilder=FormBuilder.createFormBuilder()
43+
.addLabeledComponent(JBLabel("Category-Specific Models"),JPanel(),1,false)
44+
.addLabeledComponent(JBLabel("Plan:"), planLLMDropdown,1,false)
45+
.addLabeledComponent(JBLabel("Act:"), actLLMDropdown,1,false)
46+
.addLabeledComponent(JBLabel("Completion:"), completionLLMDropdown,1,false)
47+
.addLabeledComponent(JBLabel("Embedding:"), embeddingLLMDropdown,1,false)
48+
.addLabeledComponent(JBLabel("FastApply:"), fastApplyLLMDropdown,1,false)
49+
.addSeparator()
50+
51+
return categoryFormBuilder.panel
52+
}
53+
```
54+
55+
####3. 优化可见性控制
56+
```kotlin
57+
privatefunupdateCategoryDropdownsVisibility() {
58+
// 只切换面板可见性,不重建UI
59+
categoryPanel?.isVisible=!useDefaultForAllCheckbox.isSelected
60+
61+
// 轻量级的布局更新
62+
panel.revalidate()
63+
panel.repaint()
64+
}
65+
```
66+
67+
####4. 修改主面板构建逻辑
68+
```kotlin
69+
// 在applySettings中
70+
// Create category panel separately for dynamic visibility
71+
categoryPanel= createCategoryPanel()
72+
73+
formBuilder
74+
// ... 其他组件 ...
75+
76+
// Add category panel (visibility controlled dynamically)
77+
formBuilder.addComponent(categoryPanel!!)
78+
79+
// Set initial visibility
80+
updateCategoryDropdownsVisibility()
81+
```
82+
83+
##性能对比
84+
85+
###原始方案
86+
- ❌ 重建整个UI面板
87+
- ❌ 重新加载所有数据
88+
- ❌ 重新创建所有组件
89+
- ❌ 延时明显(特别是有网络请求时)
90+
91+
###优化方案
92+
- ✅ 只切换面板可见性
93+
- ✅ 保持现有数据和组件
94+
- ✅ 轻量级布局更新
95+
- ✅ 即时响应,无延时
96+
97+
##技术要点
98+
99+
###1. 组件复用
100+
- 分类下拉框组件只创建一次
101+
- 通过可见性控制显示/隐藏
102+
- 避免重复创建和销毁组件
103+
104+
###2. 布局更新
105+
-`panel.revalidate()`: 重新计算布局
106+
-`panel.repaint()`: 重绘界面
107+
- 这两个操作比重建整个面板快得多
108+
109+
###3. 状态保持
110+
- 用户在分类下拉框中的选择得以保持
111+
- 不会因为UI重建而丢失状态
112+
113+
##适用场景
114+
115+
这种优化方案适用于:
116+
- 需要动态显示/隐藏UI组件的场景
117+
- 包含大量数据加载的复杂面板
118+
- 对用户交互响应速度有要求的界面
119+
120+
##注意事项
121+
122+
1.**初始化顺序**:确保在设置事件监听器之前创建好所有组件
123+
2.**空指针检查**:使用`categoryPanel?.isVisible` 进行安全调用
124+
3.**布局更新**:必须调用`revalidate()``repaint()` 来更新布局
125+
126+
这个修复彻底解决了复选框点击时的延时问题,提供了流畅的用户体验。

‎LLM_SETTINGS_REFACTOR_SUMMARY.md‎

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
#LLM设置页面重构总结
2+
3+
##重构目标
4+
5+
根据用户反馈,原有的LLM设置页面存在以下问题:
6+
- 允许设置默认LLM配置,又有根据不同类型(Act,Plan等)分别设置不同模型的UI
7+
- 冗余的JSON输入框
8+
- 模型列表较为混乱
9+
- 多种配置方式重叠,用户体验差
10+
11+
##重构方案
12+
13+
采用**简化统一的设计**,重新组织UI结构:
14+
15+
###1. 新的UI结构
16+
```
17+
┌─ 基础设置 ─┐
18+
│ - 语言设置 │
19+
│ - 最大Token │
20+
│ - 延迟设置 │
21+
└─────────────┘
22+
23+
┌─ 默认模型配置 ─┐
24+
│ - 默认模型选择 │
25+
│ - 使用默认模型 │
26+
└─────────────────┘
27+
28+
┌─ 分类应用 ─┐
29+
│ - Plan模型 │
30+
│ - Act模型 │
31+
│ - Completion │
32+
│ - Embedding │
33+
│ - FastApply │
34+
└─────────────┘
35+
36+
┌─ 模型管理 ─┐
37+
│ - 已配置模型列表 │
38+
│ - 添加/编辑/删除 │
39+
│ - 测试连接 │
40+
└─────────────────┘
41+
```
42+
43+
###2. 主要改进
44+
45+
####数据模型优化
46+
-**新增字段**
47+
-`defaultModelId`: 默认模型ID
48+
-`useDefaultForAllCategories`: 是否对所有分类使用默认模型
49+
-**废弃字段**:标记旧的配置字段为`@Deprecated`,保持向后兼容
50+
51+
####UI组件重构
52+
-**SimplifiedLLMSettingComponent**: 新的简化设置组件
53+
-**移除冗余**:删除JSON输入框,统一使用可视化界面
54+
-**统一管理**:GitHub Copilot模型和自定义模型在同一列表中显示
55+
-**条件显示**:分类模型选择只在不使用默认模型时显示
56+
57+
####新增功能
58+
-**配置向导**`LLMConfigurationWizard` - 帮助新用户快速配置第一个LLM
59+
-**迁移工具**`LegacyConfigMigration` - 自动迁移旧配置到新系统
60+
-**预设模板**:支持OpenAI、Azure、Claude、Gemini、Ollama等常用服务商
61+
62+
##实现的文件
63+
64+
###核心组件
65+
1.**SimplifiedLLMSettingComponent.kt** - 新的简化设置组件
66+
2.**AutoDevSettingsState.kt** - 更新的设置状态类
67+
3.**AutoDevSettingsConfigurable.kt** - 更新的配置提供者
68+
69+
###辅助工具
70+
4.**LLMConfigurationWizard.kt** - 配置向导
71+
5.**LegacyConfigMigration.kt** - 迁移工具
72+
6.**SimplifiedAutoDevConfigurable.kt** - 备用配置类
73+
74+
###模型增强
75+
7.**LlmConfig.kt** - 增强的模型配置类,新增`forCategory()`方法
76+
77+
###测试
78+
8.**SimplifiedLLMSettingComponentTest.kt** - 单元测试
79+
80+
##主要特性
81+
82+
###1. 简化的用户体验
83+
-**一键配置**:通过向导快速设置第一个LLM
84+
-**默认模型**:设置一个默认模型,自动应用到所有分类
85+
-**按需定制**:可选择为特定分类设置专用模型
86+
87+
###2. 向后兼容
88+
- 保留所有旧的配置字段(标记为废弃)
89+
- 自动迁移旧配置到新系统
90+
- 新旧系统可以并存
91+
92+
###3. 统一管理
93+
- GitHub Copilot模型和自定义模型统一显示
94+
- 每个模型都可以独立测试连接
95+
- 简化的添加/编辑/删除操作
96+
97+
###4. 智能默认
98+
- 新用户首次打开设置时自动显示配置向导
99+
- 检测到旧配置时提示迁移
100+
- 合理的默认值和预设模板
101+
102+
##用户使用流程
103+
104+
###新用户
105+
1. 首次打开设置 → 自动显示配置向导
106+
2. 选择LLM提供商 → 自动填充配置模板
107+
3. 输入API密钥 → 测试连接
108+
4. 完成配置 → 自动设为默认模型
109+
110+
###现有用户
111+
1. 打开设置 → 检测到旧配置,提示迁移
112+
2. 确认迁移 → 自动转换为新格式
113+
3. 查看新界面 → 更简洁的配置选项
114+
4. 可选择使用默认模型或分类配置
115+
116+
##技术亮点
117+
118+
###1. 渐进式重构
119+
- 不破坏现有功能
120+
- 平滑的迁移路径
121+
- 可回退的设计
122+
123+
###2. 模块化设计
124+
- 组件职责清晰
125+
- 易于测试和维护
126+
- 可扩展的架构
127+
128+
###3. 用户体验优先
129+
- 减少配置复杂度
130+
- 提供智能默认值
131+
- 清晰的视觉层次
132+
133+
##编译状态
134+
135+
✅ 代码编译成功,无错误
136+
⚠️ 有一些废弃API的警告(预期的,用于向后兼容)
137+
138+
##下一步建议
139+
140+
1.**用户测试**:在实际环境中测试新的设置界面
141+
2.**文档更新**:更新用户文档,说明新的配置方式
142+
3.**逐步清理**:在几个版本后考虑移除废弃的字段
143+
4.**功能扩展**:根据用户反馈添加更多预设模板
144+
145+
这次重构彻底解决了原有设置页面的混乱问题,提供了更好的用户体验,同时保持了完整的向后兼容性。

‎core/src/233/main/resources/META-INF/autodev-core.xml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
<httpRequestHandlerimplementation="cc.unitmesh.devti.mcp.host.MCPService"/>
8181
<postStartupActivityimplementation="cc.unitmesh.devti.update.AutoDevUpdateStartupActivity"/>
8282
<postStartupActivityimplementation="cc.unitmesh.devti.mcp.MCPServerStartupValidator"/>
83+
<postStartupActivityimplementation="cc.unitmesh.devti.llm2.GithubCopilotModelInitActivity"/>
8384
<notificationGroupid="UnitMesh.MCPServer"displayType="BALLOON"/>
8485
</extensions>
8586

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp