Công cụ Agent: Gọi hàm, Tìm kiếm và Mã nguồn

@gabrielchua
TIẾNG ANH3 ngày trước · 13 thg 7, 2026
809K
19
3
1
49

TL;DR

Gabriel Chua khám phá các khả năng công cụ mới của GPT-5.6, trình bày chi tiết cách Programmatic Tool Calling và Tool Search tối ưu hóa hiệu suất agent và quản lý ngữ cảnh.

Với GPT-5.6, chúng tôi đã phát hành Programmatic Tool Calling, đây là thời điểm thích hợp để tóm tắt lại các công cụ agent và cách giữ cho mô hình tập trung khi việc sử dụng công cụ ngày càng tăng.

Hãy hỏi một nhân viên hỗ trợ tại sao đơn hàng A-104 bị trễ, họ có thể đọc đơn hàng, gọi cho hãng vận chuyển và giải thích lý do chậm trễ. Sự trao đổi đó ẩn chứa một vòng lặp: mô hình yêu cầu một hành động, runtime thực thi nó và kết quả được trả về. Các công cụ tích hợp sẵn (Built-in tools), MCP, skills, Tool Search và Programmatic Tool Calling thay đổi những gì mô hình thấy và những gì được trả về.

1. Tool Calling 101: mô hình yêu cầu; ứng dụng thực hiện

Với một hàm do client sở hữu, mô hình không chạy code của bạn. Nó trả về tên công cụ, đối số JSON và ID cuộc gọi. Ứng dụng của bạn kiểm tra yêu cầu, chạy hàm và trả về function_call_output với cùng ID đó.

Gabriel Chua - inline image

Vòng lặp công cụ do client sở hữu: không có hành động bên ngoài nào xảy ra cho đến khi ứng dụng của bạn thực thi bước 3. Được tạo bằng GPT-Image-2 trong Codex.

Trong Python, việc trả về function_call_output sẽ trả quyền điều khiển lại cho mô hình:

python
1import json
2from openai import OpenAI
3
4client = OpenAI()
5
6def get_order(order_id): return {"order_id": order_id, "promised_date": "2026-07-13"}
7
8order_tool = {
9 "type": "function", "name": "get_order", "strict": True,
10 "description": "Trả về ngày giao hàng đã hứa cho một đơn hàng.",
11 "parameters": {
12 "type": "object",
13 "properties": {"order_id": {"type": "string"}},
14 "required": ["order_id"], "additionalProperties": False,
15 },
16 "output_schema": {
17 "type": "object",
18 "properties": {
19 "order_id": {"type": "string"}, "promised_date": {"type": "string"},
20 },
21 "required": ["order_id", "promised_date"], "additionalProperties": False,
22 },
23}
24
25first = client.responses.create(
26 model="gpt-5.6", tools=[order_tool], input="Tại sao đơn hàng A-104 bị trễ?",
27 tool_choice={"type": "function", "name": "get_order"},
28)
29call = next(item for item in first.output if item.type == "function_call")
30result = get_order(**json.loads(call.arguments))
31
32final = client.responses.create(
33 model="gpt-5.6",
34 tools=[order_tool],
35 input=[*first.output, {
36 "type": "function_call_output",
37 "call_id": call.call_id,
38 "output": json.dumps(result),
39 }],
40)
41print(final.output_text)

Bộ khung (harness) lặp lại vòng lặp này cho đến khi mô hình trả về một thông báo cuối cùng. Các lược đồ nghiêm ngặt (strict schemas) giữ cho các đối số được định dạng tốt; trình thực thi vẫn kiểm tra quyền.

2. Việc thực thi công cụ có thể chạy ở những nơi khác nhau

Các công cụ tích hợp sẵn, bao gồm tìm kiếm web, tìm kiếm tệp và shell được lưu trữ, có thể chạy trong cơ sở hạ tầng của OpenAI. Một máy chủ MCP từ xa hiển thị và chạy các công cụ từ xa; Responses hỗ trợ các máy chủ này và các bộ kết nối do OpenAI duy trì, theo mặc định yêu cầu phê duyệt trước khi chia sẻ dữ liệu.

Một skill đóng gói các hướng dẫn và tệp. Đính kèm nó vào hosted shell và mô hình có thể làm theo quy trình của nó hoặc chạy các tập lệnh của nó. Đầu tiên, nó thấy tên, mô tả và đường dẫn của skill, sau đó đọc SKILL.md khi được chọn.

python
1carrier_mcp = {
2 "type": "mcp",
3 "server_label": "carrier",
4 "server_url": "https://example.com/mcp",
5 "allowed_tools": ["track_package"],
6 "require_approval": "always",
7}
8incident_shell = {
9 "type": "shell",
10 "environment": {
11 "type": "container_auto",
12 "skills": [{"type": "skill_reference", "skill_id": "skill_..."}],
13 },
14}
15
16response = client.responses.create(
17 model="gpt-5.6",
18 tools=[carrier_mcp, incident_shell],
19 input="Điều tra lý do đơn hàng A-104 bị trễ bằng skill xử lý sự cố.",
20)

Bộ khung hợp nhất các bề mặt này: MCP hiển thị các công cụ từ xa, skills cung cấp các quy trình và tệp, và bộ khung kiểm soát nơi các cuộc gọi chạy.

3. Tool Search: khi ngữ cảnh trở thành ràng buộc

Mọi định nghĩa công cụ hiển thị đều chiếm ngữ cảnh. Tên, mô tả và lược đồ sử dụng token đầu vào, các công cụ tương tự trở nên khó phân biệt hơn và một danh mục MCP lớn trở thành một prompt lớn.

Tool Search cho phép các mô hình GPT-5.4 trở lên tương thích tải các định nghĩa hoãn lại chỉ khi cần:

python
1shipping = {
2 "type": "namespace", "name": "shipping",
3 "description": "Công cụ theo dõi đơn hàng và giao hàng.",
4 "tools": [{
5 "type": "function", "name": "get_delivery_eta",
6 "description": "Trả về thời gian dự kiến đến (ETA) cho một đơn hàng.",
7 "defer_loading": True,
8 "parameters": {
9 "type": "object", "required": ["order_id"],
10 "properties": {"order_id": {"type": "string"}},
11 "additionalProperties": False,
12 },
13 }],
14}
15
16response = client.responses.create(
17 model="gpt-5.6",
18 input="Khi nào đơn hàng A-104 sẽ đến?",
19 tools=[shipping, {"type": "tool_search"}],
20)

Tool Search được lưu trữ (Hosted Tool Search) chọn từ các công cụ được khai báo trong yêu cầu; tìm kiếm do client thực thi có thể trả về các công cụ cho tenant hoặc dự án hiện tại. Tìm kiếm thêm một bước, vì vậy các danh mục nhỏ có thể thu được ít lợi ích. Một hàm bị hoãn vẫn hiển thị tên và mô tả của nó, trong khi một namespace hoặc máy chủ MCP có thể bắt đầu bằng một mô tả ngắn. Các công cụ đã tải được thêm vào để bảo toàn tiền tố bộ nhớ đệm (cache prefix). Skills hoãn các hướng dẫn và tệp; Tool Search hoãn các lược đồ có thể gọi được.

4. Programmatic Tool Calling cho công việc đa công cụ có thể dự đoán trước

Các cuộc gọi trực tiếp trả về từng kết quả cho mô hình. Điều này hữu ích khi một kết quả thay đổi quyết định tiếp theo, nhưng các phép nối, bộ lọc và tra cứu song song đơn giản có thể lấp đầy ngữ cảnh với dữ liệu mà code có thể giảm bớt.

Programmatic Tool Calling cho phép GPT-5.6 viết JavaScript chạy trong một runtime V8 mới, biệt lập. V8 chạy JavaScript bên trong Chrome, nhưng đây không phải là trình duyệt hay Node.js. Nó hỗ trợ await cấp cao nhất, vòng lặp, điều kiện và các cuộc gọi song song, không cài đặt gói, không có quyền truy cập mạng trực tiếp, hệ thống tệp đa năng, tiến trình con, console hoặc trạng thái liên tục.

Gabriel Chua - inline image

Ba cuộc gọi trực tiếp so với ba cuộc gọi song song trong runtime V8 biệt lập. Được tạo bằng GPT-Image-2 trong Codex.

Khi một chương trình đến một hàm do client sở hữu, nó sẽ tạm dừng trong khi ứng dụng của bạn chạy cuộc gọi; việc trả về call_idcaller của nó sẽ tiếp tục chương trình. carrier_mcp cũng có thể tạm dừng để phê duyệt và output_schema cho JavaScript biết trường nào nó có thể kiểm tra.

python
1for tool in (order_tool, carrier_mcp):
2 tool["allowed_callers"] = ["programmatic"]
3
4response = client.responses.create(
5 model="gpt-5.6",
6 tools=[
7 order_tool,
8 carrier_mcp,
9 {"type": "programmatic_tool_calling"},
10 ],
11 input="So sánh đơn hàng A-104 với trạng thái hãng vận chuyển và trả về bằng chứng chậm trễ.",
12)

Các chương trình có thể gọi các công cụ hàm và tùy chỉnh, MCP, apply_patch, shell và trình thông dịch code, nhưng không thể gọi tìm kiếm web hoặc tìm kiếm tệp. Tool Search cấp cao nhất phải tải một công cụ bị hoãn trước khi chương trình bắt đầu; một chương trình đang chạy không thể tìm kiếm công cụ.

Giữ các cuộc gọi trực tiếp khi bước tiếp theo cần sự phán đoán, phê duyệt, trích dẫn hoặc tác dụng phụ của mô hình. Sử dụng một chương trình khi các quy tắc rõ ràng cho phép code trả về kết quả nhỏ hơn mà không làm mất bằng chứng. Thực thi được lưu trữ thay đổi nơi công việc chạy, Tool Search thay đổi định nghĩa nào đi vào ngữ cảnh và các cuộc gọi theo chương trình thay đổi kết quả nào được trả về. Kết hợp chúng khi một bản đánh giá (eval) cho thấy tính đúng đắn được duy trì trong khi token, độ trễ hoặc chi phí được cải thiện.

Phần thưởng: giữ các vòng lặp công cụ dài trên một kết nối

Nếu một agent liên tục chuyển đổi giữa mô hình và các công cụ do client sở hữu, Chế độ WebSocket của Responses có thể giảm chi phí tiếp tục. Socket kết nối bộ khung của bạn với Responses; nó không làm cho các công cụ chạy nhanh hơn. Nó chấp nhận các trường response.create tương tự cho các hàm, MCP, Tool Search và Programmatic Tool Calling, mặc dù tài liệu không đo điểm chuẩn cho mọi kết hợp. OpenAI đã quan sát thấy tốc độ thực thi nhanh hơn tới 40% trong các bản triển khai có 20 cuộc gọi trở lên, vì vậy hãy đo lường quy trình làm việc của bạn.

Hãy thử với agent của bạn

Chụp một Appshot của bài viết này, mở dự án agent của bạn trong Codex và dán:

Sử dụng bài viết này và codebase hiện tại để nâng cấp đường dẫn công cụ của agent này. Nhóm các công cụ lớn hoặc ít được sử dụng và bật Tool Search để hoãn chúng. Tìm các giai đoạn có giới hạn (bounded stages) nơi Programmatic Tool Calling có thể chạy các cuộc gọi song song và trả về kết quả nhỏ gọn. Giữ các quyết định ngữ nghĩa, phê duyệt, trích dẫn và tác dụng phụ dưới dạng các cuộc gọi trực tiếp. So sánh cả hai đường dẫn về tính đúng đắn, phạm vi bằng chứng, tỷ lệ thành công của công cụ, token, độ trễ, số lần thử lại và chi phí trước khi thay đổi định tuyến sản xuất.

Viết lại trong YouMind

Turn one viral article into a full content workflow

Collect the source, decode the pattern, create assets, draft the story, and distribute from one AI workspace.

Explore YouMind
Dành cho nhà sáng tạo

Biến Markdown của bạn thành bài viết 𝕏 gọn gàng

Khi bạn đăng bài viết dài của riêng mình, việc định dạng hình ảnh, bảng và khối mã cho 𝕏 rất mệt mỏi. YouMind biến cả bản nháp Markdown thành một bài viết 𝕏 gọn gàng, sẵn sàng để đăng.

Thử Markdown sang 𝕏

Thêm pattern để giải mã

Bài viết viral gần đây

Khám phá thêm bài viết viral