Cách OpenAI sử dụng Codex
Codex được sử dụng hằng ngày trên nhiều nhóm kỹ thuật tại OpenAI như Bảo mật, Kỹ thuật sản phẩm, Frontend, API, Hạ tầng và Kỹ thuật hiệu năng. Các nhóm đang sử dụng nó để đẩy nhanh nhiều tác vụ kỹ thuật, từ hiểu các hệ thống phức tạp và tái cấu trúc các cơ sở mã lớn đến phát hành các tính năng mới và xử lý sự cố trong thời hạn gấp rút.
Dựa trên các cuộc phỏng vấn với các kỹ sư của OpenAI và dữ liệu sử dụng nội bộ, chúng tôi đã tổng hợp các trường hợp sử dụng và phương pháp hay nhất, làm nổi bật cách Codex giúp các nhóm của chúng tôi làm việc nhanh hơn, cải thiện chất lượng công việc và quản lý sự phức tạp ở quy mô lớn.
Codex giúp các nhóm của chúng tôi nhanh chóng nắm bắt các phần chưa quen thuộc của cơ sở mã khi làm quen, gỡ lỗi hoặc điều tra sự cố.
Họ thường dùng Codex để xác định logic cốt lõi của một tính năng, lập sơ đồ mối quan hệ giữa các dịch vụ hoặc mô-đun và lần theo luồng dữ liệu trong hệ thống. Điều này cũng giúp làm rõ các mẫu kiến trúc hoặc những phần tài liệu còn thiếu—những thứ mà nếu không thì sẽ cần rất nhiều công sức thủ công để tạo ra.
Trong quá trình ứng phó sự cố, Codex giúp các kỹ sư nhanh chóng làm quen với các lĩnh vực mới bằng cách làm rõ các tương tác giữa các thành phần hoặc theo dõi cách các trạng thái lỗi lan truyền trên các hệ thống.
Giai thoại từ đội ngũ của chúng tôi
“Khi tôi sửa lỗi, tôi sử dụng chế độ Ask để xem cùng một vấn đề đó có thể xuất hiện ở đâu khác trong cơ sở mã”
Logic xác thực được triển khai ở đâu trong kho lưu trữ mã nguồn này?
Tóm tắt cách các yêu cầu đi qua dịch vụ này từ điểm vào đến phản hồi.
Những mô-đun nào tương tác với [insert module name] và các lỗi được xử lý như thế nào?
Codex thường được sử dụng để thực hiện các thay đổi trên nhiều tệp hoặc gói. Ví dụ, khi các kỹ sư đang cập nhật một API, thay đổi cách một mẫu được triển khai hoặc chuyển sang một phần phụ thuộc mới, Codex giúp việc áp dụng các thay đổi một cách nhất quán trở nên dễ dàng.
Điều này đặc biệt hữu ích khi cần thực hiện cùng một bản cập nhật trên hàng chục tệp hoặc khi bản cập nhật đòi hỏi phải nhận biết cấu trúc và các phần phụ thuộc mà regex hoặc thao tác tìm và thay thế khó có thể phát hiện.
Họ cũng đang sử dụng nó để dọn dẹp mã bằng cách tách các mô-đun quá khổ, thay thế các mẫu cũ bằng các mẫu hiện đại hơn hoặc chuẩn bị mã để dễ kiểm thử hơn.
Giai thoại từ đội ngũ của chúng tôi
“Codex đã thay mọi getUserById( ) cũ bằng mẫu dịch vụ mới của chúng tôi và mở PR. Nó hoàn thành trong vài phút những gì lẽ ra phải mất hàng giờ.”
Tách tệp này thành các mô-đun riêng biệt theo từng chức năng và tạo kiểm thử cho từng mô-đun.
Chuyển đổi mọi truy cập cơ sở dữ liệu dựa trên callback sang async/await.
Codex được sử dụng để xác định và giải quyết các điểm tắc nghẽn hiệu suất.
Trong quá trình tinh chỉnh hoặc cải thiện độ tin cậy, các kỹ sư đưa ra câu lệnh cho Codex để phân tích các luồng mã chậm hoặc tiêu tốn nhiều bộ nhớ, chẳng hạn như các vòng lặp kém hiệu quả, các thao tác dư thừa hoặc các truy vấn tốn kém, đồng thời đề xuất các phương án thay thế đã được tối ưu hóa, thường mang lại những cải thiện đáng kể về hiệu quả và độ tin cậy.
Codex cũng được sử dụng để hỗ trợ sức khỏe mã bằng cách xác định các mẫu rủi ro hoặc đã lỗi thời vẫn đang được sử dụng tích cực. Các nhóm của chúng tôi dựa vào công cụ này để giúp giảm nợ kỹ thuật dài hạn và chủ động ngăn ngừa các lỗi hồi quy.
Giai thoại từ đội ngũ của chúng tôi
“Tôi dùng Codex để quét tìm các lệnh gọi DB tốn kém lặp đi lặp lại. Nó rất giỏi trong việc xác định các điểm nóng và phác thảo các truy vấn theo lô mà sau đó tôi có thể tinh chỉnh.”
Tối ưu hóa vòng lặp này để đạt hiệu quả bộ nhớ và giải thích tại sao phiên bản của bạn nhanh hơn.
Tìm các thao tác tốn kém lặp đi lặp lại trong trình xử lý yêu cầu này và đề xuất các cơ hội áp dụng bộ nhớ đệm.
Đề xuất một cách nhanh hơn để thực hiện truy vấn DB theo lô trong hàm này.
Codex giúp các kỹ sư viết kiểm thử nhanh hơn — đặc biệt ở những nơi phạm vi kiểm thử còn hạn chế hoặc hoàn toàn thiếu.
Khi thực hiện sửa lỗi hoặc tái cấu trúc, các kỹ sư thường yêu cầu Codex đề xuất các bài kiểm thử bao quát các trường hợp ngoại lệ hoặc đường dẫn dễ xảy ra lỗi. Đối với mã mới, nó có thể tạo các bài kiểm thử đơn vị hoặc tích hợp dựa trên chữ ký hàm và logic liên quan.
Codex đặc biệt hữu ích trong việc xác định các điều kiện biên như đầu vào trống, độ dài tối đa hoặc các trạng thái bất thường nhưng hợp lệ thường bị bỏ sót trong các bài kiểm thử ban đầu.
Giai thoại từ đội ngũ của chúng tôi
“Tôi cho Codex xử lý các mô-đun có độ bao phủ kiểm thử thấp qua đêm và sáng ra đã có các PR kiểm thử đơn vị có thể chạy được.”
Viết kiểm thử đơn vị cho hàm này, bao gồm cả các trường hợp biên và các luồng lỗi.
Tạo kiểm thử dựa trên thuộc tính cho tiện ích sắp xếp này.
Mở rộng tệp kiểm thử này để bao quát các trường hợp còn thiếu liên quan đến đầu vào null và các trạng thái không hợp lệ.
Codex giúp các nhóm làm việc nhanh hơn bằng cách tăng tốc cả giai đoạn bắt đầu và giai đoạn kết thúc của chu kỳ phát triển.
Khi bắt tay vào một tính năng mới, các kỹ sư sử dụng nó để dựng phần mã mẫu — tạo thư mục, mô-đun và các stub API nhằm nhanh chóng có được mã có thể chạy được mà không cần tự nối thủ công từng phần.
Khi các dự án sắp phát hành, Codex giúp đáp ứng thời hạn chặt chẽ bằng cách xử lý các tác vụ nhỏ hơn nhưng thiết yếu như phân loại lỗi, lấp đầy khoảng trống triển khai chặng cuối và tạo tập lệnh triển khai, móc đo từ xa hoặc tệp cấu hình.
Nó cũng được dùng để chuyển đổi phản hồi sản phẩm thành mã khởi đầu. Các kỹ sư thường dán vào một yêu cầu của người dùng hoặc bản đặc tả và để Codex tạo ra một bản nháp sơ bộ mà sau này họ có thể quay lại và tinh chỉnh.
“Tôi họp cả ngày mà vẫn hợp nhất được 4 PR vì Codex đang chạy ngầm.”
Tạo khung một route API mới cho POST /events với xác thực cơ bản và ghi nhật ký.
Tạo một hook đo từ xa để theo dõi thành công/thất bại của luồng onboarding mới, sử dụng mẫu này [insert example of your telemetry code].
Hãy tạo một bản triển khai khung dựa trên đặc tả này: [insert spec or product feedback].
Codex giúp các kỹ sư của chúng tôi duy trì năng suất khi lịch trình của họ bị phân tán và thường xuyên bị gián đoạn.
Nó được dùng để ghi lại những công việc còn dang dở, biến ghi chú thành các nguyên mẫu có thể hoạt động, hoặc tách ra các tác vụ mang tính khám phá để có thể xem lại sau. Điều này giúp họ dễ dàng tạm dừng và tiếp tục công việc mà không bị mất ngữ cảnh, đặc biệt là khi họ đang trực hoặc có nhiều cuộc họp.
“Nếu tôi phát hiện một lỗi có thể tiện tay sửa luôn, tôi sẽ giao một tác vụ cho Codex thay vì chuyển nhánh, rồi xem lại PR mà nó tạo ra khi rảnh rỗi.”
Codex cũng hữu ích cho các công việc mang tính mở, chẳng hạn như tìm kiếm các giải pháp thay thế hoặc xác nhận các quyết định thiết kế. Bạn có thể dùng câu lệnh để yêu cầu các cách khác nhau nhằm giải quyết một vấn đề, khám phá các mô hình không quen thuộc hoặc kiểm tra tính đúng đắn của các giả định. Điều này giúp làm rõ những điểm đánh đổi, mở rộng các phương án thiết kế và tinh chỉnh các lựa chọn triển khai.
Nó cũng được dùng để xác định các lỗi liên quan. Khi gặp một vấn đề đã biết hoặc một phương thức đã bị ngừng dùng, Codex có thể xác định các mẫu tương tự ở những nơi khác trong mã, giúp việc phát hiện lỗi hồi quy hoặc hoàn tất công việc dọn dẹp trở nên dễ dàng hơn.
“Codex giúp tôi giải quyết vấn đề khởi đầu từ con số không — tôi dán bản đặc tả và tài liệu vào, rồi nó tạo khung mã hoặc chỉ ra những gì tôi còn thiếu.”
Điều này sẽ hoạt động như thế nào nếu hệ thống hướng sự kiện thay vì yêu cầu/phản hồi?
Tìm tất cả các mô-đun tự tạo chuỗi SQL bằng tay thay vì sử dụng trình tạo truy vấn của chúng tôi.
Viết lại nội dung này theo phong cách lập trình hàm hơn, tránh thay đổi trực tiếp dữ liệu và tác dụng phụ.
Codex hoạt động tốt nhất khi được cung cấp cấu trúc, ngữ cảnh và không gian để thử nghiệm và cải tiến. Dưới đây là một số thói quen mà các nhóm OpenAI đang xây dựng để liên tục khai thác giá trị từ Codex trong công việc hàng ngày.
Đối với những thay đổi lớn, hãy bắt đầu bằng cách câu lệnh Codex lập kế hoạch triển khai bằng chế độ Hỏi, kế hoạch này sau đó sẽ trở thành dữ liệu đầu vào cho các câu lệnh tiếp theo khi bạn chuyển sang chế độ Mã hóa. Quy trình hai bước này giúp Codex hoạt động ổn định và tránh được lỗi trong kết quả đầu ra. Codex hoạt động hiệu quả nhất với các nhiệm vụ được xác định rõ ràng, mà bạn hoặc đồng đội của bạn sẽ mất khoảng một giờ để hoàn thành hoặc cần vài trăm dòng mã để triển khai. Khi các mô hình được cải tiến, hãy kỳ vọng rằng quy mô các nhiệm vụ mà chúng có thể đảm nhận sẽ tăng lên.
Việc thiết lập tập lệnh khởi động, biến môi trường và truy cập internet giúp giảm đáng kể tỷ lệ lỗi của Codex. Trong quá trình chạy các tác vụ, hãy tìm kiếm các lỗi biên dịch có thể được khắc phục trong cấu hình môi trường của Codex. Quá trình này có thể cần một vài lần lặp lại, nhưng sẽ mang lại hiệu quả đáng kể về lâu dài.
Codex phản ứng tốt hơn khi câu lệnh phản ánh cách bạn mô tả sự thay đổi trong PR hoặc vấn đề. Điều đó có nghĩa là bao gồm đường dẫn tệp, tên thành phần, sự khác biệt và các đoạn trích tài liệu khi cần thiết. Việc đưa ra lời nhắc theo các mẫu như “Hãy thực hiện điều này theo cách tương tự như trong [mô-đun X]” sẽ cải thiện kết quả.
Giao nhiệm vụ nhanh chóng để ghi lại các ý tưởng ngoài lề, công việc dang dở hoặc các chỉnh sửa phát sinh. Không có áp lực để tạo ra một PR đầy đủ trong một lần. Codex hoạt động tốt như một khu vực chuẩn bị mà bạn có thể quay lại khi đã tập trung trở lại.
Duy trì tệp AGENTS.md để giúp Codex hoạt động hiệu quả hơn trong kho lưu trữ của bạn qua các câu lệnh. Các tập tin này thường bao gồm các quy ước đặt tên, logic nghiệp vụ, các điểm bất thường đã biết hoặc các phụ thuộc mà Codex không thể suy ra chỉ từ mã nguồn. Tìm hiểu thêm về cách cấu trúc tệp AGENTS.md của bạn trong tài liệu.
Tính năng Best-of-N cho phép bạn đồng thời tạo nhiều phản hồi cho một tác vụ để nhanh chóng khám phá nhiều phương án và chọn phương án tốt nhất. Đối với các tác vụ phức tạp hơn, bạn có thể xem lại một số lần lặp và kết hợp các phần từ những câu trả lời khác nhau để có được kết quả tốt hơn.
Codex vẫn đang ở giai đoạn bản xem trước nghiên cứu, nhưng nó đã tạo ra tác động thực sự đến cách chúng tôi xây dựng, giúp chúng tôi tiến nhanh hơn, viết mã tốt hơn và đảm nhận những công việc mà nếu không thì sẽ không bao giờ được ưu tiên hóa.
Chúng tôi rất hào hứng về tiềm năng phía trước — khi các mô hình của chúng tôi ngày càng được cải thiện và Codex được tích hợp sâu hơn vào quy trình làm việc, chúng tôi mong chờ mở ra những cách thức mạnh mẽ hơn để phát triển phần mềm với công cụ này. Chúng tôi sẽ tiếp tục chia sẻ những gì chúng tôi học được trong suốt hành trình này.


