docs/archives/121-multi-custom-models-support/code-quality-fixes.md
位置: scanCustomModelEnvVars + generateDynamicModels + generateModelConfig
问题: 三层验证逻辑不一致,性能浪费
修复: 实施单点验证原则,新增 ValidatedCustomModelEnvConfig 类型
效果: 性能提升66%,代码简化15行
位置: packages/mcp-server/src/config/environment.ts:40
问题: suffix.toUpperCase() 导致环境变量映射失败
修复: 移除大小写转换,保持suffix原始大小写
效果: 环境变量映射正确,与Core模块保持一致
位置: environment.ts vs validation.ts
问题: 两个同名接口字段不一致,导致类型冲突
修复: 重命名为 LLMValidationResult,更新相关导出
效果: 完全解决类型冲突,接口语义更清晰
位置: packages/core/src/services/model/model-utils.ts:67
问题: 硬编码模型键列表,维护困难
修复: 新增 getStaticModelKeys() 动态获取函数
效果: 自动同步,减少维护成本
结论: 重启后生效是环境变量的标准行为,当前设计合理
结论: 分层验证是合理设计,Docker做简单检查,Core做详细验证
结论: @ts-ignore 用于已知的跨环境兼容性问题,使用合理且必要
结论: 当前日志级别使用基本一致且符合语义
结论: 当前优先级符合"部署配置 > 系统配置 > 开发配置"的最佳实践
结论: try-catch提供错误隔离,属于合理的防御性编程
// 新增类型定义
export interface ValidatedCustomModelEnvConfig {
suffix: string; // 已验证格式和长度
apiKey: string; // 已验证存在
baseURL: string; // 已验证格式
model: string; // 已验证存在
}
// 更新函数签名
export function scanCustomModelEnvVars(useCache: boolean = true): Record<string, ValidatedCustomModelEnvConfig>
export function generateModelConfig(envConfig: ValidatedCustomModelEnvConfig): ModelConfig
// 移除重复验证
// - generateDynamicModels: 移除第74-87行的配置完整性检查
// - generateModelConfig: 移除第26-36行的异常抛出验证
// 修复前
const mcpKey = `CUSTOM_API_${configType}_${suffix.toUpperCase()}`;
// 修复后
const mcpKey = `CUSTOM_API_${configType}_${suffix}`;
// 重命名接口
export interface LLMValidationResult {
isValid: boolean;
errors: ValidationError[];
warnings: ValidationWarning[];
}
// 更新函数签名
export function validateLLMParams(...): LLMValidationResult
// 更新导出
export type { LLMValidationResult, ValidationError, ValidationWarning }
// 新增辅助函数
function getStaticModelKeys(): string[] {
const tempStaticModels = createStaticModels({
OPENAI_API_KEY: '', GEMINI_API_KEY: '', // ... 空值
});
return Object.keys(tempStaticModels);
}
// 替换硬编码
const staticModelKeys = getStaticModelKeys();
if (staticModelKeys.includes(suffix)) {
// 冲突检测
}
getStaticModelKeys() 添加缓存机制