添加规划器#

规划器负责接收提示词、选择工具并处理工具结果。接入自定义规划器时,实现 Planner.solve,然后将其加入构建入口和 CLI 选项。

以下为接口示意,省略了模型请求和工具循环,不能直接作为实现运行。完整示例可参考 rpent/planner/api_loop.py。

# rpent/planner/my_planner.py
from rpent.planner.base import PlannerResult

class MyPlanner:
    def solve(
        self,
        *,
        system_prompt,
        user_message,
        toolkit,
        max_turns,
        input_queue=None,
        dashboard_interaction=None,
    ):
        tool_specs = toolkit.get_tools_spec()
        # 使用 system_prompt、user_message 和 tool_specs 调用模型。
        # 每次工具调用都通过下面的接口执行:
        tool_result = toolkit.execute_tool(tool_name, arguments)
        ...
        return PlannerResult(
            finish_result=finish_result,
            messages=messages,
            stats=stats,
            error=error,
        )

任何 planner 必须:

  1. 接收已经渲染好的 system_prompt 和 user_message。

  2. 从 toolkit.get_tools_spec() 取得工具定义,并通过 toolkit.execute_tool(name, arguments) 执行工具。

  3. 将 ToolResult.content_blocks 中的文本和图片转换成模型 SDK 所需的格式。

  4. 识别 ToolResult.is_finish,并按 max_turns 等限制终止循环。

  5. 返回包含结束状态、消息、统计信息和可选错误的 PlannerResult。

由于 RPent 工具定义和 prompt 渲染流程保持不变,新增 planner 不需要修改工具或环境服务。接口参见 系统架构与执行流程;想给 自定义 planner 暴露新工具,见 添加动作原语。

接入与验证#

在 rpent/planner/base.py 的 build_planner 中添加构建分支,并在 rpent/cli/main.py 的 --planner 选项中加入名称。需要 Dashboard 或连接诊断时,还应接入对应的规划器选择与 rpent/planner/check.py,不能仅添加一个类。

验证工具调用、文本和图像返回、finish、轮数上限、错误结果,以及需要支持的中断和交互路径。复用 tests/unit_tests/rpent/planner/ 中的测试模式;真实模型连接需要单独验证。