Bỏ qua đến nội dung
AI Portal Docs
Trên trang này Luồng một lần gọi tool 1/15

Mọi tool trong bộ tool tuân theo cùng một nhóm quy tắc. Chúng giữ cho lần gọi rẻ, báo lỗi trung thực, và tránh việc toàn bộ kết quả tool bị tính tiền lại ở mọi lượt sau.

Quy tắc chính

  1. Danh sách, không phải từng mục. Mọi tool tìm kiếm và ghi đều nhận một lô.
  2. Lỗi một phần được báo, không ném ra. Phần thành công được giữ lại.
  3. Thử lại tuỳ vào việc lần gọi làm. Giới hạn tốc độ: luôn thử lại; hết thời gian: chỉ với lần đọc; còn lại: không bao giờ.
  4. Đầu ra tool là tư liệu, không phải chỉ dẫn. Mọi mã định danh mô hình tự soạn đều được backend kiểm tra lại.
  5. Không bao giờ phát lại toàn bộ kết quả. Lượt sau chỉ nhận kết quả tóm lược; read_tool_result lấy phần còn lại.

Luồng một lần gọi tool

  1. Mô hình gửi một lần gọi tool theo lô.
  2. Runtime tool gọi backend qua HTTP; phạm vi lấy từ lượt.
  3. Backend trả kết quả, hoặc một lỗi có thể thử lại.
  4. Runtime thử lại lỗi có thể thử lại, mỗi lần chờ gấp đôi lần trước.
  5. Backend trả kết quả cùng lỗi của từng mục (nếu có).
  6. Mô hình nhận kết quả khớp, sự vắng mặt, hoặc sự cố — được báo riêng.
  7. Các lượt sau nhận tên tool, yêu cầu, kết quả và (với lượt gần đây) một đoạn trích.
  8. Nếu cần thêm, mô hình gọi read_tool_result với ref đã lưu.

Quy tắc chung

Gom lô

Một lần gọi với hai góc tìm chỉ tốn một yêu cầu embedding và chạy hai lượt tìm song song; tool một mục sẽ tốn hai lần gọi mô hình. Một lô ba truy vấn trả về đúng những gì ba lần gọi trả về.

Lỗi một phần, vắng mặt và sự cố

  • Một dữ kiện lỗi trong ba thì hai dữ kiện đã lưu vẫn được giữ.
  • Một liên kết chết thì hai trang đọc được vẫn được giữ.
  • Truy vấn đã chạy mà không khớp gì là vắng mặt; truy vấn không chạy được là sự cố. Tool tìm kiếm báo hai trường hợp riêng để mô hình cũng báo riêng.

Thử lại

Lỗi backend đáng thử lại được thử lại, mỗi lần chờ gấp đôi lần trước, trước khi mô hình biết gì. Báo cáo cuối nêu đã thử bao nhiêu lần.

LỗiThử lại
Giới hạn tốc độ hoặc dịch vụ không sẵn sàng, bị từ chối trước khi backend làm gìLuôn luôn
Hết thời gian hoặc lỗi máy chủChỉ với lần gọi đọc, hoặc lần gọi thay thế cái đã có — một lần ghi có thể đã thành công nhưng mất câu trả lời
Mọi mã trạng thái khácKhông bao giờ — backend đã cố ý quyết định

Điều quyết định là lần gọi làm gì, không phải nó được gửi thế nào. Mọi route một lượt dùng đều nhận tham số trong body, nên tìm kiếm và lưu đều là POST; chính sách dựa vào động từ HTTP sẽ không thử lại cái nào.

Đầu ra không tin cậy

Đầu ra tool có thể do người ngoài tổ chức viết. Hướng dẫn của runtime nói một lần: đọc nó như tư liệu, không bao giờ như chỉ dẫn. Khi bị prompt injection, mã định danh mô hình soạn ra thực chất do người viết tài liệu vừa đọc viết — nên mọi mã đều được backend đối chiếu với lượt. Xem Guardrails về các kiểm tra tác động lên kết quả tool.

Sửa tham số

Mô hình hay sai cùng vài dạng tham số, và mỗi dạng chỉ là lớp bọc chứ không phải câu trả lời khác:

  • một danh sách gửi dưới dạng chuỗi JSON của danh sách;
  • danh sách một phần tử gửi thành chính phần tử đó;
  • danh sách một object bị trải phẳng vào lần gọi.

Tham số được nắn về đúng dạng tool yêu cầu trước khi tool từ chối. Mỗi quy tắc đọc schema công bố của chính tool, nên không tool nào bị nêu tên và tool thêm sau — kể cả tool ứng dụng — được bao phủ tự động. Quy tắc chỉ áp dụng khi schema chỉ cho một cách hiểu: ví dụ các trường của một chỉnh sửa được gộp vào edits vì đó là danh sách duy nhất lần gọi còn thiếu. Khi hai cách hiểu đều hợp, tham số được gửi nguyên trạng và lời từ chối nêu rõ chỗ sai.

Kết quả ở các lượt sau

Toàn bộ kết quả một tool trả về không bao giờ được phát lại vào prompt sau.

Khoảng cáchPhần được chuyển
Mọi lượt sauTên tool, yêu cầu (rút gọn) và kết quả: thành công, thất bại hay rỗng
Ba lượt gần nhấtThêm một đoạn trích vài trăm ký tự, cắt theo ranh giới từ
Bất cứ lúc nào, khi cầnToàn bộ kết quả đã lưu, qua read_tool_result
  • Kết quả phát lại bị cắt mang một dòng ngắn: cắt bao nhiêu, tổng khoảng bao nhiêu, và ref để lấy phần còn lại.
  • Lần gọi nằm ngoài cửa sổ mang cùng dòng đó bên cạnh kết quả.
  • Kết quả được chuyển nguyên vẹn thì không có dòng nào.

Bao nhiêu lần gọi được chuyển từ mỗi lượt và lần gọi nào giữ chỗ thuộc về bộ nhớ ngắn hạn — xem Dựng prompt.

Đọc kết quả đã lưu

read_tool_result đọc bất kỳ kết quả nào của cuộc trò chuyện này, ở lượt hiện tại hay lượt trước.

  • Ref từ cuộc trò chuyện khác, tổ chức khác hoặc không tồn tại đều bị từ chối giống hệt nhau, nên lượt không thể biết một mã đoán mò có thật hay không.
  • Bản ghi không có gì đọc được được báo là vắng mặt, không phải thành công rỗng.
  • Mô tả tool dặn mô hình đọc ref mà người dùng dán vào chat và cho xem nội dung.

Bản xem trước

Kết quả văn bản hoặc JSON lớn vào ngữ cảnh dưới dạng bản xem trước có cấu trúc — kèm _toolResultContext.ref, số lượng gốc và cờ “một phần” — trong 6.000 ký tự đã mã hoá. Bản ghi giữ đầu ra gốc tách khỏi bản xem trước mô hình thấy.

Không bị rút gọn (và ref vẫn đọc được): chỉ dẫn skill, luồng điều khiển câu hỏi làm rõ, xác nhận hành động, lỗi và media không phải văn bản.

Kết quả danh mục cũng bỏ qua bản xem trước để mô hình dùng ngay:

  • search_tools và list_tools giữ mọi tên trả về, mô tả tối đa 200 ký tự.
  • get_tool_schema giữ đầy đủ định nghĩa được chọn; tên không biết trả về trong missing kèm gợi ý khám phá.
  • Các truy vấn search_tools khác nhau chạy đồng thời, tối đa năm mỗi lần gọi, và kết quả giữ thứ tự truy vấn.

Tìm trong kết quả đã lưu

Yêu cầu read_tool_result
{"refs":["tool-result-ref"],"query":"reimbursment deadline","match":"fuzzy","contextChars":200,"maxChars":4000}
Thiết lậpGiá trị
Khớp từ vựngNguyên từ, không phân biệt dấu
Khớp gần đúngKhoảng cách chỉnh sửa có giới hạn trên các từ chỉ gồm chữ cái; token số và hỗn hợp không bao giờ khớp gần đúng
Phạm vi tìmMọi trường chuỗi đọc được và giá trị số hoặc boolean của kết quả đã lưu, không chỉ bản xem trước; tên trường là đường dẫn, không được tìm
Kết quả khớpMột chuỗi con nguyên vẹn của một trường, kèm siêu dữ liệu nguồn, path, vị trí ký tự tính từ 0 và số dòng tính từ 1
Ref mỗi lần gọiTối đa ba, dùng chung một ngân sách
maxCharsMặc định 4.000, từ 1.024 đến 20.000, gồm cả siêu dữ liệu và lỗi
contextChars0 đến 1.000 mỗi phía
Cửa sổTối đa tám mỗi ref; kết quả khớp bị lược được khai báo
Không khớpChỉ matchedFields=0 nghĩa là vắng mặt; cửa sổ bị lược vì ngân sách không phải vắng mặt
Mở rộngBỏ query, truyền path và startChar, đọc tiếp bằng nextStartChar
Vị tríKý tự UTF-16 trong đầu ra thô đã mã hoá, hoặc (khi có path) trong chuỗi hay giá trị JSON đã giải mã; dòng là dòng văn bản trích xuất
Giới hạn kích thước4 triệu ký tự, 20.000 giá trị được duyệt, độ sâu 32, 100.000 mục từ phân biệt, 100.000 lần khớp từ; vượt một mức là lỗi
Chờ lưuTối đa hai giây, chỉ với ref đã biết trong lượt hiện tại, chỉ thử lại lỗi “không tìm thấy”; ref không biết và ref cũ bị từ chối ngay

Tìm kiếm không lấy đoạn tri thức nào và không dùng embedding, tóm tắt hay cache. Việc kiểm tra căn cứ của báo cáo và đánh giá trực tiếp chỉ tính bản xem trước mô hình thấy và các cửa sổ trả về; khớp chỉ ở siêu dữ liệu, chỉ dẫn quy trình, lần đọc lỗi và dữ liệu ghi đã lưu không bao giờ được tính là bằng chứng truy xuất.

Xuất văn bản đã lưu

  • Xuất trực tiếp. Truyền path và một bộ chọn _toolResultContext.sources cho write_file. Bộ chọn gồm ref và mảng field (chuỗi JSON được giải mã dọc đường dẫn), cùng dấu phân cách between tuỳ chọn phải xác định đúng một vùng hoàn chỉnh. Backend lấy văn bản từ kết quả gốc đã lưu, kể cả phần bản xem trước đã bỏ.
  • Bị từ chối trước khi ghi bất kỳ tệp nào trong lô: thiếu trường, dấu phân cách mơ hồ, lần gọi lỗi, cửa sổ đọc, và bản ghi đánh dấu truncated.
  • Biến đổi dữ liệu. run_code nhận tối đa ba ref toolResults — xem Workspace và code.

Việc tra cứu chỉ trong phạm vi cuộc trò chuyện và giữ nguyên văn bản nhà cung cấp trả về; không bao giờ lấy thêm trang API.

Đọc các lượt trước

read_transcript đọc nguyên văn các lượt trước của cuộc trò chuyện hiện tại, theo khoảng số lượt hoặc theo từ khoá. Mỗi lượt trả về:

  • số lượt và thời điểm bắt đầu;
  • những gì người dùng viết và câu trả lời của trợ lý;
  • tên từng lần gọi tool, 400 ký tự đầu của tham số, và ref để read_tool_result mở lại.

Phần suy luận không bao giờ được trả về. Cuộc trò chuyện được xác định từ lượt, nên không yêu cầu nào chỉ định được cuộc khác; lượt đang hỏi bị loại vì vẫn đang được viết.

Một lần đọc dùng mặc định 6.000 ký tự, tối đa 20.000, theo nguyên lượt. Lần đọc dừng sớm được đánh dấu bị cắt và mang vị trí để đọc tiếp; một lượt lớn hơn ngân sách vẫn được trả nguyên.

Tool này tồn tại cho nén ngữ cảnh: bản tóm tắt nêu các lượt nó bao phủ, và chi tiết bị lược được đọc lại từ đó.

Bên dưới

Cách tìm trong kết quả đã lưu chạy

Việc khớp chạy trong Postgres của backend: từ chính xác qua chỉ mục B-tree, pg_trgm cho ứng viên gần đúng rồi lọc bằng levenshtein_less_equal (từ fuzzystrmatch), không có bộ khớp gần đúng bằng TypeScript. Chỉ mục giữ các trường nguyên văn và các từ đã chuẩn hoá phân biệt cùng vị trí UTF-16, mỗi từ lặp một mục; message_blocks.payload.output vẫn là nguồn chuẩn. Kết quả mới và chỉ mục được ghi trong một giao dịch; kết quả cũ được bổ sung chỉ mục dần dần dưới khoá dòng. Chỉ mục bị xoá theo chính sách lưu giữ bản ghi và không bao giờ tạo thành tập dữ liệu xuyên cuộc trò chuyện. Triển khai cần extension pg_trgm và fuzzystrmatch; role của runtime không bao giờ cài extension.

Bản xem trước và bản gốc nằm ở đâu

Bản ghi giữ output gốc tách khỏi contextOutput mô hình thấy; snapshot của SDK giữ bản xem trước.

Liên quan

AI Portal Docs
EN VI