Message

Trong LangChain, các loại Message đóng vai trò rất quan trọng khi làm việc với các mô hình như ChatOpenAI, nhất là khi xây dựng các hệ thống hội thoại (conversational agents). Những message này mô phỏng cách người và AI giao tiếp với nhau trong một cuộc trò chuyện.

Giới thiệu

Trong LangChain, Message là thành phần cốt lõi dùng để mô tả các tương tác giữa người dùng, hệ thống và mô hình ngôn ngữ (LLM). Việc hiểu rõ các loại Message giúp bạn xây dựng các tác vụ hội thoại, agent, và ứng dụng AI một cách chính xác, dễ kiểm soát và có thể mở rộng.

LangChain định nghĩa nhiều loại message khác nhau, mỗi loại phản ánh một vai trò cụ thể trong quá trình giao tiếp. Dưới đây là tổng quan các loại message chính:

1. HumanMessage – Tin nhắn từ người dùng

Đây là loại message đại diện cho đầu vào từ người dùng cuối. Khi bạn nhập văn bản để hỏi AI, LangChain sẽ đóng gói nội dung đó thành một HumanMessage.

from langchain.schema import HumanMessage

message = HumanMessage(content="Bạn có thể giúp tôi tính 5 nhân 3 không?")

Dùng khi mô phỏng hoặc truyền input từ con người.

2. AIMessage – Phản hồi từ AI

Đại diện cho phản hồi từ LLM, thường là kết quả sau khi xử lý HumanMessage. Ngoài văn bản, AIMessage còn có thể bao gồm tool calls, nếu AI quyết định gọi một công cụ thay vì trả lời trực tiếp.

from langchain.schema import AIMessage

message = AIMessage(content="Kết quả là 15.")

Dùng để mô tả output từ AI.

3. SystemMessage – Định hướng AI

Được dùng để thiết lập bối cảnh hoặc hướng dẫn hành vi của AI từ đầu. Những chỉ dẫn như “bạn là một trợ lý thân thiện” hay “chỉ trả lời bằng tiếng Việt” thường được đặt trong SystemMessage.

from langchain.schema import SystemMessage

message = SystemMessage(content="Bạn là một trợ lý AI chuyên nghiệp.")

Dùng để hướng dẫn mô hình trước khi bắt đầu cuộc trò chuyện.

4. ToolMessage – Phản hồi từ công cụ (tool)

Khi một AI gọi tool (hàm toán học, API, công cụ bên ngoài…), kết quả trả về sẽ được biểu diễn qua ToolMessage. Nó mô tả output của tool, và giúp AI tiếp tục hội thoại dựa trên dữ liệu đó.

from langchain.schema import ToolMessage

message = ToolMessage(
    tool_call_id="abc123",
    content="Kết quả của phép chia là 2.5"
)

Dùng khi bạn có workflow với tool calling.

5. ToolCall – Yêu cầu từ AI gọi một tool

Không phải là message, nhưng thường được gói trong AIMessage. Khi AI muốn gọi một hàm cụ thể, nó tạo ra một ToolCall để mô tả tên tool và các tham số truyền vào.

from langchain.schema.messages import ToolCall

call = ToolCall(
    name="multiply",
    args={"a": 5, "b": 3},
    id="tool_call_1"
)

Gắn liền với quá trình sử dụng bind_tools() hoặc khi xây dựng các agent có tool.

Tóm lại

Message Type Vai trò chính Dùng khi nào?
HumanMessage Người dùng gửi yêu cầu Mọi input của người dùng
AIMessage AI phản hồi hoặc gọi tool Output từ AI
SystemMessage Thiết lập bối cảnh và hành vi AI Trước khi bắt đầu cuộc trò chuyện
ToolMessage Phản hồi từ công cụ (tool) Khi một tool được AI gọi và trả về kết quả
ToolCall (Không phải message) – Gọi hàm/tool Khi AI quyết định gọi tool thay vì trả lời

Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft

HumanMessage – Tin nhắn từ người dùng

Trong LangChain, HumanMessage là một trong những loại message cơ bản nhất, đại diện cho lời nói, câu hỏi hoặc yêu cầu từ người dùng trong cuộc trò chuyện với mô hình ngôn ngữ (LLM).

Khi bạn gọi mô hình bằng ChatModel như ChatOpenAI, bạn có thể truyền vào một danh sách các message. HumanMessage mô phỏng nội dung do con người nhập vào — tương đương với việc bạn gõ câu hỏi vào ChatGPT.

Cú pháp khai báo

from langchain.schema import HumanMessage

message = HumanMessage(content="Hôm nay thời tiết thế nào?")

Ví dụ đơn giản sử dụng với ChatOpenAI

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage

# Khởi tạo mô hình
llm = ChatOpenAI()

# Tạo HumanMessage
user_message = HumanMessage(content="Hãy tính giúp tôi 7 + 5 là bao nhiêu?")

# Gửi message đến mô hình và in kết quả
response = llm([user_message])
print(response.content)

Kết quả có thể là:
7 + 5 = 12.

Dùng nhiều messages trong cuộc hội thoại

from langchain.schema import HumanMessage, AIMessage, SystemMessage
from langchain.chat_models import ChatOpenAI

chat = ChatOpenAI()

messages = [
    SystemMessage(content="Bạn là một trợ lý AI thông minh và lịch sự."),
    HumanMessage(content="Bạn tên là gì?"),
    AIMessage(content="Tôi là trợ lý AI được thiết kế để hỗ trợ bạn."),
    HumanMessage(content="Bạn có thể dịch câu 'Hello' sang tiếng Việt không?")
]

response = chat(messages)
print(response.content)

Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft

AIMessage – Tin nhắn phản hồi từ AI

Trong LangChain, AIMessage đại diện cho phản hồi từ mô hình ngôn ngữ (LLM) sau khi nhận một hoặc nhiều HumanMessage.

Bạn có thể nghĩ nó giống như câu trả lời mà ChatGPT gửi lại sau khi bạn hỏi.

LangChain cho phép bạn truyền danh sách các message vào mô hình — trong đó AIMessage giúp mô phỏng những phản hồi trước đó từ AI để giữ ngữ cảnh hội thoại.

Cú pháp khai báo

from langchain.schema import AIMessage

message = AIMessage(content="Tôi có thể giúp gì cho bạn hôm nay?")

Ví dụ sử dụng với ChatOpenAI

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, AIMessage

chat = ChatOpenAI()

messages = [
    HumanMessage(content="Bạn tên là gì?"),
    AIMessage(content="Tôi là trợ lý ảo của bạn."),
    HumanMessage(content="Bạn có thể giúp tôi dịch từ 'apple' sang tiếng Việt không?")
]

response = chat(messages)
print(response.content)

Kết quả có thể là:
"Từ 'apple' trong tiếng Việt là 'quả táo'."

Sử dụng trong hội thoại nhiều lượt (multi-turn conversation)

from langchain.schema import HumanMessage, AIMessage, SystemMessage

messages = [
    SystemMessage(content="Bạn là trợ lý lịch sự, trả lời bằng tiếng Việt."),
    HumanMessage(content="Xin chào!"),
    AIMessage(content="Chào bạn! Tôi có thể giúp gì hôm nay?"),
    HumanMessage(content="Thời tiết hôm nay như thế nào ở Hà Nội?")
]

Bạn có thể gửi messages này vào ChatOpenAI() để giữ toàn bộ ngữ cảnh từ đầu đến cuối.

AIMessage sử dụng trong những trường hợp

Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft

 

SystemMessage - Thiết lập ngữ cảnh

Trong LangChain, SystemMessage là một loại message đặc biệt dùng để thiết lập ngữ cảnh hoặc hướng dẫn hành vi cho mô hình ngôn ngữ (LLM).

Nó giống như "lệnh nền" mà người dùng không thấy, nhưng ảnh hưởng đến cách AI trả lời.

Cú pháp

from langchain.schema import SystemMessage

system_msg = SystemMessage(content="Bạn là một trợ lý AI nói tiếng Việt và luôn lịch sự.")

Mục đích sử dụng

Ví dụ đơn giản

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage

llm = ChatOpenAI()

messages = [
    SystemMessage(content="Bạn là một trợ lý AI lịch sự và vui tính."),
    HumanMessage(content="Hôm nay bạn khỏe không?")
]

response = llm(messages)
print(response.content)

Kết quả  có thể là

Cảm ơn bạn đã hỏi! Tôi là AI nên không có cảm giác, nhưng nếu có thì chắc chắn hôm nay tôi rất tuyệt vời. Còn bạn thì sao?

Thấy không? AI trở nên "vui tính" và "lịch sự" đúng như chỉ dẫn trong SystemMessage.

Ví dụ hội thoại có nhiều loại message

from langchain.schema import HumanMessage, AIMessage, SystemMessage
from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI()

messages = [
    SystemMessage(content="Bạn là một chuyên gia lịch sử Việt Nam, nói ngắn gọn."),
    HumanMessage(content="Ai là vua đầu tiên của triều Nguyễn?"),
]

response = llm(messages)
print(response.content)

Kết quả mẫu:

Vua đầu tiên của triều Nguyễn là Gia Long, lên ngôi năm 1802.

Mẹo chuyên sâu

 

 

 

 

 

ToolMessage - Kết quả phản hồi từ một công cụ (tool)

Trong LangChain, ToolMessage đại diện cho kết quả phản hồi từ một công cụ (tool) sau khi mô hình LLM gọi tool đó.

Nó giống như AI bảo: "Tôi cần dùng máy tính để tính 2 + 2", sau đó bạn gửi lại kết quả "4" bằng ToolMessage.

Khi nào dùng ToolMessage?

Khi bạn dùng bind_tools() để cho phép LLM gọi các hàm (tools), LangChain sẽ:

  1. LLM tạo một ToolCall (ví dụ: gọi hàm multiply(a=2, b=3)).

  2. Bạn thực thi hàm Python tương ứng.

  3. Sau đó, bạn dùng ToolMessage để truyền kết quả trả về của tool đó lại cho LLM.

Cú pháp

from langchain_core.messages import ToolMessage

msg = ToolMessage(tool_call_id="abc123", content="Kết quả là 6")

Các tham số:

Tham số Ý nghĩa
tool_call_id ID của lời gọi hàm (do ToolCallMessage sinh ra)
content Nội dung trả lời (kết quả của tool)
Ví dụ đầy đủ: Gọi hàm nhân trong Python

1. Định nghĩa hàm (tool)

def multiply(a: int, b: int) -> int:
    """Nhân hai số."""
    return a * b

2. Dùng LLM + tool

from langchain_core.messages import HumanMessage, ToolMessage
from langchain_openai import ChatOpenAI

chat = ChatOpenAI().bind_tools([multiply], parallel_tool_calls=False)

3. LLM đưa ra ToolCall

messages = [
    HumanMessage(content="Hãy nhân 4 với 5")
]

response = chat.invoke(messages)
tool_call = response.tool_calls[0]
print(tool_call)  # --> thông tin về lời gọi hàm multiply

4. Gửi kết quả về lại cho LLM bằng ToolMessage

# Gọi hàm thủ công
result = multiply(**tool_call.args)

# Gửi kết quả về lại
followup = chat.invoke([
    response,
    ToolMessage(tool_call_id=tool_call.id, content=str(result))
])

print(followup.content)  # => LLM phản hồi dựa trên kết quả tool

Quan trọng

Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft

 

 

 

ToolCall - Mô hình ngôn ngữ gọi đến một công cụ

Trong LangChain, ToolCall đại diện cho việc mô hình ngôn ngữ gọi đến một công cụ (function) để thực hiện một hành động cụ thể.

Nói cách khác, khi bạn dạy AI cách gọi các hàm Python, thì ToolCall là cách mô hình nói: “Tôi muốn dùng hàm add(5, 3) nhé.”

Tại sao cần ToolCall?

Mô hình ngôn ngữ rất giỏi hiểu và tạo ra văn bản, nhưng lại không giỏi tính toán, truy vấn API, hoặc thao tác với dữ liệu phức tạp.
Khi cần làm những việc như vậy, mô hình sẽ gọi một “tool” (được định nghĩa trước bằng Python), thông qua một ToolCall.

Cấu trúc cơ bản của ToolCall

from langchain_core.messages import ToolCall

tool_call = ToolCall(
    name="multiply",
    args={"a": 5, "b": 3},
    id="call_123"
)

Các thành phần:

Ví dụ đầy đủ: Sử dụng ToolCall với LLM

Bước 1: Định nghĩa công cụ

def add(a: int, b: int) -> int:
    return a + b

Bước 2: Bind tool vào LLM

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o")
llm_with_tools = llm.bind_tools([add])

Bước 3: Gửi tin nhắn có yêu cầu tính toán

from langchain_core.messages import HumanMessage

messages = [HumanMessage(content="Hãy cộng 4 và 7 giúp tôi")]
response = llm_with_tools.invoke(messages)

print(response.tool_calls)  # Đây chính là danh sách ToolCall

 


Output mẫu:


[
    ToolCall(
        name='add',
        args={'a': 4, 'b': 7},
        id='toolu_abc123'
    )
]

Tức là mô hình quyết định gọi hàm add với a=4, b=7 thông qua ToolCall.

Tương tác hoàn chỉnh: Gọi Tool và trả lại kết quả

from langchain_core.messages import AIMessage, ToolMessage

# Gọi hàm add
tool_result = add(4, 7)

# Trả kết quả lại cho AI thông qua ToolMessage
final_response = llm_with_tools.invoke([
    HumanMessage(content="Hãy cộng 4 và 7"),
    AIMessage(tool_calls=[ToolCall(name="add", args={"a": 4, "b": 7}, id="call_1")]),
    ToolMessage(tool_call_id="call_1", content=str(tool_result))
])

print(final_response.content)

Output

Kết quả là 11!

Tóm tắt so sánh

Thành phần Vai trò
ToolCall Yêu cầu gọi hàm từ mô hình LLM
ToolMessage Trả kết quả từ tool về để LLM tiếp tục xử lý
bind_tools Cho LLM biết có thể gọi những hàm nào

Khi nào cần dùng ToolCall?

Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft