UNPKG

@thinking-models/mcp-server

Version:

A Model Context Protocol (MCP) server for thinking models

63 lines (62 loc) 2.66 kB
/** * 统一的推荐系统 - 整合不同的推荐策略和算法 */ import { log } from './utils.js'; import { calculateModelSimilarity, DEFAULT_BASIC_WEIGHTS, DEFAULT_ENHANCED_WEIGHTS } from './similarity_engine.js'; /** 推荐系统模式 */ export var RecommendationMode; (function (RecommendationMode) { RecommendationMode["ENHANCED"] = "enhanced"; RecommendationMode["BASIC"] = "basic"; // 基础模式(轻量快速的相似度评估) })(RecommendationMode || (RecommendationMode = {})); /** * 获取模型推荐 * @param sourceModel 源模型 * @param candidateModels 候选模型数组 * @param lang 语言 * @param mode 推荐模式 * @param limit 返回的最大结果数量 * @returns 推荐结果数组 */ export async function getModelRecommendations(sourceModel, candidateModels, lang, mode = RecommendationMode.ENHANCED, limit = 5) { try { log(`开始为「${sourceModel.name}」生成${mode === RecommendationMode.ENHANCED ? '增强' : '基础'}模式的推荐`); // 根据模式选择合适的权重配置 const weights = mode === RecommendationMode.ENHANCED ? DEFAULT_ENHANCED_WEIGHTS : DEFAULT_BASIC_WEIGHTS; // 根据模式决定是否使用语义相似度 const useSemanticSimilarity = mode === RecommendationMode.ENHANCED; // 计算每个候选模型的相似度 const scoredModelsPromises = candidateModels.map(async (candidate) => { const { score, reasons } = await calculateModelSimilarity({ sourceModel, targetModel: candidate, weights, useSemanticSimilarity }); if (score <= 0) return null; return { id: candidate.id, name: candidate.name, definition: candidate.definition || "", relevance_score: score, match_reasons: reasons }; }); // 等待所有相似度计算完成 const scoredModelsWithNulls = await Promise.all(scoredModelsPromises); // 过滤掉null结果并按得分排序 const recommendations = scoredModelsWithNulls .filter((result) => result !== null) .sort((a, b) => b.relevance_score - a.relevance_score) .slice(0, limit); log(`${mode}模式推荐系统生成了 ${recommendations.length} 个相关模型推荐`); return recommendations; } catch (error) { log(`生成模型推荐时出错: ${error instanceof Error ? error.message : String(error)}`); return []; } }