ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

从代码读懂 LLM Checker:DeterministicModelSelector 与评分核心实现原理

2026/9/29 23:31:47 拓冰建站 浏览量
从代码读懂 LLM Checker:DeterministicModelSelector 与评分核心实现原理 从代码读懂 LLM CheckerDeterministicModelSelector 与评分核心实现原理【免费下载链接】llm-checkerAdvanced CLI tool that scans your hardware and tells you exactly which LLM or sLLM models you can run locally, with full Ollama integration.项目地址: https://gitcode.com/gh_mirrors/ll/llm-checkerLLM Checker 是一个本地 LLM 模型选择器它能扫描你的硬件判断你到底能跑哪些本地大语言模型LLM / sLLM并给出带完整 Ollama 集成的推荐。这篇文章面向新手用大白话拆解它的大脑——DeterministicModelSelector确定性模型选择器和统一评分核心scoring core的实现原理四个分数怎么算、权重怎么配、为什么你的机器能拿到 70B 模型的推荐。先看全景一条从硬件到推荐的流水线整个推荐过程可以拆成 5 步全部发生在 src/models/deterministic-selector.js 里硬件画像 → 模型池 → 分类过滤 → 逐个打分(0-100) → 排序取 Top N阶段做什么关键方法Phase 0 数据采集读 CPU/GPU/内存算出可用预算usableMemGBgetHardware/normalizeHardwareProfile建模型池优先用本地 Ollama 缓存没有就回退到静态目录 src/models/catalog.jsonloadModelPool分类过滤按任务类别coding、multimodal…筛掉不相关的模型filterByCategory逐个评估选最优量化 → 估内存 → 算 Q/S/F/C 四个分量 → 加权出总分evaluateModel收尾排序、补齐中间档候选、可选实测探针selectModels入口就是 selectModels()它接收一个任务类别默认general返回带分数、量化建议和推荐理由rationale的候选列表。Phase 0硬件画像与内存预算评分的第一步不是看模型而是看机器。getHardware()第 156 行起采集 CPU、GPU、内存、加速能力然后算出一个关键数字——可用内存预算普通机器min(0.8 × 总内存, 总内存 - 2GB)给系统和应用留足余量有独显时预算优先取VRAMApple 统一内存M 系列芯片则取0.85 × 总内存。之后 normalizeHardwareProfile() 会把来自不同检测器src/hardware/ 下的 detector的五花八门的数据统一成memory.totalGB、gpu.vramGB、acceleration.supports_*的规范形状。多卡场景有个小心思只有明确知道 VRAM 是单卡值时才会乘以卡数避免把双卡 24GB误算成 48GB。模型池本地缓存优先静态目录兜底loadModelPool()的数据来源有两层Ollama 抓取缓存~/.llm-checker/cache/ollama/等覆盖全量模型还会检查索引是否过期超过 14 天标记为 stale静态目录catalog.json 兜底保证离线也能用。外部模型会经过normalizeExternalModels()归一化拆出量化变体、推断参数量、打上 coder / vision / embedding 等标签并按model_identifier去重。评分核心Q / S / F / C 四个分量真正干活的函数是 evaluateModel()它给每个模型 × 量化组合打出四个 0-100 的分量1️⃣ Q —— 质量QualitycalculateQualityPrior() 优先查实测基准HumanEval、LiveBench、MMLU-Pro 等存于 src/data/quality-evals.js查不到才用估算基础分按参数量查表0.5B ≈ 45 分7B ≈ 75 分70B ≈ 95 分baseQualityByParams第 39-46 行模型家族加成qwen34、deepseek-r15yi反而 -3量化惩罚Q8_0 不扣分Q4_K_M -5Q2_K -12新鲜度弃用模型 -12越新的模型越高任务对齐coding 类下非 coder/instruct 模型直接 -15。2️⃣ S —— 速度SpeedestimateSpeedProfile() 的公式非常直观基础TPS ≈ K(后端) ÷ 有效参数量 × 量化加速系数 × 线程/显卡加成各后端的 K 值backendK第 94-99 行后端K 值CUDANVIDIA220MetalApple 芯片160ARM CPU90x86 CPU70量化越压缩跑得越快Q2_K ×1.35Q8_0 只有 ×0.8。最后把估算 TPS 与该类别的目标速度targetSpeedsgeneral 40 tok/s、coding 40、summarization 60相除封顶 100 分。3️⃣ F —— 契合度FitcalculateFitScore() 最简单所需内存占预算比例 ≤ 0.9 得 100 分≤ 1.0 得 70 分超预算直接淘汰estimateMemoryBreakdown() 会精确拆出权重内存 KV Cache 运行时开销MoE 模型按总参数量算内存避免236B 看起来只要 14GB的误判。4️⃣ C —— 上下文ContextcalculateContextScore()支持目标长度 100 分一半 70 分更少 0 分。注意上下文不够的模型不会被直接淘汰只是在这个分量上失分——这体现了降权而非排除的设计哲学。权重怎么配按类别说话四个分量的权重来自集中配置 DETERMINISTIC_WEIGHTS类别[Q, S, F, C]解读general[0.45, 0.35, 0.15, 0.05]质量为主兼顾速度coding[0.55, 0.20, 0.15, 0.10]代码更看重质量reasoning[0.60, 0.10, 0.20, 0.10]推理最重质量、最不重速度embeddings[0.30, 0.50, 0.20, 0.00]向量模型只拼速度最终分数就是加权和再加一个大内存档位修正见下节截断到 0-100。用户还可以通过optimizeFor切换 speed / quality / context / coding 等偏好getScoringWeights() 会把类别权重和用户偏好按用户意图优先的原则融合。亮点机制高容量档位修正H 分量这是 PR #89 带来的修正解决大内存机器被推荐一堆小模型的问题。calculateHighCapacitySizeAdjustment() 的逻辑预算 ≥ 32GB 才触发。getHighCapacitySizeTarget()给出档位目标≥128GB → 保底 30B、甜区 70B48-80GB → 保底 20B、甜区 34B32GB → 保底 13B、甜区 30B参数低于保底线按比例扣最多 24 分接近甜区最高加 12 分。配套的 ensureFeasibleMidTierCoverage() 还会检查 Top N 里有没有中间档≥7B和多卡机的 30B 级候选没有就从全量候选里补一个进来——保证推荐列表覆盖高中低而不是清一色小模型。统一评分核心三条命令一个裁判早期项目里check、recommend、smart-recommend三条命令各用一套打分引擎结果会互相矛盾。src/models/scoring-core.js 就是为了解决这个问题对应 GitHub issue #88把DeterministicModelSelector确立为唯一权威排序核心共享一个无状态实例canonicalSelector第 37 行各命令喂给引擎的模型形状不同扩展数据库行、SQL 变体行、Ollama 目录行normalizeToDeterministic() 负责统一转换成确定性形状并在__source字段里保留原对象引用方便调用方拿回原始数据对外只有一个入口 rankModels()相同的模型硬件输入任何命令都得到完全相同的分数。调用方包括 src/ai/multi-objective-selector.js、src/models/intelligent-selector.js 和 src/data/registry-recommender.js全部经由rankModels走同一个裁判。可选的实测探针用真速度修正估算估算终归是估算。开启enableProbe后runQuickProbes()选择器会对 Top 候选发一段 128 token 的真实提示词测出实际 tok/s再用同一套权重重新打分。实测结果按硬件指纹 模型量化缓存到~/.llm-checker/bench.json7 天内有效——同一台机器上重复推荐时直接命中缓存秒出结果。小结为什么推荐结果可解释读完全文你会发现LLM Checker 的每个推荐都附带 rationale如fits in 4.4/16GB, Q4_K_M, coder-tuned, CUDA backend, 7B is sweet spot由 buildRationale() 生成因为它的本质是一个确定性打分器所有输入硬件、模型、量化都被归一化无随机成分结果可复现分数可拆解为 Q/S/F/C H每一项都能说出理由实测基准优先于估算且会明确标注measured/estimated来源统一评分核心保证三条命令口径一致。想继续深入可以阅读 docs/reference/technical-docs.md 了解完整技术文档或查看 tests/deterministic-model-pool-check.js 里针对模型池的回归测试。延伸阅读硬件检测器src/hardware/detector.jsOllama 集成客户端src/ollama/client.js多目标选择器src/ai/multi-objective-selector.js模型目录数据src/models/catalog.json【免费下载链接】llm-checkerAdvanced CLI tool that scans your hardware and tells you exactly which LLM or sLLM models you can run locally, with full Ollama integration.项目地址: https://gitcode.com/gh_mirrors/ll/llm-checker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考