Workspace và code
Cây thư mục làm việc của cuộc trò chuyện, cách đọc và sửa tệp, cùng máy tính và sandbox chạy code.
Mỗi cuộc trò chuyện có một cây thư mục làm việc do portal quản lý. Sáu tool tệp chạm thẳng vào nó và run_code gắn nó vào mỗi lần chạy, nên tệp một lượt trước đã viết vẫn ở đó để sửa thay vì viết lại. HTML của một bộ slide nằm ở đây — nhờ vậy sửa một slide là một lần chỉnh sửa, không phải một bộ slide thứ hai.
Quy tắc chính
- Tệp là bản ghi của portal, không phải trạng thái sandbox. Liệt kê thư mục không gọi gì; mỗi lần chạy nêu rõ tệp đã tạo, sửa hay xoá.
- Sửa, đừng viết lại. Thay cả một tệp dài bị từ chối và được chỉ sang
edit_file. - Chỉnh sửa lỗi thì không đổi gì. Lời từ chối nói nên xem ở đâu.
- Mỗi lúc một người ghi. Mỗi lần ghi giữ khoá theo cuộc trò chuyện.
- Workspace là tạm thời. Thứ cần giữ lâu được lưu thành artifact.
Workspace
Tool: list_files, search_files, read_file, write_file, edit_file, delete_file, cùng run_code.
- Khoá. Mỗi lần ghi giữ khoá theo cuộc trò chuyện, vì hai chương trình cùng sửa một cây sẽ cho kết quả khác nhau tuỳ cái nào xong trước. Khoá là một hợp đồng thuê được gia hạn khi công việc còn chạy, nên lần chạy sandbox dài không bị mất khoá giữa chừng.
- Đường dẫn. Đường dẫn tính từ gốc workspace. Sandbox code thấy cùng cây đó ở một cấp sâu hơn, tại
workspace/, nêndeck.htmlvàworkspace/deck.htmllà một tệp. Tool tệp nhận cách viết thứ nhất và từ chối cách thứ hai, kèm đường dẫn người gọi muốn nói. - An toàn khi cây không đọc được. Lần chạy khiến sandbox không báo được cây thì không thay đổi gì — nếu không, cây không đọc được và cây rỗng trông giống nhau, và cây rỗng sẽ xoá hết.
- Giới hạn. Workspace bị giới hạn theo số byte và số tệp. Lần ghi vượt một trong hai bị từ chối toàn bộ, tính cả lô, nên lần gọi không vừa thì không lưu gì.
- Vòng đời. Workspace bị xoá khi cuộc trò chuyện bị xoá, và khôi phục cuộc trò chuyện không mang nó trở lại. Thứ cần giữ lâu là artifact, vốn mang theo nguồn tạo ra nó. Xem Vòng đời dữ liệu.
Ghi tệp
write_file nhận path và đúng một trong content hoặc source cho một tệp, hoặc mảng files cho tối đa ba tệp.
- Lô phải là mảng thật, không phải JSON nằm trong chuỗi. Lô mã hoá hợp lệ được giải mã trước khi kiểm tra; JSON hỏng bị từ chối kèm hướng dẫn dùng các trường trực tiếp.
- Dùng
sourceđể xuất thẳng văn bản từ kết quả tool đã lưu (Quy tắc tool); dùngrun_codevới reftoolResultskhi cần biến đổi dữ liệu.
Chặn thay cả tệp
Thay cả một tệp bị từ chối khi tệp đã dài quá vài nghìn ký tự, và lời từ chối nêu edit_file. Tài liệu bị viết lại chỉ để đổi một giá trị sẽ mất những phần không ai yêu cầu đổi.
- Sau đó xoá tệp ấy cũng bị từ chối trong suốt phần còn lại của lượt — xoá rồi viết lại từ trí nhớ là cùng một lần viết lại, chậm một lần gọi.
- Cơ chế chặn đọc trace của chính lượt: một
write_filethất bại nêu đường dẫn đó, trên tệp vẫn đủ dài để lần từ chối đầu còn hiệu lực. - Tệp mà trong lượt không có gì cố ghi thì xoá như bình thường.
- Muốn thay hẳn một tài liệu, hãy làm một chỉnh sửa từ dòng 1 đến dòng cuối — việc này buộc phải đọc tệp trước.
Sửa tệp
Một chỉnh sửa chỉ ra phần bị thay theo văn bản hoặc theo dòng; mỗi lần gọi dùng một trong hai.
- Đoạn trích được chép từ tệp và phải xuất hiện đúng một lần.
- Việc khớp chạy trên tệp đã thống nhất một kiểu xuống dòng và bỏ BOM, vì đó là tệp người gọi được xem.
- Kiểu xuống dòng gốc của tệp được ghi lại sau đó.
- Rẻ nhất khi đổi một giá trị ngắn.
- Thay một khoảng dòng có đánh số từ
read_file. - Người gọi lặp lại dòng đầu của khoảng, nên khoảng đã bị dịch bởi chỉnh sửa trước sẽ bị từ chối thay vì áp vào chỗ khác.
- Mọi khoảng trong một lần gọi đánh số theo tệp lúc nhận; không hai khoảng nào được chồng lên nhau.
- Mỗi thay đổi trả về dòng nó đang nằm, sau khi các chỉnh sửa khác trong lần gọi đã áp dụng.
- Rẻ nhất với khối dài: chỉ trả tiền cho phần thay thế.
Khi chỉnh sửa bị từ chối
Chỉnh sửa lỗi không thay đổi gì, nên mô hình đang dùng bản cũ được bảo đọc lại tệp thay vì lặng lẽ viết ra một tài liệu khác. Lời từ chối cho biết nên xem ở đâu:
| Vấn đề | Lời từ chối trả về |
|---|---|
| Đoạn trích không khớp gì | Số dòng nơi dòng đầu của nó thực sự nằm |
| Dòng neo đã dịch chuyển | Nội dung hiện tại ở đó, và văn bản kia giờ nằm ở đâu |
| Người gọi lặp lại dòng cuối của khoảng | Nêu rõ điều đó — đọc lại không giải quyết được |
| Các khoảng chồng nhau | Bị từ chối trước khi kiểm tra neo, để người gọi biết lỗi mà đọc lại không sửa được |
Cách đếm dòng
Dòng được đếm như trình soạn thảo: ký tự xuống dòng cuối kết thúc dòng cuối chứ không mở thêm dòng rỗng, và ký tự xuống dòng không thuộc dòng nào. Chỉnh sửa ghi lại kiểu xuống dòng tệp đang dùng, nên đổi một dòng của tài liệu CRLF không động đến phần còn lại.
Đọc và tìm tệp
read_file
- Đánh số các dòng trả về và nhận cùng
startLine,endLinenhư chỉnh sửa theo dòng — một cặp số cho cả tìm và sửa. - Một lần gọi dùng một ngân sách ký tự chung cho mọi đường dẫn, và mỗi đường dẫn có giới hạn số dòng riêng.
- Tệp bị cắt trả về dòng cần đọc tiếp và giới hạn nào đã chạm: ký tự nghĩa là dòng dài (thu hẹp khoảng); dòng nghĩa là tệp dài (đọc tiếp).
- Tệp ảnh trả về chính bức ảnh, đã thu nhỏ về đúng mức mô hình nhận. Mô hình không xem được ảnh sẽ được báo bằng lời rằng ảnh đã bị lược.
search_files
- Tìm chuỗi nguyên văn trên toàn cây, trả về đường dẫn, số dòng, truy vấn đã khớp và, khi yêu cầu, tối đa ba dòng mỗi phía.
- Tối đa năm chuỗi mỗi lần gọi, trong một lượt quét mỗi tệp — gọi thêm một lần sẽ tốn một vòng mô hình khoảng 25 giây.
- Truy vấn là văn bản, không phải mẫu: mẫu do mô hình viết sẽ chạy regex không giới hạn thời gian trên luồng xử lý yêu cầu.
- Dòng khớp dài được căn giữa quanh chỗ khớp. Dòng ngữ cảnh không lặp lại trong một tệp (hai kết quả cách nhau ba dòng đọc như một đoạn liền) và tính vào cùng ngân sách ký tự.
Hai tool đọc workspace giữ nguyên văn bản trong ngữ cảnh, vì rút gọn những dòng mà chỉnh sửa cần khớp sẽ buộc mô hình đoán. Các kết quả lớn khác dùng bản xem trước. Với kết quả có ảnh, chỉ phần văn bản bị rút gọn.
Cắt tài liệu đã ghi khỏi phần phát lại
Tham số của một lần ghi nằm trong danh sách tin nhắn và sẽ bị gửi lại ở mọi bước sau. Vì thế tài liệu lượt đã ghi được cắt khỏi lần gọi phát lại, chỉ giữ 200 ký tự đầu — đủ để nhận ra. Nội dung nằm trong workspace hoặc artifact đã lưu. Lần gọi thất bại giữ nguyên tham số, vì mô hình sắp phải tìm xem sai ở đâu.
Tính toán
Máy tính là bộ phân tích cú pháp viết riêng cho portal, vì đưa chuỗi của mô hình cho một trình eval là mở đường thực thi code từ xa.
| Chấp nhận | Từ chối |
|---|---|
| Số thập phân và số dạng khoa học, bốn phép tính, luỹ thừa, ngoặc, dấu trừ một ngôi, min, max, giá trị tuyệt đối, căn bậc hai, làm tròn | Biến, phép gán, trạng thái giữa các biểu thức, toán tử phần trăm |
Kết quả làm tròn 12 chữ số có nghĩa, nằm trong độ chính xác của các cột tiền tệ của portal. Chia cho 0 là một mục lỗi kèm lý do.
Chạy code
Để tính tổng trên một tệp, mô hình viết Python dựa trên tên tệp, và code đọc những byte mà mô hình không hề gõ. Dạng mặc định gắn tệp đã tải lên; dạng còn lại đưa các đoạn văn theo thứ tự. Mô tả dặn in ra một con số hoặc một bảng nhỏ, không in dữ liệu.
Sandbox
- Chạy trong tài khoản AWS của khách hàng, không mạng, không thông tin xác thực, không cài gói.
- Mỗi lần gọi một phiên; không gì chuyển sang lần sau.
- Mọi mã được đối chiếu với ràng buộc tri thức của lượt và tập dữ liệu của người gọi trước khi đọc byte nào.
- Runtime không giữ thông tin xác thực hay SDK AWS và chỉ gọi một route của portal qua HTTP.
- Traceback được trả nguyên văn cho mô hình, vì mô hình viết code đó.
Ảnh hưởng lên workspace
- Workspace được gắn ở mỗi lần gọi. Những gì code để lại được giữ và báo lại là tệp tạo, sửa hay xoá; tệp code xoá thì bị xoá.
- Lần chạy bị lỗi vẫn giữ thay đổi — tệp viết dở được để lại cho lần gọi sau sửa.
- Lưu một tệp thành artifact là bước riêng. Bản lưu thuộc về người sở hữu lượt và tính vào phòng ban của họ.
Artifact có sẵn làm đầu vào
- Có thể đưa một artifact dạng tệp cho code — đó là cách sửa một bảng tính hay tài liệu thay vì viết lại. Quyền truy cập theo quy tắc chia sẻ của chính artifact, không theo cuộc trò chuyện — tệp tải lên không thuộc cuộc trò chuyện nào. Sửa nghĩa là đọc, ghi ra tệp đã đổi, rồi thêm vào cùng artifact thành phiên bản mới. Tìm-và-thay trên tệp đã lưu bị từ chối: không có văn bản để khớp.
- Artifact văn bản có thể được gắn theo mã và phiên bản tuỳ chọn dưới
inputs/artifacts/kèm mã, với.mdcho tài liệu,.jsoncho biểu đồ,.htmlcho bản xem web và.txtcho loại văn bản khác. Quy tắc chia sẻ của artifact cấp quyền cho các lần đọc này.
Kết quả đã lưu làm đầu vào
run_code nhận tối đa ba ref toolResults. Backend gắn đầy đủ kết quả đã lưu theo thứ tự tại inputs/tool-results/1.json, 2.json và 3.json; mỗi tệp gồm ref, toolName, isError và output. Code có thể trích trường và ghi sản phẩm vào workspace/ mà không phải đọc từng trang qua mô hình.
- Ref dùng cùng ranh giới cuộc trò chuyện và tính vào tổng giới hạn byte đầu vào của lần chạy.
- Kết quả đã lưu có thể chỉ là một trang của API bên ngoài; việc gắn giữ đúng những gì lần gọi đó trả về.
Tệp của skill
Skill có thể kèm tệp riêng. Nạp skill liệt kê các tệp theo đường dẫn và kích thước, không kèm byte; nêu tên skill trong lần chạy code sẽ gắn chúng vào thư mục mang tên skill, nên chỉ dẫn nhắc đến script bên cạnh là đúng. Skill nào được nêu tên dùng cùng phép kiểm tra của trình nạp skill, lấy từ lượt. Gói vượt giới hạn kích thước của bản triển khai bị từ chối toàn bộ.
Mọi route của tool
Trước khi làm việc của mình, mọi route tool trả lời bốn câu: lượt của ai, lượt có được dùng tool đó không, người gọi là ai, và trace ghi gì. Tên tool trả lời câu thứ hai và thứ tư, vì danh mục ghi loại bước mỗi tool tạo ra. Lượt gọi tool chưa từng được cung cấp bị từ chối, lời từ chối nêu tên tool và không tiết lộ gì thêm.