Gọi hàm truyền thống có một hình dạng mà mọi nhà phát triển agent đều thuộc nằm lòng. Mô hình yêu cầu một lệnh gọi công cụ, ứng dụng của bạn thực thi nó, bạn nối kết quả vào, và mô hình yêu cầu lệnh gọi tiếp theo. Bốn công cụ, bốn vòng đi. Bốn mươi công cụ, bốn mươi. Mỗi lượt đều tăng độ trễ mạng và chi phí ngữ cảnh được tính lại. Khi OpenAI đưa GPT-5.6 ra mắt rộng rãi vào ngày 9 tháng 7 năm 2026, họ đã cung cấp một cách để thoát khỏi vòng lặp đó: gọi công cụ theo chương trình trong Responses API.
Ý tưởng rất trực tiếp. Thay vì trả về các lệnh gọi công cụ từng cái một để mã của bạn chạy trong một vòng lặp, mô hình tự viết mã JavaScript để điều phối nhiều lệnh gọi công cụ. Mã đó thực thi trong một môi trường V8 runtime biệt lập không có truy cập mạng. Các công cụ của bạn vẫn là cách duy nhất để mã có thể chạm đến thế giới bên ngoài, vì vậy ranh giới bảo mật mà bạn đã xem xét với lệnh gọi hàm của OpenAI vẫn giữ nguyên. Cái thay đổi là sự điều phối: các vòng lặp, điều kiện và tổng hợp mà trước đây nằm trong ứng dụng của bạn.
Sự thay đổi này cũng ảnh hưởng đến phía API của bạn. Mọi công cụ bạn công khai giờ đây là một hợp đồng mà mô hình có thể gọi hàng chục lần thay vì chỉ một lệnh gọi cẩn thận mỗi lượt. Độ chính xác của schema, hình dạng lỗi và hành vi tốc độ quan trọng hơn so với tuần trước. Bài viết này bao gồm những gì đã ra mắt, tại sao vòng lặp cũ lại gây khó khăn, những gì vẫn giữ nguyên và cách chuẩn bị các điểm cuối công cụ của bạn bằng Apidog trước khi giao chúng cho mô hình.
TL;DR
- GPT-5.6 ra mắt rộng rãi vào ngày 9 tháng 7 năm 2026. Tại thời điểm ra mắt, Responses API đã có thêm tính năng gọi công cụ theo chương trình, được xác nhận trong tài liệu dành cho nhà phát triển của OpenAI.
- Thay vì một lệnh gọi công cụ mỗi vòng đi, mô hình viết JavaScript để tạo ra các vòng lặp, điều kiện và tổng hợp trên các công cụ của bạn.
- Mã được tạo chạy trong một sandbox V8 biệt lập không có truy cập mạng. Các định nghĩa công cụ của bạn vẫn là con đường duy nhất đến các hệ thống bên ngoài, vì vậy ranh giới bảo mật không thay đổi.
- Độ trễ và chi phí token ngừng tăng theo số lượng lệnh gọi công cụ, điều mà các vòng lặp agent truyền thống thường gặp phải.
- Tính năng này mới ra mắt vài ngày; các tham số yêu cầu chính xác và giới hạn nằm trong tài liệu tham khảo API của OpenAI, vì vậy hãy đọc kỹ trước khi bạn xây dựng.
- Kiểm tra và giả lập từng điểm cuối công cụ trước khi mô hình điều phối nó; một sự mơ hồ về schema sẽ trở thành một lỗi lặp đi lặp lại trong một vòng lặp.
Những gì ra mắt vào ngày 9 tháng 7
GPT-5.6 ra mắt dưới dạng một gia đình ba cấp: gpt-5.6-sol cho suy luận sâu nhất, gpt-5.6-terra cho công việc cân bằng và gpt-5.6-luna cho khối lượng công việc nhanh, hiệu quả về chi phí. Biệt danh trần gpt-5.6 chuyển hướng đến Sol. Cả ba đều tự phục vụ thông qua API mà không cần kiểm soát kế hoạch, sau hai tuần xem trước giới hạn đã kết thúc khi hạn chế truy cập được dỡ bỏ vào ngày 8 tháng 7.
Gia đình mô hình nhận được phần lớn sự chú ý trong ngày ra mắt, nhưng bề mặt API mới là câu chuyện lớn hơn đối với các nhà xây dựng agent. Theo tin tức ra mắt của MarkTechPost và tài liệu riêng của OpenAI, Responses API đã có bốn tính năng tại thời điểm ra mắt: gọi công cụ theo chương trình, phiên bản beta đa tác nhân, suy luận được duy trì qua các lượt và cài đặt chi tiết thị giác bảo toàn kích thước hình ảnh gốc.
Gọi công cụ theo chương trình là tiêu đề chính. OpenAI mô tả nó là mô hình viết JavaScript để điều phối các lệnh gọi công cụ, được thực thi trong một môi trường V8 runtime biệt lập không có truy cập mạng. Mô hình không còn là người yêu cầu từng lượt mà trở thành tác giả của lớp điều phối.
Vòng lặp mà lệnh gọi công cụ theo chương trình thay thế
Đây là lệnh gọi hàm truyền thống đối với Responses API, hình dạng mà hầu hết các agent sản xuất sử dụng ngày nay:
import OpenAI from "openai";
const client = new OpenAI();
const tools = [
{
type: "function",
name: "get_flight_status",
description: "Return live status for a flight by IATA flight number.",
parameters: {
type: "object",
properties: {
flight_number: {
type: "string",
description: "IATA flight number, for example SQ317"
}
},
required: ["flight_number"]
}
}
];
let response = await client.responses.create({
model: "gpt-5.6",
input: "Which of these 12 flights are delayed: SQ317, BA15, UA857...",
tools
});
Mô hình không thể trả lời nếu không có dữ liệu, vì vậy nó phát ra một lệnh gọi hàm. Mã của bạn thực hiện tra cứu, nối một mục function_call_output và gọi lại API:
// Một vòng đi cho mỗi lệnh gọi công cụ. Vòng lặp này là chi phí.
while (hasFunctionCalls(response)) {
const outputs = await executeToolCalls(response); // mã của bạn, hạ tầng của bạn
response = await client.responses.create({
model: "gpt-5.6",
previous_response_id: response.id,
input: outputs,
tools
});
}
Đối với 12 chuyến bay, vòng lặp đó có thể chạy 12 lần, và mỗi lần lặp đều phải trả giá gấp đôi. Đầu tiên là độ trễ: một vòng đi mạng hoàn chỉnh đến OpenAI cộng với thời gian mô hình, được tuần tự hóa, vì lệnh gọi N+1 phụ thuộc vào việc mô hình thấy kết quả N. Thứ hai là token: kết quả công cụ tích lũy trong ngữ cảnh, vì vậy các lần lặp sau xử lý lại mọi thứ mà các lần lặp trước đã tạo ra. Nối các agent lại với nhau và sự phức tạp sẽ trở nên tồi tệ: một agent năm bước mà mỗi bước bao gồm một vòng lặp mười lệnh gọi là năm mươi lần gọi mô hình được tính phí.
Không có phần nào của vòng lặp đó là thông minh. Nó chỉ là đường ống, và cho đến tuần này mô hình không có cách nào để tự viết đường ống.
Chế độ theo chương trình thay đổi hình dạng như thế nào
Với lệnh gọi công cụ theo chương trình, mô hình trả lời câu hỏi về chuyến bay khác: nó viết một chương trình JavaScript ngắn lặp qua mười hai số hiệu chuyến bay, gọi get_flight_status cho từng chuyến, lọc ra các chuyến bị trễ, sắp xếp theo thời gian trễ và trả về kết quả tổng hợp. Sandbox thực thi chương trình đó. Các công cụ của bạn vẫn thực hiện công việc thực tế; luồng điều khiển xung quanh chúng giờ đây thuộc về mô hình.
Ba đặc tính làm cho điều này khả thi chứ không đáng báo động:
- Môi trường runtime được biệt lập. OpenAI chạy JavaScript được tạo trong một sandbox V8 không có truy cập mạng. Mã không thể lấy URL, mở socket hoặc trích xuất bất cứ thứ gì một mình.
- Công cụ là lối thoát duy nhất. Mọi hiệu ứng bên ngoài đều được định tuyến thông qua bề mặt công cụ mà bạn đã định nghĩa. Nếu bạn không công khai công cụ
delete_record, không có mã nào được tạo có thể xóa một bản ghi. - Luồng điều khiển trở nên biểu cảm. Vòng lặp, điều kiện, thoát sớm, tổng hợp kết quả: các mẫu trước đây mất N vòng đi giờ đây xảy ra trong một chu kỳ phản hồi duy nhất.
| Lệnh gọi hàm truyền thống | Gọi công cụ theo chương trình | |
|---|---|---|
| Ai viết luồng điều khiển | Ứng dụng của bạn | Mô hình, dưới dạng JavaScript |
| Vòng đi cho N lệnh gọi công cụ | N, tuần tự | Một chu kỳ phản hồi |
| Nơi điều phối chạy | Hạ tầng của bạn | Sandbox V8 biệt lập, không mạng |
| Cách công cụ thực thi | Mã của bạn gọi chúng | Vẫn thông qua bề mặt công cụ đã khai báo của bạn |
| Ranh giới bảo mật | Định nghĩa công cụ | Định nghĩa công cụ, không thay đổi |
Những gì vẫn giữ nguyên
Bạn vẫn định nghĩa công cụ với tên, mô tả và tham số JSON Schema, chính xác như trong mã ở trên. Mô hình chỉ có thể tạo các lệnh gọi đến các công cụ bạn đã khai báo, điều này có nghĩa là câu hỏi "agent này có thể làm gì với hệ thống của tôi" có cùng câu trả lời như trước: bất cứ điều gì bề mặt công cụ của bạn cho phép, và không gì khác.
Chất lượng Schema giờ đây quan trọng hơn, không kém hơn. Trong vòng lặp cổ điển, một mô tả tham số mơ hồ tạo ra một lệnh gọi xấu mà bạn có thể bắt và sửa trước vòng đi tiếp theo. Trong chế độ lập trình, sự mơ hồ tương tự có thể được tích hợp vào một vòng lặp và lặp lại qua mọi lần lặp trước khi bạn thấy một kết quả duy nhất. Các thói quen bạn đã xây dựng cho đầu ra có cấu trúc chuyển trực tiếp: kiểu dữ liệu chặt chẽ, enum cho các tập hợp kín, mô tả nêu rõ đơn vị và định dạng, các trường bắt buộc phải thực sự bắt buộc.
Giới hạn và câu hỏi mở
Khả năng này mới ra mắt vài ngày. Một vài cảnh báo trước khi bạn xây dựng lại ngăn xếp agent của mình xung quanh nó:
- Các tham số yêu cầu chính xác, giới hạn thực thi và hành vi hết thời gian chờ thuộc về tài liệu tham khảo API và hướng dẫn mô hình của OpenAI. Tên tham số có thể thay đổi trong quá trình hoàn thiện sau bất kỳ lần ra mắt GA nào, vì vậy hãy đọc tài liệu tham khảo trước khi bạn viết mã cho tính năng này.
- Gỡ lỗi là một bề mặt mới. Khi điều phối nằm trong kho lưu trữ của bạn, bạn có thể đặt điểm dừng; giờ đây một phần của luồng điều khiển được tạo mới cho mỗi yêu cầu. Ghi nhật ký chuỗi lệnh gọi công cụ mà sandbox thực hiện trở thành một nhiệm vụ quan sát cốt lõi.
- Chưa có lịch sử sản xuất nào. Ghi chú ngày đầu tiên của Simon Willison về GPT-5.6 là một hồ sơ tốt về những gì kiểm tra độc lập đưa ra; hãy mong đợi những điểm yếu xuất hiện ở đó trước khi tài liệu chính thức đề cập đến chúng.
- Thứ tự triển khai hợp lý: bắt đầu với các công cụ chỉ đọc, theo dõi sự điều phối được tạo, xác minh việc tính toán token so với vòng lặp cũ của bạn, và chỉ sau đó mới công khai các công cụ có tác dụng phụ.
Các công cụ của bạn giờ đây là một API mà mã của người khác gọi
Theo lệnh gọi hàm truyền thống, một công cụ được gọi một lần mỗi vòng đi, với một vòng lặp do con người viết mã quyết định tốc độ và thứ tự. Theo lệnh gọi công cụ theo chương trình, mã được tạo gọi các công cụ của bạn theo đợt, phân nhánh dựa trên phản hồi của chúng và tổng hợp đầu ra của chúng. Mỗi công cụ là một hợp đồng API được tiêu thụ bởi một client do máy viết mà bạn không bao giờ xem xét trước khi nó chạy.
Điều đó nâng cao tiêu chuẩn cho bốn điều:
- Độ chính xác của Schema. Nêu rõ đơn vị, định dạng và phạm vi trong mọi mô tả tham số. Một định dạng ngày tháng mơ hồ không còn là một lệnh gọi xấu; nó là một vòng lặp của chúng.
- Hình dạng lỗi. Mã được tạo sẽ phân nhánh dựa trên các lỗi. Một công cụ trả về 200 với một thông báo lỗi được chôn trong một chuỗi sẽ gây hiểu lầm cho bất kỳ điều phối nào được viết dựa trên schema của bạn. Trả về mã trạng thái trung thực và các thân lỗi có cấu trúc.
- Tính bất biến và hành vi tốc độ. Mười hai lệnh gọi trước đây đến trong một phút giờ đây có thể đến trong một đợt. Biết điểm cuối của bạn làm gì theo mẫu đó trước khi mô hình tự tìm ra cho bạn.
- Độ trễ. Một công cụ mất tám giây có thể chấp nhận được mỗi lượt. Trong một vòng lặp mười hai lần lặp, nó xác định thời gian phản hồi của bạn.
Đây là nơi một workbench API thực sự phát huy tác dụng. Định nghĩa hoặc nhập đặc tả điểm cuối của từng công cụ, gửi các yêu cầu kiểm thử đến nó và xác nhận schema phản hồi khớp với những gì định nghĩa công cụ của bạn hứa hẹn. Sau đó đi một bước xa hơn: giả lập API công cụ để bạn có thể thực hiện điều phối với dữ liệu giả định có thể dự đoán mà không cần chạm vào sản xuất. Tải xuống Apidog và máy chủ giả lập tích hợp của nó sẽ phục vụ các phản hồi theo schema cho mọi điểm cuối bạn đã định nghĩa, để bạn có thể giao cho mô hình một bề mặt công cụ đầy đủ và xem cách nó điều phối trước khi chạm vào bất kỳ bản ghi thực nào.
Tóm tắt các tính năng GA khác
Gọi công cụ theo chương trình không ra mắt một mình. Hai bổ sung API Responses liền kề cũng quan trọng ở đây:
- Đa tác nhân, ở phiên bản beta: thực thi tác nhân phụ song song được quản lý bởi API. Giai đoạn đầu, đáng theo dõi hơn là đặt cược.
- Suy luận được duy trì: ngữ cảnh suy luận được tái sử dụng qua các lượt thông qua
reasoning.context, vì vậy các phiên agent dài không cần phải suy luận lại các kết luận tương tự mỗi lượt.
Cả hai đều kết hợp với gọi công cụ theo chương trình: một agent giữ suy luận của nó qua các lượt và tự viết điều phối của riêng nó sẽ làm ít công việc dư thừa hơn nhiều cho mỗi tác vụ.
Gọi công cụ theo chương trình so với chế độ Ultra
Việc ra mắt cũng mang đến chế độ Ultra, và hai tính năng này thường bị nhầm lẫn vì cả hai đều làm được nhiều hơn mỗi yêu cầu. Chúng giải quyết các điểm nghẽn khác nhau.
Ultra là một cài đặt đa tác nhân chạy bốn tác nhân song song theo mặc định, cố ý tiêu tốn nhiều token hơn để giảm thời gian thực tế; theo OpenAI, nó nâng Terminal-Bench 2.1 từ 88,8% lên 91,9%. Nó có sẵn trong ChatGPT Work trên các gói Pro và Enterprise, và trong Codex từ gói Plus trở lên. Gọi công cụ theo chương trình là một khả năng API trong đó một tác nhân điều phối các công cụ của nó trong mã. Ultra song song hóa suy nghĩ; gọi công cụ theo chương trình rút gọn các vòng đi thực thi. Phân tích đầy đủ nằm trong bài viết chế độ Ultra của GPT-5.6 của chúng tôi, nhưng phiên bản ngắn gọn: nếu điểm nghẽn của bạn là độ trễ gọi công cụ, bạn muốn gọi công cụ theo chương trình; nếu đó là thời gian cân nhắc cho các vấn đề khó khăn, bạn muốn Ultra.
FAQ
Tôi có cần viết lại các định nghĩa công cụ hiện có của mình không?
Không. Các công cụ giữ nguyên hình dạng JSON Schema như đã hiển thị trong mã ở trên, và các định nghĩa được viết cho lệnh gọi hàm truyền thống vẫn được sử dụng. Công việc đáng làm là thắt chặt chúng: thêm enum, định dạng trạng thái và làm cho mô tả đủ cụ thể để mã được tạo không thể hiểu sai chúng.
JavaScript được tạo có thể truy cập internet không?
Không. Mã chạy trong một môi trường V8 runtime biệt lập không có truy cập mạng, và các công cụ đã khai báo của bạn là cách duy nhất để nó ảnh hưởng đến bất cứ điều gì bên ngoài sandbox. Điều đó làm cho bề mặt công cụ của bạn trở thành toàn bộ mô hình rủi ro, vì vậy hãy kiểm tra các công cụ bạn công khai với sự cẩn trọng tương tự như đối với một API công khai.
Những mô hình GPT-5.6 nào hỗ trợ gọi công cụ theo chương trình?
OpenAI tài liệu hóa nó như một bề mặt API Responses cho gia đình GPT-5.6, và cả ba cấp (gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna) đều tự phục vụ cho bất kỳ tài khoản API nào. Kiểm tra tài liệu tham khảo API để biết chi tiết cấp độ trước khi cam kết sử dụng một. Để thiết lập khóa và hướng dẫn yêu cầu đầu tiên, hãy xem cách sử dụng API GPT-5.6.
Điều này khác với code interpreter như thế nào?
Code interpreter chạy mã như là đầu ra cuối cùng: phân tích, biểu đồ, chuyển đổi tệp. Gọi công cụ theo chương trình tạo ra mã mà công việc duy nhất của nó là điều phối các công cụ đã khai báo của bạn; đầu ra cuối cùng là kết quả công cụ tổng hợp, chứ không phải bản thân mã.
Điều này đặt bạn vào vị trí nào
Vòng lặp vòng đi là phần ít thú vị nhất của mọi agent bạn đã triển khai, và GPT-5.6 đã biến nó thành tùy chọn. Việc điều phối đã chuyển sang mô hình; trách nhiệm về các API công cụ sạch, chính xác, hoạt động tốt đã chuyển sang bạn, với trọng lượng lớn hơn trước đây.
Bước tiếp theo là cụ thể. Chọn một quy trình làm việc nặng về đọc, viết hoặc thắt chặt các schema công cụ cần thiết, và đưa từng điểm cuối qua client API và máy chủ giả lập của Apidog cho đến khi hợp đồng giữ vững dưới các lệnh gọi theo đợt và đầu vào xấu. Khi mô hình bắt đầu viết mã dựa trên các công cụ của bạn, bạn muốn mã đó đọc từ một bề mặt mà bạn đã kiểm thử.
