Aegis

Trực tiếp

Aegis chỉ đăng những comment mà một test đỏ đã chứng minh

Một AI review thông thường đọc diff rồi viết ra những chỗ mà model cho là sai. Dev nhận về cả nhận xét đúng lẫn nhận xét bịa, và chỉ phân biệt được hai loại ấy khi tự kiểm từng câu.

Aegis làm khác ở một điểm. Phần AI của aegis có tên là proposer, và proposer không được chỉ nói rằng có lỗi. Với mỗi nghi ngờ, proposer phải viết kèm một test. Bộ lọc chạy test ấy trong một container cô lập. Nếu test đỏ, và đỏ ổn định qua nhiều lần chạy, thì nghi ngờ trở thành một mệnh đề có thật. Aegis lưu mệnh đề ấy vào sổ cái rồi đăng lên merge request. Nếu test xanh thì aegis bỏ nghi ngờ ấy.

Quy trình hoạt động

Một lượt review đi qua mười bước và bốn thành phần. Sơ đồ dưới đây vẽ lượt review gần nhất của project demo: bước đã xong sáng màu, bước đang chạy nhấp nháy, bước lỗi hiện màu đỏ. Màn Demo và màn MR dùng đúng mười bước này.

Đang tải lượt review gần nhất.
Luồng của một lượt review qua bốn thành phần Mười bước đi từ trên xuống. GitLab CI gọi aegis, server lấy mã nguồn và sổ cái, chạy job trong container cô lập, bộ lọc chạy test, reviewdog đăng comment, rồi server lưu sổ cái. GitLab merge request, CI, comment Aegis server review API, job runner Sổ cái Postgres, nhiều project Container cô lập job image, sandbox 1 CI gọi aegis POST /review/mr/{id} 2 Lấy mã nguồn git fetch MR head 3 Nạp sổ cái xuất ra ledger.db 4 Khởi động job docker run job image 5 Đọc cấu hình .aegis/config.yml 6 Proposer nêu nghi ngờ model viết kèm test 7 Bộ lọc chạy test sandbox, không mạng test đỏ thì giữ nghi ngờ test xanh thì bỏ 8 Đăng comment reviewdog lên MR 9 Lưu sổ cái nhập lại ledger.db 10 Kết thúc ghi trạng thái lượt

Từng bước làm gì

  1. CI gọi aegisDev mở merge request. GitLab CI chạy một job nhỏ, và job ấy gọi API của aegis.
  2. Lấy mã nguồnServer lấy mã nguồn của merge request về một thư mục làm việc riêng cho lượt này.
  3. Nạp sổ cáiServer xuất các mệnh đề cũ của project ra file, để proposer không nêu lại điều đã có.
  4. Khởi động jobServer chạy job image trong một container và đưa thông tin của merge request vào container ấy.
  5. Đọc cấu hìnhChương trình trong container đọc cấu hình của project từ nhánh đích.
  6. Proposer nêu nghi ngờProposer đọc diff, tài liệu của project và sổ cái, rồi nêu nghi ngờ. Mỗi nghi ngờ đi kèm một test.
  7. Bộ lọc chạy testBộ lọc chạy từng test trong một container không có mạng. Ở bước này không model nào chấm điểm. Bộ lọc chỉ đọc kết quả test đỏ hay xanh.
  8. Đăng commentAegis dùng reviewdog để đăng lên merge request những mệnh đề đã qua bộ lọc.
  9. Lưu sổ cáiServer nhập kết quả của lượt này vào sổ cái trong Postgres.
  10. Kết thúcServer ghi lượt review là xong hoặc lỗi, và dashboard hiện kết quả ấy.

Sổ cái

Sổ cái chỉ là một bảng trong Postgres. Mỗi dòng là một mệnh đề, kèm test chứng minh mệnh đề ấy và một trạng thái. Trạng thái proven nghĩa là bộ lọc đã xác nhận mệnh đề nhưng aegis chưa đăng nó. Published nghĩa là comment đã lên merge request. Covered nghĩa là dev đã sửa code, và khi chạy lại thì test của mệnh đề đã xanh. Ở lượt sau, proposer đọc sổ cái trước khi nêu nghi ngờ mới.

Phạm vi của bản demo

Bản demo này có

  • Một repository thật trên GitLab, minkhe-group/wallet-api. Đây là một API ví trả trước.
  • Một merge request tại mỗi thời điểm, cho task WALLET-1042 về hạn mức gửi tiền mỗi ngày.
  • Bộ lọc thật, chạy test thật trong container thật.
  • Sổ cái thật trong Postgres.
  • Comment đăng thật lên merge request bằng reviewdog.
  • Dashboard này, để theo dõi từng lượt review và dữ liệu của sổ cái.

Bản demo này chưa có

  • Nhiều repository chạy cùng một lúc.
  • Nhiều lượt review song song.
  • Phục hồi khi server hoặc container dừng đột ngột giữa lượt.
  • Quy mô và cách vận hành của môi trường production.

Cách đọc dashboard

Màn Demo cho bạn bấm từng bước: bật hoặc tắt CI, tạo hoặc đóng merge request, chạy AI review thông thường, rồi sửa code. Kết quả của mỗi bước hiện ngay bên dưới các nút. Màn MR dùng để theo dõi. Màn ấy liệt kê mọi lượt review của mọi project, hiện tiến trình từng bước cùng log sự kiện, và cho xem dữ liệu của sổ cái theo từng project.