0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Repo Packager: Công cụ CLI Hỗ Trợ Học Tập Nhanh Chóng

Đăng vào 1 tháng trước

• 6 phút đọc

Repo Packager: Công cụ CLI Hỗ Trợ Học Tập Nhanh Chóng

Chào các bạn, hôm nay mình muốn chia sẻ về trải nghiệm làm việc với OSD600 - Phiên bản 0.1. Dự án này là một công cụ dòng lệnh giúp phân tích các kho Git cục bộ và tạo ra một tệp văn bản duy nhất, được cấu trúc tốt với nội dung kho được tối ưu hóa để chia sẻ với các Mô hình Ngôn ngữ Lớn (LLMs). Ý tưởng rất đơn giản nhưng mạnh mẽ: thay vì sao chép dán một vài tệp và mất đi ngữ cảnh quan trọng (cấu trúc dự án, phụ thuộc, thông tin commit), công cụ này đóng gói cấu trúc, siêu dữ liệu và mã nguồn vào định dạng thân thiện với prompt, giúp hỏi một LLM về kho của bạn hiệu quả hơn nhiều.

Tổng Quan Giải Pháp

Công cụ được viết bằng C++ và được cấu trúc xung quanh các mô-đun nhỏ, tập trung, giúp mã dễ dàng để kiểm tra và mở rộng:

  • CLI & Config - Đọc các tùy chọn dòng lệnh (như -h/--help, -v/--version, -o/--output, -i/--include) và lưu chúng vào một đối tượng Config để các phần khác của chương trình sử dụng.
  • RepositoryScanner - Duyệt qua các thư mục mà bạn chỉ định (sử dụng std::filesystem), áp dụng bộ lọc --include (ví dụ *.cpp,*.h), và trả về danh sách các tệp cần bao gồm cũng như bất kỳ tệp nào mà nó đã phải bỏ qua.
  • FileReader - Mở từng tệp, đọc văn bản, đếm số dòng, và nếu một tệp rất lớn, nó sẽ cắt ngắn lại (mặc định 16 KB) để đầu ra không trở nên quá lớn.
  • GitInfoCollector - Tìm gốc của kho bằng cách tìm kiếm .git lên cây thư mục và chạy git để lấy thông tin commit hiện tại, nhánh, tác giả và ngày. Mình đã làm cho nó hoạt động trên cả Windows và Unix.
  • OutputFormatter - Xây dựng văn bản cuối cùng (đường dẫn tuyệt đối, thông tin git, cây thư mục, nội dung từng tệp trong các khối fenced, và một tóm tắt ngắn). Mặc định nó in ra stdout, hoặc bạn có thể ghi vào một tệp với -o.

Những Thách Thức Đã Đối Mặt

  • Duyệt Thư Mục - Lúc đầu, mình không biết cách duyệt một dự án một cách đáng tin cậy, mình gặp vấn đề với việc hiểu cách điều hướng thư mục. Để giải quyết, mình đã sử dụng std::filesystem: recursive_directory_iterator với skip_permission_denied. Bây giờ, công cụ quét sẽ bỏ qua những nơi không thể đọc được, bỏ qua các sản phẩm xây dựng, và chỉ bao gồm những tệp phù hợp với bộ lọc --include của mình.
  • Gọi git - Phần thông tin git đã khiến mình bối rối lúc đầu vì các lệnh và chuyển hướng kiểu Linux của mình gặp vấn đề trên Windows và mình không biết tại sao. Mình đã sửa nó bằng cách chạy git từ gốc kho, mình viết một hàm trợ giúp nhỏ RAII ScopedChdir để chương trình tạm thời chdir() đến kho, và sử dụng thiết bị null đúng cho mỗi hệ điều hành (NUL trên Windows, /dev/null trên Unix). Mình cũng đã thu thập đầu ra git với popen()/_popen() để có thể phân tích commit, nhánh, tác giả và ngày một cách đáng tin cậy.
  • Đường Dẫn và Visual Studio - Visual Studio chạy chương trình từ thư mục xây dựng theo mặc định, điều này đã khiến công cụ quét bị nhầm lẫn, vì thư mục xây dựng có thể không chứa tệp nguồn. Vì vậy, mình đã chuyển sang VSCode, điều này đã giúp mọi thứ dễ dàng hơn rất nhiều.

Trải Nghiệm Của Mình

Lúc đầu, mình thực sự cảm thấy sợ hãi. Nhiệm vụ để lại rất nhiều lựa chọn thiết kế mở, và điều đó cảm thấy quá sức, đặc biệt là khi chỉ có hai tuần để hoàn thành. Mình đã dành hầu hết mọi lúc rảnh rỗi cho nó trong tuần đầu tiên vì mình chắc chắn rằng mình sẽ không hoàn thành đúng hạn. Thật trớ trêu, cuộc chạy nước rút căng thẳng đó đã có kết quả và mình đã hoàn thành khoảng 90% chức năng trong tuần đầu tiên. Nhìn lại, bài học thật đơn giản: áp lực cảm thấy tồi tệ hơn công việc.

Điểm Nổi Bật

Một trong những điểm nổi bật của phiên bản này là sự hợp tác. Mình đã quen làm việc một mình trong các nhiệm vụ, vì vậy việc phải phối hợp và trao đổi ý tưởng với các bạn học là điều mới mẻ. Nói chuyện với người khác và chia sẻ cách tiếp cận đã làm dự án trở nên ít đáng sợ hơn. Một số bạn cùng lớp của mình đã trao đổi ý tưởng qua Teams và với một số bạn, mình thậm chí còn gặp mặt trực tiếp. Trải nghiệm đó đã giúp mình tự tin hơn trong việc liên hệ khi gặp khó khăn. Nó không còn cảm thấy ngại ngùng khi gửi một tin nhắn nhanh nữa. Kinh nghiệm này thực sự đã cải thiện sự tự tin của mình.

Một điều nữa là mình rất thích rằng công cụ này thực sự hữu ích ngoài khóa học. Khác với một số dự án bỏ đi, mình đã bắt đầu sử dụng nó cho các lớp học khác. Ví dụ, trong khóa học Java của mình, mình thường nhận được các ví dụ mã dài trong lớp từ giáo sư mà khó để xem lại một mình sau lớp. Mình sử dụng công cụ CLI để đóng gói mã nguồn và sau đó đưa gói đó cho một LLM để đặt câu hỏi, điều này tiết kiệm rất nhiều thời gian và giúp mình hiểu cấu trúc mã và mối quan hệ nhanh hơn.

Thực Hành Tốt Nhất

  • Tổ chức mã nguồn: Giữ cho mã nguồn của bạn được tổ chức một cách khoa học để dễ dàng đọc và bảo trì.
  • Ghi chú đầy đủ: Đảm bảo rằng bạn có các ghi chú đầy đủ trong mã để người khác có thể hiểu cách hoạt động của nó.
  • Kiểm tra thường xuyên: Thực hiện kiểm tra đơn vị thường xuyên để phát hiện lỗi sớm và đảm bảo mã hoạt động như mong đợi.

Những Cạm Bẫy Thường Gặp

  • Thiếu kế hoạch: Không có kế hoạch rõ ràng cho dự án có thể dẫn đến việc lãng phí thời gian và công sức.
  • Bỏ qua tài liệu: Bỏ qua việc ghi chép tài liệu có thể khiến người khác khó khăn trong việc hiểu và sử dụng mã của bạn.

Mẹo Tối Ưu Hiệu Năng

  • Tối giản mã: Sử dụng các cấu trúc dữ liệu và thuật toán tối ưu để cải thiện hiệu suất.
  • Kiểm tra hiệu suất: Thực hiện kiểm tra hiệu suất thường xuyên để phát hiện các nút thắt cổ chai.

Khắc Phục Sự Cố

  • Kiểm tra đầu ra: Nếu đầu ra không như mong đợi, hãy kiểm tra lại các tham số đầu vào và cấu hình.
  • Ghi log: Sử dụng ghi log để theo dõi các bước thực hiện của chương trình và phát hiện lỗi nhanh chóng.

Câu Hỏi Thường Gặp (FAQ)

Công cụ này có thể hoạt động trên những hệ điều hành nào?

Công cụ này hoạt động trên cả Windows và Unix.

Có thể mở rộng công cụ này không?

Có, công cụ được thiết kế để dễ dàng mở rộng và kiểm tra.

Làm thế nào để cài đặt công cụ này?

Bạn chỉ cần biên dịch mã nguồn và chạy nó từ dòng lệnh.

Kết Luận

Repo Packager là một công cụ mạnh mẽ cho các nhà phát triển muốn tối ưu hóa cách họ tương tác với các Mô hình Ngôn ngữ Lớn. Hy vọng rằng những chia sẻ và kinh nghiệm của mình sẽ giúp ích cho bạn trong việc phát triển kỹ năng lập trình của mình. Đừng ngần ngại thử nghiệm và khám phá thêm về công cụ này để nâng cao hiệu quả công việc của bạn!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào