3 điểm bởi GN⁺ 2026-01-24 | 1 bình luận | Chia sẻ qua WhatsApp
  • Codex CLI được thiết kế như một tác nhân thực hiện các thay đổi phần mềm chất lượng cao một cách an toàn và hiệu quả trong môi trường cục bộ
  • Cấu trúc cốt lõi là vòng lặp tác nhân (agent loop), kết nối tuần hoàn giữa đầu vào của người dùng, suy luận của mô hình và lời gọi công cụ để thực hiện các tác vụ có ý nghĩa
  • Trong quá trình vòng lặp vận hành, cấu trúc prompt, quản lý cửa sổ ngữ cảnh và cache prompt là những yếu tố then chốt quyết định hiệu năng và độ ổn định
  • Codex giao tiếp với mô hình thông qua Responses API, và mỗi yêu cầu được tạo thành từ một payload JSON hoàn chỉnh để duy trì cơ chế hoạt động không trạng thái (stateless)
  • Cấu trúc này cho phép các tính năng nâng cao như Zero Data Retention (ZDR), cache prompt, nén tự động (compaction), đồng thời tạo nền tảng cho thiết kế tác nhân ở quy mô lớn

Tổng quan về vòng lặp tác nhân của Codex

  • Codex CLI vận hành xoay quanh cấu trúc vòng lặp điều phối tương tác giữa người dùng, mô hình và công cụ
    • Nhận đầu vào của người dùng và xây dựng prompt để gửi cho mô hình
    • Khi mô hình tạo phản hồi hoặc yêu cầu lời gọi công cụ (tool call), tác nhân sẽ thực thi và thêm kết quả trở lại prompt
    • Khi mô hình không còn gọi công cụ nữa và tạo ra thông điệp assistant, một lượt tương tác kết thúc
  • Mỗi lượt là một phần của cuộc hội thoại (conversation), trong đó toàn bộ thông điệp trước đó và lịch sử gọi công cụ đều được đưa vào prompt của yêu cầu tiếp theo
  • Vì độ dài prompt bị giới hạn bởi cửa sổ ngữ cảnh (context window) của mô hình, Codex cần quản lý giới hạn này

Responses API và cấu trúc giao tiếp của Codex

  • Codex CLI gửi yêu cầu HTTP tới Responses API để thực hiện suy luận mô hình
    • Endpoint API thay đổi tùy theo cấu hình và có thể dùng trong các môi trường OpenAI, ChatGPT, Azure, cục bộ (LM Studio, Ollama, v.v.)
  • Yêu cầu API được cấu thành dưới dạng payload JSON, với các trường chính như sau
    • thông điệp system/developer: thiết lập ngữ cảnh cơ bản của mô hình
    • instructions: danh sách công cụ mà mô hình có thể gọi
    • tools: định nghĩa công cụ do Codex CLI, Responses API hoặc người dùng (như máy chủ MCP) cung cấp
    • input: danh sách thông điệp bao gồm lịch sử hội thoại và thông tin môi trường
  • Codex đọc cấu hình ~/.codex/config.toml cùng với AGENTS.md, các tệp skills trong dự án để tự động chèn chỉ dẫn người dùng và thông tin môi trường

Cấu trúc prompt và xử lý sự kiện

  • Codex cấu thành từng thông điệp dưới dạng đối tượng JSON (type, role, content) rồi gửi tới Responses API
  • Máy chủ tạo prompt cho mô hình dựa trên JSON này và trả phản hồi qua luồng SSE (Server-Sent Events)
    • Sự kiện response.output_text.delta được dùng cho đầu ra streaming
    • Sự kiện response.output_item.added được thêm vào input của yêu cầu tiếp theo để duy trì vòng lặp
  • Hệ thống được thiết kế để prompt trước đó trở thành tiền tố (prefix) chính xác của prompt mới, nhờ đó có thể tận dụng cache prompt (prompt caching)

Tối ưu hiệu năng: cache và thiết kế không trạng thái

  • Codex không sử dụng previous_response_id, nhờ đó duy trì cấu trúc yêu cầu hoàn toàn không trạng thái (stateless)
    • Điều này cho phép hỗ trợ khách hàng Zero Data Retention (ZDR) và giảm thiểu việc lưu giữ dữ liệu
  • Cache prompt tái sử dụng cùng một tiền tố để tuyến tính hóa chi phí lấy mẫu (sampling)
    • Cache hit chỉ xảy ra khi tiền tố khớp chính xác với prompt
    • Thay đổi trong danh sách công cụ, mô hình, cấu hình sandbox hay thư mục làm việc sẽ gây ra cache miss
  • Việc thay đổi động các công cụ MCP có thể làm mất cache, nên Codex phản ánh thay đổi bằng cách chèn thông điệp mới

Quản lý cửa sổ ngữ cảnh và nén tự động (compaction)

  • Khi cuộc hội thoại kéo dài, hệ thống thực hiện nén hội thoại (compaction) để tránh vượt quá cửa sổ ngữ cảnh
    • Ban đầu, việc tóm tắt được thực hiện thủ công bằng lệnh /compact, nhưng hiện nay hệ thống tự động dùng endpoint /responses/compact của Responses API
    • Endpoint này trả về mục type=compactionencrypted_content đã mã hóa để duy trì khả năng hiểu của mô hình
  • Khi vượt quá auto_compact_limit, Codex sẽ tự động chạy nén để đảm bảo tính liên tục của cuộc hội thoại

Kết luận và hướng đi tiếp theo

  • Vòng lặp tác nhân của Codex là cấu trúc cốt lõi tích hợp suy luận mô hình, gọi công cụ, cache và quản lý ngữ cảnh
  • Cấu trúc này cho phép thiết kế tác nhân hiệu năng cao, không trạng thái và ưu tiên bảo mật
  • Ở các bài viết tiếp theo, nội bộ của Codex như kiến trúc CLI, triển khai sử dụng công cụ, mô hình sandbox sẽ được đề cập thêm

1 bình luận

 
GN⁺ 2026-01-24
Ý kiến trên Hacker News
  • Điểm hay nhất của bài blog này là nó hoàn toàn không gây ngạc nhiên. Codex CLI là mã nguồn mở, nên có thể xem bên trong mà không cần reverse engineering
    Cách Eric Traut (nhà phát triển nổi tiếng với Pyright) giao tiếp cũng rất tuyệt. Ông ấy tham gia tích cực vào issue và PR
    Kho lưu trữ GitHub

    • Tôi thực sự bất ngờ khi năm ngoái Codex CLI được công khai mã nguồn mở. Nó còn bao gồm cả codex-rs được port từ TypeScript sang Rust, nên rất hữu ích cho ai muốn tìm hiểu cách coding agent hoạt động
      Tôi cũng đã đóng góp một vài cải tiến cho CLI, đồng thời đều đặn theo dõi các bản phát hành và PR để mở rộng hiểu biết
    • Có vẻ nhiều người không biết rằng Claude Code là phần mềm độc quyền
    • Thành thật mà nói, tôi nghĩ lý do Claude Code không open source là vì chất lượng mã quá tệ, đến mức xấu hổ. Tôi đang dùng gói thuê bao 200 USD mỗi tháng, nhưng CLI chậm và hay lỗi nên sắp hủy
    • Tôi muốn biết Codex CLI chỉ là frontend gọi logic từ xa, hay có thể hoạt động đầy đủ ngay cả khi offline. Tôi cũng muốn biết liệu họ có cung cấp weights theo giấy phép FLOW hay có tài liệu hóa quy trình build hay không
  • Điều thú vị là phần nén (compaction) được thực hiện như một “thông điệp được mã hóa nhằm bảo toàn sự hiểu biết tiềm ẩn của mô hình”
    Khi vượt quá auto_compact_limit, Codex tự động dùng endpoint này để giảm ngữ cảnh hội thoại một cách hiệu quả

    • Endpoint compaction của Codex thuộc hàng tốt nhất ngành. Còn của Claude thì gần như tệ nhất
    • Tôi tò mò không biết có thể dùng riêng endpoint compactor hay không. Chúng tôi có một agent loop riêng cho domain của mình, và có vẻ hệ thống nén của Codex sẽ cho hiệu năng tốt hơn hệ thống tự xây của chúng tôi
    • Tôi muốn biết tính năng này có hoạt động với các mô hình không phải của OpenAI hay không
  • Điều khiến tôi ngạc nhiên khi xem bên trong Codex là reasoning token được giữ lại trong vòng lặp gọi tool của agent, nhưng lại bị xóa mỗi khi chuyển sang lượt người dùng mới
    Vì vậy nó có thể giữ ngữ cảnh qua nhiều lượt, nhưng giữa các yêu cầu liên quan của người dùng thì một phần ngữ cảnh có thể bị mất
    Tôi cho mô hình ghi lại tiến độ, kế hoạch hoặc nội dung debug vào file Markdown để nó hoạt động như một dạng snapshot giữa nhiều cửa sổ ngữ cảnh

    • Còn tùy đường dẫn API. Chat completions thì đúng như bạn nói, nhưng với responses v1 API thì ngược lại. reasoning token vẫn được giữ khi gửi tin nhắn tiếp theo. Chỉ là chế độ xhigh tiêu tốn ngữ cảnh nhanh hơn nhiều
    • Không giữ lại reasoning token có khi lại là quyết định đúng. Nếu không, ngữ cảnh vô hình với người dùng sẽ cứ tích tụ, dễ dẫn tới sự lệch nhau giữa hiểu biết của mô hình và người dùng
    • Tôi đã tạo một Codex Reflect Skill để phản ánh các cuộc trò chuyện trước đó, từ đó xây dựng ngữ cảnh bằng các phiên song song
      Kho lưu trữ GitHub
    • Lưu bản ghi cùng với mã thì tiện, nhưng trong môi trường nhóm hoặc khi làm nhiều nhánh cùng lúc thì dễ gây vấn đề. Thí nghiệm tiếp theo của tôi là tách dữ liệu này ra thành một daemon có storage bên ngoài, rồi truy cập qua CLI client
    • Tôi hay dùng agent-shell của emacs, và nó lưu toàn bộ lịch sử hội thoại. Nhờ vậy tôi có thể dễ dàng nói “hãy tham khảo cuộc trò chuyện trước đó”. Việc lưu log là do emacs làm chứ không phải agent, nên không lo bị bỏ sót
  • Điều tôi thực sự muốn ở Codex là tính năng checkpoint kiểu Copilot. Có vài issue liên quan trên GitHub (#2788, #3585) nhưng có vẻ đây chưa phải ưu tiên của nhóm

    • Gemini CLI đã có tính năng này
    • Nhóm Codex nói rằng họ sắp xếp ưu tiên dựa trên số lượng emoji upvote trên GitHub. Nếu có tính năng bạn muốn, hãy nhớ upvote
  • Tôi muốn biết khi tổng hợp chỉ thị người dùng trong agent loop, họ quản lý việc duy trì ngữ cảnh trong hội thoại nhiều lượt như thế nào. Cũng muốn biết họ đã thử các kỹ thuật điều chỉnh động khi yêu cầu người dùng thay đổi hay chưa

  • Tôi thích Codex, nhưng nó có cảm giác chậm hơn giao diện web ChatGPT. Khi cần trao đổi ý tưởng nhanh, tôi vẫn thấy copy-paste trên web hiệu quả hơn
    Codex thường bắt đầu sửa nhầm đoạn mã không liên quan, khiến vòng phản hồi chậm và khá bực bội. Dù vậy, khi hoạt động tốt thì nó rất xuất sắc. Mong rằng một ngày nào đó nó sẽ nhanh như web mà vẫn làm việc được cục bộ

    • Trên giao diện web ChatGPT Plus không có chế độ xhigh reasoning effort của model 5.2
  • Không hẳn là mới, nhưng đây vẫn là một bài viết đáng giá. Tôi muốn việc phản tư (reflect) về loop hay lịch sử trong các coding CLI dạng agent trở nên dễ dàng hơn. Tôi từng thử cách truy vấn lịch sử chat qua MCP, nhưng phải chỉ định tường minh nên khá bất tiện. Có lẽ học liên tục sẽ giải quyết được kiểu vấn đề này

  • Kiểu hành vi này cũng có thể quan sát qua OTEL telemetry. Tôi hay dùng headless codex exec, nhưng hỗ trợ telemetry tích hợp còn thiếu nên rất khó debug
    Vì vậy tôi tự làm codex-plus để dùng. Nó phản chiếu nguyên giao diện codex exec, được xây trên TypeScript SDK, và sau khi chạy sẽ xuất log phiên tới remote OpenTelemetry collector để có thể phân tích bằng codex-plus-log-viewer

  • Phần mô tả skill khiến tôi thấy hơi lạ
    Liên kết mã liên quan
    Tôi thắc mắc tại sao họ không đơn giản là cho lộ trực tiếp file, mà lại để mô hình yêu cầu nó như file thông thường

    • Đó chính là cốt lõi của skill. Cấu trúc này giúp chỉ mở các file liên quan, từ đó giảm mức sử dụng cửa sổ ngữ cảnh
  • Tôi từng tò mò không biết có ai dùng Codex CLI một cách nghiêm túc chưa. Tôi đã thử extension Codex cho VSCode, Gemini CLI và Claude Code CLI, và tất cả đều có hiệu năng rất tệ.
    Nhưng Codex CLI mới viết bằng Rust thì nhanh đến mức điên rồ. UX cũng hoàn hảo, cả những chi tiết nhỏ như phím tắt đều được làm tốt. Theo từng nói rằng “đáng lẽ nên tập trung cải thiện mô hình thay vì tối ưu CLI”, nhưng sau khi dùng thì tôi hoàn toàn không thể đồng ý

    • Tôi thấy Codex CLI tốt hơn Claude Code rất nhiều. Nó làm theo chỉ thị chính xác và không có những hành vi mình không muốn. Với gói 20 USD/tháng, có thể dùng model 5.2 codex high khá thoải mái. Tôi làm việc với các mô hình SSL bioacoustics
    • OpenCode cũng nhanh và ổn định hơn các CLI khác. Gần đây tôi dùng Codex nhiều hơn và sắp hủy Claude Pro. Việc OpenAI chính thức hỗ trợ OpenCode là một điểm hấp dẫn. Tình hình hiện tại có nhiều lựa chọn cạnh tranh như vậy là điều tốt
    • Codex cho kết quả nhất quán trên 95% trong hầu hết tác vụ lập trình. Tuy nhiên với tác vụ phi cấu trúc (ví dụ: hội thoại hay viết truyện), đôi khi nó lại cho ra đầu ra rất kỳ quặc. Tôi từng bị nó rơi vào loop khi đang git rebase. Tôi cũng đã thử Aider, nhưng gần như vô dụng
    • Hiệu quả bộ nhớ và CPU của Codex CLI rất tốt. Hơn nữa nó là mã nguồn mở nên có thể tự kiểm tra cách nó hoạt động. Tôi vẫn khó chịu với phát biểu của Theo
    • Vấn đề của Codex là hiện vẫn chưa có hỗ trợ hook. Tôi đã làm một công cụ dùng hook để giảm 30% mức tiêu thụ token của agent. Thông qua hook, có thể chỉnh lại các hành vi kém hiệu quả của agent theo thời gian thực
      Bài viết liên quan: Scribe Swebench Benchmark