跳转到主要内容
新增 family preset 时,不要从“写一套新 runtime”开始。 先回答 5 个问题:
  1. 哪些 model name 应该命中这个 family?
  2. 该 family 用什么 transport?
  3. 默认 protocol 是什么?
  4. fallback protocol chain 是什么?
  5. tool 与 context 默认策略是什么?

最小实现路径

qitos/harness/_presets.py 中新增一个 FamilyPreset
FamilyPreset(
    id="my-family",
    display_name="My Family",
    model_matchers=("my-family", "my-model-prefix"),
    adapter_kind="openai-compatible",
    default_protocol="json_decision_v1",
    fallback_protocols=("react_text_v1",),
    tool_policy=ToolPolicy(
        primary_delivery="api_parameter",
        fallback_delivery="prompt_injection",
    ),
    context_policy=ContextPolicy(
        context_window_hint=128_000,
        fallback_context_window=128_000,
    ),
    recommended_models=("my-family-32b",),
)

优先复用已有 protocol

QitOS v0.4 刻意继续复用 ModelProtocol 多数情况下,你应该从这些协议里选:
  • react_text_v1
  • json_decision_v1
  • xml_decision_v1
  • terminus_json_v1
  • terminus_xml_v1
  • minimax_tool_call_v1
只有当模型真的输出另一种契约时,才值得新增 protocol。

优先复用 adapter

当前默认 adapter 是:
OpenAICompatibleAdapter
如果模型本身是通过 OpenAI-compatible endpoint 提供的,优先复用它。 不要因为“模型家族不同”,就过早引入新的 transport adapter。

让 preset 可追踪

preset 只有能被后续研究者看到,才真正有价值。 因此新增 preset 时,务必确保这些信息能进入:
  • RunSpec.metadata
  • trace manifest
  • qita

验收检查

  • resolve_family_preset(...) 能同时从 family id 和 model name 正确解析
  • build_harness_policy(...) 返回正确的 protocol 与 parser
  • infer_model_profile(...) 与 preset 默认值保持一致
  • flagship example 无需改 agent 代码,就能切换到这个 family