AI Agent 工作流程架構:從 Issue 到 PR 的全自動開發

海衫科技 HarrysonTech | | 閱讀時間:14 分鐘
H
HarrysonTech Engineering
AI-driven tech team · 2 engineers + AI Agents · 全自動開發流程設計者
從 GitHub Issue 建立到 PR merge,整個開發流程可以全自動化——但前提是你把它設計成狀態機,而不是線性腳本。海衫科技用這套架構讓 AI Agent 每天自主完成 3-5 個功能,不需要工程師守在旁邊。

📌 關鍵要點 Key Takeaways

為什麼線性腳本行不通

大多數人第一次設計 AI Agent 工作流程,都會做成這樣:

async function buildFeature(issue) {
  await readIssue(issue);
  await createBranch(issue);
  await writeCode(issue);
  await runTests();
  await createPR();
}

這在 demo 裡運作完美。在生產環境裡,它在第 3 步崩潰了,從頭重跑,再次崩潰,無限循環。問題在哪?

狀態機設計

把工作流程設計成明確的狀態機。每個 Issue 都有一個狀態,狀態轉換是原子操作(要麼完成,要麼不做):

type IssueState =
  | 'PENDING'          // 等待處理
  | 'ANALYZING'        // 分析 Issue 內容
  | 'WORKTREE_CREATED' // Git worktree 已建立
  | 'CODING'           // AI 正在寫程式碼
  | 'TESTING'          // 執行測試
  | 'REVIEWING'        // 六重審查中
  | 'PR_CREATED'       // PR 已建立,等待 merge
  | 'COMPLETED'        // 完成
  | 'FAILED'           // 失敗,需要人工介入
  | 'ESCALATED';       // 升級給人工處理

interface IssueWorkflow {
  issueId: string;
  state: IssueState;
  worktreePath: string;
  checkpoints: Checkpoint[];
  retryCount: number;
  lastError?: string;
  startedAt: Date;
  updatedAt: Date;
}

關鍵原則:狀態轉換前先寫入,狀態轉換後再執行。這樣即使在執行中崩潰,重啟後也知道上次做到哪裡。

狀態轉換流程
1
PENDING → ANALYZING:從 GitHub 讀取 Issue 內容,用 Claude 解析需求,生成實作計畫
2
ANALYZING → WORKTREE_CREATED:建立 git worktree,隔離的工作目錄,分支名 issue-{id}
3
WORKTREE_CREATED → CODING:Claude Code 在隔離 worktree 裡開始寫程式碼
4
CODING → TESTING:執行測試套件,確保新程式碼通過所有測試
5
TESTING → REVIEWING:觸發六重自動化程式碼審查
6
REVIEWING → PR_CREATED:審查通過,自動建立 PR 並附上詳細說明

Worktree 隔離策略

git worktree 是這套架構最關鍵的技術選擇。它讓多個 Issue 可以並行進行,同時完全隔離:

# 每個 Issue 建立獨立的 worktree
git worktree add \
  /tmp/worktrees/issue-${issueId} \
  -b issue-${issueId}

# Agent 在這個路徑下工作
# 不影響主 repo 或其他 Issue 的 worktree

# 完成後清理
git worktree remove /tmp/worktrees/issue-${issueId}
git branch -d issue-${issueId}

隔離帶來的好處:

我們的生產環境同時跑最多 6 個並行 Issue(受限於 Claude API rate limit,不是技術限制)。

Checkpoint 持久化

Checkpoint 是讓 Agent 能從任何點恢復的關鍵機制。每 15 分鐘(或每完成一個重要步驟)自動儲存:

interface Checkpoint {
  id: string;
  issueId: string;
  state: IssueState;
  timestamp: Date;
  context: {
    filesModified: string[];
    testsRun: number;
    testsPassed: number;
    reviewResults: ReviewResult[];
    nextSteps: string[];
  };
}

// 儲存到 Redis(快速讀取)+ PostgreSQL(持久化)
async function saveCheckpoint(workflow: IssueWorkflow) {
  const checkpoint = buildCheckpoint(workflow);
  await redis.setex(
    `checkpoint:${workflow.issueId}`,
    3600, // 1 小時 TTL
    JSON.stringify(checkpoint)
  );
  await db.checkpoint.create({ data: checkpoint });
}

系統崩潰後的恢復流程:讀取最新 checkpoint → 還原 Agent context → 從上次中斷的步驟繼續(不是從頭重跑)。實測恢復時間平均 47 秒。

錯誤分類與恢復機制

這是整個架構最複雜、也最重要的部分。我們把錯誤分成三類,每類有不同的處理策略:

第一類:可自動恢復(Recoverable)

這類錯誤可以直接自動重試,不需要人工介入:

// 自動重試邏輯:指數退避
async function withRetry(fn: () => Promise, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await fn();
    } catch (err) {
      if (!isRecoverable(err)) throw err;
      if (i === maxRetries - 1) throw err;
      await sleep(Math.pow(2, i) * 1000); // 1s, 2s, 4s
    }
  }
}

第二類:需人工確認(Needs Human)

技術上可以繼續,但有商業決策需要人確認:

處理方式:Agent 暫停,在 GitHub Issue 留言說明需要什麼確認,等待工程師回覆後繼續。

第三類:需要放棄(Fatal)

Agent 無法繼續,需要完全人工介入:

處理方式:標記為 ESCALATED,清理 worktree,通知工程師,生成完整的失敗報告(包含嘗試了什麼、為什麼失敗、建議的下一步)。

實際效果數據

這套架構在海衫科技運行 4 個月的數據:

最重要的指標不是自動完成率,而是「工程師花在每個 Issue 上的時間」——從平均 4.1 小時降到 0.8 小時(主要是審查 PR 的時間)。這就是真正的生產力提升。

想在你的團隊建立全自動開發流程?

海衫科技提供 AI Agent 工作流程架構設計諮詢

免費諮詢 →