跳转到内容

选择语言

目前語言: 繁體中文

用不同的 Agent 優化 OpenSpec 各階段效能:HagiCode 實踐總結

HagiCode for Windows Microsoft Store 宣传图
HagiCode for Windows 已上架 Microsoft Store
HagiCode for Windows 現已正式登陸 Microsoft Store,Windows 使用者可以直接從商店完成安裝並接收管道更新。現在就打開商店頁面看看吧。
打開 Microsoft Store
Awesome Site 横幅:社区精选开源合集
Awesome Site:社群精選開源合集
在開源社群精心整理的合集中,找到下一個工具、想法或靈感。從感興趣的主題出發,用熟悉的語言閱讀,再回到原始來源深入探索。
探索精選合集
Awesome Design 横幅:DESIGN.md 设计系统画廊
Awesome Design:DESIGN.md 設計系統畫廊
透過即時預覽與 README 參考瀏覽精選設計系統,再把 DESIGN.md 複製進你的專案,讓 AI 代理依它建構風格一致的頁面。
瀏覽設計畫廊
OpenSpec 横幅:先对齐规范,再用 AI 构建
OpenSpec:先對齊規範,再讓 AI 寫程式碼
OpenSpec 是面向 AI 程式開發的輕量規範層:先描述一項變更,由 AI 起草提案、規範、設計與任務,你審閱確認後再動手實作,完成後歸檔為持續更新的規範。沒有僵化的階段門檻,適用於既有程式碼庫,並能搭配你正在使用的各類 AI 助手。
了解 OpenSpec
OmniRoute 文档横幅:一个端点连接众多 AI 服务商
OmniRoute 文件:一個端點連接眾多 AI 服務商
了解 OmniRoute 如何透過同一個端點路由眾多 AI 服務商與模型,並支援免費額度與自動回退,讓你的編碼工具持續可用。
查看 OmniRoute 文件

用不同的 Agent 優化 OpenSpec 各階段效能:HagiCode 實踐總結

通用提示詞無法應對不同開發階段的具體需求,透過階段特定的 agent 和參數化模板系統,讓 AI 在每個環節都能輸出高品質內容。

背景

OpenSpec 是一個提案驅動的開發系統,透過結構化的工作流程管理技術提案的建立、審查和實作。這個想法本身挺好的,只是在實際使用中,我們發現單一通用的 AI 提示詞存在明顯問題。

explore 階段缺乏上下文錨定,AI 探索時容易偏離提案範圍;工件生成品質不穩定,design.md 缺少視覺化元素,proposal.md 缺少程式碼變更表,tasks.md 甚至混入了不該包含的 Git 操作;職責邊界模糊,不同文件類型應該包含什麼內容不明確;提示詞缺乏彈性,無法根據不同場景動態調整 AI 行為。

這些問題直接影響了 OpenSpec 工作流程的效率和輸出品質。其实也沒別的辦法,只能自己動手改提示詞模板了。這篇文章就是那段日子的記錄。

關於 HagiCode

本文分享的方案來自我們在 HagiCode 專案中的實踐經驗。HagiCode 是一個 AI 驅動的程式碼助手,在開發過程中我們大量使用 OpenSpec 工作流程來管理技術提案。本文介紹的 agent 分層策略,正是我們在實際使用中總結出來的優化方案。

如果你覺得這套方案有價值,說明我們的工程實踐還不錯——HagiCode 本身也值得關注一下。

OpenSpec 工作流程解析

OpenSpec 系統包含多個核心階段,每個階段都有其特定的目標和約束。理解這些階段的職責邊界,是設計有效 agent 策略的基礎。

┌─────────────────────────────────────────────────────────────────────┐
│ OpenSpec 工作流程階段 │
├─────────────────────────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Explore │ -> │ New │ -> │ FF │ -> │ Apply │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Archive │ │ Sync │ │ Verify │ │ Status │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────────────┘

每個階段的目標完全不同:Explore 階段需要思考姿態,專注於資訊收集;New 階段要聚焦需求分析和方案設計;FF 階段按依賴順序批次建立工件;Apply 階段將提案轉化為實際程式碼。用同一個提示詞模板去驅動這些差異巨大的任務,顯然不太合理。

提示詞系統架構

OpenSpec 使用模板化的提示詞系統,這為 agent 分層提供了技術基礎。模板檔案採用 .hbs (Handlebars/Scriban) 格式,配合 .json 元資料檔案定義參數和驗證規則,支援中英雙語。

關鍵的設計是 PromptScenario 枚舉,它定義了不同階段的提示詞場景:

public enum PromptScenario
{
OpenspecV1Explore, // 探索階段
OpenspecV1New, // 新建提案
OpenspecV1Ff, // 快速生成
OpenspecV1Apply, // 應用變更
OpenspecV1Archive // 歸檔
}

每個場景都有對應的獨立模板檔案,比如 openspec-v1-explore.zh-CN.hbs 和 openspec-v1-ff.zh-CN.hbs,這樣可以針對不同階段注入特定的約束和指導。

參數化的提示詞載入

實作動態參數注入是整個系統的核心。FilePromptProvider 負責根據場景和參數載入提示詞:

public async Task<string> GetOpenspecV1FfPromptAsync(
string changeName,
string changeDescription,
string locale = "en-US",
string? planningDirectionInstructions = null,
CancellationToken cancellationToken = default)
{
var parameters = new Dictionary<string, object>
{
{ "planningDirectionInstructions",
ResolvePlanningDirectionInstructions(locale, planningDirectionInstructions) }
};
if (!string.IsNullOrWhiteSpace(changeName))
{
parameters["changeName"] = changeName;
}
return await GetPromptWithParametersAsync(
PromptScenario.OpenspecV1Ff,
locale,
cancellationToken,
parameters);
}

這種設計允許我們在執行時動態注入參數,比如 changeName 和 planningDirectionInstructions,而不需要修改模板檔案本身。

規劃方向動態設定

HagiCode 實作了一個靈活的規劃方向系統,允許使用者為每次生成選擇不同的方向。每個方向都有獨立的 ID、描述和提示詞片段:

public static class ProposalPlanningDirections
{
private static readonly ProposalPlanningDirectionDefinition[] Catalog =
[
new(
ExploreId,
"Explore mode",
DefaultEnabled: true,
EnglishPromptFragment:
"- Explore mode: add an explicit exploration pass...",
ChinesePromptFragment:
"- 探索模式:在定稿工件之前增加明確的探索階段..."),
// ... change-map, flowchart, prototype, architecture, sequence
];
public static NormalizedProposalPlanningDirections Normalize(
bool? enableExploreMode,
IReadOnlyList<PlanningDirectionOptionDto>? planningDirections)
{
// 合併預設設定和使用者自訂設定
}
}

支援的方向包括:explore(探索模式)、change-map(變更地圖)、flowchart(互動流程圖)、prototype(UI 原型)、architecture(架構圖)、sequence(API 時序圖)。使用者可以自由開關這些方向,系統會動態生成對應的提示詞指令區塊。

在 Handlebars 模板中使用條件語句來注入這些指令:

{{#if planningDirectionInstructions}}
## 本次生成的規劃方向
{{{planningDirectionInstructions}}}
{{/if}}

明確的內容範圍約束

最關鍵的改進是明確不同文件類型的內容範圍約束,特別是 tasks.md。我們在提示詞中新增了嚴格的約束條件:

### tasks.md 內容範圍約束
當建立 `tasks.md` 工件時,必須遵守以下內容範圍約束:
**必須包含**:
- 業務邏輯任務(程式碼實作、功能開發)
- 技術實作任務(元件整合、API 開發)
- 測試任務(單元測試、整合測試)
- 文件任務(更新文件、新增註解)
**禁止包含**:
- Git 提交操作(git add、git commit、git push)
- 版本控制管理工作流程
- 部署和發布操作

使用規範語言(MUST/SHALL)而非建議性語言,確保 AI 嚴格理解這些約束。對於 proposal.md 和 design.md,我們也明確了各自的職責邊界:proposal.md 必須包含程式碼變更表和 UI 原型圖(當涉及 UI 變更時),而 design.md 必須包含架構圖和資料流程圖。

探索階段上下文錨定

Explore 階段的問題最容易被忽視——AI 探索時可能完全偏離提案範圍。我們透過增強提示詞來解決:

## Explore 執行原則
- **不需要寫文件** - 探索結果不需要儲存為獨立文件
- **資訊傳遞** - 探索完成後,收集的資訊將傳遞給 Proposal 建立階段
- **重點是思考** - 探索的價值在於資訊收集,而非文件產出
## 與 Proposal 建立銜接
Explore 階段發生在提案建立後、專案程式碼尚未編寫時。探索完成後,
系統會引導你建立或填充 `proposal.md` 檔案,探索收集的資訊將作為提案內容的基礎。

這樣明確了 Explore 階段的定位:它是資訊收集的前置步驟,不是獨立的三文件產出環節。AI 理解這一點後,就能更聚焦於提案相關的知識探索。

實作指南

如果你想在 HagiCode 中應用這套方案,可以按以下步驟操作:

  1. 定義規劃方向:在 ProposalPlanningDirections.cs 中定義方向 ID、預設狀態和提示詞片段
  2. 模板參數化:在 .hbs 模板中使用條件語句和變數注入
  3. 驗證輸出:啟用特定方向時檢查對應工件是否包含預期內容
  4. 測試邊界:驗證停用方向時不會生成對應內容,且不影響其他方向

需要注意的是,模板修改要與上游保持同步,中英文模板的結構要一致。規劃方向的渲染應在微秒級完成,避免影響效能。

總結

OpenSpec 工作流程的效能優化,核心在於理解不同階段的差異化需求。透過階段特定的 agent、參數化模板和明確的內容約束,我們讓 AI 在每個環節都能輸出高品質內容。

這套方案在 HagiCode 的實踐中得到了驗證——不僅提高了文件品質,還減少了人工修改的工作量。如果你的團隊也在使用類似的提案驅動工作流程,希望這些經驗能對你有所啟發。

其实也就是把問題拆開來看罷了。每個階段有每個階段的特點,用對方法,問題自然就簡單了。

參考資料


如果本文對你有幫助:

  • 點個讚讓更多人看到
  • 來 GitHub 給個 Star
  • 訪問官網了解更多
  • 觀看演示影片了解完整功能
  • 一鍵安裝開始體驗

公測已開始,歡迎安裝體驗!

开始使用 HagiCode

一次安装,几分钟上手

HagiCode for Windows 在 Microsoft Store 免费提供。打开商店即可安装并保持更新;也可以先对比各版本与定价,再决定从哪个渠道开始。

讓想法化為交付成果。

HagiCode 是面向專案開發的 AI 編碼工作台:以 OpenSpec 工作流程規劃變更,多 Agent 並行執行,再由 Hero Scenario 讓進度一目了然,將想法化為交付成果。

智慧
OpenSpec 工作流程將意圖轉化為從提案到交付的可執行路徑。
高效
多 Agent 並行推進研究、實作與審查。
有趣
豐富、便利的介面互動,讓規劃、Agent 執行與專案工作更容易跟進。