RAG là gì? Giải thích về thế hệ tăng cường truy xuất bằng một ví dụ hoạt động

  1. Trang chủ
  2. Blog
  3. Trí tuệ nhân tạo

Trí tuệ nhân tạo

RAG là gì? Giải thích về thế hệ tăng cường truy xuất bằng một ví dụ hoạt động

RAG cho phép mô hình AI trả lời từ tài liệu của chính bạn thay vì chỉ từ bộ nhớ. Tìm hiểu cách hoạt động của quy trình, chạy một phiên bản nhỏ bằng Python đơn giản và xem lý do tại sao hệ thống thực bị lỗi cũng như cách kiểm tra chúng.

Đọc 9 phút
RAG là gì? Thế hệ tăng cường truy xuất được giải thích bằng một ví dụ hoạt động

Điểm chính

  • RAG trước tiên tìm thông tin liên quan, thêm thông tin đó vào lời nhắc rồi yêu cầu mô hình trả lời từ thông tin đó.
  • Đó là cách thông thường để kết nối mô hình ngôn ngữ với dữ liệu riêng tư hoặc dữ liệu thay đổi thường xuyên.
  • Hầu hết các vấn đề về chất lượng đều bắt nguồn từ việc truy xuất và chuẩn bị dữ liệu chứ không phải ở mô hình.
  • RAG giảm bớt các câu trả lời bịa đặt nhưng không loại bỏ chúng nên bạn cần kiểm tra lại.

Hãy hỏi trợ lý AI chung về chính sách hoàn tiền của công ty bạn và trợ lý này chỉ có thể đoán. Nó chưa bao giờ nhìn thấy tài liệu của bạn. RAG, viết tắt của thế hệ tăng cường truy xuất, giải quyết vấn đề này bằng cách tra cứu thông tin phù hợp và chuyển thông tin đó cho mô hình cùng với câu hỏi.

Hướng dẫn này giải thích từng giai đoạn bằng ngôn ngữ đơn giản, sau đó xây dựng một phiên bản nhỏ chỉ sử dụng thư viện chuẩn của Python. Chúng tôi đã chạy mã đó trên Python 3.13 và điểm số hiển thị là từ lần chạy đó. Nó không sử dụng mô hình ngôn ngữ nên nó thể hiện khả năng truy xuất và xây dựng nhanh chóng và chúng tôi không kiểm tra bước trả lời cuối cùng.

RAG là gì?

Tạo tăng cường truy xuất là một kỹ thuật kết hợp bước tìm kiếm với mô hình ngôn ngữ. Khi có câu hỏi, hệ thống sẽ tìm kiếm nguồn kiến ​​thức, thêm kết quả tốt nhất vào lời nhắc và yêu cầu mô hình trả lời dựa trên tài liệu đó.

Hãy nghĩ về một bài kiểm tra mở sách. Một học sinh đóng sách dựa vào trí nhớ và có thể tự tin nhớ sai. Học sinh mở sách có thể tra cứu trang bên phải trước. RAG cung cấp cho mô hình cuốn sách đó và cũng cho phép nó trỏ đến trang nào được sử dụng.

Vấn đề RAG giải quyết

Bản thân một mô hình ngôn ngữ có ba giới hạn đối với việc sử dụng trong doanh nghiệp:

  • Nó không biết dữ liệu riêng tư của bạn. Các chính sách, vé và hợp đồng của bạn không nằm trong chương trình đào tạo của nó.
  • Kiến ​​thức của nó có giới hạn. Nó không thể biết về mức giá bạn đã thay đổi sáng nay.
  • Nó có thể phát minh ra câu trả lời. Khi không chắc chắn, nó có thể tạo ra điều gì đó hợp lý nhưng lại sai.

RAG giải quyết cả ba vấn đề này và bạn không cần phải đào tạo lại bất cứ điều gì. Cập nhật tài liệu, lập chỉ mục lại tài liệu và câu trả lời tiếp theo có thể sử dụng tài liệu đó.

Cách thức hoạt động của RAG, từng bước một

Một hệ thống RAG có hai đường ống. Một người chuẩn bị trước dữ liệu của bạn và người kia chạy cho mọi câu hỏi.

Lập chỉ mục: chuẩn bị dữ liệu của bạn

  1. Tải: thu thập nội dung từ các tệp PDF, wiki, cơ sở dữ liệu hoặc vé.
  2. Dọn dẹp và chia nhỏ: loại bỏ rác, sau đó chia tài liệu thành các đoạn nhỏ.
  3. Nhúng: chuyển đổi mỗi đoạn văn thành một danh sách các số, được gọi là phần nhúng, để nắm bắt ý nghĩa của nó.
  4. Lưu trữ: lưu các phần nhúng trong chỉ mục có thể tìm kiếm, thường là cơ sở dữ liệu vectơ.

Query: trả lời câu hỏi

  1. Truy xuất: nhúng câu hỏi và tìm những đoạn văn gần nghĩa nhất.
  2. Tăng cường: chèn những đoạn văn đó vào lời nhắc.
  3. Tạo: mô hình viết câu trả lời bằng ngữ cảnh đó.

Việc truy xuất không nhất thiết phải sử dụng vectơ. Đó có thể là tìm kiếm từ khóa hoặc thậm chí là truy vấn SQL, tùy theo cách nào tìm thấy thông tin phù hợp cho dữ liệu của bạn.

Một ví dụ hoạt động nhỏ

Để nhìn rõ các bộ phận chuyển động, đây là một chú chó săn nhỏ không có thư viện. Nó biểu thị văn bản dưới dạng số từ, một cách thay thế đơn giản hơn nhiều cho các phần nhúng thực sự và nó ghi điểm tương tự bằng cách sử dụng thước đo cosine.

import math, re
from collections import Counter

DOCS = {
    "refunds": "Refunds are paid within 7 days to the original payment method.",
    "shipping": "Standard shipping takes 3 to 5 working days across India.",
    "warranty": "All keyboards include a 2 year warranty against defects.",
}

def vectorize(text):
    return Counter(re.findall(r"[a-z0-9]+", text.lower()))

def similarity(a, b):
    dot = sum(a[word] * b[word] for word in a)
    size = math.sqrt(sum(v * v for v in a.values()))
    size *= math.sqrt(sum(v * v for v in b.values()))
    return dot / size if size else 0

def retrieve(question, k=1):
    q = vectorize(question)
    scored = [(similarity(q, vectorize(t)), name) for name, t in DOCS.items()]
    return sorted(scored, reverse=True)[:k]

def build_prompt(question):
    (score, name), = retrieve(question)
    return (
        "Answer using only the context. If it is not there, say you do not know.\n"
        f"Context: {DOCS[name]}\n"
        f"Question: {question}"
    )

Hỏi về việc hoàn tiền, hãy tìm đoạn văn phù hợp và xây dựng lời nhắc này:

print(retrieve("How many days until refunds are paid?"))
# [(0.4558..., 'refunds')]

print(build_prompt("How many days until refunds are paid?"))
# Answer using only the context. If it is not there, say you do not know.
# Context: Refunds are paid within 7 days to the original payment method.
# Question: How many days until refunds are paid?

Trong một hệ thống hoàn chỉnh, bây giờ bạn sẽ gửi lời nhắc đó đến một mô hình ngôn ngữ. Chi tiết quan trọng là hướng dẫn thừa nhận khi thiếu câu trả lời. Bạn có thể tìm hiểu thêm về hướng dẫn này trong hướng dẫn của chúng tôi về kỹ thuật nhanh chóng.

Ví dụ của chúng tôi bỏ sót điều gì

Bây giờ hãy thử đặt câu hỏi có cùng nghĩa nhưng sử dụng các từ khác nhau:

print(retrieve("When can I get my money back?", k=3))
# [(0.0, 'warranty'), (0.0, 'shipping'), (0.0, 'refunds')]

Mọi điểm đều bằng 0 vì câu hỏi không chia sẻ từ nào với bất kỳ tài liệu nào. “Hoàn tiền” có nghĩa là hoàn lại tiền cho con người, nhưng không thể biết được số từ. Đầu ra duy nhất này giải thích lý do tại sao các hệ thống thực sử dụng phần nhúng, được thiết kế sao cho văn bản có ý nghĩa tương tự sẽ kết thúc bằng các số giống nhau, thậm chí không có từ chung nào.

Nhưng đừng cho rằng phần nhúng giải quyết được mọi thứ. Họ có thể gặp khó khăn với các thuật ngữ chính xác như mã sản phẩm và số lỗi mà việc tìm kiếm từ khóa xử lý rất tốt. Đây là lý do tại sao nhiều hệ thống sản xuất sử dụng tìm kiếm kết hợp, kết hợp cả hai phương pháp.

Chunking: bước mà mọi người đánh giá thấp

Tài liệu được chia thành nhiều phần vì toàn bộ tệp quá dài và không thể truy xuất chính xác. Kích thước bạn chọn liên quan đến sự đánh đổi thực sự:

Kích thước đoạn Lợi thế Rủi ro
Quá nhỏ Trận đấu chính xác Mất ngữ cảnh, chẳng hạn như quy tắc áp dụng cho sản phẩm nào
Quá lớn Giữ bối cảnh Làm loãng ý nghĩa và sử dụng nhiều lời nhắc hơn
Chia theo cấu trúc Tôn trọng các tiêu đề và phần Cần tài liệu nguồn sạch hơn

Một vài trăm từ có một số từ trùng lặp giữa các phần là điểm khởi đầu phổ biến, nhưng hãy coi đó là lần đoán đầu tiên để kiểm tra. Phân chia theo các ranh giới tự nhiên, chẳng hạn như tiêu đề, khi bạn có thể. Và đính kèm siêu dữ liệu, như tiêu đề tài liệu, ngày tháng và bộ phận, để bạn có thể lọc kết quả và trích dẫn nguồn.

Cải thiện việc truy xuất

Khi câu trả lời kém, đây là những nâng cấp đáng thử nhất, đại khái theo thứ tự sau:

  • Làm sạch dữ liệu. Trước tiên, hãy xóa các tài liệu lỗi thời và trùng lặp. Không có thuật toán sửa các nguồn mâu thuẫn.
  • Sử dụng tìm kiếm kết hợp. Kết hợp kết quả dựa trên ý nghĩa và từ khóa.
  • Thêm người xếp hạng lại. Tìm nạp thêm ứng viên, sau đó sử dụng mô hình chuyên biệt để sắp xếp lại họ theo mức độ liên quan.
  • Lọc theo siêu dữ liệu. Giới hạn kết quả theo sản phẩm, khu vực hoặc ngày trước khi tìm kiếm.
  • Viết lại truy vấn. Chuyển sang câu tiếp theo mơ hồ như “câu thứ hai thì sao?” thành một câu hỏi hoàn chỉnh.

Mẹo: Trước khi đổ lỗi cho mô hình, hãy xem kết quả truy xuất thực sự được trả về là gì. Nếu đoạn văn phù hợp không có trong ngữ cảnh thì không có mô hình nào có thể trả lời đúng từ đoạn văn đó.

RAG vs tinh chỉnh

Câu hỏi RAG Tinh chỉnh
Nó thêm gì? Kiến thức tại thời điểm hỏi đáp Hành vi hoặc phong cách được đào tạo
Cập nhật thông tin Lập chỉ mục lại tài liệu Đào tạo lại
Nó có thể trích dẫn nguồn không? Có Không đáng tin cậy
Tốt nhất cho Sự thật thay đổi Định dạng hoặc giai điệu nhất quán

Chúng không loại trừ lẫn nhau. So sánh của chúng tôi về RAG với tinh chỉnh và kỹ thuật nhanh chóng bao gồm cách chọn chuyên sâu hơn.

Cách kiểm tra hệ thống RAG

RAG là phần mềm và nó cần được kiểm tra như bất kỳ phần mềm nào khác. Tạo một bộ câu hỏi thực tế cùng với các đoạn văn và câu trả lời mà bạn mong đợi, sau đó đo lường riêng biệt hai giai đoạn:

Sân khấu Câu hỏi để hỏi Tên chung
Truy xuất Chúng ta đã tìm đúng lối đi chưa? Thu hồi bối cảnh
Truy xuất Bao nhiêu trong số những gì chúng tôi tìm được là hữu ích? Độ chính xác của bối cảnh
thế hệ Câu trả lời có được hỗ trợ bởi ngữ cảnh không? Sự chung thủy
thế hệ Nó có thực sự trả lời được câu hỏi không? Trả lời mức độ liên quan

Bao gồm cả các trường hợp khó xử: các câu hỏi không có câu trả lời trong dữ liệu của bạn, các câu hỏi sử dụng cách diễn đạt khác nhau và các câu hỏi có nguồn xung đột. Chạy lại bộ này bất cứ khi nào bạn thay đổi phân đoạn, mô hình hoặc lời nhắc, giống như bộ hồi quy. Hướng dẫn pytest của chúng tôi cho biết cách chạy nhiều đầu vào thông qua một thử nghiệm duy nhất.

Tại sao hệ thống RAG thất bại

  • Câu trả lời không có trong dữ liệu. Mô hình vẫn có thể thử một lần, vì vậy hãy cho mô hình biết cách từ chối.
  • Không truy xuất được đoạn bên phải. Đây thường là vấn đề về phân đoạn hoặc tìm kiếm.
  • Quá nhiều ngữ cảnh. Những đoạn văn không liên quan có thể làm mô hình mất tập trung và tăng chi phí.
  • Tài liệu cũ. Bạn có thể truy xuất chính sách cũ một cách tự tin như chính sách hiện tại.
  • Bảng và tệp PDF được phân tích cú pháp kém. Nếu quá trình trích xuất làm xáo trộn văn bản thì quá trình truy xuất sẽ không bao giờ khôi phục được.
  • Chỉ kiểm tra bằng các câu hỏi demo. Người dùng thực tế diễn đạt mọi thứ rất khác nhau.

Bảo mật và quyền

RAG mang đến hai rủi ro rất dễ bỏ qua. Đầu tiên, kiểm soát truy cập: nếu chỉ mục chứa các tệp nhân sự, câu hỏi của nhân viên cấp dưới không được truy xuất chúng. Áp dụng quyền của từng người dùng trong quá trình truy xuất vì việc hướng dẫn mô hình giữ bí mật không phải là biện pháp bảo vệ đáng tin cậy.

Thứ hai, tiêm nhanh. Trang web hoặc tài liệu được truy xuất có thể chứa văn bản như “bỏ qua hướng dẫn của bạn”. Hãy coi nội dung được truy xuất là dữ liệu không đáng tin cậy, giới hạn những hành động mà mô hình có thể thực hiện và yêu cầu con người phê duyệt những hành động nhạy cảm.

Lời kết

RAG là một ý tưởng đơn giản với nhiều chi tiết thực tế: tìm thông tin phù hợp và sau đó yêu cầu mô hình sử dụng thông tin đó. Bắt đầu với một bộ tài liệu nhỏ, rõ ràng và khoảng 20 câu hỏi thực tế. Để quá trình truy xuất hoạt động tốt trước khi bạn thêm độ phức tạp, bởi vì quy trình khiêm tốn có dữ liệu tốt thường đánh bại quy trình phức tạp có dữ liệu xấu.

Câu hỏi thường gặp

RAG có nghĩa là gì trong AI?

RAG là viết tắt của Thế hệ tăng cường truy xuất. Hệ thống truy xuất thông tin liên quan, thêm thông tin đó vào lời nhắc và mô hình tạo ra câu trả lời từ thông tin đó.

RAG có ngăn chặn ảo giác AI không?

Nó giảm bớt chúng bằng cách cung cấp cho mô hình các nguồn thực, nhưng không loại bỏ chúng. Mô hình vẫn có thể đọc sai ngữ cảnh, vì vậy hãy kiểm tra câu trả lời và hiển thị trích dẫn.

Tôi có cần cơ sở dữ liệu vector cho RAG không?

Không phải lúc nào cũng vậy. Các dự án nhỏ có thể sử dụng chỉ mục trong bộ nhớ, tìm kiếm từ khóa hoặc SQL. Cơ sở dữ liệu vectơ trợ giúp với các bộ sưu tập lớn và tìm kiếm dựa trên ý nghĩa.

Sự khác biệt giữa RAG và tinh chỉnh là gì?

RAG cung cấp thông tin tại thời điểm hỏi đáp nên việc cập nhật diễn ra nhanh chóng. Việc tinh chỉnh huấn luyện một mô hình thay đổi hành vi hoặc phong cách của nó và nó ít phù hợp hơn với việc thay đổi thực tế.

nhúng là gì?

Phần nhúng là danh sách các số thể hiện ý nghĩa của văn bản. Các đoạn văn có ý nghĩa tương tự có số lượng tương tự nhau, điều này giúp cho việc tìm kiếm dựa trên ý nghĩa có thể thực hiện được.

Tiếp tục học hỏi

Làm việc với Stack Quora

Cần trợ giúp về kiểm tra, WordPress hoặc SEO?

Chúng tôi giúp các nhóm phát triển phần mềm tốt hơn và phát triển trang web của họ. Hãy cho chúng tôi biết bạn đang làm gì và chúng tôi sẽ đề xuất bước tiếp theo rõ ràng.

Tiếp tục đọc

Thêm hướng dẫn về thử nghiệm, AI và phát triển hiện đại

Bạn thích bài viết này? Chọn một chủ đề và chuyển ngay sang phần hướng dẫn mới nhất của chúng tôi.

Trí tuệ nhân tạo

Giải thích về ảo giác AI: Tại sao các mô hình ngôn ngữ lại tạo nên mọi thứ và cách giảm thiểu nó

Ảo giác AI đã giải thích: chúng là gì, tại sao mô hình ngôn ngữ tạo ra chúng, các loại phổ biến, cách giảm thiểu chúng bằng cách căn cứ và nhắc nhở …

Đọc bài viết →
DevOps

Giải thích về các biến môi trường: Tệp .env, bí mật và cấu hình được thực hiện đúng

Các biến môi trường được giải thích bằng các ví dụ Python mà chúng tôi đã chạy: đọc và thiết lập chúng, tại sao mọi giá trị đều là một chuỗi, tệp .e…

Đọc bài viết →
Phát triển phần mềm

Giải thích về giới hạn tỷ lệ API: Thuật toán, tiêu đề và xử lý lỗi 429

Giới hạn tốc độ API được giải thích bằng mô phỏng mà chúng tôi đã chạy: nhóm mã thông báo, cửa sổ cố định, cửa sổ trượt, 429 phản hồi, tiêu đề giới …

Đọc bài viết →
Tự động hóa kiểm thử

Chế giễu bằng Python: unittest.mock, patch và những sai lầm khiến bài kiểm tra nói dối

Mô phỏng bằng Python với unittest.mock, đã được thử nghiệm: Mock và return_value, side_effect, vá lỗi nơi sử dụng tên, thông số kỹ thuật và thông số…

Đọc bài viết →
Kiểm thử phần mềm

Giải thích về phạm vi bảo hiểm của mã: Phạm vi tuyến so với chi nhánh và ý nghĩa thực sự 100%

Phạm vi bảo hiểm mã được giải thích bằng cách chạy phạm vi bảo hiểm thực tế: phạm vi bảo hiểm dòng, chi nhánh và điều kiện, đọc báo cáo, lý do tại s…

Đọc bài viết →
Cơ sở dữ liệu & SQL

DELETE vs TRUNCATE vs DROP trong SQL: Sự khác biệt, khôi phục và thời điểm sử dụng mỗi loại

DELETE vs TRUNCATE vs DROP được giải thích bằng SQL đã được thử nghiệm: mỗi loại loại bỏ, khôi phục, kích hoạt, đặt lại danh tính, tốc độ và Postgre…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích về Chế độ xem SQL: Tạo, sử dụng và tránh những cạm bẫy, kèm theo ví dụ

Chế độ xem SQL được giải thích bằng các truy vấn chúng tôi đã chạy: tạo chế độ xem, kết quả trực tiếp, ẩn cột, hiệu suất, chế độ xem có thể cập nhật…

Đọc bài viết →
Phát triển phần mềm

Giao diện TypeScript so với loại: Sự khác biệt thực sự, được thử nghiệm bằng trình biên dịch

Giao diện TypeScript so với loại, được kiểm tra bằng trình biên dịch thực: cả hai có thể làm gì, chỉ một người có thể làm gì, hợp nhất khai báo, mở …

Đọc bài viết →
Phát triển phần mềm

Giải thích về Python *args và **kwargs: Hàm linh hoạt với ví dụ rõ ràng

Python *args và **kwargs được giải thích bằng mã chúng tôi đã chạy: đóng gói và giải nén, thứ tự tham số, đối số chỉ từ khóa và chỉ vị trí, trình tr…

Đọc bài viết →
Phát triển phần mềm

Hàm Lambda của Python: Cú pháp, cách sử dụng thực tế và khi nào không nên sử dụng chúng

Các hàm lambda của Python được giải thích bằng mã chúng tôi đã chạy: cú pháp, sắp xếp bằng khóa, bản đồ và bộ lọc, các phần đóng, bẫy liên kết muộn …

Đọc bài viết →
Trí tuệ nhân tạo

Đại lý AI là gì? Cách chúng hoạt động, với vòng lặp tác nhân đơn giản, bạn có thể chạy

Tác nhân AI là gì? Hướng dẫn đơn giản về vòng lặp tác nhân, công cụ, bộ nhớ và lan can, với một vòng lặp Python nhỏ mà chúng tôi đã chạy, những rủi …

Đọc bài viết →
DevOps

Giám sát và Khả năng quan sát: Sự khác biệt thực sự, với nhật ký, số liệu và dấu vết

Giải thích về giám sát và khả năng quan sát: lỗi đã biết và chưa biết, nhật ký, số liệu và dấu vết, hướng dẫn về sự cố thanh toán, tín hiệu vàng, Op…

Đọc bài viết →
DevOps

Docker Volumes vs Bind Mounts: Duy trì dữ liệu vùng chứa đúng cách

Giải thích về khối lượng Docker và liên kết gắn kết: tại sao dữ liệu vùng chứa biến mất, khối lượng được đặt tên, liên kết gắn kết, tmpfs, ví dụ về …

Đọc bài viết →
Tự động hóa kiểm thử

TDD vs BDD: Key Differences, One Feature Built Both Ways and When to Use Each

TDD và BDD được giải thích bằng một tính năng giảm giá được xây dựng theo cả hai cách: tái cấu trúc màu đỏ-xanh với mã chúng tôi đã chạy, kịch bản C…

Đọc bài viết →
Kiểm thử phần mềm

Kiểm tra chấp nhận của người dùng (UAT): Quy trình, danh sách kiểm tra và ví dụ thực tế

Giải thích về thử nghiệm chấp nhận của người dùng: ai chạy nó, nó khác với QA như thế nào, quy trình bảy bước, mẫu trường hợp thử nghiệm UAT, danh s…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích về các giá trị NULL của SQL: IS NULL, COALESCE, NULLIF và những cái bẫy cần tránh

Các giá trị SQL NULL được giải thích bằng các truy vấn chúng tôi đã chạy: logic ba giá trị, IS NULL, COALESCE, NULLIF, cách tổng hợp, kết hợp và sắp…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Câu lệnh SQL CASE WHEN: Cú pháp, ví dụ thực tế và các lỗi thường gặp

TRƯỜNG HỢP SQL KHI được giải thích bằng các truy vấn mà chúng tôi đã chạy: các biểu mẫu đơn giản và được tìm kiếm, thứ tự điều kiện, các thủ thuật S…

Đọc bài viết →
Phát triển phần mềm

JWT là gì? Mã thông báo Web JSON được giải thích bằng một ví dụ hoạt động

JWT là gì? Mã thông báo Web JSON đã giải thích: ba phần, mã thông báo được xây dựng và giả mạo trong mã chúng tôi đã chạy, JWT so với phiên, lưu trữ…

Đọc bài viết →
Phát triển phần mềm

Giải thích về vòng lặp sự kiện JavaScript: Ngăn xếp cuộc gọi, Microtask và bộ hẹn giờ kèm ví dụ

Vòng lặp sự kiện JavaScript được giải thích bằng mã chúng tôi đã chạy: ngăn xếp cuộc gọi, hàng đợi tác vụ và vi nhiệm, tại sao setTimeout 0 không di…

Đọc bài viết →
Phát triển phần mềm

Giải thích về trình tạo và năng suất của Python: Tiết kiệm bộ nhớ bằng các ví dụ thực tế

Trình tạo và lợi nhuận Python được giải thích bằng mã chúng tôi đã chạy: cách chúng tạm dừng và tiếp tục, đo mức tiết kiệm bộ nhớ, quy trình, chuỗi …

Đọc bài viết →
Trí tuệ nhân tạo

Nhúng là gì? Giải thích sự tương đồng về vectơ và Cosine một cách đơn giản

nhúng là gì? Hướng dẫn bằng ngôn ngữ đơn giản về vectơ, độ tương tự cosine và tìm kiếm ngữ nghĩa, với một ví dụ nhỏ mà chúng tôi đã chạy, các cách s…

Đọc bài viết →
DevOps

Triển khai Blue-Green và Canary: Sự khác biệt, sự đánh đổi và cách lựa chọn

Giải thích về triển khai Blue-green và Canary: cách hoạt động của từng loại, chi phí, rủi ro và khôi phục, nhóm người dùng ổn định mà chúng tôi đã t…

Đọc bài viết →
Tự động hóa kiểm thử

Kiểm tra không ổn định: Nguyên nhân gây ra chúng và cách khắc phục chúng vĩnh viễn

Các thử nghiệm không ổn định được giải thích bằng các bản demo mà chúng tôi đã chạy: nguyên nhân chính, cách xác nhận và chẩn đoán nguyên nhân, cách…

Đọc bài viết →
Kiểm thử phần mềm

Kiểm tra tải và kiểm tra căng thẳng: Sự khác biệt, số liệu và ví dụ về k6

Giải thích về thử nghiệm tải và thử nghiệm căng thẳng: mỗi thử nghiệm chứng minh điều gì, thử nghiệm tăng đột biến và ngâm, số liệu quan trọng, lý d…

Đọc bài viết →
Kiểm thử phần mềm

Trường hợp thử nghiệm và kịch bản thử nghiệm: Sự khác biệt chính, ví dụ và thời điểm sử dụng từng trường hợp

Giải thích trường hợp kiểm thử và kịch bản kiểm thử: định nghĩa rõ ràng, bảng cạnh nhau, một tính năng đặt lại mật khẩu được lấy từ các tình huống n…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Tối ưu hóa truy vấn SQL: Đọc kế hoạch thực thi và sửa các truy vấn chậm, có tính thời gian

Đã thử nghiệm tối ưu hóa truy vấn SQL trên một triệu hàng: đọc kế hoạch thực hiện, thêm chỉ mục phù hợp, sửa các bộ lọc không thể mở rộng, sử dụng c…

Đọc bài viết →
Cơ sở dữ liệu & SQL

SQL UNION và UNION ALL: Sự khác biệt, ví dụ và hiệu suất đã được kiểm tra

SQL UNION và UNION ALL được giải thích bằng các truy vấn chúng tôi đã chạy: trùng lặp, cả hai quy tắc đều tuân theo, lỗi dữ liệu thực, hiệu suất đượ…

Đọc bài viết →
Phát triển phần mềm

Hướng dẫn API tìm nạp JavaScript: GET, POST, Xử lý lỗi và hết thời gian chờ

Hướng dẫn API tìm nạp JavaScript đã được thử nghiệm trên máy chủ cục bộ: GET và POST, tại sao 404 không gửi, trình trợ giúp có thể sử dụng lại, chuỗ…

Đọc bài viết →
Phát triển phần mềm

Xử lý tệp Python: Đọc, ghi, CSV, JSON và pathlib kèm ví dụ

Việc xử lý tệp Python được giải thích bằng mã chúng tôi đã chạy: chế độ mở, với, đọc tệp lớn, CSV, JSON, pathlib, tệp nhị phân, ghi an toàn, xử lý l…

Đọc bài viết →
Phát triển phần mềm

Các lớp và đối tượng Python: Hướng dẫn OOP với các ví dụ thực tế

Các lớp và đối tượng Python được giải thích bằng mã mà chúng tôi đã chạy: __init__, các phương thức, thuộc tính lớp và phiên bản, tính kế thừa, thuộ…

Đọc bài viết →
Trí tuệ nhân tạo

Mô hình ngôn ngữ lớn là gì? LLM hoạt động như thế nào, được giải thích mà không cường điệu hóa

Mô hình ngôn ngữ lớn là gì? LLM được giải thích bằng ngôn ngữ đơn giản: mã thông báo, phần nhúng, sự chú ý, đào tạo, cửa sổ nhiệt độ và ngữ cảnh, mộ…

Đọc bài viết →
DevOps

Các lệnh Linux cho người mới bắt đầu: Hướng dẫn thiết bị đầu cuối cần thiết kèm ví dụ

Các lệnh Linux dành cho người mới bắt đầu, được nhóm theo tác vụ: điều hướng, tệp, xem nhật ký, grep, đường dẫn, quyền, quy trình và lưu trữ, cùng v…

Đọc bài viết →
Tự động hóa kiểm thử

Selenium vs Nhà viết kịch: Sự khác biệt chính, So sánh mã và nên chọn cái nào

Selenium và Playwright được so sánh: kiến trúc, chờ đợi, hỗ trợ trình duyệt và ngôn ngữ, gỡ lỗi, kiểm tra giống nhau ở cả hai công cụ, lời khuyên di…

Đọc bài viết →
Kiểm thử phần mềm

Phân vùng tương đương: Giải thích kỹ thuật thiết kế thử nghiệm bằng các ví dụ đã thực hiện

Giải thích về phân vùng tương đương: cách tìm các phân vùng hợp lệ và không hợp lệ, các ví dụ hoạt động theo độ tuổi, mật khẩu và phiếu giảm giá, cá…

Đọc bài viết →
Kiểm thử phần mềm

Mức độ nghiêm trọng và mức độ ưu tiên trong kiểm thử phần mềm: Sự khác biệt, Ma trận và ví dụ thực tế

Giải thích về mức độ nghiêm trọng và mức độ ưu tiên trong kiểm thử phần mềm: định nghĩa rõ ràng, ma trận bốn chiều với các ví dụ, thang đo cấp độ, a…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Hướng dẫn về truy vấn con SQL: Các loại, truy vấn con tương quan và TỒN TẠI kèm ví dụ

Hướng dẫn về truy vấn con SQL với các truy vấn chúng tôi đã chạy: truy vấn con vô hướng, IN, FROM và SELECT, truy vấn con tương quan, EXISTS, bẫy và…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích về giao dịch SQL và ACID: Các mức CAM KẾT, ROLLBACK và Cô lập

Các giao dịch SQL và ACID được giải thích bằng chuyển khoản ngân hàng mà chúng tôi đã thực hiện: CAM KẾT, ROLLBACK, điểm lưu trữ, khóa, mức cách ly,…

Đọc bài viết →
Phát triển phần mềm

Bảng cheat lệnh Git: Các lệnh bạn thực sự sử dụng, kèm theo ví dụ

Một bảng ghi lệnh Git được nhóm theo nhiệm vụ: thiết lập, dàn dựng, nhánh, điều khiển từ xa, lưu trữ, lịch sử và hoàn tác các lỗi, với đầu ra từ kho…

Đọc bài viết →
Phát triển phần mềm

Giải thích về các lời hứa trong JavaScript: then, Catch, Promise.all và các lỗi thường gặp

Lời hứa JavaScript được giải thích bằng mã chúng tôi đã chạy: trạng thái, then và chuỗi bắt, xử lý lỗi, Promise.all, allSettled, chủng tộc và bất kỳ…

Đọc bài viết →
Phát triển phần mềm

Hướng dẫn từ điển Python: Phương thức, ví dụ và mẫu chung

Hướng dẫn từ điển Python với mã chúng tôi đã chạy: tạo, đọc và cập nhật các ký tự, các phương thức chính, hợp nhất, hiểu, đếm và nhóm các mẫu cũng n…

Đọc bài viết →
Trí tuệ nhân tạo

RAG là gì? Giải thích về thế hệ tăng cường truy xuất bằng một ví dụ hoạt động

RAG là gì? Thế hệ tăng cường truy xuất được giải thích từng bước: lập chỉ mục, phân nhóm, nhúng, truy xuất, một ví dụ Python hoạt động nhỏ, đánh giá…

Đọc bài viết →
DevOps

Hướng dẫn về Terraform cho người mới bắt đầu: Cơ sở hạ tầng dưới dạng mã từ tệp đầu tiên đến mô-đun

Hướng dẫn về Terraform dành cho người mới bắt đầu: bắt đầu không cần tài khoản đám mây, tìm hiểu về init, lập kế hoạch và áp dụng, sau đó là các biế…

Đọc bài viết →
DevOps

Docker vs Kubernetes: Key Differences, How They Work Together and Which You Need

Docker vs Kubernetes giải thích: mỗi cái làm gì, cùng một ứng dụng chạy với cả hai, so sánh Docker Compose và Swarm, sự thay đổi của dockershim và c…

Đọc bài viết →
Tự động hóa kiểm thử

Hướng dẫn Pytest cho người mới bắt đầu: Đồ đạc, tham số hóa và ví dụ thực tế

Hướng dẫn về pytest dành cho người mới bắt đầu với các bài kiểm tra chúng tôi đã chạy trên pytest 9.2: xác nhận, đồ đạc, tham số, conftest, điểm đán…

Đọc bài viết →
Kiểm thử phần mềm

Vòng đời kiểm thử phần mềm (STLC): 6 giai đoạn, tiêu chí đầu vào và đầu ra, ví dụ

Vòng đời kiểm thử phần mềm giải thích: sáu giai đoạn STLC với tiêu chí đầu vào và đầu ra, sản phẩm phân phối, ví dụ về tính năng đăng nhập hoạt động…

Đọc bài viết →
Phát triển phần mềm

Git merge vs rebase: khác biệt, ví dụ và khi nào dùng cái nào

Git merge vs rebase được giải thích bằng đầu ra log thực tế, bảng so sánh, quy tắc vàng của rebase và quy trình làm việc nhóm an toàn.

Đọc bài viết →
Phát triển phần mềm

List comprehension trong Python: cú pháp, ví dụ và khi nào nên tránh

List comprehension trong Python: cú pháp, lọc dữ liệu, if-else, vòng lặp lồng nhau, thời gian đo thực tế và khi nào vòng lặp for thông thường tốt hơn.

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích SQL JOIN kèm ví dụ (Inner, Left, Right, Full)

Hiểu SQL JOIN từng bước với bảng và truy vấn mẫu: INNER, LEFT, RIGHT, FULL, CROSS và SELF, cùng lỗi thường gặp và mẹo hiệu năng.

Đọc bài viết →