จะเป็นไปไม่ได้เลยหรือถ้าให้ LLM เข้าใจทั้งโค้ดเบสไปเลย: ความพยายามทำ RAG ด้วยการบันเดิล
(gist.github.com/atjsh)> "ในบทความนี้ จะตรวจสอบว่าเมื่อบีบอัดโค้ดเบส TypeScript ที่มีไฟล์จำนวนมากให้เป็นไฟล์ JavaScript เพียงไฟล์เดียวผ่านการบันเดิล (bundling) แล้วส่งให้ LLM จากนั้น LLM จะสามารถตอบคำถามที่เกี่ยวข้องกับโค้ดเบสได้แม่นยำเพียงใด"
- เตรียมโค้ดเบสเว็บเซิร์ฟเวอร์ 1 ชุดที่พัฒนาด้วย NestJS
- บีบอัดโค้ดด้วย esbuild (bundling)
- นำโค้ดที่บีบอัดแล้วแทรกเข้าไปใน prompt
- ส่งพรอมป์ต์ให้ ChatGPT o3-mini
- ตรวจสอบว่าสามารถตอบคำถามที่เกี่ยวข้องกับโค้ดเบสได้แม่นยำเพียงใด
- การทดสอบสร้าง Swagger: ในความพยายามส่วนใหญ่ สามารถจัดทำเอกสารได้ถูกต้องมากกว่า 19 เอ็นด์พอยต์จากทั้งหมด 21 เอ็นด์พอยต์
- การทดสอบขอคำอธิบายเกี่ยวกับ API endpoint: สามารถสร้างคู่มือสำหรับผู้ที่ไม่ใช่นักพัฒนา/นักพัฒนาได้สำเร็จ
- มีข้อจำกัดอยู่
- บทสรุป
> "เพื่อทำ RAG กับทั้งโค้ดเบสสำหรับ LLM จึงได้ออกแบบการทดสอบโดยบีบอัดทั้งโค้ดเบสให้เป็นไฟล์เดียวแล้วส่งให้ LLM
>
> เมื่อนำเครื่องมือบันเดิลที่มีอยู่มาใช้บีบอัดโค้ดเบสตามเดิม LLM ก็สามารถทำเอกสาร API สำหรับทั้งโค้ดเบส หรือเขียนคู่มืออย่างละเอียดสำหรับ API เฉพาะตัวได้
>
> สำหรับการสูญเสียข้อมูลที่เกิดขึ้นระหว่างการบีบอัดโค้ดเบส คาดว่าน่าจะชดเชยได้ด้วยการทำ Semantic search เพิ่มเติมกับไฟล์ต้นฉบับ"
8 ความคิดเห็น
การนำไฟล์ที่บันเดิลแล้วใส่ในพรอมป์ต์หรือแนบกับแอปพลิเคชันเพื่อให้ LLM ตอบคิวรี แบบนี้ถือว่าเป็น RAG ได้ไหมครับ/คะ? อยากทราบว่าส่วนไหนที่นับเป็น Retrieval
ผมก็คิดคล้าย ๆ กัน
ไม่ใช่ว่า LLM จะรีทรีฟจากไฟล์ที่บันเดิลไว้แล้วดึงโค้ดต้นฉบับกลับมาหรือครับ?
น่าสนใจนะครับ ดูเหมือนว่าจะรับรู้ได้ค่อนข้างดีพอสมควรแม้จะเป็น js ที่ถูก minify แล้ว ก็น่าคิดว่าอาจจะดีเหมือนกันถ้าใช้เครื่องมือที่แนะนำไว้ใน https://th.news.hada.io/topic?id=19552 หรือ https://th.news.hada.io/topic?id=19540 เพื่อส่งโครงสร้างไดเรกทอรีเป็นบริบทเพิ่มเติมให้ด้วย
ช่วงนี้ผมใช้ llm กับงานเขียนโค้ดเยอะมาก เลยคิดอยู่เสมอว่าจะส่งต่อข้อมูลให้มีประสิทธิภาพได้อย่างไร ขอบคุณสำหรับการทดลองที่น่าสนใจครับ
ก่อนหน้านี้ในต่างประเทศก็มีความพยายามดึง syntax ของ codebase ออกมาเป็นกราฟแล้วค่อย query เหมือนกัน
แต่การ bundling ดูจะเป็นวิธีที่นำไปใช้ได้ง่ายกว่าในภาพรวมครับ (ถ้าภาษานั้นรองรับการ bundling)
https://x.com/daniel_mac8/status/1908332949251948808
แต่ช่วงนี้ประสิทธิภาพของ Gemini ดีมากจริง ๆ เลยคิดว่าถ้าลองเทียบกับ o3 ดูก็น่าจะยิ่งน่าสนใจครับ
อ่านแล้วน่าสนใจมากครับ ไม่น่าเชื่อว่าจะดึง business logic ออกมาได้ถึงระดับนี้จากซอร์สโค้ดที่ถูก bundle แล้ว... ดูเหมือนว่าต้นทุนในการทำ reverse engineering ของเว็บแอปที่เขียนเป็น SPA ก็จะลดลงอย่างมากด้วยครับ
อ๊ะ พอจะกดเข้าไปอ่าน บล็อกก็ดันขึ้นข้อผิดพลาด 500 อยู่ตอนนี้
ดูเหมือนว่าบล็อกของผมจะไม่ค่อยเสถียรนะครับ หากมีใครเข้าใช้งานไม่ได้ สามารถอ่านเนื้อหาได้ที่ gist.github.com ที่นี่