ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

多LLM模型自由切换:capsule-react注册表解析、优先级路由与“绝不伪造模型“原则

多LLM模型自由切换:capsule-react注册表解析、优先级路由与“绝不伪造模型“原则 多LLM模型自由切换capsule-react注册表解析、优先级路由与绝不伪造模型原则【免费下载链接】capsule-reactReAct loop coordinator. Stateless state machine for reasoning-and-action cycle. Part of Unicity AOS.项目地址: https://gitcode.com/gh_mirrors/ca/capsule-react在 Astrid OS 的 AI 智能体架构中capsule-react包名astrid-capsule-react是驱动推理—行动循环的核心协调胶囊。它本身不调用任何大模型却决定了每个请求由哪个 LLM 提供商、哪个模型来回答——通过注册表解析、两级优先级路由和缓存同步机制你可以在 Anthropic、OpenAI 兼容端点如 Ollama 的qwen2.5-coder:32b、llama3.3:70b之间自由切换而它保证没有可选模型时宁可终止回合也绝不伪造一个模型 ID。一句话理解它是调度员不是答题者capsule-react 是一个无状态状态机通过 IPC 事件总线协调五个协作胶囊Session会话历史、Identity系统提示词、Prompt Builder提示组装、ProviderLLM 流式生成、Tool Router工具分发。它的状态机循环如下Idle → AwaitingIdentity → AwaitingPromptBuild → Streaming → AwaitingTools → Streaming → … → Idle状态机定义见 Phase 枚举整体架构说明见 README.md正因为模型选择与推理逻辑解耦切换 LLM 只需改变发往哪个 topic、携带哪个 model 字段其余胶囊一行代码都不用动。注册表解析一个请求如何找到它的模型每次要发出 LLM 请求前react 都会调用active_llm()解析当前生效的提供商 模型其解析顺序是四层兜底实现见 active_llm()优先级来源说明1️⃣本主体per-principalKV 缓存由注册表广播预热命中则零 IPC 开销2️⃣运维环境变量覆盖仅携带 topic不携带模型 ID3️⃣懒加载向注册表胶囊查询通过registry.v1.get_active_model往返5 秒超时结果回写缓存4️⃣合理默认 topic仅指向 Anthropic topic模型为None注意一个关键细节缓存键react.llm_provider_model是按主体隔离的一个主体的模型选择不会钉死其他所有主体KV 键定义。注册表查询通道在 Capsule.toml 中声明响应通道在 subscribe 配置 中声明。解析函数 parse_active_provider 只认两种输入request_topic必须以llm.v1.request.generate.前缀开头否则视为伪造直接拒绝id选中的模型 ID。模型 ID 对它而言是不透明字符串——冒号包裹的llama3.3:70b也会原样透传react 从不拆解或改写它。优先级路由单次请求覆盖可以赢过注册表真正发出请求前resolve_request_model()再做一次两级优先级裁决源码单次请求覆盖网关随 prompt 传来的context.model仅对当前回合生效注册表选择ProviderEntry.id。每一级都会跳过空串与纯空白值空白覆盖永远不会影子屏蔽一个可用的注册表 ID。这个覆盖的生命周期被精心设计TurnState 字段✅ 同一回合内经历多次工具调用 → 继续生成迭代时覆盖持续生效✅ 用户发出新 prompt 时reset_conversation_turn()将其清空绝不泄漏到下一轮对话重置逻辑回归测试 override_cleared_on_new_turn。所以你可以做到全局用注册表选的模型 A个别请求临时指定模型 B回合结束后一切自动回到 A。绝不伪造模型没有选择时的终止行为这是 capsule-react 最值得称道的设计原则。旧实现曾有一个字面量兜底历史上是一个 Claude 模型 ID——这很危险把一个 Claude ID 盖在非 Anthropic 提供商的请求上会产生诡异的失败。现在当两级优先级都解析不出可用模型时解析结果为None→ 触发 fail_no_model_selected向用户推送一条可操作的错误No LLM model is selected. Runastrid modelsto choose one, or install/configure an LLM provider.清理在途映射、重置回合、回到Idle不发出一条llm.v1.request.generate.*请求空 ID、纯空白 ID 一律视为不存在而不是空模型名回归测试 whitespace_only_model_id_is_absent_across_paths。由于注册表在安装任意提供商时会自动选择默认提供商None意味着真的什么都没有可用——此时终止回合是唯一诚实的行为。缓存一致性切换模型时缓存必须成组搬家多模型切换最容易出的 bug 是新 topic 配旧模型。react 的 handle_model_changed 拦截器订阅registry.v1.active_model_changed广播处理三种信号决策函数广播载荷动作场景携带合法 topic id写入 topic 与模型 ID并缓存上下文窗口/最大输出 token正常切换合法 topic 但无id写入 topic删除旧模型 ID迁移窗口防止新 topic 配旧模型裸 JSONnull删除全部 4 个缓存键astrid models unset清除选择那 4 个必须成组清除的键由 cleared_cache_keys 统一列出——上下文窗口限制若不一起删掉新提供商会继续被旧提供商的 token 预算钳制。此外任何前缀不匹配的 topic如evil.topic都会走RejectTopic分支被拒之门外形成与懒加载路径对称的纵深防御测试见 active_provider_rejects_bad_prefix_topic。快速上手与延伸阅读用户视角用astrid models系列命令选择/清除模型react 侧无需任何配置网关侧可通过请求上下文里的model字段做单请求级覆盖。 想深入源码建议按这条线索阅读 src/lib.rsKV 缓存键定义 —— 理解缓存了什么resolve_request_model —— 优先级路由全貌fail_no_model_selected —— 绝不伪造的终止路径fetch_active_llm_topic_from_registry —— 注册表懒加载与缓存回填。构建与部署相关配置见 Cargo.toml 与 Capsule.toml构建命令见 README.md。整套选择逻辑由 tests 模块 中的十余个回归测试钉死包括空 ID、空白 ID、伪造 topic、清除广播等边界场景——这正是多模型自由切换能放心运行的底气所在。【免费下载链接】capsule-reactReAct loop coordinator. Stateless state machine for reasoning-and-action cycle. Part of Unicity AOS.项目地址: https://gitcode.com/gh_mirrors/ca/capsule-react创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表