Bỏ qua đến nội dung chính

Luồng RAG đầy đủ

📖 Nội dung bài học

Tăng Âm lượng↑

Giảm Âm lượng↓

Tua Tới→

Tua Lùi←

Phụ đề Bật/Tắtc

Toàn màn hình/Thoát Toàn màn hìnhf

Tắt tiếng/Bật tiếngm

Giảm Kích thước Phụ đề-

Tăng Kích thước Phụ đề+ hoặc =

Tua %0-9

Cài đặt Phụ đề Màu Phông chữ

Trắng

Độ trong suốt Phông chữ

100%

Kích thước Phông chữ

100%

Kiểu Phông chữ

Tóm tắt

Bây giờ chúng ta đã tìm hiểu các khái niệm cơ bản về RAG, phân chia văn bản (text chunking) và embeddings, hãy cùng xem xét quy trình RAG hoàn chỉnh từng bước một. Ví dụ này sẽ cho bạn thấy chính xác cách tất cả các thành phần này hoạt động cùng nhau để truy xuất thông tin liên quan và tạo phản hồi.

cosine

Source text

Chunks

Embeddings

Vector DB

User query

Query embedding

Top chunks

Prompt + context

Claude response

Bước 1: Phân chia văn bản nguồn

Đầu tiên, chúng ta lấy tài liệu nguồn và chia nó thành các phần nhỏ dễ quản lý. Trong ví dụ này, chúng ta sẽ sử dụng hai phần văn bản đơn giản:

  • Phần 1: Nghiên cứu Y khoa - "Năm nay đã chứng kiến những bước tiến đáng kể trong hiểu biết của chúng ta về XDR-47, một 'lỗi' mà chúng ta chưa từng thấy trước đây."
  • Phần 2: Kỹ thuật Phần mềm - "Bộ phận này đã dành nỗ lực đáng kể để nghiên cứu các vectơ lây nhiễm khác nhau trong các hệ thống phân tán của chúng ta."

Bước 2: Tạo Embeddings

Tiếp theo, chúng ta chuyển đổi từng phần văn bản thành các embeddings dạng số bằng cách sử dụng một mô hình embedding. Để dễ hiểu hơn, hãy tưởng tượng chúng ta có một mô hình embedding hoàn hảo, luôn trả về chính xác hai số và chúng ta biết mỗi số đại diện cho điều gì.

Trong mô hình tưởng tượng của chúng ta:

  • Số đầu tiên đại diện cho mức độ văn bản nói về lĩnh vực y tế.
  • Số thứ hai đại diện cho mức độ văn bản nói về kỹ thuật phần mềm.

Đối với phần nghiên cứu y khoa, chúng ta có thể nhận được [0.97, 0.34] - tập trung nhiều vào y tế nhưng có một số yếu tố phần mềm do từ "lỗi" (bug). Đối với phần kỹ thuật phần mềm, chúng ta nhận được [0.30, 0.97] - tập trung nhiều vào phần mềm nhưng có ẩn ý y tế từ "vectơ lây nhiễm" (infection vectors).

Chuẩn hóa (Normalization)

API embedding thường thực hiện một bước chuẩn hóa để điều chỉnh mỗi vector có độ lớn bằng 1.0. Bạn không cần phải lo lắng về các phép toán ở đây - nó được xử lý tự động. Điều này cho chúng ta các vector đã chuẩn hóa như [0.944, 0.331][0.295, 0.955].

Chúng ta có thể hình dung các embeddings này trên một đường tròn đơn vị, nơi mỗi điểm đại diện cho một phần văn bản của chúng ta.

Bước 3: Lưu trữ trong Cơ sở dữ liệu Vector

Chúng ta lưu trữ các embeddings này trong một cơ sở dữ liệu vector - một cơ sở dữ liệu chuyên biệt, được tối ưu hóa để lưu trữ, so sánh và tìm kiếm qua các danh sách số dài như embeddings của chúng ta.

Tại thời điểm này, chúng ta tạm dừng. Tất cả công việc cho đến nay là tiền xử lý, diễn ra trước thời hạn. Bây giờ chúng ta chờ người dùng gửi một truy vấn.

Bước 4: Xử lý Truy vấn Người dùng

Khi người dùng đặt câu hỏi như "Tôi tò mò về công ty. Đặc biệt, bộ phận kỹ thuật phần mềm đã làm gì trong năm nay?", chúng ta chạy truy vấn của họ qua cùng một mô hình embedding.

Truy vấn này được nhúng thành một cái gì đó như [0.1, 0.89] - điểm y tế thấp, điểm kỹ thuật phần mềm cao. Sau khi chuẩn hóa, chúng ta nhận được [0.112, 0.993].

Bước 5: Tìm Embeddings Tương tự

Chúng ta gửi embedding của truy vấn người dùng đến cơ sở dữ liệu vector của mình và yêu cầu nó tìm các embeddings đã lưu trữ tương tự nhất.

Cơ sở dữ liệu trả về phần kỹ thuật phần mềm vì đó là kết quả khớp gần nhất với những gì người dùng đã hỏi.

Cách hoạt động của Sự tương tự: Cosine Similarity

Cơ sở dữ liệu vector sử dụng cosine similarity để xác định các embeddings nào tương tự nhất. Điều này đo lường cosine của góc giữa hai vector.

Các điểm chính về cosine similarity:

  • Kết quả dao động từ -1 đến 1.
  • Các giá trị gần 1 có nghĩa là độ tương tự cao.
  • Các giá trị gần -1 có nghĩa là rất khác nhau.
  • 0 có nghĩa là vuông góc (không có mối quan hệ).

Trong ví dụ của chúng ta, cosine similarity giữa truy vấn người dùng và phần kỹ thuật phần mềm là 0.983 - độ tương tự rất cao. Độ tương tự với phần nghiên cứu y khoa chỉ là 0.398 - thấp hơn nhiều.

Khoảng cách Cosine (Cosine Distance)

Bạn sẽ thường thấy "cosine distance" trong tài liệu của cơ sở dữ liệu vector. Điều này đơn giản được tính bằng (1 - cosine similarity). Với cosine distance:

  • Các giá trị gần 0 có nghĩa là độ tương tự cao.
  • Các giá trị lớn hơn có nghĩa là ít tương tự hơn.

Điều chỉnh này làm cho các con số dễ diễn giải hơn trong nhiều ngữ cảnh.

Bước 6: Tạo Prompt Cuối cùng

Cuối cùng, chúng ta lấy câu hỏi của người dùng và phần văn bản liên quan nhất mà chúng ta tìm thấy, kết hợp chúng thành một prompt và gửi đến Claude để nhận phản hồi.

Prompt có thể trông như thế này:

Trả lời câu hỏi của người dùng về tài liệu tài chính.

<user_question>
Có bao nhiêu lỗi mà các kỹ sư đã sửa trong năm nay?
</user_question>

<report>
## Phần 2: Kỹ thuật Phần mềm
Bộ phận này đã dành nỗ lực đáng kể để nghiên cứu các vectơ lây nhiễm khác nhau trong các hệ thống phân tán của chúng ta.
</report>

Và đó là quy trình RAG hoàn chỉnh! Hệ thống đã truy xuất thành công thông tin liên quan nhất dựa trên sự tương tự ngữ nghĩa và cung cấp nó làm ngữ cảnh để tạo ra một phản hồi chính xác.

🔁 Bài học liên quan

📚 Nguồn & ghi nhận

Bài học có hữu ích không?

Góp ý / Báo lỗiPhát hiện sai sót hoặc có ý tưởng cải thiện?