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ẽ:
-
LLM tạo một ToolCall (ví dụ: gọi hàm
multiply(a=2, b=3)
). -
Bạn thực thi hàm Python tương ứng.
-
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
-
ToolMessage
cực kỳ quan trọng khi bạn dùng nhiều bước logic có liên quan đến tool. -
tool_call_id
phải khớp chính xác vớiToolCallMessage
từ LLM, để LLM biết bạn đang trả lời cho yêu cầu nào. -
Bạn có thể dùng nhiều
ToolMessage
nếu LLM gọi nhiều hàm cùng lúc (nếuparallel_tool_calls=True
).
Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft