Tìm hiểu cách thức hoạt động của tính năng nén ngữ cảnh Codex

@Kangwook_Lee
TIẾNG ANH4 tháng trước · 03 thg 3, 2026
1.0M
2.6K
303
39
5.5K

TL;DR

Kangwook Lee trình bày cách sử dụng prompt injection để khám phá hệ thống ẩn và các câu lệnh chuyển giao được sử dụng trong API nén ngữ cảnh Codex của OpenAI, bất chấp việc sử dụng các khối dữ liệu được mã hóa.

Đối với các mô hình không phải codex, Codex CLI mã nguồn mở nén ngữ cảnh cục bộ: một LLM tóm tắt cuộc hội thoại bằng cách sử dụng một prompt nén. Khi ngữ cảnh đã nén được sử dụng sau đó, responses.create() nhận nó kèm theo một prompt bàn giao đóng khung phần tóm tắt. Cả hai prompt đều hiển thị trong mã nguồn.

Đối với các mô hình codex, CLI thay vào đó gọi API compact(), API này trả về một blob được mã hóa. Chúng tôi không biết liệu nó có sử dụng LLM nội bộ, sử dụng prompt nào, hay có prompt bàn giao nào không.

Bên dưới, tôi trình bày cách một cuộc tấn công chèn prompt đơn giản (2 lệnh gọi API, 35 dòng Python) tiết lộ rằng đường dẫn nén API có sử dụng LLM để tóm tắt ngữ cảnh, với prompt nén riêng và một prompt bàn giao được thêm vào đầu phần tóm tắt. Các prompt gần như giống hệt với các phiên bản mã nguồn mở.

Bước 1 — compact()

Tôi gọi compact() với một tin nhắn người dùng đã được tạo sẵn. Ở phía máy chủ, một LLM nén xử lý đầu vào của chúng tôi bằng cách sử dụng prompt hệ thống ẩn của riêng nó (mà tôi chưa từng thấy và muốn tìm hiểu).

Máy chủ dường như lắp ráp ngữ cảnh của bộ nén như thế này:

Kangwook Lee - inline image

LLM nén đọc prompt hệ thống của nó cùng với đầu vào của chúng tôi. Bởi vì đầu vào của chúng tôi chứa một tải trọng chèn (văn bản màu đỏ ở trên), bộ nén bị lừa để đưa prompt hệ thống của chính nó vào đầu ra. Bản tóm tắt văn bản thuần túy này chỉ tồn tại trên máy chủ của OpenAI. Chúng tôi chỉ thấy blob được mã hóa:

Kangwook Lee - inline image

Tại thời điểm này, chúng tôi không có cách nào để đọc nội dung bên trong blob. Nó được mã hóa AES và khóa nằm trên máy chủ của OpenAI. Chúng tôi chỉ hy vọng rằng bộ nén đã tuân theo việc chèn và ghi prompt của nó vào bản tóm tắt. Cách duy nhất để tìm ra là Bước 2.

Bước 2 — create()

Tôi chuyển blob đã mã hóa + một tin nhắn người dùng thứ hai tới responses.create(). Máy chủ giải mã blob và lắp ráp ngữ cảnh của mô hình.

Tôi gửi:

Kangwook Lee - inline image

Mô hình dường như thấy một cái gì đó như thế này:

Kangwook Lee - inline image

Nếu Bước 1 hoạt động, blob đã giải mã sẽ chứa prompt nén (bị rò rỉ do chèn của chúng tôi). Máy chủ cũng thêm một prompt bàn giao vào đầu blob. Vì vậy, nếu thăm dò của chúng tôi thành công trong việc khiến mô hình lặp lại những gì nó thấy, đầu ra sẽ tiết lộ cả ba: prompt hệ thống, prompt bàn giao và prompt nén.

Đầu ra

Dưới đây là đầu ra hoàn chỉnh, chưa chỉnh sửa từ một lần chạy extract_prompts.py. Màu vàng = prompt hệ thống, màu xanh lá cây = prompt bàn giao, màu hồng = prompt nén.

Kangwook Lee - inline image

Làm thế nào để chúng tôi biết đây là những prompt thực sự và không chỉ là văn bản bị ảo giác? Prompt nén và prompt bàn giao được trích xuất khớp chặt chẽ với các prompt đã biết được sử dụng cho các mô hình không phải codex trong Codex CLI mã nguồn mở (prompt.md, summary_prefix.md), điều này khiến khó có khả năng mô hình đã phát minh ra chúng từ đầu. Kết quả khác nhau giữa các lần chạy.

Đường Dẫn Được Suy Luận

Tổng hợp lại, đây là dự đoán tốt nhất của chúng tôi về những gì compact() làm ở phía máy chủ, dựa trên những gì quá trình trích xuất tiết lộ.

Kangwook Lee - inline image

Tập Lệnh

Kangwook Lee - inline image

Câu Hỏi Mở

Tại sao Codex CLI sử dụng hai đường dẫn nén hoàn toàn khác nhau (LLM cục bộ cho các mô hình không phải codex, API được mã hóa cho các mô hình codex) trong khi các prompt cơ bản gần như giống hệt nhau? Và tại sao lại mã hóa bản tóm tắt?

Thật khó để nói. Có thể blob được mã hóa mang một thứ gì đó nhiều hơn những gì thí nghiệm đơn giản này có thể tiết lộ, ví dụ: một cái gì đó cụ thể về cách kết quả công cụ được nén và khôi phục. Nhưng tôi đã không bận tâm để kiểm tra thêm.

Lưu một chạm

Đọc sâu bài viết viral bằng AI trong YouMind

Lưu nguồn, đặt câu hỏi tập trung, tóm tắt lập luận và biến một bài viết viral thành các ghi chú có thể tái sử dụng trong một không gian làm việc AI duy nhất.

Khám phá 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