Xây dựng Hệ thống Truy xuất Thông tin với LangChain + OpenAI
Trong bài học này, chúng ta sẽ:
-
Tạo embeddings từ dữ liệu
-
Lưu embeddings vào cơ sở dữ liệu (vector store)
-
Xây dựng một retrieval system – hệ thống tìm kiếm văn bản dựa trên ý nghĩa
-
Truy vấn dữ liệu bằng câu hỏi thực tế
Bước 1: Tạo Embeddings
Chúng ta sẽ dùng mô hình OpenAI text-embedding-3-large để chuyển các chunk văn bản thành vector số.
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(
model="text-embedding-3-large",
openai_api_key="YOUR_API_KEY"
)
Lưu ý: Tên model cần có dấu gạch ngang (
-
) thay vì dấu gạch dưới (_
)
Sai:"text_embedding_3_large"
→ Đúng:"text-embedding-3-large"
Bước 2: Tạo Vector Store (Database)
Chúng ta lưu các embeddings vào một cơ sở dữ liệu để có thể tìm kiếm lại.
from langchain.vectorstores import FAISS
db = FAISS.from_documents(chunks, embeddings)
Ghi chú: FAISS
là một thư viện nhanh và hiệu quả để tìm kiếm vector tương tự.
Bước 3: Truy vấn hệ thống
Bây giờ chúng ta có thể bắt đầu truy vấn hệ thống:
query = "Give me my worst reviews"
results = db.similarity_search_with_score(query, k=5)
-
k=5
: tìm 5 đoạn văn bản gần nhất với câu hỏi -
Sử dụng cosine similarity để đo độ gần giữa vectors
Cosine Similarity: đo góc giữa hai vector – càng gần nhau, góc càng nhỏ → văn bản càng liên quan
Kết quả Truy vấn
Kết quả sẽ là danh sách các đoạn văn bản giống với truy vấn:
for doc, score in results:
print(doc.page_content, "\nScore:", score)
Bạn có thể thấy dữ liệu có thể còn lộn xộn (ví dụ có <td>
, <tr>
), điều này sẽ được cải thiện bằng bước xử lý sau.
Giải thích thêm
-
Mỗi chunk có độ dài khoảng
2000 tokens
với200 tokens
trùng lặp giữa các chunk -
Embedding giúp "mã hóa ý nghĩa" của văn bản thành vector
-
Truy vấn sẽ được ánh xạ sang vector và so sánh với các chunk đã mã hóa
Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft
Không có bình luận