# 多模型并行调用功能实现计划 **Goal:** 支持同时配置3个LLM模型,主页面同时显示3个结果框,发送时并行调用所有已配置的模型 **Architecture:** 配置页面同时显示3组模型配置;主页结果显示区改为水平布局3个卡片;发送时并行调用所有模型 **Tech Stack:** Kotlin, Android, OkHttp, Coroutine, SharedPreferences --- ## 任务1: 修改 SecondActivity.kt 数据结构 **Files:** - Modify: `flomo-ai/app/src/main/java/com/example/flomo_ai/SecondActivity.kt` - [ ] **Step 1: 修改 LLMConfig 类,添加 enabled 字段** 在第650行 `data class LLMConfig` 中添加: ```kotlin data class LLMConfig( val name: String, val baseUrl: String, val apiKey: String, val model: String, val enabled: Boolean = true // 新增:是否启用 ) ``` - [ ] **Step 2: 修改 SettingsData 类** 在第663行 `data class SettingsData` 中,将 `llmConfigs` 类型改为固定3个元素的列表: ```kotlin data class SettingsData( val llmConfigs: List, val selectedLlmIndex: Int?, val headerConfigs: List?, val promptConfigs: List?, val buttonConfigs: List?, val noteApiConfig: NoteApiConfig?, val llmConfig: LLMConfig? = null ) ``` - [ ] **Step 3: 提交** ```bash git add flomo-ai/app/src/main/java/com/example/flomo_ai/SecondActivity.kt git commit -m "feat: add enabled field to LLMConfig" ``` --- ## 任务2: 修改 activity_second.xml 布局 **Files:** - Modify: `flomo-ai/app/src/main/res/layout/activity_second.xml` - [ ] **Step 1: 将现有卡片内容包装为可复用的 LinearLayout** 保留第一组配置,作为模板。新增2组相同的结构。 每组配置需要唯一ID: - 第一组: etModelName1, etBaseUrl1, etApiKey1, btnToggleApiKey1, etModel1, btnTestConnection1, tvTestStatus1 - 第二组: etModelName2, etBaseUrl2, etApiKey2, btnToggleApiKey2, etModel2, btnTestConnection2, tvTestStatus2 - 第三组: etModelName3, etBaseUrl3, etApiKey3, btnToggleApiKey3, etModel3, btnTestConnection3, tvTestStatus3 布局结构: ```xml ``` - [ ] **Step 2: 提交** ```bash git add flomo-ai/app/src/main/res/layout/activity_second.xml git commit -m "feat: add 3 model config cards layout" ``` --- ## 任务3: 修改 SecondActivity.kt 逻辑 **Files:** - Modify: `flomo-ai/app/src/main/java/com/example/flomo_ai/SecondActivity.kt:152-700` - [ ] **Step 1: 添加3组视图引用** 在第46行后添加3组EditText和Button引用: ```kotlin private lateinit var etBaseUrl1: EditText private lateinit var etApiKey1: EditText private lateinit var etModel1: EditText private lateinit var etModelName1: EditText private lateinit var btnTestConnection1: Button private lateinit var tvTestStatus1: TextView private lateinit var etBaseUrl2: EditText private lateinit var etApiKey2: EditText private lateinit var etModel2: EditText private lateinit var etModelName2: EditText private lateinit var btnTestConnection2: Button private lateinit var tvTestStatus2: TextView private lateinit var etBaseUrl3: EditText private lateinit var etApiKey3: EditText private lateinit var etModel3: EditText private lateinit var etModelName3: EditText private lateinit var btnTestConnection3: Button private lateinit var tvTestStatus3: TextView ``` - [ ] **Step 2: 修改 initViews() 方法,初始化所有视图** ```kotlin etBaseUrl1 = findViewById(R.id.etBaseUrl1) // ... 其他第一组视图 etBaseUrl2 = findViewById(R.id.etBaseUrl2) // ... 其他第二组视图 etBaseUrl3 = findViewById(R.id.etBaseUrl3) // ... 其他第三组视图 ``` - [ ] **Step 3: 修改 loadConfigurations() 方法,加载3个配置** 从 SharedPreferences 加载3个配置,填充到对应视图。如果配置不足3个,补齐空配置。 - [ ] **Step 4: 修改 saveConfigurations() 方法,保存3个配置** 从3个视图组读取数据,保存为包含3个元素的列表。 - [ ] **Step 5: 添加3个独立的测试方法** ```kotlin private fun testConnection1() { testConnection(etBaseUrl1, etApiKey1, etModel1, tvTestStatus1, btnTestConnection1) } private fun testConnection2() { testConnection(etBaseUrl2, etApiKey2, etModel2, tvTestStatus2, btnTestConnection2) } private fun testConnection3() { testConnection(etBaseUrl3, etApiKey3, etModel3, tvTestStatus3, btnTestConnection3) } ``` - [ ] **Step 6: 设置3个测试按钮的点击事件** ```kotlin btnTestConnection1.setOnClickListener { testConnection1() } btnTestConnection2.setOnClickListener { testConnection2() } btnTestConnection3.setOnClickListener { testConnection3() } ``` - [ ] **Step 7: 提交** ```bash git add flomo-ai/app/src/main/java/com/example/flomo_ai/SecondActivity.kt git commit -m "feat: support 3 model configs with individual test" ``` --- ## 任务4: 修改 activity_main.xml 布局 **Files:** - Modify: `flomo-ai/app/src/main/res/layout/activity_main.xml` - [ ] **Step 1: 修改结果显示区为水平布局** 将原来的单个结果卡片改为水平 ScrollView + LinearLayout,包含3个结果卡片。 ```xml ``` - [ ] **Step 2: 创建 result_card.xml 布局** 创建 `flomo-ai/app/src/main/res/layout/result_card.xml`: ```xml