Chuyển đến nội dung chính

Giới thiệu về Prompt Engineering với LangChain

Khám phá sức mạnh của prompt engineering trong LangChain, một kỹ thuật thiết yếu để khai thác phản hồi chính xác và phù hợp từ các mô hình AI.
Đã cập nhật 5 thg 10, 2026  · 11 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

LangChain là một framework mã nguồn mở được thiết kế để dễ dàng xây dựng ứng dụng bằng các mô hình ngôn ngữ như GPT, LLaMA, Mistral, v.v.

Một trong những tính năng mạnh mẽ nhất của LangChain là hỗ trợ prompt engineering nâng cao. Prompt engineering đề cập đến việc thiết kế và tối ưu hóa prompt để nhận được phản hồi chính xác và phù hợp nhất từ mô hình ngôn ngữ.

Trong bài viết này, chúng ta sẽ tìm hiểu những điều cơ bản về prompt, cách LangChain sử dụng prompt, mẫu prompt (prompt templates), bộ nhớ (memory), agent và chain; với mỗi khái niệm cốt lõi, chúng ta sẽ xem một số ví dụ mã bằng Python để đến cuối hướng dẫn, bạn có thể tự tin xây dựng ứng dụng của riêng mình bằng framework LangChain trong Python.

Muốn biết LangChain và GPT có thể được dùng để tạo một agent AI đơn giản như thế nào? Xem buổi Code-Along Prompt Engineering với GPT & LangChain của chúng tôi:

Prompt Engineering là gì?

Hình ảnh: Tác giả

Chúng tôi có một hướng dẫn đầy đủ về prompt engineering; tóm tắt nhanh, đây là thực hành tạo các đầu vào văn bản giao tiếp hiệu quả với các mô hình AI sinh sinh. Những prompt này, được viết bằng ngôn ngữ tự nhiên, chỉ định nhiệm vụ mà chúng ta muốn AI thực hiện.

Chúng có thể đa dạng về hình thức, từ câu hỏi đơn giản như yêu cầu giải thích một định lý toán học cho đến những yêu cầu sáng tạo hơn như viết một bài thơ về một chủ đề cụ thể.

Trong prompt engineering, điều cốt yếu không chỉ là bạn hỏi gì mà còn là cách bạn hỏi. Điều này có thể bao gồm chọn từ ngữ phù hợp, thiết lập giọng điệu hoặc phong cách, cung cấp ngữ cảnh cần thiết, hoặc thậm chí định nghĩa một vai trò cho AI, như yêu cầu nó phản hồi như thể là người bản ngữ của một ngôn ngữ nhất định.

Trong một số trường hợp, prompt cũng có thể bao gồm ví dụ để định hướng quá trình học của AI. Kỹ thuật này, gọi là few-shot learning, đặc biệt hiệu quả cho các tác vụ phức tạp.

Khi làm việc với các mô hình tạo ảnh hoặc âm thanh, prompt thường mô tả chi tiết đầu ra mong muốn, từ chủ thể và phong cách đến bố cục và tâm trạng của sản phẩm cuối. Nghệ thuật của prompt engineering nằm ở việc điều chỉnh các yếu tố này để dẫn dắt AI tạo ra kết quả mong muốn.

Những điều cơ bản về Prompt

Hình ảnh: Tác giả

Prompt là đầu vào cung cấp cho các mô hình ngôn ngữ lớn (LLM) để gợi ra phản hồi mong muốn. Prompt được thiết kế tốt là điều then chốt để nhận đầu ra hữu ích từ LLM. Mục tiêu của prompt engineering là xây dựng cẩn thận các prompt cho ra phản hồi chính xác, phù hợp và hữu ích từ LLM.

Một prompt tốt thường có bốn thành phần:

  1. Hướng dẫn - Cho mô hình biết cần làm gì, cách dùng thông tin đã cung cấp, xử lý truy vấn ra sao và cách cấu trúc đầu ra.
  2. Ví dụ đầu vào - Cung cấp đầu vào mẫu để minh họa cho mô hình điều được kỳ vọng.
  3. Ví dụ đầu ra - Cung cấp đầu ra mẫu tương ứng.
  4. Truy vấn - Đầu vào thực tế bạn muốn mô hình xử lý.

Ngoại trừ truy vấn, các phần còn lại là tùy chọn nhưng có thể ảnh hưởng đáng kể đến chất lượng phản hồi, đặc biệt là phần hướng dẫn cung cấp chỉ dẫn cho LLM về nhiệm vụ và phản hồi kỳ vọng.

Ví dụ minh họa định dạng đầu ra mong muốn cho một đầu vào mẫu cụ thể.

Truy vấn là câu hỏi hoặc yêu cầu gửi đến LLM.

Xây dựng prompt hiệu quả đòi hỏi kết hợp linh hoạt các yếu tố này dựa trên bài toán cần giải.

Prompt trong LangChain

LangChain cung cấp nhiều lớp và hàm để hỗ trợ xây dựng và làm việc với prompt, giúp việc quản lý các tác vụ phức tạp liên quan đến mô hình ngôn ngữ trở nên dễ dàng hơn.

LangChain hỗ trợ prompt engineering ở cấp độ hạng nhất thông qua đối tượng `PromptTemplate`.

Prompt template đóng vai trò như hướng dẫn có cấu trúc để hình thành truy vấn cho mô hình ngôn ngữ.

Các template này thường bao gồm chỉ dẫn, một số ví dụ đầu vào (few-shot), và các câu hỏi/ngữ cảnh được điều chỉnh phù hợp cho những tác vụ cụ thể.

Mục tiêu của LangChain là thiết kế template tương thích với nhiều mô hình ngôn ngữ, giúp dễ dàng chuyển giao template giữa các mô hình khác nhau.

Tóm lại, bạn có thể dùng lớp PromptTemplate để tạo một mẫu cho prompt dạng chuỗi.

from langchain.prompts import PromptTemplate


prompt_template = PromptTemplate.from_template(
    "Tell me a {adjective} joke about {content}."
)
prompt_template.format(adjective="sad", content="data scientists")

Đầu ra:

>>> 'Tell me a sad joke about data scientists.'

Không bắt buộc phải có biến. Bạn có thể tạo prompt bằng lớp này ngay cả khi không có biến nào.

from langchain.prompts import PromptTemplate
prompt_template = PromptTemplate.from_template("Tell me a joke")
prompt_template.format()

Đầu ra:

>>> 'Tell me a joke'

Nếu bạn đang xây dựng ứng dụng chat và cần lưu cũng như gửi lịch sử tin nhắn cho LLM mỗi khi người dùng gửi tin nhắn mới thì sao? Làm thủ công sẽ tốn thời gian.

Với các mô hình chat được hỗ trợ, bạn có thể dùng ChatPromptTemplate:

from langchain.prompts import ChatPromptTemplate


chat_template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful AI bot. Your name is {name}."),
        ("human", "Hello, how are you doing?"),
        ("ai", "I'm doing well, thanks!"),
        ("human", "{user_input}"),
    ]
)


messages = chat_template.format_messages(name="Bob", user_input="What is your name?")


print(messages)

Đầu ra:

>>> [SystemMessage(content='You are a helpful AI bot. Your name is Bob.'),

>>> HumanMessage(content='Hello, how are you doing?'),

>>> AIMessage(content="I'm doing well, thanks!"),

>>> HumanMessage(content='What is your name?')]

Vậy tại sao chúng ta cần PromptTemplates? Sao không truyền trực tiếp chuỗi prompt cho LLM? Dưới đây là vài lý do nên dùng PromptTemplate của LangChain:

  • Prompt template có thể tái sử dụng, cho phép bạn tạo một prompt một lần và dùng trong nhiều tình huống, như tóm tắt các bài viết khác nhau mà không phải viết lại prompt mỗi lần.
  • Chúng tách riêng phần định dạng prompt khỏi phần gọi mô hình thực tế, làm cho mã có tính mô-đun hơn và cho phép cập nhật độc lập template hoặc mô hình.
  • Việc dùng template cải thiện khả năng đọc mã vì chúng đóng gói logic phức tạp trong một định dạng đơn giản hơn với các biến được đặt tên rõ ràng.
  • Bảo trì trở nên dễ dàng hơn với prompt template, vì thay đổi logic prompt chỉ cần thực hiện ở một nơi trung tâm, thay vì mọi prompt riêng lẻ.

Bộ nhớ (Memory) trong LangChain

Trong các ứng dụng trò chuyện dùng mô hình ngôn ngữ, điều quan trọng là hệ thống ghi nhớ các cuộc trao đổi trước đó.

Giống như một cuộc trò chuyện bình thường, hệ thống nên có thể nhìn lại những gì đã nói trước đó.

Ở mức đơn giản nhất, điều này có nghĩa là hệ thống có thể xem một vài tin nhắn gần đây. Nhưng hệ thống tiên tiến hơn sẽ ghi nhớ nhiều chi tiết hơn, như các sự kiện về những chủ đề khác nhau và cách chúng liên kết.

Khả năng ghi nhớ các cuộc trò chuyện trước đó được gọi là "memory". LangChain hỗ trợ bổ sung memory cho các hệ thống chat này.

Một memory trong LangChain làm hai việc chính:

  1. Trước khi gửi truy vấn tới LLM, hệ thống đọc từ bộ nhớ để tăng cường prompt đầu vào ban đầu nhận từ người dùng.
  2. Sau khi LLM trả về phản hồi, hệ thống ghi phản hồi đó vào bộ nhớ cho các tương tác sau, trước khi trả kết quả cuối cùng cho người dùng.

Memory trong LangChain (Nguồn ảnh)

Để dùng tính năng Memory trong LangChain bạn có thể dùng lớp ConversationBufferMemory.

from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(return_messages=True)
memory.chat_memory.add_user_message("hi!")
memory.chat_memory.add_ai_message("what's up?")
memory.chat_memory.add_user_message("how are you doing?")
memory.chat_memory.add_ai_message("I am fine, thank you and you?")


# to check the variables history
memory.load_memory_variables({})

Đầu ra:

>>> {'history': [HumanMessage(content='hi!'),

>>> AIMessage(content="what's up?"),

>>> HumanMessage(content='how are you doing?'),

>>> AIMessage(content='I am fine, thank you and you?')]}

Nó trả về một dictionary với khóa mặc định là history. Khóa này trỏ đến danh sách các tin nhắn, và các tin nhắn này có thể đến từ con người (HumanMessage) hoặc từ LLM (AIMessage).

Chain trong LangChain

Với những tác vụ đơn giản, dùng một LLM (Large Language Model) là phù hợp. Tuy nhiên, với các tác vụ phức tạp hơn, thường cần xâu chuỗi nhiều bước và/hoặc nhiều mô hình.

Cách cũ để dùng Chains trong LangChain là thông qua giao diện Chain.

Phương pháp mới hơn và được khuyến nghị là LangChain Expression Language (LCEL). Dù LCEL được ưu tiên cho dự án mới, phương pháp Chain vẫn hữu ích và được hỗ trợ.

from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser


model = ChatOpenAI(openai_api_key = “...”)


prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You're a expert data scientist and machine learning engineer who offer its expertise and responds to the point and accurately.",
        ),
        ("human", "{question}"),
    ]
)
runnable = prompt | model | StrOutputParser()


for chunk in runnable.stream({"question": "How is machine learning different than deep learning?"}):
    print(chunk, end="", flush=True)

Đầu ra:

>>> Machine learning and deep learning are subfields of artificial intelligence (AI) that involve training models to make predictions or decisions based on data. While there is an overlap between the two, they ……..

Cách tạo runnable không hoàn toàn quen thuộc trong Python, nhưng ký hiệu | là toán tử pipe. Prompt | model | StrOutputParser() nghĩa là Prompt được truyền qua model, và đầu ra của nó sau đó được truyền qua StrOutputParser(). Mỗi đoạn trong chuỗi sẽ biến đổi dữ liệu theo một cách nào đó.

Muốn tìm hiểu thêm về các trường hợp sử dụng và ứng dụng thú vị có thể xây dựng bằng LangChain? Xem hướng dẫn Các trường hợp sử dụng trong Kỹ thuật và Ứng dụng Dữ liệu của chúng tôi.

Agent trong LangChain

Khái niệm cốt lõi của agent là sử dụng mô hình ngôn ngữ để lựa chọn một chuỗi hành động.

Không giống chain, nơi chuỗi hành động được xác định trước và nhúng trong mã, agent dùng mô hình ngôn ngữ như công cụ ra quyết định để xác định hành động phù hợp và trình tự của chúng.

Có ba khái niệm chính trong Agents của LangChain:

  1. Công cụ (Tools): Mô tả các công cụ sẵn có cho LLM
  2. Đầu vào người dùng: Mục tiêu cấp cao của tác vụ
  3. Các bước trung gian: Bất kỳ cặp (hành động, đầu ra công cụ) nào đã được thực thi trước đó để đạt được mục tiêu của người dùng

Công cụ đại diện cho các chức năng mà một agent có thể kích hoạt. Hai khía cạnh quan trọng trong thiết kế công cụ bao gồm:

  • Đảm bảo agent có quyền truy cập vào các công cụ phù hợp.
  • Định nghĩa công cụ theo cách tối đa hóa tính hữu ích đối với agent.

Với nhiều hoạt động thường nhật, một agent cần một tập hợp công cụ có liên kết với nhau. Để giải quyết điều này, LangChain đưa ra khái niệm bộ công cụ (toolkit). LangChain cung cấp nhiều bộ công cụ để bạn bắt đầu.

Để tìm hiểu thêm về Agents, xem Hướng dẫn chính thức của LangChain.

Ghi công: Một số ví dụ trong blog này được trích từ tài liệu chính thức của LangChain.

Kết luận

Bằng cách cung cấp cách tiếp cận có cấu trúc để thiết kế prompt, LangChain không chỉ đơn giản hóa quá trình tương tác với các mô hình ngôn ngữ khác nhau mà còn tối đa hóa hiệu quả và mức độ phù hợp của đầu ra. Các tính năng như PromptTemplate và Memory trong LangChain thể hiện sự kết hợp khéo léo giữa tính linh hoạt và độ chính xác trong prompt engineering, đáp ứng nhiều tác vụ từ truy vấn đơn giản đến ngữ cảnh hội thoại phức tạp.

Các tính năng nâng cao trong Chains và Agents của LangChain còn mở rộng tiềm năng của các ứng dụng có thể xây dựng bằng LangChain chỉ với vài dòng mã cùng bất kỳ lựa chọn LLM nền tảng nào, và có rất nhiều để bạn lựa chọn.

Dù cho tác vụ đơn giản hay ứng dụng phức tạp, cách tiếp cận prompt engineering của LangChain khá đơn giản, rõ ràng và dễ áp dụng.

Muốn học thêm? Xem phần 1 của Cách xây dựng ứng dụng LLM với LangChain trên DataCamp.


Moez Ali's photo
Author
Moez Ali
LinkedIn
Twitter

Nhà khoa học dữ liệu, Nhà sáng lập & Người tạo ra PyCaret

Chủ đề
Trí tuệ Nhân tạo

Tìm hiểu thêm về LLM

Khóa học

Các khái niệm về Large Language Models (LLMs)

2 giờ
113.3K
Khám phá toàn bộ tiềm năng của LLM với khóa học khái niệm của chúng tôi, bao gồm các ứng dụng LLM, phương pháp đào tạo, cân nhắc đạo đức và nghiên cứu mới nhất.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm