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

Huy Vo
langchain
rag
llm
pymupdf
weavite
chat with pdf
Giới thiệu về LangChain - Ưu nhược điểm và ứng dụng

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

Trong khoá học của HocCodeAI, ở 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

Facebook Messenger

fb.com/toidicodedao

Email Support

[email protected]

Telegram

t.me/hoccodeai