Logohoccodeai.com
Đổi server VN (nếu load chậm)

Giới thiệu về LangChain - Ưu nhược điểm và ứng dụng

Ở phần trước, chúng ta đã cùng sử dụng Weavite để xây dựng một hệ thống RAG.

Trong phần này, chúng ta sẽ sử dụng LangChain để xây dựng hệ thống RAG tương tự luôn. Bọn mình sẽ cùng tạo một con chatbot có thể trả lời câu hỏi từ file PDF hoặc tài liệu đầu vào của bạn nhé.

UI

Ứng dụng Chat chúng ta sẽ làm

Chúng ta sẽ cùng code một ứng dụng chat với file PDF. Flow của ứng dụng như sau:

Bước Mô tả Công nghệ sử dụng
1. Document Loader Đọc file PDF, lấy dữ liệu và metadata Langchain + PyMuPDF
2. Chunking Chia tài liệu thành các phần nhỏ hơn Langchain + RecursiveCharacterTextSplitter
3. Lưu Embeddings Lưu Embeddings vào VectorDB Langchain + ChromaDB
4. Truy xuất Embeddings Truy xuất Embeddings từ VectorDB Langchain + ChromaDB
5. Giao diện Chat Khi có câu hỏi, truy xuất Embeddings từ VectorDB, sau đó sử dụng LLM để trả lời câu hỏi Gradio + OpenAI/GroqAI/TogetherAI

flow

Tiếp theo, chúng ta sẽ tìm hiểu về LangChain, các ưu nhược điểm ứng dụng của nó.

Giới thiệu về LangChain

LangChain là một framework mã nguồn mở, được thiết kế để xây dựng các ứng dụng sử dụng Large Language Models (LLMs).

Framework này cung cấp các components đã được chuẩn hóa và có thể tái sử dụng, giúp đơn giản hóa quá trình phát triển ứng dụng AI. Nó được khá nhiều công ty lớn sử dụng trong các dự án AI.

langchain

Bản thân LangChain nó đã trở thành 1 hệ sinh thái, với rất nhiều components khác như LangGraph hoặc LangSmith. Tuy nhiên, trong nội dung bài học, chúng ta sẽ chỉ sử dụng framework langchain và 1 số package của nó thôi.

Ưu điểm

Tại sao chúng ta lại sử dụng LangChain? Vì nó có một số cái hay ho như:

  1. Giao diện chuẩn hóa: Cung cấp interface thống nhất cho nhiều thành phần khác nhau (chat models, vector stores, tools,...), giúp dễ dàng chuyển đổi giữa các nhà cung cấp. Bạn có thể chuyển đổi giữa OpenAI, Gemini, Anthropic, ... chỉ cần sửa vài dòng code.
from langchain_anthropic import ChatAnthropic
from langchain_google_vertexai import ChatVertexAI
from langchain_openai import ChatOpenAI

# Chuyển đổi modal sử dụng bằng cách đổi code chọn model, các logic khác vẫn giữ nguyên
model = ChatAnthropic(model="claude-3-5-sonnet-20240620")
model = ChatVertexAI(model="gemini-1.5-flash")
model = ChatOpenAI(model="gpt-4o-mini")
  1. Đầy đủ đồ nghề: Nhờ tích hợp với nhiều packages do cộng đồng phát triển, LangChain có thể hỗ trợ rất nhiều tác vụ khác nhau như:

    • Load dữ liệu/lịch sử chat từ nhiều nguồn khác nhau
    • Trích xuất dữ liệu và cắt dữ liệu (chunking) với nhiều cách khác nhau
    • Đọc ghi dữ liệu từ VectorDB...
# Load dữ liệu từ file PDF
from langchain_community.document_loaders import PyMuPDFLoader
loader = PyMuPDFLoader("docs/rag-paper.pdf")

# Chia nhỏ dữ liệu
from langchain_text_splitters import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)

# Lưu vào VectorDB
from langchain_chroma import Chroma
vectorstore = Chroma.from_documents(documents, embedding=OpenAIEmbeddings())

langchain_demo

Nhược điểm

Bên cạnh đó, LangChain cũng có một số nhược điểm như:

  1. Khá phức tạp: Langchain là một Framework khá lớn, với rất nhiều khái niệm và thành phần (Các bạn đọc thử trang LangChain concepts sẽ thấy nó dài thấy mẹ lun).

    • Đây là lý do chính khiến nhiều người ghét LangChain, complain rằng nó khá là phức tạp và khó học.
    • Gây khó khăn cho người mới bắt đầu, do vậy mình mới giới thiệu nó ở cuối khóa học.
    • Trong scope của bài này, bọn mình chỉ sử dụng một số components cơ bản để các bạn dễ dàng tiếp cận nhé.
  2. Tài liệu chưa hoàn thiện: Do phát triển nhanh nên tài liệu chưa được cập nhật kịp thời, một số package của LangChain tài liệu rất chán hoặc không rõ ràng.

    • Tuy đã ra đời khá lâu nhưng hiện tại phiên bản mới nhất của LangChain vẫn là 0.3.
    • Khi sử dụng, các bạn cần lưu ý có thể những phiên bản sau sẽ có breaking changes.
    • Gần đây, họ có bổ sung thêm một số How-to guides, hướng dẫn cách dùng LangChain cho các trường hợp cụ thể, cũng khá dễ đọc và làm theo

langchain_docs

Rất nhiều packages, tìm docs và đọc docs phát mệt!

Kiến trúc của LangChain

LangChain bao gồm các package chính:

  • langchain và langchain-core: Chứa các component cơ bản và các interface cơ bản, không phụ thuộc vào API của các bên thứ 3
  • intergration packages: Chứa các integration với API của bên thứ 3 như langchain-openai, langchain-anthropic. Cái này khi nào cần thì các bạn mới cài
  • langchain-community: Chứa các package được cộng đồng phát triển, ví dụ package tích hợp với vector store, load file PDF/HTML, load lịch sử chat từ Slack/Telegram...

packages

Tạm kết

Trong scope của bài này, để làm ứng dụng chat với file PDF, chúng ta sẽ chỉ tập trung vào 3 thành phần chính của LangChain:

  1. Document Loaders (PyMuPDF): Load dữ liệu từ nhiều nguồn khác nhau (PDF, HTML, Text,...) vào định dạng chuẩn của LangChain.

  2. Text Splitters: Chia nhỏ văn bản thành các chunks có kích thước phù hợp để xử lý và lưu trữ.

  3. Embeedings (Chroma): Lưu trữ và truy xuất các embeddings từ VectorDB.

Ở bài sau, bọn mình sẽ học thêm một số kiến thức về chunking, để hiểu rõ hơn về cách chia nhỏ văn bản và đưa vào VectorDB nhé!

Tài liệu tham khảo


Tóm tắt bài học

  • Giới thiệu về LangChain, một framework mã nguồn mở được thiết kế để xây dựng các ứng dụng sử dụng Large Language Models (LLMs). LangChain giúp đơn giản hóa quá trình phát triển ứng dụng AI với các components chuẩn hóa và có thể tái sử dụng.

  • Ưu điểm của LangChain:

    1. Giao diện chuẩn hóa cho nhiều thành phần, cho phép dễ dàng chuyển đổi giữa các nhà cung cấp mô hình.
    2. Đầy đủ đồ nghề với tích hợp nhiều packages hỗ trợ nhiều tác vụ khác nhau như load dữ liệu, chunking và lưu trữ vào VectorDB.
  • Mặc dù có nhiều ưu điểm, LangChain cũng có nhược điểm như:

    1. Khó khăn trong việc học do framework lớn và phức tạp.
    2. Tài liệu chưa hoàn thiện, thường không cập nhật kịp thời và khó hiểu.
  • Kiến trúc của LangChain bao gồm các package chính như langchain, integration packages, và langchain-community, với các thành phần cơ bản mà chúng ta sẽ sử dụng để phát triển ứng dụng chat với file PDF.


Câu hỏi ôn tập

  1. LangChain là gì và tại sao nó lại được nhiều công ty lớn sử dụng trong các dự án AI?

    LangChain là một framework mã nguồn mở được thiết kế để xây dựng các ứng dụng sử dụng Large Language Models (LLMs). Framework này được ưa chuộng vì cung cấp các components đã được chuẩn hóa, có thể tái sử dụng và có giao diện thống nhất cho nhiều thành phần khác nhau (chat models, vector stores, tools,...), giúp đơn giản hóa quá trình phát triển ứng dụng AI.

  2. Trong ứng dụng chat với PDF, các bước xử lý chính và công nghệ tương ứng là gì?

    Ứng dụng chat với PDF gồm 5 bước chính:

  • Document Loader: Đọc PDF bằng Langchain + PyMuPDF
  • Chunking: Chia tài liệu nhỏ bằng Langchain + RecursiveCharacterTextSplitter
  • Lưu Embeddings: Sử dụng Langchain + ChromaDB
  • Truy xuất Embeddings: Dùng Langchain + ChromaDB
  • Giao diện Chat: Xây dựng bằng Gradio + OpenAI/GroqAI/TogetherAI
  1. Các ưu điểm chính của LangChain là gì?

    LangChain có 2 ưu điểm chính:

  • Giao diện chuẩn hóa: cho phép dễ dàng chuyển đổi giữa các nhà cung cấp AI khác nhau chỉ với vài dòng code
  • Đầy đủ đồ nghề: tích hợp nhiều packages hỗ trợ đa dạng tác vụ như load dữ liệu, trích xuất, chunking, đọc ghi từ VectorDB
  1. Những nhược điểm của LangChain mà developer cần lưu ý là gì?

    LangChain có 2 nhược điểm chính:

  • Khá phức tạp với nhiều khái niệm và thành phần, gây khó khăn cho người mới bắt đầu
  • Tài liệu chưa hoàn thiện do phát triển nhanh, một số package có tài liệu không rõ ràng và có thể có breaking changes trong các phiên bản sau
  1. LangChain bao gồm những package chính nào và chức năng của chúng?

    LangChain có 3 package chính:

  • langchainlangchain-core: Chứa components và interface cơ bản
  • integration packages: Tích hợp với API bên thứ 3 (openai, anthropic,...)
  • langchain-community: Chứa các package do cộng đồng phát triển (vector store, load file, chat history,...)

Facebook Messenger

fb.com/toidicodedao

Email Support

[email protected]

Telegram

t.me/hoccodeai