gitai là gì?
gitai là hệ thống kiểm soát phiên bản mã nguồn mở dành cho các tác nhân lập trình AI. Hệ thống triển khai cách tiếp cận tập trung vào máy chủ, trong đó các ứng dụng khách luôn trực tuyến, chỉ tải những đối tượng và đường dẫn cần thiết, đồng thời gửi các thao tác kiểm soát mã nguồn đến máy chủ.
Dự án lấy cảm hứng từ thiết kế Scion của Anthropic được công bố công khai, nhưng gitai là một triển khai độc lập. Dự án được cấp phép MIT, không phụ thuộc nhà cung cấp và không yêu cầu máy chủ gọi mô hình ngôn ngữ. Các thao tác có AI có thể sử dụng bất kỳ nhà cung cấp nào, một công cụ xác định hoặc hoàn toàn không sử dụng nhà cung cấp AI.
Bên dưới, gitai sử dụng các kho Git thông thường, đồng thời chuyển việc truy vấn lịch sử, đưa thay đổi vào nhánh, theo dõi changeset và điều phối kho mã nguồn sang máy chủ. Mô hình này được thiết kế cho các khối lượng công việc có nhiều tác vụ tồn tại ngắn, cần nhanh chóng đưa thay đổi vào các nhánh dùng chung.
Tính năng chính
- Truy cập dữ liệu có chọn lọc: dịch vụ đối tượng cung cấp từng đối tượng riêng lẻ và các cây thưa. Các lệnh
graft clonevàgraft sparsechỉ hiện thực hóa những đường dẫn được yêu cầu. - Lịch sử phía máy chủ: blame, lịch sử đường dẫn, quan hệ tổ tiên và tìm kiếm mã chạy trên máy chủ, đồng thời được ghi nhớ dưới dạng dữ liệu dẫn xuất.
- Đưa thay đổi đồng thời vào nhánh:
UserLandrebase các thay đổi lên đầu nhánh hiện tại và sử dụng cập nhật compare-and-swap thay cho hàng đợi hợp nhất truyền thống. Các lần đưa thay đổi vào nhánh đồng thời có thể được gộp vào một lần cập nhật tham chiếu. - Giải quyết xung đột: các lần đưa thay đổi vào nhánh có xung đột có thể sử dụng trình phân giải được chọn thông qua một giao thức phiên bản hóa, trung lập với nhà cung cấp.
- Nhật ký changeset: các lần cập nhật tham chiếu được chấp nhận sẽ ghi lại thao tác và tác nhân thực hiện trong một nhật ký có thứ tự mà ứng dụng khách có thể liệt kê hoặc theo dõi.
- Lưu trữ có khả năng mở rộng: SQLite hoặc PostgreSQL lưu changeset, tham chiếu, đánh giá và nhật ký ghi trước, trong khi các gói định địa chỉ theo nội dung có thể nằm trong bộ nhớ tệp, S3, GCS hoặc Azure.
- Kiểm soát tác nhân: token riêng cho từng tác nhân, danh sách cho phép RPC và chính sách nhánh xác định những thao tác mà tác nhân có thể thực hiện.
- Xác minh và giám sát:
graft-verifycó thể kiểm tra đầu nhánh, bisect lỗi và hoàn tác thay đổi gây ra lỗi. Các tác nhân giám sát, được gọi là superfans, theo dõi luồng changeset và có thể báo cáo qua Slack. - Bộ nhớ đệm nghiêm ngặt:
graft-cachecó thể lưu các đối tượng bất biến trong các tầng daemon và khu vực, đồng thời xác minh từng đối tượng.
Kiến trúc hoạt động như thế nào
Các tác nhân, tác vụ CI và không gian làm việc thưa giao tiếp với máy chủ gitai thông qua CLI Graft hoặc SDK Go trên gRPC. Một daemon graft-cache tùy chọn có thể nằm trước máy chủ để cung cấp thêm các tầng bộ nhớ đệm.
Máy chủ xử lý việc đưa thay đổi vào nhánh, truy cập đối tượng, changeset, dữ liệu dẫn xuất, tìm kiếm và đánh giá. Đường ghi của máy chủ kết hợp một changeset với thao tác compare-and-swap cho từng tham chiếu. Bộ nhớ cơ sở dữ liệu chứa nhật ký ghi trước của changeset, tham chiếu, nhật ký thay đổi và các bản đánh giá. Bộ nhớ đối tượng chứa các gói định địa chỉ theo nội dung.
Các nút máy chủ được thiết kế như những bộ nhớ đệm không trạng thái có thể được dựng lại. Điều này cho phép bổ sung các nút khi hệ thống triển khai mở rộng. Các kho Git cục bộ vẫn có sẵn dưới dạng bộ nhớ đệm mà bất kỳ nút nào cũng có thể dựng lại.
Để biết thêm chi tiết, hãy đọc tài liệu kiến trúc và tài liệu lưu trữ của dự án.
Cài đặt và xây dựng gitai
1. Cài đặt các điều kiện tiên quyết
Hiện gitai yêu cầu Linux hoặc macOS, Go 1.26, bộ công cụ C, Meson và Ninja. Quá trình xây dựng biên dịch một phiên bản Git đi kèm, vì vậy hãy đảm bảo các công cụ xây dựng gốc cần thiết đã có sẵn trước khi bắt đầu.
2. Sao chép kho mã nguồn
git clone https://github.com/feder-cr/git-ai.git
cd git-ai3. Xây dựng các tệp nhị phân
Chạy mục tiêu Make để xây dựng máy chủ, CLI và các công cụ hỗ trợ:
make buildCác tệp nhị phân tạo ra được đặt trong _build/bin. Để xem CLI và các lệnh có sẵn, hãy chạy:
./_build/bin/graftChạy quickstart
Kho mã nguồn bao gồm một ví dụ khởi động môi trường gitai tạm thời với một máy chủ, một daemon bộ nhớ đệm, hai tác nhân và một thao tác đưa thay đổi vào nhánh:
examples/graft/quickstart.shĐây là cách nhanh nhất để xem quy trình cốt lõi mà không cần chuẩn bị cơ sở dữ liệu, bộ lưu trữ đối tượng hoặc hệ thống triển khai lâu dài. Vì ví dụ sử dụng một thư mục tạm thời, nó phù hợp nhất cho việc học và thử nghiệm.
Chạy máy chủ của riêng bạn
1. Bắt đầu với cấu hình ví dụ
Sử dụng examples/graft/config.toml làm điểm bắt đầu cho cấu hình máy chủ tùy chỉnh. Có thể khởi động máy chủ bằng tệp nhị phân đã xây dựng:
_build/bin/gitaly serve config.tomlTrong cây mã nguồn, các phần mở rộng phía máy chủ được gọi là Graft. Bạn sẽ thấy tên này trong phần cấu hình [graft], CLI graft, gói internal/graft và tài liệu Graft.
2. Thêm cơ sở dữ liệu và bộ lưu trữ đối tượng
Đối với hệ thống triển khai lưu trạng thái kho mã nguồn trong cơ sở dữ liệu và bộ lưu trữ đối tượng, hãy thêm phần [graft.storage] vào cấu hình. Quy trình di chuyển được ghi lại là bắt đầu ở chế độ shadow, nhập các kho mã nguồn, sau đó chuyển sang chế độ authoritative.
Hãy làm theo hướng dẫn lưu trữ để biết chính xác chi tiết cấu hình và di chuyển. Mô hình lưu trữ được hỗ trợ sử dụng SQLite hoặc PostgreSQL cho dữ liệu điều phối, cùng bộ lưu trữ tệp, S3, GCS hoặc Azure cho các gói định địa chỉ theo nội dung.
Làm việc với các thay đổi của tác nhân
Trong quy trình Git truyền thống, mỗi worker có thể sao chép một kho lưu trữ, phát triển cục bộ và đẩy thay đổi lên một nhánh dùng chung. Thay vào đó, gitai cho phép các agent duy trì kết nối với máy chủ và chỉ yêu cầu dữ liệu mà chúng cần.
Các agent có thể sử dụng workspace thưa để giới hạn những đường dẫn được hiện thực hóa. Các lệnh liên quan gồm:
graft cloneđể hiện thực hóa một chế độ xem đã chọn của kho lưu trữ.graft sparseđể yêu cầu hoặc điều chỉnh chỉ những đường dẫn cần thiết cho một tác vụ.
Khi một agent sẵn sàng đóng góp, UserLand sẽ rebase thay đổi lên đầu hiện tại và thử cập nhật compare-and-swap. Nếu nhiều agent đồng thời đưa thay đổi vào cùng một nhánh, gitai có thể gộp các thao tác đó thành một lần cập nhật tham chiếu thay vì buộc mọi agent phải đi qua một hàng đợi merge riêng.
Nếu thao tác đưa thay đổi vào tạo ra xung đột, hãy cấu hình một bộ xử lý theo tài liệu xử lý xung đột. Bộ xử lý có thể dựa trên một nhà cung cấp LLM, một công cụ xác định hoặc không sử dụng nhà cung cấp AI bên ngoài.
Khám phá changeset, review và xác minh
Lịch sử changeset
Mọi lần cập nhật tham chiếu được chấp nhận đều trở thành một mục trong nhật ký changeset. Mục này bao gồm thao tác và tác nhân, cung cấp cho client một bản ghi có thứ tự mà chúng có thể liệt kê hoặc theo dõi trực tiếp. Luồng này cũng có thể điều khiển các agent giám sát theo dõi những thay đổi liên quan đến các thành phần cụ thể.
Review và chính sách
gitai bao gồm các quy trình review thân thiện với agent cùng các quy tắc phê duyệt theo ngữ nghĩa. Ví dụ, một thay đổi chỉ gồm bình luận có thể yêu cầu ít phê duyệt hơn một thay đổi logic. Các cơ chế kiểm soát bảo mật cho agent cũng bao gồm token riêng cho từng agent, danh sách cho phép RPC và chính sách nhánh.
Hãy đọc tài liệu review và tài liệu bảo mật agent trước khi cho phép người dùng tự động truy cập máy chủ.
Xác minh sau khi đưa thay đổi vào
Quy trình graft-verify kiểm thử đầu nhánh sau khi các thay đổi được đưa vào. Nếu một bài kiểm thử thất bại, quy trình có thể bisect các thay đổi và hoàn tác thay đổi đã gây ra lỗi. Điều này hỗ trợ quy trình trong đó việc tích hợp diễn ra liên tục và hệ thống xác định thay đổi chịu trách nhiệm cho đầu nhánh bị hỏng.
Xem hướng dẫn xác minh để biết quy trình và cấu hình được hỗ trợ.
Mẹo triển khai nâng cao
- Sử dụng bộ nhớ đệm có chủ đích: thêm
graft-cachekhi agent hoặc job CI cần truy cập nhanh vào các đối tượng bất biến qua các tầng bộ nhớ đệm daemon hoặc theo khu vực. - Tách điều phối khỏi lưu trữ đối tượng: sử dụng SQLite hoặc PostgreSQL cho changeset và tham chiếu, đồng thời cấu hình backend lưu trữ đối tượng cho các gói repository.
- Mở rộng bằng các node bổ sung: các node máy chủ được thiết kế như những bộ nhớ đệm có thể xây dựng lại, vì vậy việc thêm node không yêu cầu mỗi node phải giữ một trạng thái có thẩm quyền độc lập.
- Đọc tài liệu đưa thay đổi vào: hướng dẫn đưa thay đổi vào và xử lý theo lô giải thích quy trình compare-and-swap và các cập nhật đồng thời.
- Xem lại các giới hạn hiện tại: đây là phiên bản 0.1.0, các giao diện có thể thay đổi trước 1.0, và những thiếu sót đã biết như thu gom rác các gói được ghi lại trong LIMITATIONS.md.
- Sử dụng các tài liệu thiết kế: từ PLAN.md đến PLAN6.md giải thích cơ sở và quá trình phát triển của bản triển khai.
Kết luận
gitai điều chỉnh mô hình kiểm soát mã nguồn tập trung vào máy chủ cho các repository được nhiều agent lập trình đồng thời làm việc. CLI và máy chủ Graft cung cấp quyền truy cập dữ liệu thưa, lịch sử phía máy chủ, thao tác đưa thay đổi vào bằng compare-and-swap, xử lý xung đột, nhật ký changeset, review, xác minh và bộ nhớ lưu trữ có khả năng mở rộng.
Bắt đầu với make build và examples/graft/quickstart.sh, sau đó chuyển sang máy chủ đã cấu hình và bộ nhớ lưu trữ lâu dài khi bạn đã hiểu quy trình. Để biết hướng dẫn triển khai và vận hành chuyên sâu hơn, hãy sử dụng Quickstart, tài liệu tham chiếu cấu hình và tài liệu kiến trúc của dự án.
