Skip to main content

编写方法模板

QitOS 中的方法模板是实现经典 agentic 推理模式的 Agent + Critic 组合。本指南从零开始介绍如何创建一个方法模板。

方法模板的组成

每个方法模板由以下部分组成:
  1. Recipe 实现qitos/recipes/<method_name>/__init__.py,包含 AgentModule、Critic 和 State
  2. 模板资产templates/<method_name>/,包含配置、文档和脚手架代码
  3. 测试tests/test_<method_name>.py
  4. CLI 注册qitos/cli.py_METHOD_TEMPLATES 字典的条目

目录结构

第 1 步:定义 State

创建一个跟踪方法特定字段的数据类:
State 在执行后存储在 EngineResult.state 中,并且在每一步都可以被 Critic 访问。

第 2 步:实现 AgentModule

继承 AgentModule,实现 build_system_prompt()reduce()

要点

  • build_system_prompt() 接收 task(str)和 state(dict)。使用 state 注入上下文,如反思、提议或任务账本。
  • reduce() 接收当前 Decisionstate,返回状态更新的 dict。引擎将其合并到运行状态中。
  • 始终优雅处理 state=None(第一步)。

第 3 步:实现 Critic

继承 Critic,实现 evaluate() 返回 CriticResult

CriticResult 动作

关键字段

  • instruction_patch:注入到下一个 prompt 中指导 agent 的字符串
  • state_patch:合并到 state 中更新方法特定字段的 dict
  • score:浮点数(0-1)表示质量;被 qita 用于可视化

第 4 步:创建模板资产

agent.py

config.yaml

paper.md

第 5 步:在 CLI 中注册

qitos/cli.py_METHOD_TEMPLATES 中添加:
这会让它出现在 qit list-templates 的输出中。

第 6 步:编写测试

最低测试覆盖:
每个模板至少 15 个测试,覆盖 Agent、Critic、State 和边界情况。

检查清单

提交方法模板 PR 前:
  • Agent 继承 AgentModule,实现 build_system_prompt()reduce()
  • Critic 继承 Critic,实现 evaluate() 返回 CriticResult
  • State dataclass 包含方法特定字段
  • templates/<method_name>/ 包含 __init__.pyagent.pyconfig.yamlpaper.md
  • 方法名称已添加到 qitos/cli.py_METHOD_TEMPLATES
  • 测试覆盖 Agent、Critic、State 和边界情况(至少 15 个测试)
  • paper.md 解释了从论文到 QitOS 的映射和主要差异
  • pytest tests/test_<method_name>.py 通过
  • 完整测试套件 pytest tests/ -q 无回归

参考模板