2 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Khi MultiAgentV2 của Codex CLI mã hóa các thông điệp spawn_agent, send_message, followup_task, một hồi quy về dấu vết kiểm toán đã xảy ra: nội dung ủy quyền trở nên không thể đọc được với con người trong rollout, lịch sử và trace của agent cha
  • Sau PR #26210 được merge vào ngày 5 tháng 6 năm 2026, InterAgentCommunication.content bị để trống, payload chỉ được lưu trong encrypted_content, còn lịch sử phía nhận và log giao tiếp cũng ghi lại bản mã
  • Vấn đề không phụ thuộc vào gói đăng ký, model hay nền tảng; nó áp dụng cho các bản build từ 0.137.0 trở đi khi MultiAgentV2 được bật, và tách biệt với #26753, vấn đề xử lý lỗi xác thực request của schema công cụ mã hóa
  • Cách sửa được đề xuất là lưu đồng thời message mã hóa dành cho model nhận và trường plaintext bắt buộc dành cho kiểm toán cục bộ; việc định danh truyền tiếp dùng bản mã hoặc ID, đồng thời áp dụng cùng giới hạn kích thước cho dữ liệu kiểm toán plaintext
  • Prototype cho spawn_agent đã được triển khai trong một snapshot commit riêng, nhưng vẫn còn việc áp dụng cùng hợp đồng cho send_message, followup_task, cũng như các màn hình lịch sử, replay và debug; issue hiện vẫn ở trạng thái Open

Phạm vi phát sinh và điều kiện hồi quy

  • PR thay đổi mã hóa #26210 được merge vào ngày 5 tháng 6 năm 2026; đối tượng bị ảnh hưởng là các bản build từ 0.137.0 trở đi có chứa thay đổi này và bật MultiAgentV2
  • Các công cụ bị ảnh hưởng là spawn_agent, send_message, followup_task; không phụ thuộc vào gói đăng ký, model, hệ điều hành hay môi trường terminal
  • Đây là hồi quy được xác nhận từ hành vi của code đã merge, không phải trạng thái môi trường cục bộ, nên báo cáo Codex doctor không liên quan
  • Các bước tái hiện như sau
    1. Bật MultiAgentV2 trong bản build có chứa PR #26210
    2. Để model gọi một trong các công cụ spawn_agent, send_message, followup_task
    3. Kiểm tra tác vụ của sub-agent trong rollout, lịch sử và trace của agent cha
    4. Chỉ thấy bản mã thay vì nội dung tác vụ hoặc thông điệp

Thông tin kiểm toán cục bộ đã biến mất

  • Bản thân việc truyền mã hóa có thể được hiểu là tăng cường quyền riêng tư, nhưng triển khai hiện tại loại bỏ nội dung mà con người có thể đọc được ngay cả trong lịch sử rollout cục bộ, bản rút gọn trace, cũng như các màn hình kiểm toán và debug phía agent cha
  • Kết quả là khi rà soát rollout sau đó, rất khó trả lời các câu hỏi sau
    • spawn_agent đã giao tác vụ gì cho agent con
    • Đã gửi thông điệp gì cho sub-agent
    • Vì sao một thread con cụ thể được tạo ra
  • Issue #26753 là vấn đề schema công cụ mã hóa trả về lỗi 400 trong quá trình xác thực request; issue lần này xử lý khả năng kiểm toán và khả năng debug sau khi schema đã được chấp thuận
  • Mục tiêu không nhất thiết là đảo ngược việc truyền mã hóa, mà là duy trì mã hóa đồng thời vẫn cho phép đọc nội dung ủy quyền ở cục bộ

Luồng dữ liệu của code hiện tại

  • InterAgentCommunication::new_encrypted() khởi tạo content bằng chuỗi rỗng và chỉ lưu payload trong encrypted_content
    • Constructor thông thường new() lưu plaintext vào content và để trống encrypted_content
    • Constructor mã hóa thì ngược lại: để trống content và đưa giá trị vào encrypted_content
  • to_model_input_item() nếu có encrypted_content thì chỉ đưa phần mở đầu NEW_TASK hoặc MESSAGE cùng payload mã hóa vào ResponseItem::AgentMessage
    • Vì vậy, ngay cả khi chỉ điền content ở runtime, ResponseItem có thể đọc được cũng không tự động được lưu bền vững
    • Cần có một đường lưu kiểm toán cục bộ riêng
  • communication_from_tool_message() truyền trực tiếp message của công cụ vào new_encrypted(), tạo đối tượng giao tiếp không có content plaintext
  • Xử lý đối số của send_messagefollowup_task chỉ deserialize targetmessage đã mã hóa

Vì sao bản mã còn lại trong lịch sử và log

  • Đường ghi phía nhận lưu ResponseItem dành cho model do to_model_input_item() tạo ra vào lịch sử hội thoại và rollout
    • Với giao tiếp mã hóa, mục này chứa payload truyền mã hóa chứ không phải câu chữ kiểm toán có thể đọc được
    • Trong rollout, InterAgentCommunicationMetadataResponseItem tương ứng được lưu bền vững cùng nhau
  • Log giao tiếp có cấu trúc cũng thay thế content của sự kiện bằng encrypted_content nếu content trống
  • Trong cấu trúc này, bản mã đi vào cả các trường được hiển thị như thông điệp dành cho con người đọc, nên yêu cầu duy trì mã hóa khi truyền và yêu cầu bảo toàn dữ liệu kiểm toán cục bộ chưa được tách rời

Hợp đồng nội dung kép được đề xuất

  • message mã hóa hiện có được giữ làm payload truyền tới model nhận
  • Thêm một trường kiểm toán plaintext bắt buộc cho từng công cụ giao tiếp MultiAgentV2
    • spawn_agent: task_message
    • send_message, followup_task: tên nhất quán như task_message hoặc message_text
  • Từ chối giá trị kiểm toán plaintext rỗng tại ranh giới handler
  • InterAgentCommunication lưu cả hai giá trị
    • encrypted_content: message đã mã hóa
    • content: bản sao kiểm toán mà con người có thể đọc
  • Không thay đổi to_model_input_item(), để model nhận chỉ nhận bản mã chứ không phải bản sao kiểm toán cục bộ
  • Lưu bền vững trường plaintext trong lời gọi công cụ của agent cha và rollout, đồng thời giữ trường này trong các cạnh tương tác của trace có cấu trúc và log giao tiếp cục bộ
  • Tương quan giữa lời gọi công cụ và mục truyền tới agent con được xác định bằng bản mã hoặc ID, không phải bằng việc khớp plaintext
    • Trường plaintext là metadata kiểm toán, không thay thế định danh của việc truyền mã hóa
  • Áp dụng cùng giới hạn kích thước bắt buộc như thông điệp ủy quyền tương ứng cho trường kiểm toán plaintext mới, để mục rollout hoặc context không phình to vô hạn

Prototype spawn_agent và các việc còn lại

Điều kiện hoàn tất và trạng thái hiện tại

  • Phải đọc được plaintext của v2 spawn_agent, send_message, followup_task trong rollout và lịch sử của agent cha
  • Ngay cả khi mã hóa được bật, model con chỉ được nhận payload truyền đã mã hóa
  • Các cạnh trace rollout có cấu trúc phải chứa message_content plaintext có giới hạn kích thước
  • Log giao tiếp phải dùng nội dung kiểm toán plaintext nếu có, và không được thay thế trường thông điệp có thể đọc bằng bản mã
  • Resume và replay phải bảo toàn bản sao kiểm toán nhưng không được inject nó vào context của model con
  • Hành vi giao tiếp v1 plaintext hiện có không được thay đổi
  • Cần có regression test cho cả ba công cụ v2 để xác minh đồng thời dữ liệu kiểm toán cục bộ có thể đọc đượcinput model nhận đã mã hóa
  • Trên trang được cung cấp, issue đang ở trạng thái Open và không có kết quả cho thấy bản sửa đã được merge vào upstream repository

1 bình luận

 
Ý kiến trên Hacker News
  • Tiêu đề này dễ gây hiểu nhầm. Nói chính xác hơn là Codex bắt đầu mã hóa prompt của các tác tử cấp dưới để ẩn khỏi người dùng
    Tiêu đề gốc là “Codex starts encrypting prompts, uses ciphertext for inference instead”

    • Khả năng cao việc này được đưa vào vì chế độ ultra của GPT-5.6 phân tán công việc cho nhiều tác tử cấp dưới. Trước đây chế độ này chỉ có trên web UI, và có lẽ tương ứng với chế độ pro trước kia
      Nếu họ huấn luyện bằng rollout học tăng cường toàn phần với các tác tử tương tác với nhau, thì có vẻ OpenAI đang coi các prompt này như dấu vết suy luận thô để ngăn người khác trực tiếp dùng chúng cho việc huấn luyện
      Blob nén mờ đục mà endpoint nén chuyên dụng trả về cũng có thể là biểu diễn trong không gian tiềm ẩn của cuộc hội thoại chứ không phải văn bản; việc độ trung thực nén của OpenAI cao hơn hẳn các bên khác cũng củng cố suy đoán này. Có thể họ đã áp dụng kỹ thuật tương tự cho prompt của tác tử cấp dưới, và cũng khiến người ta tò mò liệu có dùng blob mã hóa khi tạo các tác tử cấp dưới thuộc những loại mô hình khác nhau hay không
    • Việc có hàng chục đến hàng trăm tác tử xác suất chạy trên máy tính cục bộ, mà bạn thậm chí còn không thể kiểm tra cả lệnh mà chúng nhận được, thật vô lý
      Tôi từng xem quy trình làm việc và các tác tử cấp dưới của Claude rồi kết luận rằng “cái này ngay từ đầu không nên được chạy”; trong khi đó người dùng Codex về cơ bản phải mù quáng đốt token cho các chỉ thị bàn giao được mã hóa và các tác vụ shell mà bộ điều phối chuyển cho tác tử cấp dưới
    • Một phần lớn tài sản trí tuệ của Codex có lẽ nằm ở cấu trúc prompt, thứ tự và orchestration hơn là ở chính codebase
      Chúng tôi cũng từng muốn cho phép chọn nhà cung cấp AI mà doanh nghiệp ưa dùng hoặc bị bắt buộc dùng, cùng với API key riêng của họ, và đưa ra gói giá đơn giản; nhưng rồi nhanh chóng nhận ra rằng prompt backend có thể bị lộ cho khách hàng. Nếu có được vết thực thi chi tiết thì người ta khá dễ reverse engineer những gì chúng tôi làm, nên cuối cùng chúng tôi bỏ ý tưởng đó
    • Ban đầu tôi tưởng đây là công nghệ như mã hóa đồng cấu, nhưng rốt cuộc có vẻ chỉ là lòng tham rất bình thường
    • Đây không phải lần đầu Codex mã hóa thứ gì đó. Endpoint nén rất xuất sắc của họ đã trả về các blob mã hóa khổng lồ ít nhất từ 5 tháng trước
  • Giờ thì tôi đã hiểu vì sao công cụ cục bộ của tôi để kiểm tra các phiên tác tử lập trình lại ngừng hoạt động trong một số tình huống
    Đây là một quyết định thiết kế khá thú vị: không rõ sẽ có bao nhiêu người chấp nhận các lệnh mã hóa bên ngoài chạy trên máy tính của người dùng

    • Có vẻ động cơ của OpenAI không hoàn toàn trùng khớp với người dùng, kể cả khách hàng doanh nghiệp. Cũng đáng xem các phát biểu gần đây của Alex Karp và Satya Nadella
      Việc mã hóa nội dung để giấu khỏi người dùng là kiểu mà RIAA từng dùng cho DRM vì lo vi phạm bản quyền; nên tôi cũng tự hỏi liệu đây có phải là một lựa chọn chống lại người dùng hay không
    • Nếu dùng chế độ YOLO thì về cơ bản bạn đã chấp nhận rủi ro kiểu đó rồi, và điều quan trọng là các lệnh gọi công cụ. Bản thân các lệnh gọi công cụ thì không thể mã hóa
  • Chính vì kiểu hành vi này mà tôi vẫn tiếp tục dùng endpoint Chat Completions. OpenAI đã âm thầm đẩy người dùng rời khỏi Chat Completions sang Responses API, nơi việc làm rối dễ hơn
    Trong Chat Completions, bạn có thể tự kiểm soát quy trình suy luận, nên nếu bật các tính năng thử nghiệm và chỉnh một số tùy chọn hơi rối rắm thì hiện tại còn có thể tạo tác tử Monte Carlo Tree Search (MCTS) tùy biến với mô hình GPT-5.6
    Trong VS Copilot, bạn có thể dùng đến gpt5.5 bằng token API và cấu hình mô hình của người dùng, nhưng dòng gpt5.6 hiện không hoạt động. Có lẽ vì nó không ép reasoning_effort về none để đáp ứng hành vi mở rộng rào cản gia nhập mới này

    • Tôi muốn biết chính xác kỹ thuật MCTS được nói ở đây là gì. Dù sao thì quá trình suy nghĩ được cung cấp cũng bị tóm tắt quá trừu tượng nên chẳng mấy hữu ích; tôi cũng nghi ngờ liệu có thật sự kiểm soát hoàn toàn được quy trình suy luận hay không
    • MCTS là viết tắt của Monte Carlo Tree Search
    • Mong là đừng lạm dụng từ MCTS như một buzzword ở đây. Cách đang được nói tới không phải MCTS theo nghĩa chặt chẽ
    • Responses API có nhiều ưu điểm hơn Chat Completions: https://developers.openai.com/api/docs/guides/migrate-to-res...
      Các mô hình mới ra gần đây đều là mô hình suy luận, nên theo khuyến nghị thì nên dùng Responses API
  • Cũng tò mò liệu họ có chặn việc dùng gói đăng ký GPT trong công cụ thực thi thay thế hay không. Nếu không thì đây không phải vấn đề quá lớn, và bản thân codex cli là một công cụ thực thi bình thường đến mức đáng ngạc nhiên

    • Có vẻ khả năng đó khá thấp. Toàn bộ kiến trúc app-server tồn tại chính là để hỗ trợ kiểu tích hợp đó, nên nếu muốn gỡ khỏi Codex thì họ sẽ phải tháo bỏ một phần rất lớn
      Tôi cũng tích hợp rất dễ qua RPC API của app-server, nên dùng Codex nhiều nhất, và giờ gần như dùng toàn bộ qua phần tích hợp tự làm thay vì Codex TUI đã được công khai
      Nhưng nếu họ mã hóa các prompt v.v. là đầu vào suy luận thực tế trên đĩa cục bộ để chỉ backend OpenAI nhìn thấy, thì dù tích hợp có dễ đến đâu, cũng không thể biết chuyện gì đang diễn ra. Khó hiểu vì sao đội ngũ lại cho rằng đây là một lựa chọn tốt
    • Anthropic và Google đã thu thêm phí nếu dùng công cụ thực thi riêng của họ, và đó chính là toàn bộ lý do để dùng OpenAI
      Nếu OpenAI cũng đi theo con đường đó thì tôi sẽ quay lại Claude hoặc mua thêm một chiếc Spark để chạy cục bộ
    • Chừng nào Anthropic còn dẫn trước về triển khai doanh nghiệp thì có lẽ họ sẽ không chặn. Không biết sẽ thay đổi ra sao nếu OpenAI vươn lên dẫn đầu với khoảng cách lớn, nhưng tới lúc đó thì hy vọng các model mở đã tốt hơn gpt-5.6 sol
    • Có vẻ khả năng chặn là thấp vì chính Codex đã bắt đầu cung cấp một proxy bọc quanh gói đăng ký
      https://github.com/openai/codex/blob/main/codex-rs/responses...
    • Gần đây Tibo của OpenAI đã hỏi trên Twitter cách chạy GPT bằng Claude Code, nên có vẻ họ không phản đối việc dùng công cụ thực thi thay thế
  • Tiêu đề HN trước đó gây hiểu lầm rất lớn vì nghe như đang suy luận trực tiếp trên bản mã. Muốn làm vậy thì cần mã hóa đồng hình tiên tiến hơn rất nhiều so với mức hiện được biết đến

    • Thực tế là họ mã hóa nội dung agent gửi cho sub-agent để chỉ backend OpenAI có thể thấy bản rõ
      Trước đây agent gửi prompt bản rõ cho sub-agent và nó cũng được giữ nguyên trong log cùng dữ liệu phiên, nên ngay cả khi dùng tính năng sub-agent thử nghiệm, vẫn có thể mở dữ liệu ra để xem hoạt động nội bộ
      Giờ nếu dùng Sol hoặc Terra, sub-agent sẽ nhận bản mã do backend tạo ra và dùng nó lại cho suy luận trên backend OpenAI. Có vẻ Luna không bị ảnh hưởng, và chỉ các tin nhắn giữa những agent được ủy quyền mới bị mã hóa chứ không phải toàn bộ phiên
      Suy luận nội bộ của OpenAI không diễn ra trên bản mã, nhưng với người dùng cục bộ thì chỉ còn thấy bản mã thay vì bản rõ. Để làm rõ điều này nên tiêu đề đã được đổi thành “Codex starts encrypting sub-agent prompts”
    • Vì tiêu đề có chữ “inferencing”, tôi cũng lập tức nghĩ đến mã hóa đồng hình hoặc phép toán trên bản mã
  • Gần đây trên Twitter có báo cáo rằng sub-agent GPT-5.6 đã lỡ xóa thư mục home của người dùng
    Không rõ việc không còn thấy sub-agent định làm gì có khiến ngay cả các cơ chế an toàn cũng thất bại hay không
    https://x.com/mattshumer_/status/2076794038456385546?s=20

  • Đây là cách truyền khóa cache qua client để giảm lượng token sử dụng. Có thể dễ dàng lách bằng cách dùng công cụ tác vụ con khác, nên không thể là biện pháp phòng vệ chống chưng cất mô hình

  • Tò mò chính xác việc mã hóa diễn ra ở đâu. Tôi cứ nghĩ agent chính gọi sub-agent ở cục bộ, nhưng không rõ liệu Codex có cấu trúc gọi sub-agent từ máy chủ OpenAI trước khi chạm tới máy cục bộ hay không

    • Trước đây agent gửi prompt bản rõ cho sub-agent và nó cũng được lưu nguyên trong log cùng dữ liệu phiên, nên có thể dễ dàng xem hoạt động nội bộ
      Với Sol hoặc Terra, bản mã do backend OpenAI tạo ra được truyền thay cho prompt, và sub-agent lại dùng nó cho suy luận trên backend. Có vẻ Luna không bị ảnh hưởng, và chỉ các tin nhắn giữa những agent được ủy quyền mới bị mã hóa chứ không phải toàn bộ phiên, nên giờ chỉ backend OpenAI mới có thể giải mã phần nội dung đó
  • Tôi đã thắc mắc vì sao dịch vụ bán lại trên chợ đen của Trung Quốc từ hôm qua không còn hoạt động, và có lẽ là vì thay đổi này

    • Các chợ đen như vậy không chỉ gom gói đăng ký để bán lại mà còn lưu dữ liệu rồi bán cho nơi huấn luyện mô hình. Việc mã hóa ít nhất cũng hữu ích để ngăn hành vi thứ hai này, và dù mục đích giống các thủ đoạn khác đã lộ trước đó, cách triển khai sạch sẽ hơn nhiều
  • Có vẻ mục đích chính là cản trở các nỗ lực proxy một lượng lớn yêu cầu và phản hồi của người dùng để phục vụ huấn luyện model cạnh tranh

    • Có vẻ họ rõ ràng cũng muốn ngăn nhà cung cấp khác nhìn vào cách OpenAI quản lý đa agent
      Nhưng với người dùng trả phí thì đây là một cách triển khai tệ hại, vì khi có vấn đề xảy ra hoàn toàn không có cách nào tìm ra nguyên nhân, nên rất khó dùng tính năng đa agent cho đúng nghĩa