尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

big-AGI 模型域自动解析(Editorial Auto-Picks)机制解析:三层降级链、编辑表与编译期类型安全

big-AGI 模型域自动解析(Editorial Auto-Picks)机制解析:三层降级链、编辑表与编译期类型安全 big-AGI 模型域自动解析Editorial Auto-Picks机制解析三层降级链、编辑表与编译期类型安全【免费下载链接】big-AGIAI suite powered by state-of-the-art models and providing advanced AI/AGI functions. Includes AI personas, AGI functions, world-class Beam multi-model chats, text-to-image, voice, response streaming, code highlighting and execution, PDF import, presets for developers, much more. Deploy on-prem or in the cloud.项目地址: https://gitcode.com/GitHub_Trending/bi/big-AGI导读big-AGI 中每个模型域Domain如primaryChat、codeApply、fastUtil、imageCaption都需要一个可用的 LLM当用户没有手动固定Pin某个模型时系统会自动解析一个默认模型。本文基于 LLM-editorial-auto-picks.md 与仓库源码完整剖析这条自动解析链路用户固定Pin→ 编辑表推荐Editorial pick→ ELO/成本启发式ELO/cost heuristic的三层降级逻辑并深入讲解编辑表EditorialDefaults如何以手工策展的跨厂商优先级提供可预测的默认值以及整套机制如何借助 TypeScript 字面量联合实现编译期类型安全。读完后你将能定位任意域模型的默认来源、理解编辑表条目的编写与匹配规则并能在自己的模型选型模块中复用这套策展优先 启发式兜底的架构思路。一、背景什么是模型域为什么需要自动解析big-AGI 将不同的模型用途抽象为若干域Domain每个域代表一类固定场景。域标识符定义在 model.domains.types.ts 的DModelDomainId联合中共 4 个primaryChat主聊天模型用于 Chat 窗口通常从对话历史推断或由 Persona 指定codeApply代码编辑器模型用于应用代码变更及其他代码操作fastUtil快速工具模型用于 Auto-Title、Summarize 等快特性要求具备函数调用能力imageCaption图像描述模型在把图片发送给主聊天模型之前先生成详细的文字描述。每个域在 model.domains.registry.ts 中注册了规格ModelDomainSpec包括显示标签、autoStrategy自动选择策略、requiredInterfaces必需接口列表以及可选的fallbackDomain/editorialFallbackDomain。例如codeApply要求接口LLM_IF_OAI_FnimageCaption的自动策略是topVendorTopLlm并可在主域失败时回退到primaryChat。当一个域需要模型、而用户没有显式固定时系统调用llmsAssignmentsAutoModelId()位于 store-llms-domains_slice.ts解析默认模型。该函数按顺序尝试三层Pin → Editorial pick → ELO/cost heuristic。二、三层解析链Resolution Layers第 1 层Pin用户固定modelAssignments[domainId]保存用户的显式固定。语义在assignDomainModelId()store-llms-domains_slice.ts中实现固定指向一个有效 LLM直接使用固定为null用户显式选择该域不要模型记录不存在Auto 模式进入第 2 层。仓库中还配套实现了两条维护逻辑保证 Pin 层始终干净llmsAssignmentsPruneStale()store-llms-domains_slice.ts当 LLM 全局列表universe发生变更或 store 重新水合时剔除引用已不存在模型的固定项被剔除的条目视同 Auto在读取时重新解析assignDomainModelAutoIfStale()store-llms-domains_slice.ts同步期的维护操作若固定指向的模型已不可见被隐藏则清除固定并退回 Auto。第 2 层Editorial pick编辑表推荐llmsEditorialPickForDomain(domainId, filteredLlms)遍历编辑表见下文编辑表一节返回第一个与用户本地 LLM 列表匹配的(vendor, modelId)对。这一层是手工策展的跨厂商默认值来源提供不依赖 ELO 或成本启发式的可预测结果。值得注意的是该函数支持一个可选的第三参数fallbackEditorialDomainId当主域没有编辑条目、或条目全部不匹配时可以转而检查备选域的编辑表。这个参数由域的editorialFallbackDomain规格驱动model.domains.registry.ts并在解析器中被传入store-llms-domains_slice.ts。第 3 层ELO/成本启发式ELO/cost heuristic当编辑表没有任何条目匹配时系统回退到按域配置ModelDomainsRegistry中的autoStrategy的两种策略之一topVendorTopLlm选择ELO 最高厂商中的 ELO 最高模型。实现见_strategyTopQuality()store-llms-domains_slice.ts直接取厂商分组中第一个厂商的第一个模型。被primaryChat、codeApply、imageCaption使用。topVendorLowestCost在顶部厂商中选择成本最低非免费的模型且优先选择带 ELO 评分的模型。实现见_strategyTopVendorLowestCost()store-llms-domains_slice.ts。被fastUtil使用。其设计假设是最低非零成本通常落在最新模型上而最新模型往往也是更好的模型。两种策略共享同一套预处理_groupLlmsByVendorRankedByElo()store-llms-domains_slice.ts把可见模型按厂商分组、组内按 ELO 降序、厂商之间按其最高 ELO 降序。成本排名costRank来自_getLlmCostBenchmarkFromPricing()store-llms-domains_slice.ts它基于一个假设性基准成本10 万输入 token 1 万输出 token的总价。注意 ELO 排序中cbaElo缺失的模型按 -1 处理排最后隐藏模型isLLMHidden直接不参与分组。在进入三层解析之前解析器还会先按域的requiredInterfaces收窄候选集_allowedDomainLlms()store-llms-domains_slice.ts要求候选模型具备全部必需接口但如果过滤后没有任何模型匹配则放宽条件退回全量列表避免无模型可用。此外同一文件中还提供了两个启发式入口llmsHeuristicGetTopDiverseLlmIds()按 ELO 跨厂商轮转取多样化的 Top 模型与llmsHeuristicGetTopFastLlmIds()按成本跨厂商轮转取低价模型免费/0 成本模型被排到末尾。它们体现了多厂商多样性 兜底填充的通用选型思路与域解析共用同一套分组逻辑。三、编辑表Editorial Table详解编辑表位于 model.domains.editorial.ts导出常量EditorialDefaults。3.1 结构Shape每个域映射到一个有序的{ vendor, modelId }数组。原文档的骨架如下export const EditorialDefaults { primaryChat: [ { vendor: anthropic, modelId: claude-opus-4-7 }, { vendor: openai, modelId: gpt-5.5 }, { vendor: googleai, modelId: models/gemini-3.5-flash }, // ... ], codeApply: [ /* ... */ ], // ... } as const satisfies _EditorialDefaultsTable;对照当前仓库实际内容model.domains.editorial.ts表内条目持续迭代并带有详尽注释例如primaryChat当前以claude-fable-5-1打头注释记录了 2026-09-01 解除冻结、Bedrock 停留 5.1 需账号授权等背景随后是claude-opus-52026-07-24 发布1M 上下文、默认开启思考、claude-opus-4-8、OpenAI 的gpt-6-astra2026-09-03 旗舰、gpt-5.6-sol、Gemini 系列models/gemini-3.7-flash等末尾总是 NVIDIA NIM 的免费试用条目。codeApply域则把 Gemini Flash 系列与gpt-5.3-codex排在前面体现代码优化模型优先的域意图。这些注释本身就是维护者留下的决策记录是理解编辑表演变的第一手资料。3.2 关键性质数组顺序即跨厂商优先级。picker 返回第一个匹配项不查询任何外部 ELO 排名——一个 Gemini 模型可以夹在两个 Anthropic 条目之间反之亦然。这在源码注释中反复强调Array order IS the cross-vendor precedence - any vendors model can be sandwiched between picks from other vendors.按域定制列表。每个域独立编排反映域用途如codeApply偏好代码模型、fastUtil偏好廉价快速模型、imageCaption偏好视觉模型。没有条目的域直接落入第 3 层ELO/成本启发式。NVIDIA NIM 条目固定在每个域列表尾部它是免费试用端点所以只要配置了付费厂商付费厂商一定先命中只有完全没有付费厂商时 NIM 才作为兜底。注释同时记录了多次 EOL 清理如deepseek-v4-pro在 NVIDIA 上 410 Gone、z-ai/glm-5.2于 2026-08-24 EOL 被移除。3.3 匹配逻辑宽容匹配_editorialMatch()model.domains.editorial.ts对llm.initialParameters.llmRef依次尝试三种匹配以容忍日期后缀与 OpenRouter 的点号 ID精确匹配llmRef editorialId前缀匹配llmRef.startsWith(editorialId)用于处理厂商追加的日期后缀如-20250514点/横线等价匹配llmRef.replace(/\./g, -) editorialId.replace(/\./g, -)用于 OpenRouter 的anthropic/claude-fable-5.1与编辑表中的anthropic/claude-fable-5-1之间的对应。注意匹配基于llmRef模型的初始参数引用而非DLLMId注释明确指出了这一点被注释掉的备选实现llm.id editorialId有意未启用。3.4 picker 实现要点llmsEditorialPickForDomain()model.domains.editorial.ts按声明顺序遍历EditorialDefaults[domainId]用llm.vId vendor _editorialMatch(llm, modelId)找第一个命中无命中返回undefined由调用方自动解析器落入 ELO/成本策略。主域无条目时按前述fallbackEditorialDomainId逻辑退到备选域。3.5 域系统之外的编辑建议视频输入提示编辑表文件还额外承载了一个域系统之外的能力建议llmsEditorialVideoInputPick()model.domains.editorial.ts在用户粘贴视频 URL 且当前模型不支持视频输入时推荐一个可看视频的模型。它只考虑 Gemini 家族原生googleai或llmRef含gemini的服务如 OpenRouter 的google/gemini-*因为URL 视频YouTube 抓取是 Gemini 的能力排序规则为可见优先于隐藏、pubDate最新优先、原生 Google AI 服务优先。对应的提示文案EditorialVideoInput由 composer 在视频粘贴场景下展示。四、类型安全链Type-Safety Chain编辑表的每个modelId都在编译期受限于该厂商已知模型 ID 的字面量联合这是整套机制最重要的工程质量保障。4.1 厂商模型 ID 类型如何派生各厂商模型文件通过llmsDefineModels()定义于 models.mappings.tsOpenAI 风格厂商使用其预实例化版本llmsDefineManualMappings导出一个const数组再从数组推导字面量联合。例如 xAI// in xai.models.ts (L16) export type LlmsXAIModelId typeof _knownXAIChatModels[number][idPrefix];llmsDefineModelsTElem()工厂保留数组的 const 类型因此联合会追踪数组中每个idPrefix或id字面量。在厂商文件中增删模型会自动更新联合类型编辑表侧的旧 ID 随即在编译期报错。Anthropic 与 Gemini 因按id而非idPrefix组织其类型推导分别见 anthropic.models.ts 与 gemini.models.ts。4.2 编辑表的判别联合model.domains.editorial.ts 声明了按vendor判别、将modelId绑定到对应厂商类型或string的联合type _EditorialPick | { vendor: anthropic, modelId: LlmsAnthropicModelId } | { vendor: openai, modelId: LlmsOpenAIModelId } | { vendor: bedrock, modelId: ${us. | global.}anthropic.${LlmsAnthropicModelId}${ | -thinking | -v1:0} } | { vendor: openrouter, modelId: anthropic/${LlmsAnthropicModelId | claude-haiku-4-5} | google/${string} | openai/${LlmsOpenAIModelId} } // ... ;对比原文档的示意版本当前源码对动态厂商也做了更精细的约束Bedrock 的modelId被收窄为us./global.前缀 Anthropic 模型 ID 可选-thinking/-v1:0后缀的模板字符串类型OpenRouter 则限定为anthropic/、google/、openai/三种前缀。这比单纯的string更严格但依旧为运行时发现的模型保留余地。同时存在一条编译期断言model.domains.editorial.tsconst _assertEditorialVendorsAreValid: [_EditorialPick[vendor]] extends [ModelVendorId] ? true : never true;它保证联合中每个厂商字面量都必须是合法的ModelVendorId。4.3 编译器能捕获什么厂商名拼写错误如oepnai触发_assertEditorialVendorsAreValid断言失败厂商与模型不匹配如{ vendor: anthropic, modelId: gpt-5.5 }判别联合收窄失败厂商下线模型后编辑表残留旧 IDLlmsXxxModelId随厂商已知模型数组自动更新旧 ID 不再属于联合编译报错。4.4 厂商覆盖范围静态厂商富字面量联合Anthropic、OpenAI、Geminigoogleai、xAI、Z.AI、Moonshot、DeepSeek、NVIDIA NIMnvidianim提供最强的编译期保证动态厂商OpenRouter、Bedrock 的模型列表在运行时发现modelId用string或模板字符串放宽约束其余已注册厂商Alibaba、ArceeAI、Azure、ChutesAI、FastAPI、FireworksAI、Groq、LLMAPI、Novita、TogetherAI同样通过llmsDefineManualMappings导出LlmsXxxModelId类型但其已知模型数组目前可能为空——llmsDefineModels的基元素类型退化为TElem而非nevermodels.mappings.ts 的注释解释了这一点机制保持就绪未来可直接补充编辑条目MiniMax、Perplexity 使用按id键控的ModelDescriptionSchema[]数组而非idPrefix但同样的 const 追踪机制适用。五、向外的纵深pubDate 编辑轴与未策展标记编辑表只是 big-AGI 对模型元数据编辑控制的一个维度。围绕每模型元数据还有另一条编辑轴——pubDate发布时间、策展描述、chatPrice、benchmark、parameterSpecs等字段的保证与取舍详见同目录的 LLM-editorial-pubdate.md。简要关联如下pubDateYYYYMMDD格式字符串字段定义见 llms.types.ts在编辑条目中保证输出Anthropic 与 Gemini 的 0-day 模型分别由llmsAntCreatePlaceholderModel()anthropic.models.ts与geminiModelToModelDescription()gemini.models.ts未知模型回退到formatPubDate()兜底填充客户端侧getLLMPubDate()与isLLMRecentlyPublished()llms.types.ts驱动 new 徽标与排序LLM_RECENTLY_PUBLISHED_DAYS 45[?]未策展标记llmsLabelUncurated()/llmsIsLabelUncurated()models.mappings.ts用于标注列表 API 无法确定该模型是什么的 ID-only 目录与尚未策展是不同的语义——它由llm-registry-sync等下游消费避免把视频/TTS/Embedding ID 误当作聊天模型发布。六、相关文件速查文件作用model.domains.editorial.ts编辑表EditorialDefaults pickerllmsEditorialPickForDomain 视频输入建议store-llms-domains_slice.ts三层解析器llmsAssignmentsAutoModelId、Pin 维护、ELO/成本策略实现model.domains.types.tsDModelDomainId联合四个域model.domains.registry.ts域规格autoStrategy、requiredInterfaces、fallbackDomain、editorialFallbackDomainmodels.mappings.tsllmsDefineModels/llmsDefineManualMappings类型推导工厂、fromManualMapping、formatPubDate、[?]标记LLM-editorial-pubdate.md同一编辑理念在 per-model 元数据pubDate等轴上的展开七、结语这套机制的工程价值回顾整条链路big-AGI 的域模型自动解析体现了三个可复用的设计原则确定性优先——手工策展的编辑表让默认模型可预期、可解释不依赖波动中的 ELO/成本数据分层兜底——Pin → Editorial → Heuristic 逐级降级任何一层失效都有下一层接住且通过fallbackDomain/editorialFallbackDomain提供域间兜底类型即文档——借助llmsDefineModels的 const 追踪与判别联合把厂商模型清单与编辑表在编译期绑定增删模型、拼写错误、跨厂商错配都在构建期暴露。理解这套机制后无论是排查为什么自动选了这个模型还是为新增域编写编辑条目都有明确的代码路径可循。【免费下载链接】big-AGIAI suite powered by state-of-the-art models and providing advanced AI/AGI functions. Includes AI personas, AGI functions, world-class Beam multi-model chats, text-to-image, voice, response streaming, code highlighting and execution, PDF import, presets for developers, much more. Deploy on-prem or in the cloud.项目地址: https://gitcode.com/GitHub_Trending/bi/big-AGI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表