'devv.ai 是如何构建高效的 RAG 系统的 🔎 之前答应过要分享一下 devv.ai 底层涉及到的技术,这个系列 thread 会分享我们在这个项目上的具体实践,这是第一篇。 另外我们开了一个专门用于提交反馈和建议的 GitHub Repo,欢迎反馈。 🧵github.com/devv-ai/devv'
RAG có nghĩa là: Retrieval Augmented Generation (Tăng cường Truy xuất và Tạo ra) ban đầu được đề xuất trong một bài báo của Facebook vào năm 2020: Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (Đúng vậy, bạn không đọc nhầm, công nghệ này đã có từ năm 2020).
Bài báo này giải quyết một vấn đề rất đơn giản: làm thế nào để mô hình ngôn ngữ sử dụng kiến thức bên ngoài (external knowledge) để tạo ra. Thông thường, kiến thức của mô hình pre-train được lưu trữ trong các tham số, điều này dẫn đến mô hình không biết về kiến thức bên ngoài tập huấn luyện (ví dụ: dữ liệu tìm kiếm, kiến thức ngành nghề). Phương pháp trước đó là khi có kiến thức mới thì lại tiến hành finetune trên mô hình pre-train.
Điều này sẽ gây ra một số vấn đề: 1. Mỗi khi có kiến thức mới, cần phải tiến hành finetune 2. Chi phí huấn luyện mô hình rất cao. Vì vậy, bài báo này đề xuất phương pháp RAG, mô hình pre-train có thể hiểu được kiến thức mới, vì vậy chúng ta chỉ cần cung cấp kiến thức mới mà chúng ta muốn mô hình hiểu thông qua prompt.
所以一个最小的 RAG 系统就是由 3 个部分组成的: 1. 语言模型 2. 模型所需要的外部知识集合(以 vector 的形式存储) 3. 当前场景下需要的外部知识
langchain, llama-index 本质上就是做的这套 RAG 系统(当然还包括构建在 RAG 上的 agent)。 如果理解了本质,其实是没有必要再额外增加一层抽象的,根据自己的业务情况来搭建这套系统即可。 例如,我们为了保持高性能,采用了 Go + Rust 的架构,能够支持高并发的 RAG 请求。
把问题简化,不管是搭建什么样的 RAG,优化这套系统就是分别优化这 3 个模块。
1)Tại sao bài báo năm 2020 này lại trở nên phổ biến đến năm nay? Một trong những lý do chính là vì khả năng của các mô hình cơ sở trước đây không đủ. Nếu mô hình cơ bản không thông minh, thì ngay cả khi có kiến thức bên ngoài phong phú, mô hình cũng không thể dựa vào kiến thức đó để suy luận. Từ một số benchmark trong bài báo cũng có thể thấy rằng hiệu quả đã được cải thiện, nhưng không đáng kể.
1.1)Sự xuất hiện của GPT-3 đã khiến RAG trở nên có thể sử dụng lần đầu tiên. Các công ty đầu tiên sử dụng RAG + GPT-3 đã đạt được định giá và ARR (doanh thu hàng năm) rất cao: - Copy AI - Jasper. Cả hai đều là sản phẩm xây dựng trên lĩnh vực tiếp thị RAG, từng được coi là kỳ phùng địch thủ AI, tuy nhiên sau đó giá trị định giá cũng giảm mạnh.
1.2)2023 年以来,出现了大量的开源 & 闭源的基座模型,基本上都能够在上面构建 RAG 系统 最常见的方式就是: - GPT-3.5/4 + RAG(闭源方案) - Llama 2 / Mistral + RAG(开源方案)
2)模型所需要的外部知识集合 现在应该大家都了解了 embedding 模型了,包括 embedding 数据的召回。 embedding 本质上就是把数据转化为向量,然后通过余弦相似度来找到最匹配的两个或多个向量。 knowledge -> chunks -> vector user query -> vector
2.1)This module is divided into two parts: 1. embedding model 2. Database for storing embedding vectors The former mostly uses OpenAI's embedding model, and there are many optional solutions for the latter, including Pinecone, Zilliz from domestic teams, open-source Chroma, and pgvector built on relational databases.
2.2)Các công ty làm cơ sở dữ liệu nhúng cũng đã nhận được số vốn đầu tư và định giá rất cao trong làn sóng AI Hype này. Tuy nhiên, từ việc suy nghĩ theo nguyên lý cơ bản, mục đích của mô-đun 2 là để lưu trữ bộ dữ liệu kiến thức bên ngoài và truy xuất khi cần thiết. Bước này không nhất thiết cần mô hình nhúng, trong một số tình huống, việc tìm kiếm truyền thống có thể hiệu quả hơn (Elasticsearch).
2.3)devv.ai sử dụng phương pháp embedding + cơ sở dữ liệu quan hệ truyền thống + Elasticsearch. Và đã tối ưu hóa rất nhiều trong mỗi tình huống, một cách tiếp cận là làm nhiều công việc hơn khi mã hóa kiến thức, từ đó có thể tìm kiếm nhanh hơn và chính xác hơn (sự khác biệt giữa làm việc trước và sau).
2.4)Chúng tôi đã sử dụng Rust để xây dựng toàn bộ chỉ mục kiến thức bao gồm: - Dữ liệu mã nguồn trên GitHub - Dữ liệu tài liệu phát triển - Dữ liệu máy tìm kiếm
3)Tìm hiểu thông tin bên ngoài cần thiết trong tình huống hiện tại một cách tốt hơn Theo nguyên tắc ưu tiên làm việc, chúng tôi đã thực hiện nhiều xử lý đối với dữ liệu kiến thức gốc khi mã hóa: - Phân tích chương trình mã nguồn - Phân chia tài liệu phát triển thành các đoạn văn logic - Trích xuất thông tin từ trang web & tối ưu hóa xếp hạng trang
Sau khi hoàn thành công việc ở trên, chúng ta đảm bảo rằng dữ liệu mà chúng ta thu được khi truy xuất sẽ được cấu trúc hóa, không cần phải xử lý quá nhiều và có thể nâng cao độ chính xác của việc triệu hồi.
2022 年基于这套 RAG system 做的搜索引擎 Perplexity 每个月已经拥有了几千万的流量,LangChain 也获得了几亿美金的估值。
Không phân biệt là RAG chung hay RAG chuyên biệt, đây là một lĩnh vực dễ làm nhưng khó đạt được điểm 90. Mỗi bước đều không có thực hành tốt nhất, ví dụ như kích thước chunk nhúng, liệu có cần kết hợp với công cụ tìm kiếm, tất cả đều cần thử nghiệm dựa trên tình huống kinh doanh cụ thể. Có rất nhiều bài báo liên quan, nhưng không phải mọi phương pháp được đề cập trong mỗi bài báo đều hữu ích.
Hôm nay chỉ là một sự giới thiệu cơ bản về một số công nghệ được sử dụng ở cấp độ thấp của devv.ai, không đi sâu vào chi tiết kỹ thuật, mục đích là hy vọng những nhà phát triển muốn tham gia ngành này cũng có thể suy nghĩ từ nguyên lý cơ bản, loại bỏ sự ma mị của công nghệ.
下一阶段会每周会发一篇 LLM 相关的技术分享推文,今天在写这个 thread 的时候大量使用了 devv.ai 来查询相关的资料,非常有帮助。
Nếu bạn muốn xem nhiều nội dung tương tự sau này, hãy chia sẻ bài viết này cho nhiều người hơn. Nếu có bất kỳ sai sót nào trong nội dung trên, mọi người cũng được khuyến khích để lại ý kiến trong phần bình luận. Các bài viết chi tiết sẽ được tổng hợp tại github.com/devv-ai/devv, và mọi người cũng được mời theo dõi và ủng hộ (quan trọng hơn là gửi phản hồi cho devv.ai!)