十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

oh-my-pi 项目 robomp 的 PR 评审完成提醒机制:review_completion_reminder 模板与终止动作治理

oh-my-pi 项目 robomp 的 PR 评审完成提醒机制:review_completion_reminder 模板与终止动作治理 oh-my-pi 项目 robomp 的 PR 评审完成提醒机制review_completion_reminder 模板与终止动作治理【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi导读本文深入剖析 oh-my-pi 仓库中 Python 子项目 robomp 的review_completion_reminder提示词模板及其在 worker.py 中的触发链路。该模板是 robomp 自动化 PR 评审工作流的关键兜底机制当 LLM 在评审中途提前停止、未调用终止工具时系统会注入这条提醒引导 Agent 检查已暂存的行内评论并收敛到唯一合法的收尾动作。读完本文你将掌握该模板的变量语义、两个终止动作的边界、提醒循环的判定逻辑与配置调优方式并能直接套用到同类 Agent 任务编排场景。一、模板原文与核心定位review_completion_reminder模板位于 python/robomp/src/prompts/review_completion_reminder.md全文仅 13 行却承载了完整的收尾契约PR review unfinished. PR: {{repo.full_name}}#{{issue.number}} — {{issue.title}} Review workspace: {{workspace.branch}} Review started; terminal action not reached. Incoming PR review terminal action: exactly one: 1. submit_pr_review — submit batched review summary plus staged inline comments. 2. abort_task — unrecoverable environment failure. Review staged comments, TodoList, prior tool calls; continue from where stopped. Do NOT re-classify unless earlier classify call failed. Do NOT post standalone inline findings. Staged comments → call submit_pr_review now. No inline issues → still call submit_pr_review with summary-only verdict. MUST end this turn by calling one listed terminal tool.它属于 robompprompts/目录下提醒类提示词家族与completion_reminder.md、dirty_state_reminder.md、followup_review.md并列专职服务于review_pr任务类型。其定位一句话概括评审已经开始、但当前回合没有走到终止动作时提醒 Agent 回到现场并完成收尾。它不负责发起评审那是 kickoff_pr_review.md 的职责只负责拉回正轨。二、模板变量的渲染机制模板中的三个占位符{{repo.full_name}}、{{issue.number}}、{{issue.title}}、{{workspace.branch}}由 persona.py 注入def review_completion_reminder(*, repo: RepoInfo, issue: IssueInfo, workspace: Workspace) - str: return render(_load(review_completion_reminder.md), {repo: repo, issue: issue, workspace: workspace})render()使用一个刻意精简的 mustache 风格替换器_PLACEHOLDER re.compile(r\{\{\s*([a-zA-Z0-9_.])\s*\}\})支持通过.逐级取属性缺失字段回退为空字符串并且刻意不引入完整模板引擎从机制上避免畸形提示词渲染出不可预期的副作用见 persona.py 的模块注释。因此repo.full_name→ 例如octo/widgetissue.number、issue.title→ PR 在 GitHub 中按 issue 建模因此沿用 IssueInfo 的编号与标题workspace.branch→ 每次评审的隔离工作树分支形如review/pr-99供 Agent 快速定位现场。这四类数据在评审任务启动时已由tasks.entry解析并写入TaskInputs提醒渲染只是复用同一份上下文保证续跑与首跑看到的世界一致。三、终止动作的严格二元划分模板明确给出 Incoming PR review 的终止动作集合恰好两个与 worker.py 中硬编码的常量一一对应_TERMINAL_REVIEW_TOOLS: frozenset[str] frozenset({submit_pr_review, abort_task})终止动作适用场景语义submit_pr_review正常收尾提交批量评审摘要 全部已暂存的行内评论abort_task异常收尾不可恢复的环境故障静默放弃任务两条铁律在模板中反复强调submit_pr_review是唯一合法出口即使没有任何行内问题也必须调用它以仅摘要summary-only verdict的形式结案不允许以gh_post_comment、classify_pr等作为回合结束动作。abort_task是兜底阀仅限编排器/环境缺陷如文件系统权限损坏、缺少系统工具、git 元数据损坏、harness bug。其工具描述明确排除一切常规工作流问题——构建失败、需求不清用gh_post_comment缺复现信息用mark_unable_to_reproduce见 host_tools.toml且reason仅作审计用途绝不会展示给 reporter。四、触发时机worker 的完成提醒循环模板不是在评审开始时注入的而是在回合提前终止时由 worker.py 的_drive_turn()驱动注入。核心判定函数_needs_completion_reminder()def _needs_completion_reminder(*, task_kind, inputs, bindings, tools_called) - bool: if bindings.abort is not None and bindings.abort.triggered: return False if task_kind review_pr: return not (tools_called _TERMINAL_REVIEW_TOOLS) ...即只要review_pr回合结束、tools_called中不包含任一终止工具就判定未完成进入提醒循环while reminders_used max_reminders: needs_completion _needs_completion_reminder(...) if not needs_completion: if task_kind review_pr: break ... if task_kind review_pr: reminder persona.review_completion_reminder( repoinputs.repo, issueinputs.issue, workspaceinputs.workspace) next_turn _run(reminder)这段逻辑揭示了模板的完整生命周期回合以initial_prompt即kickoff_pr_review渲染结果启动若 Agent 在到达终止工具前停止例如上下文耗尽、误以为任务已完成循环注入review_completion_reminder催促收尾每注入一次reminders_used加一达到上限后即使仍未完成也只记录rpc_completion_unfinished告警日志并放弃避免死循环特别地review_pr任务在不需要提醒时立即退出循环不做工作树脏状态dirty-state探测——因为评审是只读操作工作树本就不应有改动对比triage_issue等任务还会走dirty_state_reminder分支。五、续跑而非重来的三条纪律模板对 Agent 的续跑行为做了精准约束其背后与完整评审流程kickoff_pr_review.md 的 Phase 0 定向 / Phase 1 分类定级 / Phase 2 评审形成呼应Review staged comments、TodoList、prior tool calls从停止处继续评审现场SQLite 中暂存的行内评论、阶段化 TodoList、历史工具调用是唯一事实来源Agent 必须先恢复现场再行动。Do NOT re-classify除非此前的classify_pr调用本身失败分类定级triaged标签与 P0–P3 排名在 Phase 1 已一次性完成提醒回合不重复执行避免标签被覆盖或排名漂移。Do NOT post standalone inline findings行内发现必须经pr_review_comment暂存、再由submit_pr_review一次性冲刷禁止单独发布。这正是单次批量评审one batched review原则在收尾阶段的强制执行——与 host_tools.toml 中pr_review_comment在submit_pr_review前不调用 GitHub 的描述一致SQLite 是暂存区GitHub 只在最终提交时接触一次。从架构层面看docs/pr-review-handoff.md 已确认的设计决策SQLite 暂存让行内评论在--continue恢复会话后依然存活遵守DB 是唯一事实来源原则而eventCOMMENT被硬编码——submit_pr_review从不APPROVE或REQUEST_CHANGES合并与否是维护者的决定排名标签review:p0…review:p3才是机器给出的建议。六、只读边界的双重保险提醒模板之所以敢要求MUST end this turn by calling one listed terminal tool是因为外层还有一道只读硬约束。评审模式的系统级提示词 system_append_pr_review.md 明确列出唯一允许的副作用classify_pr、暂存的pr_review_comment调用、一次submit_pr_review(eventCOMMENT)、至多一次用于维护者决策上下文的gh_post_comment同时明令禁止classify_issue、set_issue_labels、repro_record、gh_push_branch、gh_open_pr、mark_unable_to_reproduce。因此review_completion_reminder与system_append_pr_review构成双层约束前者约束回合如何结束后者约束过程中能做什么。二者合力保证评审 Agent 绝不提交代码、绝不审批合并、绝不越权改 PR只在给定 checkout 上完成只读评审后把结论交还维护者。七、配置调优与可观测性提醒循环的三个关键参数均可在运行时通过环境变量调整见 config.py环境变量默认值含义ROBOMP_TASK_COMPLETION_MAX_REMINDERS2单次任务最多注入几轮完成提醒ROBOMP_TASK_TIMEOUT_SECONDS2400review_pr等常规任务单回合超时秒ROBOMP_RELEASE_TASK_TIMEOUT_SECONDS3600仅handle_release_ci使用评审任务不涉及提醒循环的健康状态通过结构化日志暴露每次注入记录rpc_completion_reminder含 attempt/max达到上限仍未完成记录rpc_completion_unfinished含tools_called快照便于事后分析 Agent 卡在了哪个工具调用上。若abort_task被触发则记录rpc_aborted_by_tool并干净退出——这属于 Agent 主动拔插头不算失败不会在 dashboard 上制造噪音或向 reporter 发送评论。八、测试验证与延伸阅读模板的渲染行为有专门的单元测试守护tests/test_persona.pydef test_review_completion_reminder_mentions_submit_only() - None: out persona.review_completion_reminder(repo_Repo(), issue_Issue(number99, titleFix parser), workspace_Workspace(branchreview/pr-99)) assert submit_pr_review in out assert gh_open_pr not in out该用例精确锁定了模板的两大契约必须出现submit_pr_review字样、绝不能暗示gh_open_pr之类的写操作。同文件的test_kickoff_pr_review_formats_head_repo_and_origin_base、test_system_append_pr_review_renders_configured_bot_login则分别守护评审开场与系统追加模板共同构成评审提示词族的回归防线。若想继续深入本机制推荐按以下路径阅读仓库完整评审工作流kickoff_pr_review.mdPhase 0–2、P0–P3 排名、pr_review_comment参数表系统级只读约束system_append_pr_review.md工具自描述与参数 schemahost_tools.toml架构设计与决策记录docs/pr-review-handoff.md提醒循环实现与终止常量worker.py结语review_completion_reminder是 robomp PR 评审自动化中最后一步的保险丝它把回合结束这一 LLM 最易失守的边界收敛为submit_pr_review与abort_task二选一的确定性约束并通过 worker 提醒循环、SQLite 暂存、只读系统提示词与单元测试形成完整闭环。这套终止工具白名单 现场续跑 批量冲刷的模式对任何需要长时间、多工具、带副作用的 Agent 任务编排都极具借鉴价值。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表