Files
Inbox/Prompt模板/05_Agent优化与修改模板库.md

20 KiB
Raw Permalink Blame History

E. 类别五:“从一到一百”(优化与修改) (Optimization & Modification)

模板索引 (Index)

模板ID 核心用途 使用场景 / 关键词
E-1: 代码重构与迁移
E1 全局符号重命名 重构引擎, 成员限定重命名, 语义安全
E2 跨文件依赖迁移 库替换, API映射, 头文件调整
E3 全局代码规范化与格式化 规则批处理, 指针现代化, 花括号规范
E4 跨文件性能优化 瓶颈函数替换, 语义重构, 变量/常量同步
E-2: 功能增强与同步
E5 基于评审列表的全局修改 Review执行, 定位行号, 批处理变更
E6 接口扩展与实现同步 纯虚方法新增, 派生类stub同步
E7 文档-代码同步审查与修复 头文件签名提取, Markdown更新

子类别 E-1: 代码重构与迁移 (Refactoring & Migration)


模板名称: E1: [Agent模板] 全局符号重命名 适用场景: D4 (Agent) 模式。对整个工作区(@workspace)中一个特定的符号(如类名、方法名、函数名)进行全局、上下文感知的重命名。 内嵌原则: [原则二:任务解构] (D4)、[原则八:决定论] (要求精确、非创造性修改)。

[Prompt 模板]

角色你是一个精确的、上下文感知的C++重构引擎。

任务:请在整个工作区(@workspace执行一次全局符号重命名。

== 重构规格 (Specification) ==
1.  旧符号 (Old Symbol) [例如getData]
2.  新符号 (New Symbol) [例如readData]
3.  重构上下文 (Context)
    - 这是一个绝对约束。
    - 你只能重命名 [旧符号],当且仅当它属于 [类名/接口名例如IDataSource] 或其任何派生类Derived Class的成员。
    - 严禁重命名在其他不相关类中同名的 [旧符号]。

== 执行计划 (Execution Plan) ==
1.  扫描范围: 整个工作区(@workspace。
2.  目标文件类型: [例如:*.cpp, *.h, *.hpp, *.md, *.txt] (覆盖代码和文档)。
3.  C++ 代码修改 (.cpp, .h, .hpp)
    - 查找并替换所有符合 [重构上下文] 约束的符号。
    - 这包括:
        - (a) 头文件中的 virtual 声明。
        - (b) 实现类中的定义Definition。
        - (c) 所有使用 . 或 -> 对该成员的调用点Call Sites。
4.  文档修改 (.md, .txt)
    - 查找并替换所有对 [旧符号] 的文本引用例如API文档、README。

== 最终约束 ==
- 你的修改必须是原子性的、上下文感知的。
- 严禁修改任何与此重构任务无关的代码逻辑。

填充指南:

  • [旧符号][新符号]:提供明确的名称。
  • [类名/接口名]这是此模板最关键的约束。它将Agent的行为从“全局查找替换”限制为“上下文感知的重构”确保了修改的精确性防止了对不相关代码的破坏。
  • [目标文件类型]:根据需要调整,确保文档(如README.md)也被一并更新。


模板名称: E2: [Agent模板] 跨文件依赖迁移 适用场景: D4 (Agent) 模式。在整个代码库中,将一个废弃的库(如OldLogger的API调用完整迁移到一个新的库spdlog)。 内嵌原则: [原则二:任务解构] (D4)、[原则六:示例优先] (迁移规则即示例)、[原则五:上下文即燃料]

[Prompt 模板]

角色你是一名精通C++库迁移的软件工程师。

任务:请在整个工作区(@workspace执行一次API依赖迁移。

== 迁移目标 ==
- 从 (Old API) [例如OldLogger 库]
- 到 (New API) [例如spdlog 库]

== 迁移规则 (必须严格遵守) ==
这是此次迁移的核心映射表。你必须在所有相关文件中应用这些规则:

1.  头文件管理 (Header Management)
    - 移除 (Remove) [例如:在所有文件中移除 #include "OldLogger.h"]
    - 添加 (Add) [例如:在需要的文件顶部添加 #include "spdlog/spdlog.h"] (如果尚未存在)

2.  API 调用映射 (API Call Mapping)
    - 规则 1 (From) [例如OldLogger::Log(LOG_DEBUG, ...)]
    - 规则 1 (To) [例如spdlog::debug(...)]

    - 规则 2 (From) [例如OldLogger::Log(LOG_INFO, ...)]
    - 规则 2 (To) [例如spdlog::info(...)]

    - 规则 3 (From) [例如OldLogger::Log(LOG_WARN, ...)]
    - 规则 3 (To) [例如spdlog::warn(...)]

    - 规则 4 (From) [例如OldLogger::Log(LOG_ERR, ...)]
    - 规则 4 (To) [例如spdlog::error(...)]

    - 规则 5 (From) [例如OldLogger::Init(...)]
    - 规则 5 (To) [例如spdlog::default_logger()->set_level(...)]

== 执行计划 ==
1.  扫描范围: 整个工作区(@workspace。
2.  目标文件类型: [例如:*.cpp, *.h, *.hpp, CMakeLists.txt]
3.  执行:
    - (a) 扫描所有目标文件。
    - (b) 应用 [头文件管理] 规则。
    - (c) 应用 [API 调用映射] 规则,确保参数(...)被正确传递。
    - (d) (可选) 如果 [CMakeLists.txt] 中有链接库,也请更新。

填充指南:

  • [迁移规则]这是此模板的核心。你必须提供详尽的、模式匹配的“From-To”列表。[原则六:示例优先] 在此体现为“规则即示例”Agent将模仿这些规则进行替换。
  • [... ] (省略号)用于告知AI保留原始调用的参数。


模板名称: E3: [Agent模板] 全局代码规范化与格式化 适用场景: D4 (Agent) 模式。当自动化工具如linter缺失或不足时用于在整个代码库中强制执行特定的、语义化的编码规范。 内嵌原则: [原则二:任务解构] (D4)、[原则六:示例优先] (格式化规则)、[原则八:决定论]

[Prompt 模板]

角色:你是一个自动化的代码质量 Linter 和 Formatter。

任务:请在整个工作区(@workspace审查并修复所有违反以下规范的代码。

== 目标文件类型 ==
- [例如:*.cpp, *.h, *.hpp]

== 规范规则集 (必须全部应用) ==
1.  规则 1[例如:指针现代化]
    - 查找 (Find) [例如NULL]
    - 替换 (Replace) [例如nullptr]
    - 约束: [例如:仅当 NULL 被用作指针字面量时。严禁替换字符串或宏定义中的 "NULL"。]

2.  规则 2[例如:强制代码块花括号]
    - 查找 (Find Pattern) [例如:
        if (condition)
            statement;
        // 或
        if (condition) statement;
        ]
    - 替换 (Replace Pattern) [例如:
        if (condition) {
            statement;
        }
        ]
    - 适用范围: [例如:必须应用于 if, else, for, while 语句。]

3.  规则 3[例如:移除 C 风格类型转换]
    - 查找 (Find Pattern) [例如:(MyType*)ptr]
    - 替换 (Replace Pattern) [例如static_cast<MyType*>(ptr)]
    - 约束: [例如:仅适用于 static_cast。如果需要 reinterpret_cast请添加 // TODO: Review C-Style Cast 注释。]

== 全局约束 ==
- 你只能应用上述 [规范规则集] 中定义的修改。
- 严禁重构、修改或“优化”任何与这些规则无关的代码逻辑。

填充指南:

  • [规范规则集]:此模板的核心。你必须为每一条规则提供清晰的“查找”和“替换”模式,这是 [原则六:示例优先] 的体现。
  • [约束]:为复杂规则(如NULL替换添加约束可显著提高Agent的准确性。


模板名称: E4: [Agent模板] 跨文件性能优化 适用场景: D4 (Agent) 模式。在D2模式或人工分析Profiling确定了瓶颈后使用此模板指导Agent执行一个具体的、跨文件的优化方案。 内嵌原则: [原则二:任务解构] (D4)、[原则二:玻璃盒心态] (Rationale部分)、[原则五:上下文即燃料]

[Prompt 模板]

角色你是一名精通C++和HPC高性能计算的优化专家。

任务:请在整个工作区(@workspace执行一个已确定的性能优化方案。

== 优化上下文 (Rationale) ==
- 瓶颈函数: [例如utils::compute_distance(Point p1, Point p2)]
- 瓶颈分析: [例如:此函数被高频调用,其内部的 sqrt 造成了巨大开销。]
- 优化目标: [例如:在所有调用链中,用“平方距离比较”替换“真实距离比较”,以消除 sqrt。]

== 优化执行计划 (必须严格遵守) ==

Step 1修改被调用函数 (Callee)
1.  定位文件: [例如src/utils.h 和 src/utils.cpp]
2.  动作 1.1 (重命名) 将 [瓶颈函数] 重命名为 [新函数名例如utils::compute_distance_squared]。
3.  动作 1.2 (修改实现) 修改 [新函数名] 的实现,[例如:移除内部的 sqrt 调用,使其直接返回平方和 (dx*dx + dy*dy)]。

Step 2修改调用方 (Callers)
1.  扫描范围: 整个工作区(@workspace中所有调用了 [瓶颈函数] 的文件。
2.  对每一个调用点 (Call Site) 执行以下语义重构:
3.  动作 2.1 (重命名调用) 将 [瓶颈函数] 的调用替换为 [新函数名]。
4.  动作 2.2 (跟踪返回值)
    - 识别存储该函数返回值的变量 (例如float distance = ...)。
    - 将该变量重命名为 (例如float distance_squared = ...)。
5.  动作 2.3 (修复比较逻辑)
    - 查找所有使用该 [变量] 的地方 (例如if (distance < MAX_DISTANCE)).
    - 必须将比较值也修改为平方 (例如if (distance_squared < MAX_DISTANCE_SQUARED))。
    - 你需要(或定义)一个新的常量 [例如MAX_DISTANCE_SQUARED]。

== 最终约束 ==
- 这是一个语义重构,而非简单的查找替换。
- 你必须在 [Step 2] 中正确跟踪返回值,并修复其所有使用点的比较逻辑,以确保优化后的程序逻辑等价。

填充指南:

  • [优化上下文]必须清晰描述“Why”这有助于Agent理解任务意图玻璃盒原则
  • [优化执行计划]这是此模板的核心。它将一个复杂的、D2分析得出的优化方案“解构”为一个D4 Agent可以逐步执行的、确定性的计划。
  • [动作 2.2][动作 2.3] 是最关键的步骤它们要求Agent具备跟踪变量和修复语义的能力这是D4 Agent的核心价值。

子类别 E-2: 功能增强与同步 (Enhancement & Synchronization)


模板名称: E5: [Agent模板] 基于评审列表的全局修改 适用场景: D4 (Agent) 模式。将Code Review的结论通常是一个Markdown或文本文件作为“任务列表”指导Agent@workspace)自动在整个代码库中定位并应用这些修改。 内嵌原则: [原则二:任务解构] (D4)、[原则五:上下文即燃料] (评审文件是核心燃料)、[原则八:决定论]

[Prompt 模板]

角色你是一个自动化代码审查执行代理Automated Review Executor。

任务:请读取我提供的 [评审意见文件] (例如 @file:reviews/pr_101.md),逐条解析其中的修改项,并在 @workspace 中定位并应用所有修改。

== 执行上下文 ==
1.  工作区: @workspace
2.  评审意见文件 (必须在调用时提供) [例如:@file:reviews/pr_101.md]
3.  评审项格式 (假设) 假设文件中的每一项都遵循 [例如“Item X: [File: path/to/file.cpp] [Line: Y] [Change: '...']”] 或类似的结构。

== 执行计划 (Execution Plan) ==
1.  读取 (Read) 打开并逐行读取 [评审意见文件]。
2.  解析与循环 (Parse & Loop) 遍历文件中的每一条修改项 (例如, "Item 1:", "缺陷 2:")。
3.  对每一个修改项 (For Each Item)
    - (a) 定位 (Locate) 提取 [文件名] 和 [行号] (如果提供)。
    - (b) 理解 (Understand) 提取 [修改要求] (例如:“增加空指针检查”、“将 int 改为 size_t”、“移除多余的 printf”)。
    - (c) 执行 (Execute) 打开 [文件名],导航到 [行号](或相关代码上下文),并精确地应用 [修改要求]。

== 黄金约束 (Golden Constraints) ==
1.  精确性 (Precision) 你的修改必须100%符合 [修改要求]。严禁进行任何“自由发挥”的额外重构、代码清理或格式化(除非修改要求本身就是格式化)。
2.  原子性 (Atomicity) 必须逐条应用修改。
3.  歧义处理 (Ambiguity Handling) 如果 [评审意见文件] 中的某一条指令不清晰、无法定位(例如行号已改变)或无法安全实现,你必须跳过该项。
4.  报告 (Reporting) 任务完成后,必须提供一份报告,列出:
    - (a) [成功应用] 的修改项列表。
    - (b) [跳过] 的修改项列表及其原因(例如:歧义、代码已变更)。
5.  范围 (Scope) 严禁修改 [评审意见文件] 中未提及的任何文件或代码。

填充指南:

  • 使用指南: 此模板不是一次性粘贴。用户必须在调用Agent时在Prompt中明确提供 [评审意见文件] 的路径,例如:@workspace @file:reviews/pr_101.md [粘贴此模板的剩余部分]
  • [评审项格式]如果你的评审文件格式很固定在此处提供示例原则六将极大提高Agent的解析准确率。


模板名称: E6: [Agent模板] 接口扩展与实现同步 适用场景: D4 (Agent) 模式。在面向接口编程中,当一个核心接口(基类)发生变更(如添加新方法)时,自动在 @workspace 中找出所有实现派生并为其同步添加该方法Stub的桩实现。 内嵌原则: [原则二:任务解构] (D4多步骤计划)、[原则五:上下文即燃料][原则六:示例优先] (桩实现规范)。

[Prompt 模板]

角色你是一名精通C++面向对象设计和大规模重构的专家。

任务:请在 @workspace 中执行一次“接口扩展”重构,并自动同步所有实现类。

== 执行计划 (Execution Plan) ==
这是一个多步骤任务,请严格按顺序执行:

Step 1: 扩展接口 (Extend Interface)
1.  定位文件 (Target File) [例如:@file:src/interfaces/IProcessor.h]
2.  接口名 (Interface Name) [例如IProcessor]
3.  执行动作 (Action) 在 [接口名] 类的 [例如public] 区域,添加以下新的纯虚函数:
    [粘贴新函数的完整签名,例如:
    virtual bool initialize(const Config& cfg) = 0;
    ]

Step 2: 查找所有实现类 (Find Implementations)
1.  扫描范围 (Scan Scope) 整个工作区(@workspace。
2.  目标 (Target) 查找所有 public 继承自 [接口名] 的C++类 (例如class CpuProcessor : public IProcessor, class GpuProcessor : public IProcessor)。

Step 3: 同步所有实现类 (Synchronize Implementations)
1.  循环 (Loop) 对 [Step 2] 中找到的每一个实现类(例如 CpuProcessor
2.  动作 3.1 (更新头文件 .h)
    - 打开该类的 .h 文件 (例如src/cpu/CpuProcessor.h)。
    - 在 [例如public] 区域添加对应的方法声明 (移除 = 0 并添加 override 关键字)
      [粘贴新方法在派生类.h中的签名例如
      bool initialize(const Config& cfg) override;
      ]
3.  动作 3.2 (添加桩实现 .cpp)
    - 打开该类的 .cpp 文件 (例如src/cpu/CpuProcessor.cpp)。
    - 在文件末尾(或合适位置)添加该方法的“桩函数”实现。
    - 桩实现规范 (必须严格遵守此模板)
      [粘贴桩实现的完整代码块,例如:
      bool CpuProcessor::initialize(const Config& cfg) {
          // TODO(JIRA-123 / [负责人]): Implement initialize() for CpuProcessor.
          (void)cfg; // 避免 "unused parameter" 警告
          return true; // 或 false, 或 0, 或 {}
      }
      ]

== 最终约束 ==
- [桩实现规范] 必须被严格遵守,特别是 // TODO: 标记、默认返回值和(可选的)(void)param警告抑制以确保代码库一致性并可编译。

填充指南:

  • [Step 1][Step 3] 中的代码块是必须提供的。这是[原则六:示例优先]的应用你必须给Agent提供精确的“目标代码”和“桩代码”模板它才能正确执行。
  • [桩实现规范] 中的默认返回值(如true应由工程师根据接口语义LSP原则来决定。


模板名称: E7: [Agent模板] 文档-代码同步审查与修复 适用场景: D4 (Agent) 模式。维护“活文档”Living Documentation。自动扫描代码库.h文件)和文档(如.md文件),找出两者之间的差异(如函数签名已变更),并自动修复文档以匹配代码。 内嵌原则: [原则二:任务解构] (D4)、[原则五:上下文即燃料] (代码和文档路径)、[原则八:决定论]

[Prompt 模板]

角色你是一名严格的技术文档作者Technical Writer负责保持文档与代码的绝对同步。

任务:请在 @workspace 中审查代码和文档找出不一致的地方并只更新文档使其与代码Source of Truth保持一致。

== 同步上下文 ==
1.  代码源 (Source of Truth) [例如:@dir:src/public_api/] (指定包含 .h 头文件的目录)
2.  文档目标 (Target to Fix) [例如:@file:docs/Public_API_Reference.md]

== 执行计划 (Execution Plan) ==

Step 1: 扫描代码源 (Parse Source of Truth)
1.  遍历 [代码源] 目录下的所有 [例如:.h 或 .hpp] 文件。
2.  为所有 public [例如:函数/类/方法] 提取其“当前函数签名”(包括函数名、参数类型、返回值类型)。

Step 2: 扫描文档目标 (Parse Documentation)
1.  打开 [文档目标] 文件。
2.  解析 Markdown提取其中例如在###标题下或表格中)描述的每一个 [例如:函数/方法] 及其“文档签名”。

Step 3: 对比与修复 (Compare & Fix)
1.  循环 (Iterate) 遍历 [Step 1] 中提取的每一个“当前函数签名”。
2.  检查 (Check)
    - (a) 如果在文档中未找到 (Missing Doc)
        - 动作: 在 [文档目标] 文件的 [例如API列表末尾] 添加该新函数的文档骨架(例如:一个新的 ### [函数名] 章节),并添加一个明确的占位符:
    - (b) 如果在文档中已找到,但签名不匹配 (Outdated Doc)
        - 动作: 更新 [文档目标] 中的“文档签名”例如Markdown表格中的参数、标题使其与 [Step 1] 中提取的“当前函数签名”严格一致。
3.  (可选) 检查废弃项 (Deprecated Doc)
    - 遍历 [Step 2] 的“文档签名”,如果在 [Step 1] 的代码中不存在该函数。
    - 动作: 在 [文档目标] 中该函数的部分,添加一个明确的 [DEPRECATED] 标记或将其移至“废弃API”章节。

== 黄金约束 (Golden Constraint) ==
- 单向同步 (Code-to-Doc) 你的任务是使文档匹配代码。
- 严禁 (FORBIDDEN) 严禁以任何理由修改 [代码源] 目录下的任何 .h 或 .cpp 文件。所有修改必须且只能在 [文档目标] 文件上进行。

填充指南:

  • [代码源][文档目标]必须提供。用户在调用时必须明确指定Agent的扫描范围@dir)和修改目标(@file)。
  • [Step 3] 的计划非常详细这是为了确保Agent执行的是“修复”而非“重写”并正确处理“新增”和“过时”两种情况。