Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 7 — Đưa agent vào CI/CD: chạy tự động, cost và human-in-the-loop

Đã đọc 0/8 mục · còn khoảng 4 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Đưa agent vào CI/CD: chạy tự động, cost và human-in-the-loop

Agent chạy tay trên máy bạn thì hay, nhưng giá trị thật là khi nó tự làm việc trong pipeline mỗi khi có code mới. Bài này ghép agent vào CI/CD, kiểm soát chi phí token, và đặt chốt con người đúng chỗ.

Chọn trigger đúng: đừng chạy trên mọi thứ

Sinh test tốn token và thời gian. Chạy agent trên toàn repo mỗi commit là lãng phí. Trigger hợp lý:

  • Chỉ trên file thay đổi trong pull request (diff-based).
  • Chỉ khi coverage giảm dưới ngưỡng.
  • Chỉ cho code mới chưa có test.
# .github/workflows/test-agent.yml
name: test-agent
on: pull_request
jobs:
  gen-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Files changed
        run: git diff --name-only origin/main > changed.txt
      - name: Run test agent on changed files
        run: python agent.py --files changed.txt --max-cost 0.50
      - name: Open PR with generated tests
        run: gh pr create --title "test: agent-generated" ...

Điểm mấu chốt: agent mở PR với test mới, không commit thẳng vào nhánh chính.

Kiểm soát chi phí (cost guardrails)

Agent lặp = nhiều lời gọi LLM = tiền. Đặt trần cứng:

  • Trần chi phí mỗi lần chạy (--max-cost): vượt thì dừng và báo.
  • Trần số vòng lặp (max_iters): tránh lặp vô hạn khi gặp bug thật.
  • Cache context: file không đổi thì không gom lại context.
  • Model phân tầng: model rẻ cho sinh test đơn giản, model mạnh chỉ khi refine phức tạp.
  • Batch hợp lý: gom nhiều hàm nhỏ vào một lần gọi thay vì mỗi hàm một request.
if run_cost > MAX_COST:
    report("Đạt trần chi phí, dừng an toàn")
    exit_gracefully()

Human-in-the-loop: chốt con người ở đâu

Agent sinh test, con người duyệt trước khi merge. Vì sao? Test agent sinh có thể:

  • Khẳng định một hành vi sai là đúng (lock-in bug).
  • Assertion trùng khớp bug hiện tại thay vì hành vi đúng mong đợi.
  • Quá khớp cài đặt (test brittle, đổi refactor là vỡ).
Quy trình chuẩn: agent -> PR -> reviewer đọc -> merge. Reviewer đặc biệt soi các test mới pass ngay trên code có sẵn: liệu chúng kiểm hành vi đúng, hay chỉ chụp lại hành vi hiện tại (kể cả khi hành vi đó là bug)?

Các bước tích hợp CI/CD

  • Chạy agent trên diff của PR, không phải toàn repo.
  • Chạy trong runner cô lập, có sandbox như Bài 2.
  • Đặt trần cost + trần vòng lặp; dừng an toàn khi vượt.
  • Agent mở PR test, gắn kèm báo cáo coverage + mutation score.
  • Bắt buộc review con người trước merge; không auto-merge test.
  • Ghi log mỗi lần chạy: chi phí, số test sinh, coverage delta để theo dõi ROI.
  • Thêm cổng: nếu mutation score dưới ngưỡng, PR bị đánh dấu "cần bổ sung".

Checklist sẵn sàng production

  • [ ] Trigger theo diff, không toàn repo.
  • [ ] Có trần chi phí và trần vòng lặp.
  • [ ] Sandbox cô lập trong CI.
  • [ ] Agent mở PR, không commit thẳng main.
  • [ ] Review con người là bắt buộc.
  • [ ] Log cost + coverage delta mỗi lần.

Khung tư duy: "Agent đề xuất, con người quyết định"

Trong sinh test, sai lầm nguy hiểm nhất không phải test fail — mà là test pass sai, khóa cứng một bug vào suite. Vì thế mọi test agent sinh đều là đề xuất, và con người là người quyết định merge. Tự động hóa việc sinh, đừng tự động hóa việc tin.

Sai lầm thường gặp

  • Auto-merge test agent sinh: khóa cứng bug, mất luôn giá trị của test.
  • Chạy trên toàn repo mỗi commit: đốt token, CI chậm, chi phí phình.
  • Không có trần cost: một PR lỗi khiến agent lặp và tiêu hết ngân sách tháng.
  • Không log ROI: không biết agent tiết kiệm hay tốn tiền, không thuyết phục được sếp duy trì.
  • Bỏ chốt review: reviewer bấm approve mù vì "test do AI viết chắc ổn".
Bài cuối ta xử lý vận hành thực tế: bảo trì, xử lý sự cố và những cạm bẫy khi agent gặp code thật đầy rẫy bất ngờ.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi