Liệu có thể để LLM hiểu toàn bộ codebase luôn không: thử nghiệm RAG bằng cách bundling
(gist.github.com/atjsh)> "Trong bài viết này, chúng ta sẽ kiểm tra xem khi nén một codebase TypeScript gồm nhiều tệp thành 1 tệp JavaScript thông qua bundling rồi chuyển cho LLM, thì LLM có thể trả lời chính xác đến mức nào đối với các câu hỏi liên quan đến codebase đó."
- Chuẩn bị 1 codebase web server dựa trên NestJS
- Nén code bằng esbuild (bundling)
- Chèn đoạn code đã nén vào prompt
- Gửi prompt cho ChatGPT o3-mini
- Kiểm tra mức độ trả lời chính xác đối với các câu hỏi liên quan đến codebase
- Thử nghiệm tạo Swagger: trong phần lớn các lần thử, đã thành công trong việc tài liệu hóa chính xác từ 19 endpoint trở lên trong tổng số 21 endpoint
- Thử nghiệm yêu cầu mô tả các API endpoint: đã tạo thành công tài liệu hướng dẫn cho cả người không phải lập trình viên và lập trình viên
- Có những giới hạn nhất định
- Kết luận
> "Để RAG toàn bộ codebase cho LLM, tôi đã thiết kế một bài kiểm tra trong đó nén toàn bộ codebase thành một tệp rồi chuyển cho LLM.
>
> Khi nén codebase bằng chính các công cụ bundling hiện có, LLM có thể thực hiện việc tài liệu hóa API cho toàn bộ codebase hoặc viết hướng dẫn chi tiết cho một API cụ thể.
>
> Đối với phần mất mát thông tin phát sinh trong quá trình nén codebase, có thể kỳ vọng sẽ bù đắp bằng việc bổ sung semantic search trên các tệp gốc."
8 bình luận
Việc đưa các tệp đã được bundle vào prompt hoặc đính kèm vào ứng dụng để truy vấn LLM có thể được xem là RAG không? Tôi thắc mắc phần nào trong đó tương ứng với Retrieval.
Tôi cũng có suy nghĩ tương tự
Chẳng phải là dựa trên tệp đã được đóng gói để LLM truy xuất rồi mang đoạn mã gốc về sao?
Thú vị đấy. Có vẻ ngay cả với js đã được minify thì nó vẫn nhận diện khá tốt ở một mức độ nào đó. Mình nghĩ cũng hay nếu tận dụng các công cụ được giới thiệu ở https://vi.news.hada.io/topic?id=19552 hoặc https://vi.news.hada.io/topic?id=19540 để cung cấp thêm cấu trúc thư mục như ngữ cảnh bổ sung.
Dạo này vì làm việc với LLM và code quá nhiều nên tôi luôn trăn trở về cách truyền đạt thông tin sao cho hiệu quả, cảm ơn vì thử nghiệm thú vị này.
Ở nước ngoài cũng từng có những thử nghiệm trích xuất cú pháp của codebase thành graph rồi truy vấn,
nhưng có vẻ bundling sẽ là cách dễ áp dụng rộng rãi hơn. (nếu ngôn ngữ hỗ trợ bundling)
https://x.com/daniel_mac8/status/1908332949251948808
Nhưng dạo này hiệu năng của Gemini quá tốt, nên nếu so sánh với o3 thì có lẽ sẽ còn thú vị hơn nữa.
Tôi đọc thấy rất thú vị. Việc có thể trích xuất được logic nghiệp vụ đến mức này từ mã nguồn đã được bundling... có lẽ cũng sẽ giúp giảm mạnh chi phí reverse engineering cho các web app được viết theo kiểu SPA.
Ơ, đang định đọc thì blog hiện đang báo lỗi 500.
Có vẻ blog của tôi đang không ổn định. Nếu bạn không truy cập được, có thể đọc nội dung tại đây gist.github.com.