Chữ ký tư duy là các biểu diễn được mã hoá của quy trình tư duy nội bộ của mô hình
và được dùng để duy trì bối cảnh lập luận trong các lượt tương tác nhiều bước.
Khi sử dụng các mô hình tư duy (chẳng hạn như dòng Gemini 3 và 2.5), API có thể
trả về trường thoughtSignature trong các phần nội dung
của phản hồi (ví dụ: text hoặc functionCall phần).
Theo nguyên tắc chung, nếu nhận được chữ ký tư duy trong phản hồi của mô hình,
bạn nên truyền lại chính xác chữ ký đó khi gửi nhật ký trò chuyện
trong lượt tiếp theo.
Khi sử dụng các mô hình Gemini 3, bạn phải truyền lại chữ ký tư duy trong quá trình
gọi hàm, nếu không, bạn sẽ gặp lỗi xác thực (mã trạng thái 4xx).
Điều này bao gồm cả khi sử dụng chế độ cài đặt minimal
mức tư duy cho Gemini 3
Flash.
Cách hoạt động
Hình ảnh dưới đây minh hoạ ý nghĩa của "lượt" và "bước" liên quan đến việc gọi hàm trong API Gemini. "Lượt" là một lần trao đổi hoàn chỉnh trong cuộc trò chuyện giữa người dùng và mô hình. "Bước" là một hành động hoặc thao tác chi tiết hơn do mô hình thực hiện, thường là một phần của quy trình lớn hơn để hoàn tất một lượt.

Tài liệu này tập trung vào việc xử lý lệnh gọi hàm cho các mô hình Gemini 3. Hãy tham khảo phần hành vi của mô hình để biết sự khác biệt với 2.5.
Gemini 3 trả về chữ ký tư duy cho tất cả phản hồi của mô hình (phản hồi từ API) bằng lệnh gọi hàm. Chữ ký tư duy xuất hiện trong các trường hợp sau:
- Khi có các lệnh gọi hàm song song, phần lệnh gọi hàm đầu tiên do phản hồi của mô hình trả về sẽ có chữ ký tư duy.
- Khi có các lệnh gọi hàm tuần tự (nhiều bước), mỗi lệnh gọi hàm sẽ có một chữ ký và bạn phải truyền lại tất cả chữ ký.
- Phản hồi của mô hình không có lệnh gọi hàm sẽ trả về chữ ký tư duy bên trong phần cuối cùng do mô hình trả về.
Bảng sau đây cung cấp hình ảnh minh hoạ cho các lệnh gọi hàm nhiều bước, kết hợp định nghĩa về lượt và bước với khái niệm về chữ ký được giới thiệu ở trên:
Lượt |
Bước |
Yêu cầu của người dùng |
Phản hồi của mô hình |
FunctionResponse |
1 |
1 |
request1 = user_prompt |
FC1 + signature |
FR1 |
1 |
2 |
request2 = request1 + (FC1 + signature) + FR1 |
FC2 + signature |
FR2 |
1 |
3 |
request3 = request2 + (FC2 + signature) + FR2 |
text_output
|
Không có |
Chữ ký trong các phần gọi hàm
Khi Gemini tạo functionCall, Gemini sẽ dựa vào thought_signature
để xử lý chính xác kết quả đầu ra của công cụ trong lượt tiếp theo.
- Hành vi:
- Lệnh gọi hàm đơn: Phần
functionCallsẽ chứathought_signature. - Lệnh gọi hàm song song: Nếu mô hình tạo các lệnh gọi hàm song song
trong một phản hồi, thì
thought_signaturesẽ được đính kèm chỉ vào lệnh gọi hàm đầu tiênfunctionCallphần. Các phầnfunctionCalltiếp theo trong cùng một phản hồi sẽ không chứa chữ ký.
- Lệnh gọi hàm đơn: Phần
- Yêu cầu: Bạn phải trả về chữ ký này trong chính phần mà bạn đã nhận được khi gửi lại nhật ký trò chuyện.
- Xác thực: Quy trình xác thực nghiêm ngặt được thực thi cho tất cả lệnh gọi hàm trong
lượt hiện tại . (Chỉ yêu cầu lượt hiện tại; chúng tôi không xác thực trên các lượt trước)
- API sẽ quay lại nhật ký (mới nhất đến cũ nhất) để tìm thông báo
Người dùng gần đây nhất có chứa nội dung tiêu chuẩn (ví dụ:
text) ( đây sẽ là điểm bắt đầu của lượt hiện tại). Đây sẽ không be làfunctionResponse. - Tất cả các lượt
functionCallcủa mô hình xảy ra sau thông báo sử dụng cụ thể đó đều được coi là một phần của lượt. - Phần
functionCallđầu tiên trong mỗi bước của lượt hiện tại phải bao gồmthought_signature. - Nếu bạn bỏ qua
thought_signaturecho phầnfunctionCallđầu tiên trong bất kỳ bước nào của lượt hiện tại, thì yêu cầu sẽ không thành công và trả về lỗi 400.
- API sẽ quay lại nhật ký (mới nhất đến cũ nhất) để tìm thông báo
Người dùng gần đây nhất có chứa nội dung tiêu chuẩn (ví dụ:
- Nếu không trả về chữ ký thích hợp, bạn sẽ gặp lỗi như sau
- Mô hình Gemini 3: Việc không đưa
chữ ký vào sẽ dẫn đến lỗi 400. Ngôn ngữ sẽ có dạng:
- Lệnh gọi hàm
<Function Call>trong khối nội dung<index of contents array>đang thiếuthought_signature. Ví dụ: Lệnh gọi hàmFC1trong khối nội dung1.đang thiếuthought_signature.
- Lệnh gọi hàm
- Mô hình Gemini 3: Việc không đưa
chữ ký vào sẽ dẫn đến lỗi 400. Ngôn ngữ sẽ có dạng:
Ví dụ về lệnh gọi hàm tuần tự
Phần này trình bày ví dụ về nhiều lệnh gọi hàm trong đó người dùng đặt một câu hỏi phức tạp đòi hỏi nhiều tác vụ.
Hãy cùng xem qua ví dụ về lệnh gọi hàm nhiều lượt trong đó người dùng đặt
một câu hỏi phức tạp đòi hỏi nhiều tác vụ: "Check flight status for AA100 and
book a taxi if delayed".
Lượt |
Bước |
Yêu cầu của người dùng |
Phản hồi của mô hình |
FunctionResponse |
1 |
1 |
request1="Check flight status for AA100 and book a taxi 2 hours before if delayed." |
FC1 ("check_flight") + signature |
FR1 |
1 |
2 |
request2 = request1 + FC1 ("check_flight") + signature + FR1 |
FC2("book_taxi") + signature |
FR2 |
1 |
3 |
request3 = request2 + FC2 ("book_taxi") + signature + FR2 |
text_output
|
None |
Đoạn mã sau đây minh hoạ trình tự trong bảng trên.
Lượt 1, Bước 1 (Yêu cầu của người dùng)
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
}
]
}
],
"tools": [
{
"functionDeclarations": [
{
"name": "check_flight",
"description": "Gets the current status of a flight",
"parameters": {
"type": "object",
"properties": {
"flight": {
"type": "string",
"description": "The flight number to check"
}
},
"required": [
"flight"
]
}
},
{
"name": "book_taxi",
"description": "Book a taxi",
"parameters": {
"type": "object",
"properties": {
"time": {
"type": "string",
"description": "time to book the taxi"
}
},
"required": [
"time"
]
}
}
]
}
]
}
Lượt 1, Bước 1 (Phản hồi của mô hình)
{
"content": {
"role": "model",
"parts": [
{
"functionCall": {
"name": "check_flight",
"args": {
"flight": "AA100"
}
},
"thoughtSignature": "<Signature A>"
}
]
}
}
Lượt 1, Bước 2 (Phản hồi của người dùng – Gửi kết quả đầu ra của công cụ) Vì lượt này của người dùng
chỉ chứa functionResponse (không có văn bản mới), nên chúng ta vẫn ở Lượt 1. Chúng ta
phải giữ nguyên <Signature_A>.
{
"role": "user",
"parts": [
{
"text": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
}
]
},
{
"role": "model",
"parts": [
{
"functionCall": {
"name": "check_flight",
"args": {
"flight": "AA100"
}
},
"thoughtSignature": "<Signature A>" //Required and Validated
}
]
},
{
"role": "user",
"parts": [
{
"functionResponse": {
"name": "check_flight",
"response": {
"status": "delayed",
"departure_time": "12 PM"
}
}
}
]
}
Lượt 1, Bước 2 (Mô hình) Mô hình hiện quyết định đặt taxi dựa trên kết quả đầu ra của công cụ trước đó.
{
"content": {
"role": "model",
"parts": [
{
"functionCall": {
"name": "book_taxi",
"args": {
"time": "10 AM"
}
},
"thoughtSignature": "<Signature B>"
}
]
}
}
Lượt 1, Bước 3 (Người dùng – Gửi kết quả đầu ra của công cụ) Để gửi thông tin xác nhận đặt taxi, chúng ta phải đưa chữ ký vào TẤT CẢ lệnh gọi hàm trong vòng lặp này
(<Signature A> + <Signature B>).
{
"role": "user",
"parts": [
{
"text": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
}
]
},
{
"role": "model",
"parts": [
{
"functionCall": {
"name": "check_flight",
"args": {
"flight": "AA100"
}
},
"thoughtSignature": "<Signature A>" //Required and Validated
}
]
},
{
"role": "user",
"parts": [
{
"functionResponse": {
"name": "check_flight",
"response": {
"status": "delayed",
"departure_time": "12 PM"
}
}
}
]
},
{
"role": "model",
"parts": [
{
"functionCall": {
"name": "book_taxi",
"args": {
"time": "10 AM"
}
},
"thoughtSignature": "<Signature B>" //Required and Validated
}
]
},
{
"role": "user",
"parts": [
{
"functionResponse": {
"name": "book_taxi",
"response": {
"booking_status": "success"
}
}
}
]
}
}
Ví dụ về lệnh gọi hàm song song
Hãy cùng xem qua ví dụ về lệnh gọi hàm song song trong đó người dùng hỏi
"Check weather in Paris and London" để xem mô hình thực hiện quy trình xác thực ở đâu.
Lượt |
Bước |
Yêu cầu của người dùng |
Phản hồi của mô hình |
FunctionResponse |
|---|---|---|---|---|
1 |
1 |
request1="Check the weather in Paris and London" |
FC1 ("Paris") + signature FC2 ("London") |
FR1 |
1 |
2 |
request 2 = request1 + FC1 ("Paris") + signature + FC2 ("London") |
text_output (no FCs) |
Không có |
Đoạn mã sau đây minh hoạ trình tự trong bảng trên.
Lượt 1, Bước 1 (Yêu cầu của người dùng)
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Check the weather in Paris and London."
}
]
}
],
"tools": [
{
"functionDeclarations": [
{
"name": "get_current_temperature",
"description": "Gets the current temperature for a given location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. San Francisco"
}
},
"required": [
"location"
]
}
}
]
}
]
}
Lượt 1, Bước 1 (Phản hồi của mô hình)
{
"content": {
"parts": [
{
"functionCall": {
"name": "get_current_temperature",
"args": {
"location": "Paris"
}
},
"thoughtSignature": "<Signature_A>"// INCLUDED on First FC
},
{
"functionCall": {
"name": "get_current_temperature",
"args": {
"location": "London"
}// NO signature on subsequent parallel FCs
}
}
]
}
}
Lượt 1, Bước 2 (Phản hồi của người dùng – Gửi kết quả đầu ra của công cụ) Chúng ta phải giữ nguyên
<Signature_A> ở phần đầu tiên đúng như đã nhận được.
[
{
"role": "user",
"parts": [
{
"text": "Check the weather in Paris and London."
}
]
},
{
"role": "model",
"parts": [
{
"functionCall": {
"name": "get_current_temperature",
"args": {
"city": "Paris"
}
},
"thought_signature": "<Signature_A>" // MUST BE INCLUDED
},
{
"functionCall": {
"name": "get_current_temperature",
"args": {
"city": "London"
}
}
} // NO SIGNATURE FIELD
]
},
{
"role": "user",
"parts": [
{
"functionResponse": {
"name": "get_current_temperature",
"response": {
"temp": "15C"
}
}
},
{
"functionResponse": {
"name": "get_current_temperature",
"response": {
"temp": "12C"
}
}
}
]
}
]
Chữ ký trong các phần không phải là functionCall
Gemini cũng có thể trả về thought_signatures trong phần cuối cùng của phản hồi
ở các phần không phải là lệnh gọi hàm.
- Hành vi: Phần nội dung cuối cùng (
text, inlineData…) do mô hình trả về có thể chứathought_signature. - Đề xuất: Bạn nên trả về các chữ ký này để đảm bảo mô hình duy trì khả năng lập luận chất lượng cao, đặc biệt là đối với các quy trình làm việc phức tạp theo hướng dẫn hoặc mô phỏng tác nhân.
- Xác thực: API không thực thi nghiêm ngặt quy trình xác thực. Bạn sẽ không nhận được lỗi chặn nếu bỏ qua các chữ ký này, mặc dù hiệu suất có thể giảm.
Lập luận bằng văn bản/trong bối cảnh (Không xác thực)
Lượt 1, Bước 1 (Phản hồi của mô hình)
{
"role": "model",
"parts": [
{
"text": "I need to calculate the risk. Let me think step-by-step...",
"thought_signature": "<Signature_C>" // OPTIONAL (Recommended)
}
]
}
Lượt 2, Bước 1 (Người dùng)
[
{ "role": "user", "parts": [{ "text": "What is the risk?" }] },
{
"role": "model",
"parts": [
{
"text": "I need to calculate the risk. Let me think step-by-step...",
// If you omit <Signature_C> here, no error will occur.
}
]
},
{ "role": "user", "parts": [{ "text": "Summarize it." }] }
]
Chữ ký để tương thích với OpenAI
Các ví dụ sau đây cho thấy cách xử lý chữ ký tư duy cho API hoàn thành cuộc trò chuyện bằng cách sử dụng khả năng tương thích với OpenAI.
Ví dụ về lệnh gọi hàm tuần tự
Đây là ví dụ về nhiều lệnh gọi hàm trong đó người dùng đặt một câu hỏi phức tạp đòi hỏi nhiều tác vụ.
Hãy cùng xem qua ví dụ về lệnh gọi hàm nhiều lượt trong đó người dùng hỏi
Check flight status for AA100 and book a taxi if delayed và bạn có thể thấy điều gì
xảy ra khi người dùng đặt một câu hỏi phức tạp đòi hỏi nhiều tác vụ.
Lượt |
Bước |
Yêu cầu của người dùng |
Phản hồi của mô hình |
FunctionResponse |
1 |
1 |
request1="Check the weather in Paris and London" |
FC1 ("Paris") + signature
|
FR1 |
1 |
2 |
request 2 = request1 + FC1 ("Paris") + signature + FC2 ("London") |
text_output
|
None |
Đoạn mã sau đây hướng dẫn bạn thực hiện trình tự đã cho.
Lượt 1, Bước 1 (Yêu cầu của người dùng)
{
"model": "google/gemini-3.1-pro-preview",
"messages": [
{
"role": "user",
"content": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
}
],
"tools": [
{
"type": "function",
"function": {
"name": "check_flight",
"description": "Gets the current status of a flight",
"parameters": {
"type": "object",
"properties": {
"flight": {
"type": "string",
"description": "The flight number to check."
}
},
"required": [
"flight"
]
}
}
},
{
"type": "function",
"function": {
"name": "book_taxi",
"description": "Book a taxi",
"parameters": {
"type": "object",
"properties": {
"time": {
"type": "string",
"description": "time to book the taxi"
}
},
"required": [
"time"
]
}
}
}
]
}
Lượt 1, Bước 1 (Phản hồi của mô hình)
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>"
}
},
"function": {
"arguments": "{\"flight\":\"AA100\"}",
"name": "check_flight"
},
"id": "function-call-1",
"type": "function"
}
]
}
Lượt 1, Bước 2 (Phản hồi của người dùng – Gửi kết quả đầu ra của công cụ)
Vì lượt này của người dùng chỉ chứa functionResponse (không có văn bản mới), nên chúng ta
vẫn ở Lượt 1 và phải giữ nguyên <Signature_A>.
"messages": [
{
"role": "user",
"content": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
},
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>" //Required and Validated
}
},
"function": {
"arguments": "{\"flight\":\"AA100\"}",
"name": "check_flight"
},
"id": "function-call-1",
"type": "function"
}
]
},
{
"role": "tool",
"name": "check_flight",
"tool_call_id": "function-call-1",
"content": "{\"status\":\"delayed\",\"departure_time\":\"12 PM\"}"
}
]
Lượt 1, Bước 2 (Mô hình)
Mô hình hiện quyết định đặt taxi dựa trên kết quả đầu ra của công cụ trước đó.
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature B>"
}
},
"function": {
"arguments": "{\"time\":\"10 AM\"}",
"name": "book_taxi"
},
"id": "function-call-2",
"type": "function"
}
]
}
Lượt 1, Bước 3 (Người dùng – Gửi kết quả đầu ra của công cụ)
Để gửi thông tin xác nhận đặt taxi, chúng ta phải đưa chữ ký vào TẤT CẢ
lệnh gọi hàm trong vòng lặp này (<Signature A> + <Signature B>).
"messages": [
{
"role": "user",
"content": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
},
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>" //Required and Validated
}
},
"function": {
"arguments": "{\"flight\":\"AA100\"}",
"name": "check_flight"
},
"id": "function-call-1d6a1a61-6f4f-4029-80ce-61586bd86da5",
"type": "function"
}
]
},
{
"role": "tool",
"name": "check_flight",
"tool_call_id": "function-call-1d6a1a61-6f4f-4029-80ce-61586bd86da5",
"content": "{\"status\":\"delayed\",\"departure_time\":\"12 PM\"}"
},
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature B>" //Required and Validated
}
},
"function": {
"arguments": "{\"time\":\"10 AM\"}",
"name": "book_taxi"
},
"id": "function-call-65b325ba-9b40-4003-9535-8c7137b35634",
"type": "function"
}
]
},
{
"role": "tool",
"name": "book_taxi",
"tool_call_id": "function-call-65b325ba-9b40-4003-9535-8c7137b35634",
"content": "{\"booking_status\":\"success\"}"
}
]
Ví dụ về lệnh gọi hàm song song
Hãy cùng xem qua ví dụ về lệnh gọi hàm song song trong đó người dùng hỏi
"Check weather in Paris and London" và bạn có thể thấy mô hình thực hiện
quy trình xác thực ở đâu.
Lượt |
Bước |
Yêu cầu của người dùng |
Phản hồi của mô hình |
FunctionResponse |
1 |
1 |
request1="Check the weather in Paris and London" |
FC1 ("Paris") + signature
|
FR1 |
1 |
2 |
request 2 = request1 + FC1 ("Paris") + signature + FC2 ("London") |
text_output
|
None |
Dưới đây là mã để hướng dẫn bạn thực hiện trình tự đã cho.
Lượt 1, Bước 1 (Yêu cầu của người dùng)
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Check the weather in Paris and London."
}
]
}
],
"tools": [
{
"functionDeclarations": [
{
"name": "get_current_temperature",
"description": "Gets the current temperature for a given location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. San Francisco"
}
},
"required": [
"location"
]
}
}
]
}
]
}
Lượt 1, Bước 1 (Phản hồi của mô hình)
{
"role": "assistant",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>" //Signature returned
}
},
"function": {
"arguments": "{\"location\":\"Paris\"}",
"name": "get_current_temperature"
},
"id": "function-call-f3b9ecb3-d55f-4076-98c8-b13e9d1c0e01",
"type": "function"
},
{
"function": {
"arguments": "{\"location\":\"London\"}",
"name": "get_current_temperature"
},
"id": "function-call-335673ad-913e-42d1-bbf5-387c8ab80f44",
"type": "function" // No signature on Parallel FC
}
]
}
Lượt 1, Bước 2 (Phản hồi của người dùng – Gửi kết quả đầu ra của công cụ)
Bạn phải giữ nguyên <Signature_A> ở phần đầu tiên đúng như đã nhận được.
"messages": [
{
"role": "user",
"content": "Check the weather in Paris and London."
},
{
"role": "assistant",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>" //Required
}
},
"function": {
"arguments": "{\"location\":\"Paris\"}",
"name": "get_current_temperature"
},
"id": "function-call-f3b9ecb3-d55f-4076-98c8-b13e9d1c0e01",
"type": "function"
},
{
"function": { //No Signature
"arguments": "{\"location\":\"London\"}",
"name": "get_current_temperature"
},
"id": "function-call-335673ad-913e-42d1-bbf5-387c8ab80f44",
"type": "function"
}
]
},
{
"role":"tool",
"name": "get_current_temperature",
"tool_call_id": "function-call-f3b9ecb3-d55f-4076-98c8-b13e9d1c0e01",
"content": "{\"temp\":\"15C\"}"
},
{
"role":"tool",
"name": "get_current_temperature",
"tool_call_id": "function-call-335673ad-913e-42d1-bbf5-387c8ab80f44",
"content": "{\"temp\":\"12C\"}"
}
]
Câu hỏi thường gặp
Làm cách nào để chuyển nhật ký từ một mô hình khác sang Gemini 3 bằng phần gọi hàm trong lượt và bước hiện tại? Tôi cần cung cấp các phần gọi hàm không do API tạo ra và do đó không có chữ ký tư duy được liên kết ?
Mặc dù bạn không nên chèn các khối gọi hàm tuỳ chỉnh vào yêu cầu, nhưng trong những trường hợp không thể tránh được (ví dụ: cung cấp thông tin cho mô hình về các lệnh gọi hàm và phản hồi do ứng dụng thực thi một cách xác định hoặc chuyển dấu vết từ một mô hình khác không bao gồm chữ ký tư duy), bạn có thể đặt các chữ ký giả sau đây của
"context_engineering_is_the_way_to_go"hoặc"skip_thought_signature_validator"trong trường chữ ký tư duy để bỏ qua quy trình xác thực.Tôi đang gửi lại các lệnh gọi hàm và phản hồi song song xen kẽ và API đang trả về lỗi 400. Vì sao lại như vậy?
Khi API trả về các lệnh gọi hàm song song "FC1 + signature, FC2", phản hồi dự kiến của người dùng là "FC1+ signature, FC2, FR1, FR2". Nếu bạn xen kẽ các lệnh gọi hàm và phản hồi này dưới dạng "FC1 + signature, FR1, FC2, FR2" thì API sẽ trả về lỗi 400.
Khi phát trực tuyến và mô hình không trả về lệnh gọi hàm, tôi không thể tìm thấy chữ ký tư duy
Trong phản hồi của mô hình không chứa FC bằng yêu cầu phát trực tuyến, mô hình có thể trả về chữ ký tư duy trong một phần có phần nội dung văn bản trống. Bạn nên phân tích cú pháp toàn bộ yêu cầu cho đến khi
finish_reasonđược mô hình trả về.
Chữ ký tư duy cho các mô hình khác nhau
Các mô hình Gemini 3 và mô hình Gemini 2.5 hoạt động khác nhau với chữ ký tư duy trong các lệnh gọi hàm:
- Nếu có các lệnh gọi hàm trong một phản hồi,
- Gemini 3 sẽ luôn có chữ ký trên phần gọi hàm đầu tiên. Bạn bắt buộc phải trả về phần đó.
- Gemini 2.5 sẽ có chữ ký trong phần đầu tiên (bất kể loại nào). Bạn có thể trả về phần đó.
- Nếu không có lệnh gọi hàm trong một phản hồi,
- Gemini 3 sẽ có chữ ký ở phần cuối cùng nếu mô hình tạo ra một tư duy.
- Gemini 2.5 sẽ không có chữ ký trong bất kỳ phần nào.
Hãy tham khảo trang Tư duy để biết thêm thông tin so sánh. Đối với các mô hình Hình ảnh Gemini 3, hãy xem phần quy trình tư duy trong hướng dẫn Tạo hình ảnh.