Facebook Pixel

Tìm hiểu LangChain: Framework phát triển ứng dụng LLM mạnh mẽ

10 Feb, 2025

LangChain là một thư viện mã nguồn mở giúp bạn xây dựng các ứng dụng AI thông minh, đặc biệt là khi làm việc với Large Language Models (LLMs)

Tìm hiểu LangChain: Framework phát triển ứng dụng LLM mạnh mẽ

Mục Lục

Generative AI (Gen AI) đang thay đổi cách chúng ta xây dựng sản phẩm, tương tác với khách hàng và tối ưu hóa quy trình làm việc. Doanh nghiệp nào cũng muốn tận dụng AI để cải thiện trải nghiệm người dùng và nâng cao hiệu suất, thậm chí nghiên cứu của Goldman Sachs còn ước tính rằng thị trường phần mềm Generative AI có thể đạt 150 tỷ USD – một con số không hề nhỏ!

Nhưng để ứng dụng AI vào thực tế, không phải lúc nào cũng chỉ đơn giản là gửi một câu lệnh (prompt) cho LLM rồi nhận kết quả. Khi cần xử lý dữ liệu, làm việc với nhiều nguồn thông tin, hoặc xây dựng workflows phức tạp, chúng ta cần một công cụ giúp kết nối mọi thứ lại với nhau. Đây chính là lúc LangChain phát huy sức mạnh.

Trong bài viết này, chúng ta sẽ cùng tìm hiểu:

  • LangChain là gì?
  • Những tính năng nổi bật giúp LangChain trở thành công cụ mạnh mẽ cho AI kèm theo code Demo.

1. Langchain là gì?

LangChain là một thư viện mã nguồn mở giúp bạn xây dựng các ứng dụng AI thông minh, đặc biệt là khi làm việc với Large Language Models (LLMs) như ChatGPT.

Thay vì chỉ gửi một câu lệnh (prompt) đơn giản đến AI và nhận kết quả, LangChain cho phép bạn tạo ra các luồng tương tác phức tạp, kết nối AI với nhiều nguồn dữ liệu khác nhau và thực hiện các tác vụ đa bước một cách linh hoạt.

Với LangChain, bạn có thể:

  • Tích hợp nhiều nguồn dữ liệu – Không chỉ gọi API của LLM mà còn kết nối với cơ sở dữ liệu, API bên ngoài, hoặc kho tài liệu riêng.
  • Tương tác với môi trường xung quanh – AI có thể thực hiện hành động, truy xuất dữ liệu, hoặc tự động hóa quy trình thay vì chỉ phản hồi một cách bị động.

2. Những tính năng của LangChain

2.1 Agent

Hiểu đơn giản, Agent giống như một trợ lý AI có thể suy nghĩ, quyết định hành động và tận dụng nhiều công cụ khác nhau để hoàn thành nhiệm vụ.

Ví dụ:

  • Nếu bạn hỏi: "Đơn hàng của tôi đang ở đâu?" → Agent sẽ tự động gọi công cụ kiểm tra trạng thái đơn hàng và phản hồi cho bạn.
  • Nếu bạn hỏi: "Laptop X có còn hàng không?" → Agent sẽ tìm kiếm thông tin sản phẩm, sau đó kiểm tra kho hàng trước khi đưa ra câu trả lời.

Không như các quy trình cố định (Chains) – nơi mọi hành động được lập trình sẵn, Agents có thể tự quyết định bước tiếp theo dựa trên dữ liệu đầu vào. Hiểu đơn giản: Agent = Công cụ (Tools) + Bộ nhớ (Memory).

Mỗi khi nhận được câu hỏi, một Agent sẽ làm những việc sau:

  1. Action (Hành động) – Quyết định dùng công cụ nào để tìm thông tin hoặc thực hiện tác vụ.
  2. Observation (Quan sát kết quả) – Nhìn vào kết quả từ hành động vừa thực hiện.
  3. Thought (Suy nghĩ tiếp theo) – Nếu câu trả lời chưa đầy đủ, Agent tiếp tục thực hiện một hành động khác để lấy thêm thông tin.
  4. Lặp lại quá trình trên cho đến khi tìm được câu trả lời hoàn chỉnh.

Khi nạn hỏi:"Tôi muốn biết thông tin về Laptop X và xem nó còn hàng không?"

  • Bước 1: Agent dùng công cụ tìm kiếm sản phẩm để lấy thông tin về Laptop X.
  • Bước 2: Sau đó, nó sẽ tiếp tục gọi công cụ kiểm tra kho hàng để xem sản phẩm còn hay không.
  • Bước 3: Khi đã có đầy đủ thông tin, nó tổng hợp và phản hồi lại cho bạn.

Những loại Agents phổ biến trong LangChain

  • Conversational Agents – Dùng cho chatbot hoặc trợ lý ảo, giúp giữ ngữ cảnh hội thoại.
  • ReAct Agents – Kết hợp giữa suy luận và hành động, đưa ra quyết định thông minh hơn.
  • Custom Agents – Có thể tùy chỉnh theo nhu cầu, thêm công cụ hoặc workflow riêng.
Python
from langchain.agents import initialize_agent, AgentType
from langchain.tools import Tool
from langchain.llms import OpenAI
from langchain.utilities import WikipediaAPIWrapper

# Khởi tạo LLM (GPT-4 hoặc GPT-3.5)
llm = OpenAI(model_name="gpt-4", temperature=0)

# Tạo Tools (Wikipedia Search)
wiki_tool = Tool(
    name="WikipediaSearch",
    func=WikipediaAPIWrapper().run,
    description="Tìm kiếm thông tin trên Wikipedia theo yêu cầu người dùng."
)

# Khởi tạo Agent với Tool
agent = initialize_agent(
    tools=[wiki_tool],  
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# Chạy thử Agent
response = agent.run("LangChain là gì?")
print(response)

2.2 Tool

Tools là các hàm (functions) mà Agents có thể sử dụng để tương tác với thế giới bên ngoài. Mỗi Tool được thiết kế để thực hiện một nhiệm vụ cụ thể, giúp AI không chỉ trả lời dựa trên dữ liệu có sẵn mà còn có thể thao tác, truy xuất thông tin và thực hiện các phép toán phức tạp.

Những Tools này có thể thực hiện:

  • Các tác vụ phổ biến: Tìm kiếm Google, truy vấn cơ sở dữ liệu, thực hiện các phép toán, gọi API bên ngoài…
  • Tương tác với các Chains khác: Một Tool có thể gọi một chuỗi xử lý khác trong hệ thống.
  • Tương tác với một Agent khác: Một Agent có thể sử dụng một Agent khác để thực hiện tác vụ phức tạp hơn.

Bạn có thể tham khảo đoạn code mẫu của Tool ở phần Agent bên trên.

2.3 Chain

Sử dụng một LLM độc lập có thể đủ cho các ứng dụng đơn giản, nhưng khi bạn muốn xây dựng các ứng dụng AI phức tạp hơn, bạn cần kết hợp nhiều LLM hoặc tích hợp với các thành phần khác.

LangChain cung cấp Chain interface, cho phép bạn xây dựng các chuỗi xử lý linh hoạt, nơi mà đầu ra của bước này có thể trở thành đầu vào của bước tiếp theo. Một Chain có thể bao gồm nhiều thành phần, thậm chí có thể gọi các Chain khác để tạo thành các workflows phức tạp.

Các loại Chains trong LangChain

LangChain cung cấp 4 loại Chain chính, mỗi loại có một mục đích sử dụng khác nhau:

  1. LLM Chain – Một Chain đơn giản sử dụng prompt template để xử lý nhiều loại input.
  2. Router Chain – Một gateway, sử dụng LLM để quyết định nên chuyển dữ liệu đến Chain nào để xử lý.
  3. Sequential Chain – Một chuỗi xử lý tuần tự, trong đó đầu ra của bước trước là đầu vào của bước sau, tạo thành một quy trình logic rõ ràng.
  4. Transformation Chain – Một loại Chain cho phép gọi hàm Python để xử lý dữ liệu đầu vào theo cách tùy chỉnh (ví dụ: tiền xử lý văn bản, trích xuất thông tin, v.v.).

Giả sử bạn cần tóm tắt một bài viết, rồi sau đó dịch nó sang tiếng Việt. Thay vì làm tất cả trong một bước, bạn có thể xây dựng một Sequential Chain:

  • Bước 1: LLM tóm tắt bài viết.
  • Bước 2: LLM dịch phần tóm tắt sang tiếng Việt.

Dưới đây là cách triển khai bằng LangChain:

Python
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

# Khởi tạo LLM
llm = OpenAI(model_name="gpt-4")

# Tạo Chain 1: Tóm tắt bài viết
summary_prompt = PromptTemplate(
    input_variables=["text"],
    template="Hãy tóm tắt văn bản sau: {text}"
)
summary_chain = LLMChain(llm=llm, prompt=summary_prompt)

# Tạo Chain 2: Dịch sang tiếng Việt
translate_prompt = PromptTemplate(
    input_variables=["summary"],
    template="Dịch đoạn văn sau sang tiếng Việt: {summary}"
)
translate_chain = LLMChain(llm=llm, prompt=translate_prompt)

# Gộp các Chains lại thành một Sequential Chain
chain = SimpleSequentialChain(chains=[summary_chain, translate_chain])

# Chạy thử Chain
output = chain.run("This is a long article about artificial intelligence...")
print(output)

2.4 Memory

Khi xây dựng chatbot hoặc trợ lý ảo, một vấn đề lớn là làm sao để AI có thể "nhớ" những gì đã nói trước đó và phản hồi một cách hợp lý thay vì chỉ xử lý từng câu hỏi một cách độc lập. Trong LangChain, Memory giúp giải quyết vấn đề này bằng cách lưu trữ thông tin từ các cuộc trò chuyện và sử dụng lại khi cần thiết.

Các loại Memory trong LangChain

  1. Buffer Memory – Nhớ toàn bộ lịch sử hội thoại: Buffer Memory trong LangChain hoạt động như một bộ nhớ đệm đơn giản,lưu toàn bộ lịch sử cuộc trò chuyện. Hãy dùng khi bạn muốn lưu toàn bộ lịch sử hội thoại mà không cần giới hạn số lượng tin nhắn.
  2. Buffer Window Memory – Giới hạn số tin nhắn đã lưu: Buffer Window Memory cũng lưu trữ lịch sử hội thoại nhưng chỉ giữ lại một số lượng tin nhắn nhất định. Hãy dùng khi bạnkhông muốn lưu toàn bộ hội thoại, mà chỉ giữ lại một phần lịch sử gần nhất để đảm bảo AI có đủ ngữ cảnh nhưng không bị quá tải.
  3. Entity Memory – Nhớ thông tin quan trọng từ hội thoại: Entity Memory không chỉ lưu lại nội dung hội thoại mà còn trích xuất và lưu trữ các thực thể quan trọng. Hãy dùng khi bạn muốn AI ghi nhớ thông tin cụ thể về người dùng, ví dụ:"Tôi tên là Nam, tôi thích uống cà phê đen không đường."
  4. Conversation Knowledge Graph Memory: Loại Memory này kết hợp với một Knowledge Graph bên ngoài để lưu trữ thông tin từ cuộc trò chuyện dưới dạng knowledge triples. Hãy dùng khi bạn cần một hệ thống có thể ghi nhớ và xây dựng quan hệ giữa các thông tin, ví dụ như một chatbot chuyên tư vấn về sản phẩm hoặc dịch vụ.
  5. Conversation Summary Memory – Ghi nhớ nội dung hội thoại bằng cách tóm tắt: Thay vì lưu toàn bộ cuộc trò chuyện, Memory này tóm tắt hội thoại theo từng phần. Hãy dùng khi bạn muốn AI ghi nhớ ngữ cảnh mà không cần lưu từng tin nhắn một cách chi tiết.
  6. Conversation Summary Buffer Memory – Tóm tắt + Xóa bớt tin nhắn cũ: Tương tự như Conversation Summary Memory, nhưng có thêm cơ chế pruning (cắt bớt nội dung cũ). Hãy dùng khi bạn muốn chatbot luôn nhớ được ngữ cảnh hội thoại mà không bị mất quá nhiều bộ nhớ.
  7. Conversation Token Buffer Memory – Giới hạn theo số lượng token: Loại Memory này hoạt động như Buffer Memory nhưng thay vì giới hạn số tin nhắn, nó giới hạn theo số token. Hãy dùng khi bạn làm việc với các LLM có giới hạn token, và cần kiểm soát lượng dữ liệu mà AI có thể xử lý trong mỗi cuộc trò chuyện.
  8. VectorStore-Backed Memory – Lưu trữ và tìm kiếm bằng vector embeddings: Memory này sử dụng VectorStoreRetriever để lưu và truy xuất dữ liệu hội thoại dưới dạng vector embeddings. Hãy dùng khi bạn muốn tìm kiếm nội dung cuộc trò chuyện theo ngữ nghĩa, thay vì chỉ theo từ khóa. Rất hữu ích trong semantic search hoặc hệ thống FAQ thông minh.

3. Kết luận

Hy vọng rằng sau khi tìm hiểu về các khái niệm cốt lõi của LangChain (Agents, Tools, Memory) và theo dõi ví dụ thực tế trong bài viết, bạn đã có cái nhìn rõ hơn về cách mà các ứng dụng AI phức tạp tận dụng sức mạnh của LLMs để hoạt động.

Một quan niệm sai lầm phổ biến là đánh giá thấp tiềm năng của các giải pháp Generative AI. Hầu hết mọi người chỉ tương tác với LLM theo cách đơn giản nhất: gửi một câu hỏi, nhận một câu trả lời. Nhưng một single LLM call chỉ có thể làm được đến một mức độ nào đó. Điều này khiến nhiều người chưa nhận ra hết khả năng thực sự của LLMs.

khi được kết hợp với LangChain, LLMs có thể làm được nhiều hơn thế. Chúng có thể suy luận, thực hiện nhiều hành động phức tạp, kết nối với dữ liệu bên ngoài và xử lý thông tin một cách thông minh.

Các bài viết liên quan:

Bài viết liên quan

Lập trình backend expressjs

xây dựng hệ thống microservices
  • Kiến trúc Hexagonal và ứng dụngal font-
  • TypeScript: OOP và nguyên lý SOLIDal font-
  • Event-Driven Architecture, Queue & PubSubal font-
  • Basic scalable System Designal font-

Đăng ký nhận thông báo

Đừng bỏ lỡ những bài viết thú vị từ 200Lab