LlamaIndex Cải Tiến Monorepo: Giải Pháp Quản Lý 650+ Gói Python Hiệu Quả

LlamaIndex không chỉ là một thư viện mà là một hệ sinh thái rộng lớn với hơn 650 gói Python, chủ yếu là các tích hợp và gói mở rộng. Tất cả được quản lý trong một kho lưu trữ GitHub duy nhất – monorepo. Bài viết này sẽ khám phá cách LlamaDev, công cụ mới của chúng tôi, giải quyết những thách thức khi quản lý hệ thống phức tạp này.

Thách thức từ hàng trăm cây phụ thuộc

Mỗi gói Python trong monorepo đều được công bố trên PyPI với file cấu hình pyproject.toml riêng. File này định nghĩa mọi khía cạnh của gói: phụ thuộc, phiên bản, hỗ trợ Python/OS, cùng các công cụ kiểm tra. Hầu hết các gói đều có test và một số còn có phụ thuộc phát triển.

Các tích hợp chia sẻ code chung thông qua gói nền tảng llama-index-core – yếu tố không thể thiếu trong hệ sinh thái. Sự phụ thuộc lẫn nhau giữa các gói (ví dụ: llama-index-llms-azure-openai cần llama-index-llms-openai) tạo ra thách thức trong chiến lược kiểm thử:

  • Thay đổi llama-index-core yêu cầu kiểm tra hầu hết gói trong monorepo
  • Thay đổi gói phụ thuộc cần xác định và kiểm tra các gói liên quan

Phát triển dễ dàng(?) nhưng bảo trì khó khăn

Trải nghiệm phát triển thay đổi tùy trường hợp:

  • Gói độc lập chỉ phụ thuộc vào llama-index-core là trường hợp đơn giản nhất
  • Gói có phụ thuộc cần đảm bảo không ảnh hưởng hệ thống
  • Gói core đòi hỏi cẩn trọng cao để tránh thay đổi phá vỡ toàn hệ thống

Chúng tôi còn hỗ trợ đa nền tảng với Python 3.9 đến 3.12+ trên Windows, Mac và Linux.

Yêu cầu quan trọng: Tính nhất quán

Monorepo cần sự đồng nhất tuyệt đối. Khác biệt nhỏ trong kiểm thử hay đóng gói có thể khiến hỗ trợ đa nền tảng trở thành cơn ác mộng. Rủi ro 650+ gói phát triển theo hướng khác biệt là rất cao.

Giải pháp ban đầu: Poetry + Pants

Chúng tôi bắt đầu với:

  • Poetry: Quản lý từng dự án Python riêng lẻ
  • Pants: Hệ thống build hỗ trợ monorepo
  • Github Actions tự động hóa quy trình

Poetry xuất sắc với gói đơn lẻ nhưng không hiểu phụ thuộc monorepo. Pants bổ sung khả năng phát hiện test cần chạy khi có thay đổi và hệ thống cache mạnh mẽ.

Những hạn chế khi mở rộng

Khi hệ thống phát triển, các vấn đề nảy sinh:

  • Poetry chậm trong giải quyết phụ thuộc
  • Pants yêu cầu server cache riêng trên AWS, phức tạp trong bảo trì
  • Khó debug CI và không nhất quán giữa local/CI
  • Đóng góp vào dự án trở nên khó khăn

Bước đột phá với uv và LlamaDev

Chúng tôi chuyển sang:

  • uv: Trình quản lý dự án Python siêu tốc thay thế Poetry
  • LlamaDev: Công cụ tùy chỉnh thay thế Pants cho monorepo

uv mang lại trải nghiệm phát triển vượt trội với lệnh đơn giản như uvx migrate-to-uv để chuyển đổi. LlamaDev giải quyết các thách thức đặc thù của monorepo với:

  • Xác định đồ thị phụ thuộc từ pyproject.toml
  • Phát hiện gói cần test dựa trên thay đổi
  • Gọn gàng trong log và xử lý lỗi

Kết quả ấn tượng

  • Test toàn bộ 600+ gói nhanh hơn 20% (tiết kiệm ~6 phút)
  • Test cục bộ nhanh hơn đáng kể (ví dụ: từ 11 phút xuống 4 phút)
  • Log rõ ràng, dễ debug
  • Không cần tài nguyên bên ngoài, tất cả chạy trên Github Actions

Cơ hội đóng góp

Chúng tôi tiếp tục cải tiến LlamaDev và luôn chào đón đóng góp từ cộng đồng. Nếu bạn quan tâm đến LlamaIndex, đây là thời điểm lý tưởng để tham gia với quy trình đơn giản hóa hiện nay.

Chỉ mục