|
| 1 | +# ContextUserWorkspace 独立性深度分析 |
| 2 | + |
| 3 | +## 📋 分析目标 |
| 4 | + |
| 5 | +检查 ContextUserWorkspace 的 composables 是否足够独立,是否有逻辑和其他模式的 composables 复用或在 App.vue 里面。 |
| 6 | + |
| 7 | +## 🔍 当前架构分析 |
| 8 | + |
| 9 | +### 1. ContextUserWorkspace 的依赖关系 |
| 10 | + |
| 11 | +**组件内部使用的 Composable**: |
| 12 | +```typescript |
| 13 | +import { useTemporaryVariables } from "../../composables/variable/useTemporaryVariables" |
| 14 | + |
| 15 | +const tempVarsManager = useTemporaryVariables() |
| 16 | +``` |
| 17 | + |
| 18 | +**通过 App.vue 依赖的逻辑**: |
| 19 | +```typescript |
| 20 | +// App.vue 中 |
| 21 | +const optimizer = usePromptOptimizer(...) // ❌ 共享 |
| 22 | +const promptTester = usePromptTester(...) // ❌ 共享 |
| 23 | + |
| 24 | +// ContextUserWorkspace 通过 props 和 events 使用 |
| 25 | +<ContextUserWorkspace |
| 26 | + :prompt="optimizer.prompt" // ❌ 依赖全局 optimizer |
| 27 | + :optimized-prompt="optimizer.optimizedPrompt" |
| 28 | + :is-optimizing="optimizer.isOptimizing" |
| 29 | + :is-iterating="optimizer.isIterating" |
| 30 | + :versions="optimizer.currentVersions" |
| 31 | + :current-version-id="optimizer.currentVersionId" |
| 32 | + @optimize="handleOptimizePrompt" // ❌ 触发全局 optimizer |
| 33 | + @iterate="handleIteratePrompt" |
| 34 | + @test="handleTestAreaTest" // ❌ 使用全局 promptTester |
| 35 | +/> |
| 36 | +``` |
| 37 | + |
| 38 | +### 2. 基础模式的依赖关系 |
| 39 | + |
| 40 | +**基础模式同样依赖**: |
| 41 | +```typescript |
| 42 | +// App.vue 中 |
| 43 | +<template v-else-if="functionMode === 'basic'"> |
| 44 | + <InputPanelUI v-model="optimizer.prompt" /> // ❌ 共享 optimizer |
| 45 | + <PromptPanelUI |
| 46 | + :optimized-prompt="optimizer.optimizedPrompt" |
| 47 | + :is-optimizing="optimizer.isOptimizing" |
| 48 | + /> |
| 49 | + <TestAreaPanel @test="handleTestAreaTest" /> // ❌ 共享 promptTester |
| 50 | +</template> |
| 51 | +``` |
| 52 | + |
| 53 | +### 3. ContextSystemWorkspace 的独立性(对比) |
| 54 | + |
| 55 | +**完全独立的逻辑**: |
| 56 | +```typescript |
| 57 | +// ContextSystemWorkspace.vue 内部 |
| 58 | +const conversationOptimization = useConversationOptimization(...) // ✅ 独立 |
| 59 | +const conversationTester = useConversationTester(...) // ✅ 独立 |
| 60 | + |
| 61 | +const handleOptimizeClick = () => { |
| 62 | + conversationOptimization.optimizeMessage() // ✅ 内部处理 |
| 63 | +} |
| 64 | + |
| 65 | +const handleTestWithVariables = async () => { |
| 66 | + await conversationTester.executeTest(...) // ✅ 内部处理 |
| 67 | +} |
| 68 | +``` |
| 69 | + |
| 70 | +--- |
| 71 | + |
| 72 | +## ⚠️ 发现的问题 |
| 73 | + |
| 74 | +### 问题 1: 不对称的架构设计 ❌ |
| 75 | + |
| 76 | +| 功能 | 基础模式 | ContextUser | ContextSystem | |
| 77 | +|------|---------|------------|---------------| |
| 78 | +| 优化逻辑 | App.vue (optimizer) | App.vue (optimizer) | 组件内部 (conversationOptimization) ✅ | |
| 79 | +| 测试逻辑 | App.vue (promptTester) | App.vue (promptTester) | 组件内部 (conversationTester) ✅ | |
| 80 | +| 状态管理 | App.vue | App.vue | 组件内部 ✅ | |
| 81 | + |
| 82 | +**问题**: ContextSystem 有独立的 composables,而 ContextUser 和基础模式共享 App.vue 的逻辑。 |
| 83 | + |
| 84 | +--- |
| 85 | + |
| 86 | +### 问题 2: 基础模式和 ContextUser 复用逻辑 ❌ |
| 87 | + |
| 88 | +**共享的 Composables**: |
| 89 | +```typescript |
| 90 | +// App.vue |
| 91 | +const optimizer = usePromptOptimizer(...) // 基础模式 + ContextUser 共享 |
| 92 | +const promptTester = usePromptTester(...) // 基础模式 + ContextUser 共享 |
| 93 | +``` |
| 94 | + |
| 95 | +**共享的处理函数**: |
| 96 | +```typescript |
| 97 | +// 基础模式和 context-user 模式的测试处理函数 |
| 98 | +const handleTestAreaTest = async (testVariables?: Record<string, string>) => { |
| 99 | + // 调用基础测试器(只用于基础模式和 context-user) |
| 100 | + await promptTester.executeTest( |
| 101 | + optimizer.prompt, |
| 102 | + optimizer.optimizedPrompt, |
| 103 | + testContent.value, |
| 104 | + isCompareMode.value, |
| 105 | + testVariables |
| 106 | + ) |
| 107 | +} |
| 108 | +``` |
| 109 | + |
| 110 | +**问题**: |
| 111 | +- ContextUser 没有自己独立的优化和测试逻辑 |
| 112 | +- 与基础模式共享相同的 composables |
| 113 | +- 不符合"ContextUser 应该独立"的预期 |
| 114 | + |
| 115 | +--- |
| 116 | + |
| 117 | +### 问题 3: usePromptTester 的定位混淆 ❌ |
| 118 | + |
| 119 | +**usePromptTester 的文档描述**: |
| 120 | +```typescript |
| 121 | +/** |
| 122 | + * 基础模式提示词测试 Composable |
| 123 | + * |
| 124 | + * 专门处理基础模式的提示词测试,支持: |
| 125 | + * - System prompt 测试 |
| 126 | + * - User prompt 测试 |
| 127 | + * - 变量注入 |
| 128 | + * - 对比模式(原始 vs 优化) |
| 129 | + */ |
| 130 | +``` |
| 131 | + |
| 132 | +**实际使用**: |
| 133 | +- ✅ 基础模式使用(符合定位) |
| 134 | +- ❌ ContextUser 模式也使用(不符合定位) |
| 135 | + |
| 136 | +**问题**: usePromptTester 声称是"基础模式专用",却被 ContextUser 复用。 |
| 137 | + |
| 138 | +--- |
| 139 | + |
| 140 | +## 🎯 应该的架构 |
| 141 | + |
| 142 | +### 理想的独立架构 |
| 143 | + |
| 144 | +``` |
| 145 | +App.vue |
| 146 | +├── 基础模式 (Basic Mode) |
| 147 | +│ ├── usePromptOptimizer (全局) |
| 148 | +│ └── usePromptTester (全局) |
| 149 | +│ |
| 150 | +├── ContextSystemWorkspace (独立) ✅ |
| 151 | +│ ├── useConversationOptimization |
| 152 | +│ └── useConversationTester |
| 153 | +│ |
| 154 | +└── ContextUserWorkspace (应该独立) ❌ |
| 155 | + ├── useContextUserOptimization (新建,独立) |
| 156 | + └── useContextUserTester (新建,独立) |
| 157 | +``` |
| 158 | + |
| 159 | +### 建议的改进方案 |
| 160 | + |
| 161 | +#### 方案 1: 创建独立的 ContextUser Composables ⭐⭐⭐⭐⭐ |
| 162 | + |
| 163 | +**新增 Composables**: |
| 164 | +```typescript |
| 165 | +// packages/ui/src/composables/prompt/useContextUserOptimization.ts |
| 166 | +export function useContextUserOptimization( |
| 167 | + services: Ref<AppServices | null>, |
| 168 | + optimizationMode: Ref<OptimizationMode>, |
| 169 | + selectedOptimizeModel: Ref<string>, |
| 170 | + selectedTemplate: Ref<Template | null>, |
| 171 | + selectedIterateTemplate: Ref<Template | null> |
| 172 | +) { |
| 173 | + // 专门用于 ContextUser 的优化逻辑 |
| 174 | + // 独立管理 prompt、optimizedPrompt、versions 等状态 |
| 175 | +} |
| 176 | + |
| 177 | +// packages/ui/src/composables/prompt/useContextUserTester.ts |
| 178 | +export function useContextUserTester( |
| 179 | + services: Ref<AppServices | null>, |
| 180 | + selectedTestModel: Ref<string>, |
| 181 | + optimizationMode: Ref<OptimizationMode>, |
| 182 | + variableManager: VariableManagerHooks | null |
| 183 | +) { |
| 184 | + // 专门用于 ContextUser 的测试逻辑 |
| 185 | + // 独立管理测试状态和结果 |
| 186 | +} |
| 187 | +``` |
| 188 | + |
| 189 | +**ContextUserWorkspace 内部使用**: |
| 190 | +```typescript |
| 191 | +// ContextUserWorkspace.vue |
| 192 | +const contextUserOptimization = useContextUserOptimization( |
| 193 | + services, |
| 194 | + computed(() => props.optimizationMode), |
| 195 | + computed(() => props.selectedOptimizeModel), |
| 196 | + computed(() => props.selectedTemplate), |
| 197 | + computed(() => props.selectedIterateTemplate) |
| 198 | +) |
| 199 | + |
| 200 | +const contextUserTester = useContextUserTester( |
| 201 | + services, |
| 202 | + computed(() => props.selectedTestModel), |
| 203 | + computed(() => props.optimizationMode), |
| 204 | + variableManager |
| 205 | +) |
| 206 | + |
| 207 | +// 内部处理优化 |
| 208 | +const handleOptimize = () => { |
| 209 | + contextUserOptimization.optimize() |
| 210 | +} |
| 211 | + |
| 212 | +// 内部处理测试 |
| 213 | +const handleTest = async (testVariables: Record<string, string>) => { |
| 214 | + await contextUserTester.executeTest( |
| 215 | + contextUserOptimization.prompt.value, |
| 216 | + contextUserOptimization.optimizedPrompt.value, |
| 217 | + testContent.value, |
| 218 | + isCompareMode.value, |
| 219 | + testVariables |
| 220 | + ) |
| 221 | +} |
| 222 | +``` |
| 223 | + |
| 224 | +**优点**: |
| 225 | +- ✅ ContextUser 完全独立,与 System 对称 |
| 226 | +- ✅ 不再依赖 App.vue 的全局状态 |
| 227 | +- ✅ 职责清晰,易于维护 |
| 228 | +- ✅ 可以为 ContextUser 定制特殊功能 |
| 229 | + |
| 230 | +**缺点**: |
| 231 | +- ⚠️ 需要新增 2 个 composables |
| 232 | +- ⚠️ 需要重构 ContextUserWorkspace 的 props/events |
| 233 | +- ⚠️ 基础模式仍然使用旧的 optimizer/promptTester(保持不变) |
| 234 | + |
| 235 | +--- |
| 236 | + |
| 237 | +#### 方案 2: 保持现状,但重命名以明确职责 ⭐⭐⭐ |
| 238 | + |
| 239 | +**重命名 Composables**: |
| 240 | +```typescript |
| 241 | +// usePromptOptimizer → useBasicPromptOptimizer |
| 242 | +// usePromptTester → useBasicPromptTester |
| 243 | +``` |
| 244 | + |
| 245 | +**更新文档**: |
| 246 | +```typescript |
| 247 | +/** |
| 248 | + * 基础模式和 ContextUser 模式共享的提示词优化器 |
| 249 | + * |
| 250 | + * 用于: |
| 251 | + * - 基础模式:单条提示词优化 |
| 252 | + * - ContextUser 模式:单条用户消息优化 |
| 253 | + * |
| 254 | + * 不用于: |
| 255 | + * - ContextSystem 模式(使用 useConversationOptimization) |
| 256 | + */ |
| 257 | +``` |
| 258 | + |
| 259 | +**优点**: |
| 260 | +- ✅ 无需新增代码 |
| 261 | +- ✅ 明确了共享关系 |
| 262 | + |
| 263 | +**缺点**: |
| 264 | +- ❌ 没有解决根本问题(ContextUser 不够独立) |
| 265 | +- ❌ 基础模式和 ContextUser 仍然耦合 |
| 266 | + |
| 267 | +--- |
| 268 | + |
| 269 | +#### 方案 3: ContextUser 继承基础模式的逻辑 ⭐⭐ |
| 270 | + |
| 271 | +**思路**: 将 ContextUser 视为基础模式的扩展版本 |
| 272 | + |
| 273 | +**优点**: |
| 274 | +- ✅ 符合当前架构 |
| 275 | +- ✅ 无需改动 |
| 276 | + |
| 277 | +**缺点**: |
| 278 | +- ❌ ContextUser 失去独立性 |
| 279 | +- ❌ 与 ContextSystem 的独立性不对称 |
| 280 | + |
| 281 | +--- |
| 282 | + |
| 283 | +## 📊 各方案对比 |
| 284 | + |
| 285 | +| 方案 | 独立性 | 对称性 | 实现成本 | 维护性 | 推荐度 | |
| 286 | +|------|--------|--------|---------|--------|--------| |
| 287 | +| 方案 1: 独立 Composables | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | |
| 288 | +| 方案 2: 重命名明确 | ⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | |
| 289 | +| 方案 3: 保持现状 | ⭐ | ⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | |
| 290 | + |
| 291 | +--- |
| 292 | + |
| 293 | +## 🚀 推荐方案:方案 1 |
| 294 | + |
| 295 | +### 理由 |
| 296 | + |
| 297 | +1. **架构对称性**: 让 ContextUser 和 ContextSystem 都拥有独立的 composables |
| 298 | +2. **职责清晰**: 每个模式有自己专属的逻辑,不混淆 |
| 299 | +3. **易于扩展**: 未来可以为 ContextUser 添加特殊功能 |
| 300 | +4. **符合预期**: 你期望的"相互独立" |
| 301 | + |
| 302 | +### 命名规范 |
| 303 | + |
| 304 | +按照现有的命名模式: |
| 305 | + |
| 306 | +| 模式 | 优化 Composable | 测试 Composable | 说明 | |
| 307 | +|------|----------------|----------------|------| |
| 308 | +| **ContextSystem** | `useConversationOptimization` | `useConversationTester` | 处理"会话"(Conversation) | |
| 309 | +| **ContextUser** | `useContextUserOptimization` | `useContextUserTester` | 处理"用户上下文"(User Context) | |
| 310 | +| 基础模式 | `usePromptOptimizer` | `usePromptTester` | 保持不变 | |
| 311 | + |
| 312 | +**命名原则**: |
| 313 | +- ✅ **ContextSystem** 处理"会话"(Conversation),所以用 `useConversation*` |
| 314 | +- ✅ **ContextUser** 处理"用户上下文"(User Context),所以用 `useContextUser*` |
| 315 | +- ✅ 基础模式保持原有命名 |
| 316 | +- ✅ 保持一致性和可读性 |
| 317 | + |
| 318 | +### 实施步骤 |
| 319 | + |
| 320 | +1. 创建 `useContextUserOptimization.ts` |
| 321 | +2. 创建 `useContextUserTester.ts` |
| 322 | +3. 重构 `ContextUserWorkspace.vue` 使用新的 composables |
| 323 | +4. 更新 `App.vue` 中 ContextUser 相关的逻辑 |
| 324 | +5. 保持基础模式使用原有的 `usePromptOptimizer` 和 `usePromptTester` |
| 325 | + |
| 326 | +--- |
| 327 | + |
| 328 | +## 📝 总结 |
| 329 | + |
| 330 | +### 当前状态 |
| 331 | + |
| 332 | +- ❌ **ContextUser 不够独立**,依赖 App.vue 的全局状态 |
| 333 | +- ❌ **与基础模式复用逻辑**,composables 混淆 |
| 334 | +- ❌ **架构不对称**,ContextSystem 独立但 ContextUser 不独立 |
| 335 | + |
| 336 | +### 理想状态 |
| 337 | + |
| 338 | +- ✅ **ContextUser 完全独立**,拥有自己的 composables |
| 339 | +- ✅ **架构对称**,System 和 User 都独立于基础模式 |
| 340 | +- ✅ **职责清晰**,每个模式有明确的边界 |
| 341 | + |
| 342 | +### 建议 |
| 343 | + |
| 344 | +**强烈推荐实施方案 1**,创建独立的 ContextUser composables,实现真正的独立性和架构对称性。 |
0 commit comments