Mời bạn đọc theo dõi "Featured Post":

Giáo Sư Đào Mộng Nam: Truyện Kiều Và Chữ Nho

Showing posts with label Chip Huyen. Show all posts
Showing posts with label Chip Huyen. Show all posts

8.29.2026

Chip Huyen trả lời phỏng vấn về quyển sách của cô: "AI Engineering"

From Hoctro: Tôi rất hãnh diện là người Việt Nam khi thấy một đồng hương tuổi trẻ tài cao - cô Chip Huyen - một best-seller trên Amazon, một kỹ sư AI rất được kính trọng trên trường quốc tế, ngoài ra cô còn là một giáo sư tại đại học Stanford. Tôi đã mua quyển sách của cô, rất hay, có thể nói là hay nhất trong những sách về thực hành AI như là một ngành kỹ thuật (engineering discipline) mà tôi đã mua hay đọc qua.


Chip Huyen, tác giả cuốn sách bán chạy của O'Reilly, AI Engineering, giải thích vì sao xây dựng ứng dụng trên nền các mô hình nền tảng (foundation models) là một ngành hoàn toàn khác với kỹ thuật học máy (machine learning engineering) — và vì sao fine-tuning nên là phương án cuối cùng, chứ không phải bước đi đầu tiên.

Trích từ "The Pragmatic Engineer" — một podcast do Gergely Orosz dẫn dắt.
Khách mời: Chip Huyen, nhà khoa học máy tính, tác giả cuốn AI Engineering: Building Applications with Foundation Models (O'Reilly).
Phát hành: 5 tháng 2, 2025.




Giới Thiệu

Chip Huyen là nhà khoa học máy tính kiêm nhà văn, tác giả cuốn sách AI Engineering — hiện là đầu sách được đọc nhiều nhất trên nền tảng O'Reilly. Trước đây cô từng là nhà nghiên cứu tại Netflix, là một trong những người phát triển cốt lõi của NeMo (framework GenAI của NVIDIA), từng làm kỹ sư ML tại Snorkel AI, và sáng lập rồi bán lại một startup AI tên Claypot AI. Cô từng dạy môn thiết kế hệ thống machine learning tại Stanford, và cuốn sách hiện tại là cuốn thứ hai của cô về ML và AI engineering. Trong cuộc trò chuyện này, host Gergely Orosz và Chip bàn về AI engineering là gì, vì sao nó cảm giác "full-stack" hơn hẳn so với machine learning engineering trước đây, các bước điển hình để xây dựng một ứng dụng AI — từ chọn mô hình, dùng RAG, cho đến fine-tuning — và những cách thực tế để một kỹ sư phần mềm bắt đầu xây dựng ứng dụng AI.

GERGELY OROSZ: Chip, chào mừng bạn đến với podcast.

CHIP HUYEN: Chào mọi người, tôi là Chip. Tôi rất vui được có mặt ở đây.

GERGELY: Tôi đã theo dõi newsletter của bạn một thời gian rồi, nên tôi rất mong chờ buổi trò chuyện này. Trước hết, tôi thực sự muốn chúc mừng bạn về cuốn sách này. Tôi đã bắt đầu đọc — chưa đọc hết, nhưng đã đọc một số chương và đi sâu vào vài phần. Điều tôi nhận thấy là, khi nhìn vào mục lục, tôi nghĩ, ồ, cái này ổn đấy về mặt độ rộng — nó đi từ cách hiểu các mô hình nền tảng, cách đánh giá chúng, prompt engineering là gì, rồi đến những thứ như fine-tuning, RAG, xây dựng tập dữ liệu. Nhưng trong mỗi phần đó, nó lại bắt đầu đi rất sâu — có phần mở đầu, nhưng rồi càng lúc càng đào sâu hơn. Ví dụ, với chương về phương pháp luận đánh giá — chỉ nhìn vào mục lục thôi — tôi bắt đầu đọc và nghĩ, ừ thì mình biết đánh giá mô hình AI là quan trọng, biết là khó hơn, nhưng rồi bạn lại đi vào những thứ như LLM-as-judge, hay xếp hạng mô hình bằng đánh giá so sánh, và những thách thức của nó. Đó là những chỗ mà đôi lúc tôi phải chậm lại, phải tra cứu thêm. Nên nó thực sự đi sâu vào rất nhiều phần, điều mà tôi thấy khá thú vị — vừa có độ rộng, vừa có độ sâu. Đây chắc chắn không phải một cuốn sách đọc nhanh được, nhưng là kiểu sách tôi sẽ cứ quay lại đọc mãi.

CHIP: Cảm ơn bạn. Viết nó cũng chẳng nhanh chút nào — mất khá lâu, và rất nhiều tài liệu tham khảo. Tôi trích dẫn hơn một nghìn tài liệu tham khảo trong sách, nên lẽ ra tôi còn phải đọc nhiều hơn nữa. Tôi đã lục qua rất nhiều repo trên GitHub — tôi có một bảng theo dõi hàng nghìn repo, ít nhất 800 sao trở lên — nên tôi đã đi qua rất nhiều codebase như vậy, cùng rất nhiều bài blog, và cả những cuốn sách khác, có cuốn từ những năm bảy mươi, tám mươi, chín mươi. Tôi cũng công bố khoảng một trăm liên kết tham khảo mà tôi thấy thực sự hữu ích trong quá trình viết sách, nên nếu bạn chỉ muốn xem riêng phần tham khảo đó, chúng có trên GitHub của tôi.

GERGELY: Và tôi khá bất ngờ với một số nghiên cứu thực sự nguyên bản — không chỉ là bạn viết về những bài báo đó, hay đây là những gì tôi đã đọc, mà — như bạn vừa nhắc đến con số một nghìn repo — bạn thực sự có hẳn một phần nói về việc số lượng repo trên GitHub thay đổi theo thời gian như thế nào: những repo về hạ tầng, những repo ở tầng ứng dụng, và nhiều thứ khác. Bạn có hơn 900 repo được lập bản đồ ra. Tôi chưa từng thấy cái gì như vậy, và rõ ràng đó là công sức tự bạn phân tích, tự nghiên cứu.

CHIP: Vâng, tôi cảm thấy mình làm khá nhiều "lao động chân tay" theo kiểu đó. Tôi nghĩ mình nhận được rất nhiều giá trị từ việc làm mọi thứ theo cách không tối ưu. Tôi thấy nhiều người tập trung vào việc "cách nào nhanh nhất, cách nào là con đường ngắn nhất" — nhưng nếu bạn sẵn sàng bỏ công sức vào những việc mà nhiều người không sẵn lòng làm, tôi nghĩ bạn sẽ có được những hiểu biết mà người khác không có được.


I. AI Engineering Là Gì?

GERGELY: Có một điều khá thú vị về cuốn sách này — nó nói về AI engineering, mà lĩnh vực này lại thay đổi rất nhanh — chỉ trong một tuần chúng ta đã có một mô hình mới ra mắt, ví dụ như DeepSeek, thứ mà mọi người đã bàn tán mấy tuần nay. Bạn viết cuốn sách này như thế nào? Làm sao bạn có thể viết một cuốn sách về một ngành thay đổi nhanh đến vậy, để đến khi nó được phát hành — rõ ràng là vài tháng sau khi bạn viết xong — nó vẫn còn liên quan?

CHIP: Đó là một câu hỏi rất hay. Khi tôi bắt đầu viết cuốn sách, tôi cũng nghĩ y như vậy — tôi nghĩ đây không phải thời điểm đúng để viết, vì có quá nhiều thứ vẫn đang thay đổi. Nhưng rồi, khi ChatGPT thực sự ra mắt, giống như bao người khác, tôi rơi vào một cuộc khủng hoảng hiện sinh. Tôi ở trong một nhóm chat và mọi người đều kiểu, "ôi không, điều này có nghĩa gì với chúng ta, những kỹ sư." Tôi thấy mình gắn với hai vai trò — một là kỹ sư, hai là người viết. Và đoán xem, những use case mà AI làm tốt nhất chính là viết code, và viết lách. Nên tôi kiểu, ôi trời, vậy điều này có ý nghĩa gì với mình đây?

Thế là tôi bắt đầu phỏng vấn rất nhiều người, đọc rất nhiều, nói chuyện với vô số người, và ghi chép lại rất nhiều. Trong quá trình đó, điều tôi nhận ra là, rất nhiều thứ tưởng như mới thật ra các nền tảng cơ bản đã tồn tại từ lâu rồi. Mô hình hóa ngôn ngữ (language modeling) không phải là một tác vụ mới — Claude Shannon đã giới thiệu nó từ những năm 1950. Chúng ta cứ nói về RAG suốt, nhưng RAG cũng không mới — nó dựa trên retrieval-augmented generation (sinh văn bản có tăng cường truy hồi), và truy hồi (retrieval) là một công nghệ rất cũ, đã đang vận hành rất nhiều use case trên khắp internet rồi, như tìm kiếm hay hệ thống gợi ý. Cơ sở dữ liệu vector cũng đã tồn tại một thời gian, và tìm kiếm vector đã có sẵn rất nhiều thuật toán hay ho.

Nên tôi nghĩ, được rồi — trước hết, rất nhiều thứ thật ra không mới. Và thứ hai, tôi cố tập trung vào việc tự hỏi: đây là do một giới hạn nền tảng của AI, hay chỉ là do năng lực hiện tại, tạm thời của AI? Và nếu đó là do năng lực hiện tại, thì năng lực đó đang thay đổi nhanh cỡ nào? Ví dụ, trong những ngày đầu, rất nhiều người chia sẻ các mẹo prompt — kiểu, thử "hối lộ" mô hình, "này, nếu bạn trả lời đúng câu này tôi sẽ cho bạn 200 đô" — hay người ta nói về độ bền vững của prompt (prompt robustness), tức mô hình nhạy cảm thế nào với những thay đổi nhỏ trong prompt. Tôi đọc về điều này và cảm thấy mô hình đang ngày càng bền vững hơn với prompt — ví dụ, từ GPT-3 lên GPT-3.5, nó đã bền vững hơn rất nhiều, nghĩa là những thay đổi nhỏ trong prompt tạo ra ít biến động hơn hẳn trong hiệu năng mô hình. Nên tôi cảm thấy kiểu mẹo này sẽ không tồn tại lâu — các mẹo prompt sẽ không còn quan trọng bao lâu nữa. Và điều đó đã xảy ra ngay lúc mọi người đang nói về khả năng có một nghề gọi là "prompt engineer." Người ta đã thấy xu hướng đó đi xuống rồi.

Nên tôi nghĩ viết sách kiểu như đặt cược — khi bạn viết về một chủ đề, bạn đang cược xem nó có còn liên quan trong tương lai hay không. Tôi cố nhìn vào quỹ đạo tiến bộ để xem điều gì vẫn còn đúng sau một hai năm nữa. Một ví dụ khác là độ dài ngữ cảnh (context length) — người ta muốn ngữ cảnh dài hơn, nhưng tôi thấy nó tăng nhanh khủng khiếp, từ khoảng 8.000 token lên 128.000 chỉ trong vài tháng. Siêu nhanh. Nên tôi nghĩ, có lẽ câu hỏi không phải là độ dài ngữ cảnh, mà là hiệu quả sử dụng ngữ cảnh — liệu mô hình có thực sự dùng tốt ngữ cảnh đó không? Đó là những kiểu "cược" tôi đã đặt, và có những sự kiện xảy ra trong quá trình viết khiến tôi tự tin hơn vào các cược đó. Đa phương thức (multimodality) là một ví dụ khác — khi tôi viết về mô hình đa phương thức hồi 2023, người ta bảo tôi là quá sớm, rằng mọi người vẫn còn đang tập trung vào ngôn ngữ, chưa đến lúc đó đâu. Nhưng với tôi nó cảm giác là điều tất yếu — chúng ta đã học được cách làm việc với ngôn ngữ, nhưng tôi muốn làm nhiều hơn thế. Và giờ đa phương thức có ở khắp mọi nơi — gần như mọi mô hình bây giờ đều đa phương thức.


II. Giữ Một Cuốn Sách Luôn Cập Nhật Trong Một Lĩnh Vực Thay Đổi Từng Tuần

GERGELY: Tên cuốn sách là AI Engineering, và giờ chúng ta cũng có thuật ngữ "AI engineer" đang lan rộng như cháy rừng. Bạn định nghĩa AI engineer, hay AI engineering, như thế nào? Vì tôi cảm thấy nó đã trở thành một thuật ngữ khá "nặng" (loaded) dạo gần đây.

CHIP: Đúng vậy. Tôi cảm thấy rất nhiều thuật ngữ bây giờ trở nên "nặng" — bạn không được phép nói cái này nữa, không được dùng từ kia nữa. Khi tôi đang vò đầu bứt tai chọn tên cho cuốn sách, tôi biết chúng ta cần một thuật ngữ khác với "machine learning engineering." Lý do là, với các mô hình nền tảng, rất nhiều nền tảng cơ bản, các cách tiếp cận có hệ thống, vẫn giống với machine learning engineering, nhưng cũng có rất nhiều thứ mới.

Một điều là: trước đây, nếu bạn muốn xây một ứng dụng machine learning, bạn phải tự xây mô hình của riêng mình — nghĩa là bạn cần dữ liệu của riêng mình, và cần chuyên môn để huấn luyện và "chăm sóc" một mô hình. Ngày nay, nếu bạn muốn xây một ứng dụng tận dụng machine learning hay AI, bạn chỉ cần gửi thẳng một API call và có ngay quyền truy cập vào năng lực tuyệt vời này. Điều đó thực sự hạ thấp rào cản gia nhập — bạn không cần dữ liệu nữa, không cần bằng cấp AI hoành tráng gì nữa.

Điều thứ hai là: trước đây, bạn cần kênh phân phối, vì bạn triển khai ứng dụng machine learning như một phần của ứng dụng đã có sẵn. Nếu bạn xây một hệ thống gợi ý (recommender system), bạn cần một trang thương mại điện tử để gắn nó vào. Phát hiện gian lận (fraud detection) được triển khai như một phần của, chẳng hạn, ứng dụng ngân hàng hay thanh toán. Nhưng giờ bạn có thể tung nó ra như một ứng dụng độc lập — bạn không cần kênh phân phối có sẵn, dù có kênh phân phối vẫn rất hữu ích.

Một điều rất lớn khác là đây là một sự dịch chuyển — bớt machine learning đi, thêm engineering và sản phẩm vào. Trước đây, nếu bạn là một kỹ sư machine learning giỏi, bạn bắt đầu từ dữ liệu — bạn phải thu thập dữ liệu, có thể có gán nhãn của con người, rồi bạn huấn luyện mô hình, và khi mô hình đã tốt, bạn triển khai nó vào sản phẩm. Ngày nay, bạn thực sự bắt đầu bằng một bản demo — bạn có một ý tưởng hay, bạn nói, "thử xem nó có chạy không đã." Bạn bắt đầu từ sản phẩm, và khi nó hoạt động khá tốt rồi, bạn nói, "tôi muốn làm nó tốt hơn," thế là bạn bắt đầu thu thập thêm dữ liệu — có thể là thêm ví dụ cho prompt, hoặc, trong những trường hợp rất hiếm (tôi không khuyến khích hầu hết mọi người làm điều này ngay từ đầu), là fine-tuning. Rồi có thể bạn đang gửi rất nhiều API call đến OpenAI, Anthropic, Google, và bạn quyết định việc này ngày càng đắt đỏ, nên bạn bắt đầu tự host mô hình của mình, dùng một lựa chọn mã nguồn mở, hoặc fine-tune một mô hình.

Vậy nên trước đây, machine learning engineering đi từ dữ liệu, đến mô hình, đến sản phẩm. Còn bây giờ, với AI engineering, nó đi từ sản phẩm, đến dữ liệu, đến mô hình. Điều đó đặt trọng tâm nhiều hơn vào sản phẩm và dữ liệu, chính là nơi tạo ra lợi thế cạnh tranh khi mọi người đều dùng chung những năng lực AI nền tảng tương tự nhau. Tôi thực sự nghĩ chúng ta cần một thuật ngữ khác để tách biệt khỏi machine learning engineering, nhưng tôi không biết nên dùng từ nào — nên tôi nghĩ, thôi thì cứ hỏi mọi người. Tôi khảo sát một nhóm người mà tôi nghĩ đang làm công việc này — xây ứng dụng trên nền các mô hình nền tảng — và gần như tất cả đều nói "AI engineering." Nên tôi nghĩ, được rồi, nếu đó là cái mọi người đã đang gọi, thì cứ dùng nó thôi.

GERGELY: Vậy có phải tôi hiểu đúng là: sự khác biệt lớn nhất là các kỹ sư machine learning phải làm nhiều công việc nền tảng hơn — thu thập dữ liệu và xây mô hình — trong khi với AI engineering, bạn có sẵn nhiều thứ đó, ít nhất là ban đầu, thông qua API, nên nó mang hơi hướng engineering nhiều hơn, bạn "ráp" mọi thứ lại với nhau, và rồi theo thời gian, khi mọi thứ trở nên nghiêm túc hơn, hay sản phẩm lớn hơn, bạn mới làm nhiều hơn việc — bạn có thể tự xây mô hình, host nó, thậm chí một ngày nào đó tự xây mô hình riêng, nhưng nó đến muộn hơn nhiều. Nên rất nhiều công việc machine learning engineering chỉ xuất hiện nếu sản phẩm đủ lớn, nếu nó hoạt động, v.v., trong khi với AI engineering thì ngược lại — bạn bỏ hết công sức vào trước, rồi mới xem nó có chạy không.

CHIP: Đầu tiên, tôi cảm thấy mỗi công ty có một định nghĩa khác nhau về vai trò này — ngay cả trong cùng một công ty, người có cùng chức danh cũng có thể làm những việc rất khác nhau, nên nó không bao giờ là một định nghĩa rạch ròi. Thứ hai, tôi không nghĩ câu hỏi thực sự là "machine [learning] hay engineering." Trong đại đa số các hệ thống GenAI mà tôi từng thấy, vẫn có một thành phần machine learning truyền thống, hay bộ phân loại (classifier), rất mạnh. Hãy tưởng tượng bạn đang xây một chatbot chăm sóc khách hàng — mỗi khi tôi hỏi điều này tại một hội nghị, tôi thấy rất nhiều người giơ tay, đây là một ứng dụng GenAI kinh điển. Bạn nhận một yêu cầu từ khách hàng, và có thể có vài giải pháp khác nhau cho nó — nếu là câu hỏi dễ, bạn gửi đến một mô hình rẻ; nếu khó hơn, bạn gửi đến mô hình đắt hơn. Nhưng có thứ gì đó rất nhạy cảm, kiểu "này, sao tôi bị tính tiền hai lần trong hóa đơn tháng trước," bạn có lẽ muốn gửi đến một nhân viên hỗ trợ là con người. Nên bạn sẽ có một bộ định tuyến (router), hay một bộ phân loại ý định (intent classifier), để quyết định cái gì đi đâu — đó là một mô hình machine learning cổ điển, truyền thống mà bạn có thể tự xây. Hoặc, sau khi bạn nhận được phản hồi từ một mô hình AI, bạn có thể kiểm tra xem nó có chứa PII (thông tin định danh cá nhân) không, vì bạn không muốn gửi cho người dùng một phản hồi chứa thông tin riêng tư — phát hiện PII có thể là một bộ phân loại, phát hiện độc hại (toxicity) cũng có thể là một bộ phân loại. Truy hồi (retrieval) trong hệ thống RAG cũng vậy, tôi nghĩ nó thuộc phạm trù machine learning cổ điển mà bạn có thể tự xây được.


III. Từ Dữ Liệu → Mô Hình → Sản Phẩm, Đến Sản Phẩm → Dữ Liệu → Mô Hình

GERGELY: Những kỹ thuật phổ biến nhất khi xây dựng ứng dụng AI là gì — những thứ mà một kỹ sư phần mềm đang bước vào AI engineering nên biết? Giả định ở đây là bạn đã thử nhiều giải pháp khác, và giờ bạn nghĩ GenAI là giải pháp cho mình — vậy trước tiên nên làm gì?

CHIP: Tôi nghĩ những kỹ thuật đó đều hữu ích, và một khuôn mẫu phổ biến mà tôi thấy là một lộ trình phát triển nhất định. Ban đầu, điều đầu tiên tôi muốn nói là hãy cố hiểu thế nào là một phản hồi tốt và thế nào là một phản hồi tệ — bạn cần một mô hình tư duy (mental model) về điều đó, và nó không phải lúc nào cũng trực giác. LinkedIn có một ví dụ rất hay — họ xây một công cụ đánh giá mức độ phù hợp công việc cho ứng viên, và họ nhận ra rằng phần lớn thời gian của họ dành ra chỉ để hiểu điều ứng viên thực sự cần từ mô hình. Ban đầu họ tập trung vào tính đúng đắn, nhưng họ nhận ra ứng viên không thấy điều đó hữu ích — nếu một ứng viên hỏi mô hình, "tôi có phù hợp với công việc này không," và AI trả lời, "bạn hoàn toàn không phù hợp," thì ứng viên sẽ nghĩ, "được rồi, vậy tôi phải làm gì với thông tin này đây?" Điều ứng viên thực sự muốn là hiểu rõ hơn về những khoảng trống (gap), và làm sao để lấp đầy chúng, hoặc gợi ý những vai trò khác phù hợp hơn với họ ngay lúc này. Vậy nên khi đã có bức tranh đó, bạn xây một bộ hướng dẫn — với kiểu phản hồi này, hãy trả lời như thế này, hãy hữu ích, chỉ ra khoảng trống cho họ — một hướng dẫn rất rõ ràng cho mô hình, ngay trong prompt. Bạn thử các prompt đó, nhìn vào kết quả, thêm ví dụ, rồi tiếp tục cho đến khi có được những phản hồi thực sự tốt. Sau đó bạn đánh giá — có thể tạo một tập câu hỏi và phản hồi mong đợi, dùng cả các chỉ số tự động, như LLM-as-judge, lẫn đánh giá của con người, để đo tiến độ.


IV. Những Bước Đầu Tiên: Prompt, Ngữ Cảnh, và RAG

Sau khi đã làm xong phần prompting và thêm ví dụ, bạn có thể muốn làm hệ thống phức tạp hơn — cho mô hình thêm ngữ cảnh để nó trả lời tốt hơn. Vậy nên khi người dùng đặt câu hỏi, bạn có thể để mô hình lấy ra các tài liệu liên quan, hay các tin tuyển dụng, hay thông tin về công ty, hay hồ sơ (résumé) của ứng viên. Bạn xây một hệ thống tăng cường ngữ cảnh bằng tài liệu — đó là mô hình RAG. Tôi thực sự nghĩ RAG là một mô hình rất mạnh, và chẳng có gì cầu kỳ trong đó cả.

Điều thú vị là nhiều người đồng nhất RAG với tìm kiếm vector (vector search). Khi người ta nói "tôi muốn dùng RAG," câu hỏi tiếp theo họ hỏi luôn là "vậy tôi nên dùng cơ sở dữ liệu vector nào" — người ta nhảy thẳng vào vector search.

GERGELY: Đúng vậy, vì bạn có các đoạn văn bản (chunk), và embedding có thể được lưu dưới dạng vector, nên là kỹ sư, chúng ta kiểu, "tôi cần một cơ sở dữ liệu tìm kiếm vector."

CHIP: Người ta yêu database mà. Nhưng tôi không nghĩ giải pháp đầu tiên nên là nhảy thẳng vào truy hồi dựa trên embedding, vì bạn cần xây một mô hình embedding, và chất lượng phụ thuộc rất nhiều vào chất lượng của embedding đó — embedding tệ thì truy hồi cũng tệ. Cơ sở dữ liệu vector cũng có thể khá tốn kém để vận hành, và còn có độ trễ (latency) cần cân nhắc nữa. Và embedding có thể làm mờ đi một số từ khóa nhất định — nếu tôi tìm một mã lỗi cụ thể, tìm kiếm bằng embedding không nhất thiết sẽ cho ra đúng mã đó. Nên có những thách thức thực sự với cơ sở dữ liệu vector và vector search. Cách tiếp cận thông thường, phổ biến, là bắt đầu với thứ gì đó đơn giản như truy hồi theo từ khóa (keyword retrieval) — trích xuất từ khóa từ câu hỏi của người dùng và tìm những tài liệu khớp với nó. Rồi có thể tài liệu quá dài để vừa vào ngữ cảnh, đó là lúc bạn bắt đầu chunking — tìm cách chia nhỏ tài liệu sao cho vừa. Và chunking lại tạo ra những vấn đề riêng của nó — có thể một tài liệu nói về "Công ty X," nhưng lại ghi ngay từ đầu, "từ giờ trở đi, Công ty X sẽ được gọi là Công ty," nên phần còn lại của tài liệu không bao giờ nhắc đến chữ "X" nữa, và nếu bạn tìm chữ X, bạn sẽ bỏ lỡ những đoạn phía sau điểm đó. Vậy nên bạn có thể muốn trích xuất từ khóa, gắn thêm metadata vào từng đoạn, thêm tiêu đề tài liệu, hoặc thêm một bản tóm tắt — một số người làm vậy. Anthropic có một bài viết rất hay tên "contextual retrieval," trong đó họ để Claude tạo ra metadata ngữ cảnh quan trọng cho từng đoạn và gắn nó vào đầu đoạn, để bạn truy hồi đúng đoạn cần thiết. Việc chuẩn bị dữ liệu mang lại một cú hích hiệu năng rất lớn — tôi từng thấy nó tạo ra cú hích lớn hơn nhiều so với việc vò đầu bứt tai chọn cơ sở dữ liệu vector nào. Không phải là cơ sở dữ liệu vector không hữu ích, mà là ban đầu bạn nên thử thứ đơn giản nhất mang lại hiệu quả lớn nhất, rồi từ đó tăng dần độ phức tạp.


V. Phép Thử BM25 — Vì Sao Truy Hồi "Cũ Kỹ" Vẫn Thắng

CHIP: Về truy hồi, có người từng nói với tôi một điều hơi "gắt" nhưng rất thú vị — anh ấy nói, "tôi sẽ không coi trọng bất kỳ hệ thống truy hồi nào nếu họ không benchmark với BM25." BM25 là một phương pháp truy hồi khá cũ, hơn hai mươi năm rồi — truy hồi dựa trên từ khóa (term-based), không phải dựa trên embedding — và nó thực sự, thực sự rất khó để đánh bại. Rất nhiều lúc, khi bạn muốn phức tạp hơn, bạn kết hợp cả truy hồi dựa trên từ khóa lẫn giải pháp cơ sở dữ liệu vector, để có cả khía cạnh ngữ nghĩa từ embedding, lẫn khớp từ khóa chính xác từ phía term-based. Tìm kiếm lai (hybrid search) rất, rất phổ biến.


VI. Fine-Tuning: Phương Án Cuối Cùng, Không Phải Đầu Tiên

GERGELY: Vậy chúng ta đã nói về prompt engineering, thêm ví dụ, RAG — tôi đoán sau khi bạn đã tận dụng hết những thứ đó, việc này thường mất khá lâu, người ta mới bắt đầu cân nhắc fine-tuning.

CHIP: Tôi nghĩ thường có rất nhiều e ngại đối với fine-tuning, vì nó mang lại cả một loạt vấn đề mới bạn phải xử lý. Trước tiên, một khi bạn đã fine-tune một mô hình, bạn phải nghĩ cách host nó — rất nhiều mô hình này rất lớn, với rất nhiều tham số.

GERGELY: Tôi thực sự đã đọc phần này trong sách — bạn đi vào chi tiết các vấn đề về dung lượng bộ nhớ, và bạn cũng nói về các lựa chọn thay thế cần ít bộ nhớ hơn nhưng lại mang theo những đánh đổi riêng. Nên đây là đánh đổi trong đánh đổi trong đánh đổi — bạn giải quyết một vấn đề nhưng lại có thêm cả loạt vấn đề khác, và bạn phải quyết định liệu có đáng bỏ thời gian, công sức, tài nguyên hay không.

CHIP: Chính xác. Ngoài ra, một khi bạn fine-tune một mô hình, bạn "sở hữu" mô hình fine-tune đó, và câu hỏi trở thành làm sao để duy trì nó. Chúng ta đang sống trong một thế giới nơi rất nhiều người rất giỏi liên tục cho ra mô hình mới, năng lực tăng nhanh chóng, nên câu hỏi là: mô hình fine-tune của bạn có thể vượt trội hơn các mô hình mới ra trong bao lâu? Bạn có thể đổ rất nhiều công sức để fine-tune một mô hình, rồi chỉ trong nháy mắt, một công ty nào đó bạn chưa từng nghe tên tung ra thứ gì đó cực nhanh, cực tốt. Nên nó khá là thách thức. Fine-tuning là phương án cuối cùng, không phải tuyến phòng thủ đầu tiên.

GERGELY: Điều tôi nghe được, nếu tôi hiểu đúng, là: hãy đi theo một cách tiếp cận có hệ thống — bắt đầu với prompting, bắt đầu đơn giản, đạt được những phản hồi có ý nghĩa, rồi thêm dữ liệu. Bạn có thể làm điều này với RAG, với chunking, trích xuất từ khóa, chuẩn bị dữ liệu, việc này tạo ra khác biệt lớn hơn nhiều người nghĩ — rồi sau đó bạn mới chuyển sang những thứ nâng cao hơn. Có cả một loạt thứ bạn có thể làm, nhưng theo tôi hiểu, bạn sẽ đến đó dần dần theo thời gian. Ban đầu, những điều cơ bản sẽ khiến bạn bận rộn, và bạn có lẽ sẽ xây được một hệ thống khá tốt chỉ với những điều cơ bản và một chút kỹ thuật — và, quan trọng nhất, là hiểu vấn đề bạn đang cố giải quyết, thay vì xây bất cứ công nghệ hào nhoáng nào đang thịnh hành.

CHIP: Cách tiếp cận có thể hơi khác giữa một nhà phát triển cá nhân và một doanh nghiệp. Một điều tôi nhận thấy, đặc biệt ở giai đoạn đầu của một công nghệ, là việc mở ra những use case mới thường mang lại lợi nhuận cao hơn là cải thiện dần dần những use case đã có. Vậy nên thay vì đổ năng lượng vào việc vắt thêm chút hiệu năng bằng thứ gì đó phức tạp hơn, hãy dùng đúng cái stack bạn đang có và mở ra ứng dụng mới với nó. Đó là lý do vì sao tôi nghĩ nhiều công ty sẽ mất một thời gian mới đến được giai đoạn fine-tuning.


VII. Triển Khai AI Một Cách Thận Trọng — Trường Hợp Chăm Sóc Khách Hàng

GERGELY: Giả sử ở công ty tôi, chúng tôi quyết định xây một giải pháp AI — lấy ví dụ tự động hóa dịch vụ khách hàng. Những cách tiếp cận điển hình tôi nên biết là gì? Bạn cũng có nói về điều này trong sách.

CHIP: Với chăm sóc khách hàng, tôi nghĩ điều đầu tiên nên tìm hiểu là những điểm nghẽn (bottleneck) trong giải pháp hiện tại thực sự là gì. Ví dụ, tôi từng làm việc với một nơi gặp phải nhiều yêu cầu hỗ trợ khách hàng và không biết trả lời hết như thế nào. Giải pháp của họ khá thú vị — họ cố đưa nhiều câu hỏi vào một kênh chung, như một Discord công khai, để những người dùng khác có thể giúp trả lời, và trong tương lai, nếu ai đó có câu hỏi tương tự, bạn chỉ cần chỉ họ đến cuộc thảo luận trước đó. Một giải pháp khác khá phổ biến hồi 2018–2019 là định tuyến yêu cầu đến đúng bộ phận. Điểm nghẽn ở đó nằm ở khâu phân loại (triaging) — bạn nhận một yêu cầu và không biết gửi nó đến bộ phận nào. Một loạt startup đã cố xây hệ thống để dự đoán, đây là câu hỏi về tài chính, hay đây là câu hỏi hỗ trợ kỹ thuật — chỉ riêng việc định tuyến thông minh đã giảm rất nhiều ma sát.

Nếu bạn quyết định thực sự cần GenAI, tôi rất khuyến khích khuôn khổ mà Microsoft giới thiệu, gọi là "bò, đi, chạy" (crawl, walk, run) — đi từ triển khai rủi ro thấp lên rủi ro cao hơn. Nó không cần phải là một "cú nổ" thành công ngay từ ngày đầu — ban đầu bạn có thể để con người tham gia vào vòng lặp (human in the loop). Với mỗi yêu cầu, thay vì để nhân viên hỗ trợ viết phản hồi từ đầu, AI gợi ý một vài lựa chọn, và con người chọn một cái, hoặc dùng nó làm điểm khởi đầu rồi chỉnh sửa nhanh trước khi gửi đi. Khi bạn thấy tỷ lệ chấp nhận (acceptance rate) đang tăng cao — chẳng hạn 90% cho một loại câu hỏi nào đó — bạn sẽ tự tin hơn để mở rộng, có thể ra nhiều người dùng hơn, hoặc có thể triển khai nội bộ trước. Bạn cho nó nhiều quyền tự chủ hơn nhưng giữ phạm vi triển khai nhỏ, và khi bạn đã thực sự hài lòng, bạn mới mở rộng ra nhiều người dùng hơn.

GERGELY: Điều đó hay đấy, vì cái tôi đang mong đợi bạn nói là kiểu, "ồ, bạn cứ xây cái framework AI này, triển khai nó, rồi xem sao" — đây là điều tôi cảm thấy nhiều công ty đang làm. Rất nhiều đội nói kiểu, "ồ, GenAI, lấy một mô hình từ ChatGPT hay Anthropic, đưa nó vào, rồi tung ra." Nhưng tôi thực sự thích cách bạn mô tả không thực sự đặc thù cho GenAI — bạn nhìn vào bài toán kinh doanh, nhìn vào các lựa chọn, bao gồm cả machine learning truyền thống như bộ phân loại, không chỉ GenAI, rồi bạn kiểm tra xem những công cụ này có thực sự giải quyết được vấn đề của bạn trước khi triển khai, thay vì triển khai một cách mù quáng. Tất cả những điều này nghe như không thực sự mới — bạn có thể nói y hệt như vậy hai ba năm trước, trước khi có GenAI, chỉ khác là chúng ta chưa có những công cụ GenAI này để nghịch thôi.

CHIP: Đúng vậy — thực ra, trước buổi trò chuyện này, tôi có xem lại một trong những bài nói cũ của mình, về những thứ không thay đổi, những thứ cảm giác rất giống nhau qua các thời kỳ của kỹ thuật phần mềm. Việc đối mặt với một công nghệ mới là một trong những điều không bao giờ thay đổi. Mỗi lần có công nghệ mới ra mắt, tôi có thể nghe thấy tiếng thở dài tập thể của các kỹ sư kỳ cựu khắp nơi, kiểu, "không phải cái gì cũng là một cây đinh đâu" — người ta cứ cố làm cho công nghệ mới hoạt động với mọi thứ.

Tôi nghĩ một sai lầm rất phổ biến là nhảy thẳng vào GenAI khi bạn không thực sự cần GenAI. Có hai tiêu đề khác nhau ở đây: một là "tôi dùng AI," hai là "tôi giải quyết được vấn đề." Nếu bạn tập trung vào tiêu đề đầu tiên, chắc chắn, bạn dùng AI — nhưng nếu bạn muốn giải quyết vấn đề, bạn cần hiểu vấn đề thực sự là gì, những trở ngại là gì, và loại bỏ những trở ngại đó bằng giải pháp đơn giản nhất, không phải giải pháp hào nhoáng nhất.

GERGELY: Tôi cảm thấy có một nỗi sợ bị bỏ lại (FOMO) khá mạnh ở hầu hết các công ty công nghệ — ai cũng biết đây là một công nghệ mang tính chuyển đổi, nó mang lại rất nhiều năng lực mới đến mức chắc chắn sẽ quan trọng, ai cũng biết công ty mình sẽ dùng nó, nhưng giờ lại có nỗi sợ bị bỏ lại: nếu đội của tôi không xây nó thì sao, nếu ai đó vượt lên trước tôi thì sao? Nên rất nhiều đội đang xây nó, dùng một cây búa đi tìm đinh, dù có thể họ chưa cần đến nó lúc này. Tôi không chắc điều này nhất thiết là xấu, vì ít nhất người ta có được kinh nghiệm với nó — nhưng đây là một thời điểm rất thú vị, vì thường khi có một framework backend mới ra mắt, hay thứ gì đó giới hạn trong một lĩnh vực, chỉ một số người nhảy vào, nhưng đây là lần đầu tiên tôi thấy cả ngành cùng nhảy vào một lúc, ai cũng cố dùng nó, dù có hiệu quả hay không.


VIII. Tập Trung Vào Vấn Đề, Không Phải Tin Tức

CHIP: Tôi hoàn toàn đồng ý với bạn về FOMO này. Tôi nghĩ việc ai cũng nhảy vào thực ra là một điều khá tốt — năng lượng thật đáng kinh ngạc, tôi chưa từng thấy nhiều người thông minh cùng tập trung vào một vấn đề như vậy, và tiến bộ thật đáng kinh ngạc. Nhưng tôi nghĩ có một sự trớ trêu ở đây — càng cố không bỏ lỡ điều gì, chúng ta lại càng bỏ lỡ nhiều thứ hơn, vì nếu ta cố theo kịp tin tức, nhảy từ tin này sang tin khác, ta sẽ luôn chỉ ở tầng bề mặt, không bao giờ thực sự đi sâu vào bất cứ điều gì. Tôi thực ra không đọc tin tức nhiều — tôi thấy nó khá gây xao nhãng. Cách tiếp cận của tôi là: chọn một vấn đề bạn quan tâm, và chỉ để ý những gì giúp bạn giải quyết vấn đề đó. Nếu có tin gì mới, tôi hỏi, điều này có giúp tôi giải quyết vấn đề này không? Nếu không, nó có thể chờ — vì nếu điều gì đó thực sự quan trọng, nó vẫn sẽ quan trọng sau hai tuần nữa, một tháng nữa. Tôi không bỏ hết mọi việc để chạy đi tìm hiểu ngay lập tức. Tôi cố giữ bình tĩnh hơn với chuyện đó.


IX. Vì Sao Đánh Giá AI Càng Lúc Càng Khó Khi Mô Hình Càng Thông Minh

GERGELY: Khi xây một hệ thống AI, một trong những điều bạn sẽ gặp phải là bạn cần đánh giá đầu ra — nó hoạt động tốt đến mức nào, nó có giải quyết được vấn đề của bạn không. Vì sao việc đánh giá hệ thống AI lại khó, và những cách phổ biến để làm điều đó là gì?

CHIP: Đánh giá, tôi nghĩ, là một câu hỏi trị giá hàng tỷ đô — thậm chí hàng nghìn tỷ đô, xét theo mức đầu tư hiện nay. Bạn cần phải "chơi lớn," mà đã chơi lớn thì phải chơi thật lớn. Tôi nghĩ nó khó vì AI càng thông minh, con người càng khó đánh giá nó hơn. Trước đây, nếu AI trả lời thiếu mạch lạc, bạn có thể dễ dàng nhận ra phản hồi đó tệ — nghe nó cứ sai sai. Nhưng ngày nay nó khá mạch lạc — nếu bạn nhờ ChatGPT tóm tắt một cuốn sách, và bản tóm tắt nghe có vẻ thuyết phục, bạn thực ra không biết nó có phải là một bản tóm tắt tốt hay không — bạn có thể phải tự đọc cả cuốn sách mới đánh giá được. Với toán cũng vậy. Cá nhân tôi dùng AI để hỏi rất nhiều câu tôi không biết đáp án — và vì tôi không biết đáp án, tôi cũng không biết câu trả lời nó đưa ra có đúng hay không. Rất nhiều người có thể nói một lời giải toán lớp một có đúng hay không, nhưng rất ít người có thể nói một chứng minh cho một phương trình phức tạp là đúng hay sai. Tôi nhớ khi o1 ra mắt, Terence Tao — một trong những nhà toán học giỏi nhất thời đại chúng ta — đã dành thời gian đánh giá nó, và ông nói trải nghiệm dùng o1 giống như hướng dẫn một nghiên cứu sinh tầm tầm, không đến mức hoàn toàn kém cỏi. Điều đó khiến tôi nghĩ — nếu chúng ta thực sự cần những bộ óc xuất sắc nhất hiện nay để đánh giá AI, thì chẳng bao lâu nữa chúng ta sẽ hết người thực sự giỏi để đánh giá nó.

Vậy bước tiếp theo sẽ là gì? Trong một thời gian dài, chúng ta dùng con người làm chuẩn vàng (gold standard) cho hiệu năng AI — con người viết ra cách nên phản hồi, và AI cố sao chép con người. Nhưng giờ đây, với rất nhiều tác vụ, AI thực hiện tốt hơn con người rất nhiều. Tôi đã nghĩ về vài cách tiếp cận để xử lý điều này, và đó thực ra là lý do tôi tách nó ra thành hai chương trong sách — ban đầu tôi chỉ định viết một chương về đánh giá, nhưng càng viết tôi càng nhận ra có quá nhiều thứ, nên nó trở thành hai chương khá dài: chương đầu về phương pháp luận chung, chương sau về các kỹ thuật cụ thể để đánh giá một hệ thống AI.


X. Độ Chính Xác Chức Năng, LLM-as-Judge, và Đánh Giá So Sánh

CHIP: Một phương pháp luận là độ chính xác chức năng (functional correctness) — bạn đánh giá đầu ra của một ứng dụng dựa trên việc nó thực hiện tác vụ tốt đến đâu. Nếu bạn nói, "dùng AI để tiết kiệm năng lượng," bạn có thể thấy nó thực sự tiết kiệm được bao nhiêu năng lượng. Nếu bạn nói, "dùng AI để chơi trò chơi này," bạn có thể thấy điểm số. Một use case rất phổ biến cho việc này là viết code — tôi không nghĩ việc coding là một trong những use case phổ biến nhất là ngẫu nhiên, vì chúng ta thực sự biết cách đánh giá code được sinh ra. Chúng ta có thể chưa biết cách đánh giá một bài luận được sinh ra, nhưng chúng ta biết cách đánh giá code, vì chúng ta đã kiểm thử code từ lâu rồi. Với code, bạn có thể dùng độ chính xác chức năng — trước tiên, nó có biên dịch được không, có chạy được không; thứ hai, nó có cho ra kết quả như mong đợi không.

Cách tiếp cận thứ hai là dùng AI để đánh giá AI khác. Chúng ta đã dùng AI để tự động hóa rất nhiều ứng dụng, vậy liệu ta có thể dùng nó để tự động hóa cả việc đánh giá? Nó thực ra làm khá tốt. Ngay từ năm 2023, báo cáo "State of AI" của LangChain đã ghi nhận rằng phần lớn ứng dụng họ khảo sát đã có một dạng LLM-as-judge nào đó, và tôi nghĩ điều đó chỉ ngày càng tăng lên. Nó đang trở nên khá hiệu quả về chi phí và hữu ích, dù tất nhiên vẫn có nhiều thách thức xung quanh nó.

Một cách tiếp cận khác tôi thấy rất thú vị là đánh giá so sánh (comparative evaluation). Là con người, chúng ta khó cho một điểm số tuyệt đối cho một thứ gì đó, nhưng nếu bạn đưa cho chúng ta hai phiên bản của cùng một thứ, chúng ta thường có thể nói cái nào tốt hơn. Chúng tôi từng thấy các nghiên cứu cho thấy rằng ngay cả với những tác vụ mà AI đang thực hiện ở mức mà chuyên gia con người không thể đạt tới, con người vẫn có thể phát hiện ra sự khác biệt giữa hai đầu ra. Điều này đã và đang định hướng không chỉ việc đánh giá, mà cả việc phát triển mô hình.

GERGELY: Nghe như không có câu trả lời đơn giản nào cả — bạn phải đi qua tất cả những lựa chọn này và tìm ra, với trường hợp của bạn, điều gì hợp lý về chi phí, về những gì bạn có thể làm, liệu bạn có thể để con người tham gia vào vòng lặp hay không. Không có viên đạn bạc nào cả.

CHIP: Tôi không nghĩ có một giải pháp đơn giản. Đó là lý do tôi hơi hoài nghi về các công cụ đánh giá — rất nhiều thách thức trong việc đánh giá không phải vì ta không biết cách đánh giá, mà vì nó đòi hỏi kỷ luật và công sức, những thứ mà công cụ không thể tự động hóa được.


XI. Đo Lường Điều Người Dùng Thực Sự Muốn

CHIP: Một điều về đánh giá là chúng ta cần đánh giá một ứng dụng dựa trên điều người dùng thực sự muốn — và ta thường không làm vậy. Điều đó có nghĩa là phải đi nói chuyện với người dùng, phải nhìn vào cách họ tương tác, vì rất nhiều thứ ta nghĩ nên đo lường lại không phải là điều thực sự quan trọng. Ta phải đo cái gì thực sự có ý nghĩa. Tôi có vài ví dụ cho thấy điều này có thể phản trực giác đến mức nào — bạn nghĩ mình đang đo một thứ, nhưng người dùng lại thực sự quan tâm đến một thứ khác.

Tôi có một người bạn đang xây một ứng dụng khá lớn, về cơ bản là công cụ tóm tắt cuộc họp. Ban đầu họ cố đo tính đúng đắn — liệu bản tóm tắt có phủ hết nội dung cuộc họp không — và họ băn khoăn về định dạng, liệu người dùng muốn tóm tắt ba câu hay năm câu, vì họ nghĩ người dùng muốn tóm tắt ngắn hơn. Nhưng cuối cùng họ phát hiện ra người dùng không thực sự quan tâm đến toàn bộ nội dung cuộc họp — người ta chỉ muốn biết, đâu là việc tôi cần làm, tôi phải làm gì sau cuộc họp này. Vậy nên điều đó đã thay đổi mọi thứ: tính đúng đắn vẫn quan trọng, họ vẫn không muốn bản tóm tắt bịa đặt thông tin, nhưng trọng tâm thực sự trở thành việc không bỏ sót những việc cần làm dành riêng cho người hỏi.

Một ví dụ khác — một công ty làm phần mềm thuế khá lớn xây một chatbot để giúp người dùng chuẩn bị hồ sơ thuế, và phản ứng rất hờ hững. Họ đo lường mức độ sử dụng, và thấy người ta không thực sự dùng nó nhiều, họ tự hỏi vì sao — liệu có phải nó bịa thông tin, hay có vấn đề gì khác — họ cố đo các chỉ số riêng của mình. Nhưng cuối cùng, họ phát hiện ra người ta đơn giản là không dùng nó vì họ ghét gõ chữ. Và cũng vì, nếu bạn đối mặt với một lĩnh vực bạn không rành, bạn còn không biết phải hỏi gì — người ta dùng phần mềm thuế chính vì họ không biết nhiều về thuế. Nên họ không biết phải gõ gì, họ không hiểu lĩnh vực đó — họ tìm đến sản phẩm này vì họ muốn ai đó lo chuyện thuế giúp mình. Điều đội ngũ đó bắt đầu làm là cố hiểu người dùng thường hỏi những dạng câu hỏi nào, và gợi ý sẵn ngay từ đầu — hướng dẫn người dùng, kiểu "đây là câu hỏi bạn nên hỏi," rồi đưa ra câu trả lời, cứ thế tiếp diễn.

Nên tôi nghĩ rất nhiều trong số này quy về việc hiểu lĩnh vực bài toán của bạn — đi nói chuyện với người dùng, nhìn vào dữ liệu. Tôi vẫn nghĩ việc nhìn vào dữ liệu rất, rất quan trọng. Greg Brockman có một câu nói rất hay về điều này: kiểm tra dữ liệu thủ công là một trong những hoạt động có tỷ lệ giá trị trên uy tín cao nhất. Nghĩa là người ta thường không đánh giá cao việc kiểm tra dữ liệu thủ công — "để cho một thực tập sinh làm," "để tôi nghĩ cái gì đó cầu kỳ hơn, thuật toán gì đó" — nhưng nó thực sự có giá trị cực cao, vì bằng cách nhìn vào dữ liệu, bạn phát hiện ra các khuôn mẫu, hiểu được người dùng thực sự dùng sản phẩm như thế nào. Tôi thường khuyên các đội: đừng quên đánh giá của con người. Bạn dùng LLM-as-judge, nhưng "giám khảo" này có nhiều thách thức thực sự — chất lượng của nó phụ thuộc vào mô hình nền và prompt, khá là không xác định (non-deterministic), nên mọi thứ có thể thay đổi theo thời gian. Nhưng nếu bạn cũng có đánh giá của con người — rất nhất quán, hướng dẫn rất rõ ràng, mỗi ngày xem qua, chẳng hạn, 50 mẫu tương tác thực tế, hoặc nhiều hơn nếu bạn có nguồn lực, 500 hay cả nghìn — bạn sẽ có được một bức tranh thực về cách người dùng đang dùng sản phẩm của bạn, những thay đổi hành vi gắn với các sự kiện hiện tại, hoặc bạn có thể đối chiếu nó với các chỉ số tự động. Nếu điểm số của "giám khảo AI" bắt đầu lệch khỏi điểm số của giám khảo con người, đó là điều bạn cần điều tra.


XII. Những Sai Lầm Thường Gặp Khi Làm GenAI

GERGELY: Vậy, như bạn nói, bạn không thể bỏ qua công sức nếu muốn có kết quả tốt, và không thể loại bỏ hoàn toàn con người khỏi vòng lặp, ít nhất là ban đầu. Những sai lầm phổ biến bạn từng thấy khi các đội xây dựng ứng dụng AI là gì?

CHIP: Tôi không muốn nói theo kiểu như ai cũng ngốc cả — nhưng chúng ta đã chạm đến vài điều rồi. Một sai lầm rất phổ biến là dùng GenAI khi bạn không cần GenAI. Từng có một startup đến gặp tôi với ý tưởng dùng GenAI để giúp người dùng tối ưu hóa việc dùng điện — bạn kể cho chatbot nghe về những hoạt động tốn điện trong ngày, sạc xe, giặt đồ, và nó sẽ nói thời điểm tốt nhất để làm từng việc nhằm giảm hóa đơn tiền điện. Họ nói nghiên cứu của họ cho thấy bạn có thể tiết kiệm trung bình 30% — "tiền chùa mà, ai lại không muốn cái đó." Tôi hỏi họ mức tiết kiệm đó so với việc chỉ đơn giản tự lên lịch làm hoạt động tốn điện nhất vào giờ thấp điểm — kiểu, chỉ cần sạc xe lúc 10 giờ tối thôi. Họ nói, "chúng tôi chưa so sánh cái đó, nhưng sẽ thử và báo lại bạn" — và họ không bao giờ quay lại, sau này họ bỏ luôn ý tưởng đó. Rất nhiều bài toán tối ưu kiểu này có thể giải bằng thuật toán tham lam (greedy), không cần GenAI gì cả.

Ở đầu bên kia của phổ, tôi thấy nhiều công ty từ bỏ GenAI vì họ đã thử và không thành công — trong khi tôi thường bất ngờ khi thấy một công ty khác với use case rất tương tự lại thành công rực rỡ. Khi đào sâu vào, thường là do sản phẩm tệ — họ prompt không tốt, không hiểu người dùng, hoặc thậm chí không biết cách đánh giá đúng. Ví dụ, tôi từng làm việc với một công ty chuyên trích xuất thông tin từ hồ sơ (résumé) — ai đó nộp một hồ sơ (là file PDF, không phải văn bản thô), hệ thống trích xuất văn bản thô, rồi từ văn bản đó trích xuất ra các tổ chức người này từng làm việc. Tôi hỏi họ vận hành ra sao, họ nói tệ lắm — sai tổ chức khoảng 50% thời gian. Tôi hỏi công đoạn nào trong quy trình bị lỗi: bước chuyển từ PDF sang văn bản, hay bước từ văn bản sang tên tổ chức? Họ nói, "chúng tôi không biết, chúng tôi chưa kiểm tra cái đó." Nếu bạn không thể xác định được lỗi nằm ở đâu, bạn không thể sửa nó. Nghe như lẽ thường, nhưng chuyện này cứ lặp đi lặp lại mãi.

Một sai lầm khác là làm phức tạp hóa mọi thứ — nhảy thẳng vào những cơ sở dữ liệu vector hào nhoáng hơn, hay fine-tuning. Một sai lầm phổ biến khác dạo này là: bạn thấy một framework agent hào nhoáng và nghĩ, "dùng cái này đi, thử xem sao." Framework thì thực sự rất hay, tôi thực lòng biết ơn rất nhiều framework — chúng làm cuộc sống dễ dàng hơn — nhưng tôi nghĩ một framework nên mã hóa các thực hành tốt nhất (best practices) và được kiểm thử kỹ càng. Còn tôi nghĩ chúng ta vẫn đang ở giai đoạn tìm hiểu xem đâu là best practices, và rất nhiều framework có thể mang lại những lỗi khó chịu không cần thiết. Khi tôi lục qua codebase của nhiều framework phổ biến, tôi nhận thấy một điều khá thú vị — rất nhiều framework đi kèm những prompt mặc định để giúp bạn bắt đầu nhanh. Nhưng mỗi prompt mặc định đó đều có lỗi chính tả, và chúng cứ liên tục thay đổi — ai đó gửi một PR nhỏ để sửa lỗi chính tả nhưng nó chưa bao giờ vào bản phát hành chính thức. Nên nếu bạn dùng một trong những prompt mặc định đó, và hiệu năng ứng dụng của bạn đột nhiên thay đổi, bạn sẽ không biết vì sao, vì prompt đã thay đổi ngay dưới chân bạn.

GERGELY: Thú vị đấy, vì điều bạn đang mô tả — dùng công nghệ này khi không cần, từ bỏ nó vì những lý do mà một chút lẽ thường lẽ ra đã giải quyết được, dùng một framework mới không thực sự chất lượng hay không thực sự mã hóa best practices — tất cả những điều này nghe như bạn có thể thay từ "GenAI" bằng bất kỳ công nghệ hay stack mới nào và vẫn nghe những câu chuyện tương tự. Nó không thực sự mới, phải không — bất kỳ ai tự nhận là chuyên gia cũng chỉ mới có nhiều nhất một hai năm kinh nghiệm với nó, nó vẫn đang thay đổi liên tục, và chưa có thực hành tốt nhất nào được thiết lập chắc chắn.


XIII. Tư Duy Hệ Thống Không Bao Giờ Lỗi Thời

CHIP: Tôi hoàn toàn đồng ý. Dù công nghệ có thay đổi theo thời gian, tư duy có hệ thống — cách tiếp cận có hệ thống với vấn đề — thường thì không thay đổi. Nếu bạn muốn giải quyết một vấn đề, bạn bắt đầu bằng cách chia nhỏ vấn đề ra, xem thách thức thực sự nằm ở đâu, và đi qua các giải pháp khác nhau. Nghe có vẻ hiển nhiên, nhưng tôi nghĩ nhiều lúc FOMO xen vào — bạn biết đó là điều đúng cần làm, nhưng bạn cảm thấy cần kiểm tra thứ khác trước đã, và bạn cứ làm vậy ba lần một ngày, thế là hết ngày mà bạn chưa bao giờ thực sự có thời gian ngồi xuống suy nghĩ thật sâu về điều mình đang cố làm.

GERGELY: Vậy tôi đoán chúng ta sẽ thấy rất nhiều sai lầm tương tự những gì xảy ra với bất kỳ công nghệ mới nào, và nếu một số thính giả từng áp dụng công nghệ mới trước đây, họ có thể tái sử dụng những cách tiếp cận đó, chỉ cần "địa phương hóa" nó cho GenAI, và tránh được một số sai lầm này.


XIV. Học AI Engineering Như Thế Nào

GERGELY: Nói về việc học công nghệ mới — với tư cách một kỹ sư phần mềm muốn bước vào AI engineering, bạn khuyên nên học như thế nào? Mọi thứ thay đổi rất nhanh — bạn có nhắc đến tầm quan trọng của nền tảng cơ bản — vậy nên tập trung vào điều gì?

CHIP: Tôi có rất nhiều suy nghĩ về việc học, vì tôi thích học rất nhiều, và theo thời gian tôi cố quan sát ra một số khuôn mẫu — dù cách tôi học có thể không giống cách bạn học, mỗi người có phong cách học khác nhau. Nhìn chung, tôi nghĩ việc học có hai cách tiếp cận: học qua dự án (project-based) và học có cấu trúc (structured). Học qua dự án là: bạn chọn một dự án, làm việc trên đó, cố giải quyết mọi vấn đề trong dự án đó, và hoàn thành nó. Học có cấu trúc giống như khi bạn học một khóa học hay đọc một cuốn sách — ai đó đã sắp xếp sẵn những gì bạn cần học và theo thứ tự nào.

Có khá nhiều tranh luận về chuyện này. Có người gần đây kể tôi nghe rằng một người bạn tốt của họ nghĩ vấn đề ngày nay của những ai muốn trở thành kỹ sư là họ dành quá nhiều thời gian học và không đủ thời gian làm — quên hết khóa học đi, quên hết sách đi, chỉ cần chọn một dự án và bắt tay vào làm. Tôi thực sự nghĩ học qua dự án rất có giá trị. Nhưng nếu bạn nghĩ theo hướng, đây là một tập hợp kỹ năng và kiến thức tôi muốn xây dựng, thì học qua dự án có thể chạm được nhiều điểm trong đó, nhưng không phải lúc nào cũng chạm hết, và đôi khi nó có thể khiến bạn bối rối.

Một điều khác về học qua dự án là rất nhiều người thường đi theo các tutorial — ai đó đã hướng dẫn sẵn cách làm việc này. Tutorial rất hay, bản thân tôi cũng làm rất nhiều, nhưng tôi để ý rằng rất dễ để cứ vô thức bấm từ cell này sang cell khác, chạy hết cell này đến cell khác mà không bao giờ dừng lại để hỏi tại sao lại làm theo cách này, tại sao thư viện này lại quan trọng, tại sao đoạn code này lại được viết như vậy, tại sao batch size là 16 chứ không phải 64. Không có cơ chế nào ép bạn phải dừng lại — bạn chỉ muốn chạy đến cuối để xem kết quả, rồi thay đổi theo phỏng đoán tốt nhất của mình.

Có một chuyện khá buồn cười xảy ra khi tôi đang nghiên cứu thị trường cho một dự án mã nguồn mở tôi từng làm, tên là Ibis — tôi biết nếu ai muốn dùng nó, họ phải viết "import ibis." Nên tôi lục trên GitHub tìm những repo có dòng "import ibis," và tôi tìm thấy rất nhiều repo có dòng import đó nhưng Ibis lại không hề được dùng ở bất cứ đâu khác trong codebase. Tôi nhận ra rất nhiều repo đó đã sao chép từ một tutorial có dòng "import ibis" — có lẽ nhà phát triển gốc từng có dòng import đó, xóa mất phần code dùng nó, nhưng quên xóa luôn dòng import, rồi mọi người sau đó cứ thế sao chép lại y hệt. Đó là điều hơi nguy hiểm về việc học qua tutorial — nó rất hay, nhưng điều quan trọng là phải biết dừng lại và đặt câu hỏi, và đôi khi học có cấu trúc giúp bạn biết nên hỏi câu hỏi gì.

Vậy nên trước khi bắt đầu, tôi khuyên nên kết hợp cả hai: chọn một dự án — không cần lớn hay hào nhoáng, chỉ cần chọn một cái — và song song với đó, bổ sung bằng học có cấu trúc: một cuốn sách, một khóa học cùng bạn bè, đọc bài báo khoa học. Tôi nghĩ đọc bài báo hơi thú vị, vì nó là một kỹ năng riêng, có thể khá tốn thời gian, và bạn cần biết mình muốn lấy được gì từ đó. Nhưng, hãy bắt đầu một dự án, và bổ sung nó bằng cấu trúc.

Cũng có một bài tập tôi thấy rất hữu ích, ít nhất với tôi, khi mới bắt đầu: trong một tuần, hãy quan sát mọi việc bạn làm, ghi chú lại, và nghĩ xem bao nhiêu phần trăm trong đó có thể được AI tự động hóa. Rồi thử dùng AI để làm những việc đó. Nó cho tôi rất nhiều ý tưởng về use case — bạn chỉ cần nghĩ về điều gì quan trọng với bạn, và nếu có một ứng dụng giải quyết được dù chỉ một vấn đề cho bạn, thế đã là tuyệt vời rồi.

GERGELY: Tôi nghĩ đó là một cách nhìn hơi khác thường, nhưng là một cách hay, vì nó cũng có thể giúp bạn vượt qua nỗi sợ "AI sẽ làm gì với công việc của tôi," vì bạn thực sự thấy điều gì xảy ra khi bạn tự động hóa mọi thứ. Điều đó dẫn tôi đến câu hỏi tiếp theo — có rất nhiều nỗi sợ hãi thái quá về việc AI sẽ là dấu chấm hết cho kỹ thuật phần mềm, vì AI rất giỏi viết code, giỏi hơn hẳn nhiều lĩnh vực khác. Quan điểm của bạn là gì — khi AI ngày càng giỏi hơn, liệu nó có thực sự chấm dứt kỹ thuật phần mềm, thay đổi nó, hay không thay đổi nhiều lắm?


XV. Vì Sao AI Không Phải Là Dấu Chấm Hết Cho Kỹ Thuật Phần Mềm

CHIP: Tôi nghĩ điều này quay lại câu hỏi kỹ thuật phần mềm thực sự là gì. Một phép loại suy có thể giúp giải thích — việc viết lách. Chúng ta có xu hướng nhầm lẫn giữa hoạt động dễ nhận thấy nhất của một thứ gì đó với chính bản chất của nó. Với viết lách, ngày xưa, viết có nghĩa là hành động vật lý đặt chữ lên giấy — và hồi đó, người ta thực sự tự hào về thư pháp, kiểu "ồ, chữ đẹp thế, chắc là thông minh lắm." Nhưng rồi ta có máy tính, và bây giờ viết không còn ám chỉ hành động vật lý đó nữa — viết ám chỉ quá trình sắp xếp ý tưởng thành một dạng đọc được. Tôi nghĩ điều tương tự cũng đúng với lập trình. Người ta hay nghĩ kỹ thuật phần mềm là hành động vật lý gõ code vào một trình soạn thảo nào đó, nhưng đó không phải là bản chất của kỹ thuật phần mềm. Kỹ thuật phần mềm là về giải quyết vấn đề — đây là vấn đề, làm sao tôi tạo ra một chương trình có thể chạy để giải quyết nó. Viết code chỉ là hành động vật lý của nó. Nên đúng, AI có thể tự động hóa việc viết code, nhưng tôi không nghĩ nó sẽ hoàn toàn tự động hóa việc giải quyết vấn đề, vì bạn vẫn cần biết vấn đề là gì, và chỉ có bạn mới thực sự hiểu vấn đề mình đang đối mặt.

Kỹ thuật phần mềm cũng là việc làm mọi thứ một cách rất chính xác. Lý do nghề kỹ sư phần mềm tồn tại là vì rất khó để chính xác, để nói được "ngôn ngữ" của máy tính — bạn di chuyển một câu lệnh if đi chỗ khác, hay đổi một biến, thế là chương trình sập ngay vì tràn ngăn xếp (stack overflow), điều mà tất nhiên bạn hiểu nếu bạn là kỹ sư phần mềm. Nhưng nếu bạn chỉ là một người dùng kinh doanh nói, "tôi muốn cái nút di chuyển sang khi thay đổi kích thước cửa sổ," điều đó dễ nói, nhưng với tư cách kỹ sư, bạn biết các trường hợp biên, biết môi trường, biết những sự kiện hệ thống cần lo, và bạn viết code cho tất cả những điều đó. Tôi chắc chắn chúng ta sẽ đến lúc AI có thể tạo ra rất nhiều phần trong số đó, nhưng nó có thể không tạo được hết, và ở một thời điểm nào đó, bạn vẫn cần một ai đó hiểu code và có thể tìm ra khoảng trống ở đâu — vì tiếng Anh không phải là một ngôn ngữ chính xác như một ngôn ngữ lập trình. Ngôn ngữ lập trình được sinh ra để chính xác và không mơ hồ — bạn có thể đi từ hợp ngữ (assembly) lên một ngôn ngữ lập trình cấp cao vì gần như có một ánh xạ một-một, nhưng đi từ tiếng Anh sang một ngôn ngữ lập trình lại rất mơ hồ.

Tôi nghĩ nghề này sẽ không biến mất. Với người dùng bình thường, nó có thể ổn cho những use case theo kiểu nghiệp dư — bạn nói một điều gì đó, bạn nhận được thứ gì đó gần đúng, bạn thử vài lần và hài lòng. Nhưng với một use case kinh doanh hay chuyên nghiệp, bạn sẽ cần những người có thể đảm bảo bạn có được chính xác thứ bạn muốn.

Thực ra tôi rất hào hứng với việc AI tự động hóa một phần việc viết code, vì nó giải phóng kỹ sư phần mềm để xây những phần mềm phức tạp hơn nhiều. Quay lại phép loại suy về viết lách — khi viết còn có nghĩa là sao chép chữ bằng tay lên giấy, một cuốn sách 5.000 hay 10.000 chữ đã được coi là lớn, vì việc chép tay tốn quá nhiều thời gian. Nhưng giờ chúng ta có những cuốn sách hàng trăm nghìn chữ, và tôi nghĩ điều đó khiến mọi thứ dễ dàng hơn nhiều. Với kỹ thuật phần mềm cũng vậy — nếu bạn không phải tự tay viết từng dòng code, bạn có thể biến ý tưởng thành chương trình chạy được nhanh hơn nhiều, và điều đó cho phép ta viết những phần mềm phức tạp hơn nhiều. Có thể một kỹ sư phần mềm sẽ có khả năng chỉ huy, gỡ lỗi, hay bảo trì một hệ thống phức tạp hơn nhiều, một mình — bởi vì hiện tại, một codebase triệu dòng thường cần nhiều kỹ sư, hiếm khi chỉ một người sở hữu nó, đó còn chưa tính đến các dependency. Đó sẽ là một sự chuyển dịch thú vị.


XVI. Giáo Dục, Giải Trí, và Doanh Nghiệp

GERGELY: Còn những use case nào khác bạn hào hứng, ngoài viết code?

CHIP: Tôi hào hứng với giáo dục. Tôi nghĩ AI có thể giúp con người học nhanh hơn nhiều. Một điều tôi nhận ra là ngày nay, nếu bạn đã biết câu hỏi, việc tìm câu trả lời khá dễ dàng — bạn hỏi AI và thường sẽ có một câu trả lời tốt, hoặc ít nhất là rất nhiều tài liệu tham khảo để đào sâu thêm. Nhưng cái vẫn còn khó là việc nghĩ ra đúng câu hỏi ngay từ đầu. Nên tôi nghĩ giáo dục cần tập trung vào việc xây thói quen đặt câu hỏi và thực sự hiểu vấn đề, và tôi nghĩ AI có thể khiến việc học trở nên hiệu quả hơn nhiều — người ta có thể học được nhiều hơn, nhanh hơn. Và nếu chúng ta học tốt hơn, nhanh hơn, chúng ta thực sự có thể làm được nhiều thứ hơn.

Một use case khác tôi hào hứng là giải trí. Chúng ta có xu hướng nghĩ giải trí và giáo dục là hai thứ tách biệt, nhưng tôi không thấy lý do gì ta không thể có những trò chơi giúp ta học — ví dụ trò chơi chiến thuật dạy về đàm phán, có thể sẽ rất vui. Hay nói chung, những nội dung kích thích trí tuệ hơn — phim ảnh hay chương trình không nhất thiết phải chỉ để giải trí thuần túy; tôi thích nội dung khiến mình phải suy nghĩ một chút, giúp mình hiểu thêm về những lĩnh vực khác nhau. AI có thể giúp tạo ra nội dung vừa giải trí vừa kích thích trí tuệ. Một ví dụ đơn giản, chúng ta đã có rất nhiều dạng chuyển thể giữa các loại hình — một cuốn sách trở thành phim, một bộ phim trở thành trò chơi, một bài báo khoa học trở thành podcast — và nếu AI có thể giúp chuyển thể nội dung qua lại giữa các loại hình như vậy, điều đó có thể rất thú vị.

Có rất nhiều bài toán nhỏ tôi cũng quan tâm. Tôi chưa nói nhiều về mảng doanh nghiệp, nhưng tôi thấy đó vẫn là nơi phần lớn tiền bạc nằm ở đó. Tôi nghĩ cấu trúc tổ chức của doanh nghiệp sẽ thay đổi. Hãy nghĩ xem công việc của quản lý cấp trung thực sự là gì — tổng hợp thông tin từ cấp dưới và truyền lên cho lãnh đạo, và ngược lại, truyền chỉ đạo từ lãnh đạo xuống các tầng thấp hơn. Nhưng việc tổng hợp thông tin là điều AI có thể làm rất tốt. Tôi nghĩ các công ty có thể trở nên hiệu quả hơn nhiều nhờ điều đó.


XVII. Vòng Hỏi Nhanh

GERGELY: Hãy kết thúc bằng vài câu hỏi nhanh — tôi sẽ đưa ra câu hỏi và bạn nói điều đầu tiên nảy ra trong đầu. Ngôn ngữ lập trình nào bạn dùng nhiều nhất khi xây ứng dụng AI, hay làm ML engineering, và vì sao?

CHIP: Python và JavaScript.

GERGELY: Cả JavaScript nữa? Sao vậy?

CHIP: Ồ, chắc chắn rồi — một phần lớn của việc xây sản phẩm là phải làm demo thật nhanh, và JavaScript rất tiện cho việc đó. Tôi không giỏi lắm — tôi luôn hơi sợ JavaScript — nhưng tôi thực sự biết ơn vì AI đã giúp tôi bắt đầu với nó dễ dàng hơn nhiều dạo này.

GERGELY: Mô hình LLM nào bạn thích nhất hiện giờ, và vì sao?

CHIP: Tôi không thực sự có mô hình yêu thích — tôi dùng những mô hình khác nhau cho những việc khác nhau. Tôi từng dùng ChatGPT theo thói quen, vì tôi đã có sẵn một loạt prompt được thiết lập từ trước. Tôi dùng Claude đôi khi cho việc viết sáng tạo, vì tôi thấy nó ít sáo rỗng hơn. Tôi đang đọc về R1 — ai mà không đọc về R1 dạo này chứ — chỉ để thử xem sao. Tôi cũng từng dùng vài mô hình Llama, như phiên bản thị giác, cho những use case thú vị kiểu như chuyển ảnh chụp màn hình thành code, chỉ để thử nghiệm, nghịch cho vui thôi. Nhưng tôi không thực sự "gắn bó cảm xúc" với bất kỳ cái nào cả.

GERGELY: Và một công cụ AI hay ho nào bạn từng dùng và thích?

CHIP: Tôi tự xây một công cụ giúp ích rất nhiều cho việc nghiên cứu. Khi tôi bắt gặp một liên kết đến một bài báo khoa học, tôi thường đi qua cùng một quy trình — đọc phần tóm tắt, tra cứu tác giả, tìm hiểu một chút, đặt câu hỏi, kiểm tra các trích dẫn — nên tôi xây một công cụ nhỏ tự động làm hết những việc đó và đưa cho tôi mọi thông tin cần thiết.

GERGELY: Một công cụ để "gãi đúng chỗ ngứa" của chính mình.

CHIP: Đúng vậy — tôi nghĩ đó chính là vẻ đẹp của AI bây giờ, bạn có thể xây một thứ như vậy trong một khoảng thời gian rất ngắn. Trước đây việc này sẽ mất cả tuần, nhưng giờ tôi chỉ cần xây một cái là xong. Đó là điều đáng để hào hứng.

GERGELY: Tôi đồng ý. Và một hoặc hai cuốn sách bạn đã đọc và muốn giới thiệu?

CHIP: Tôi giới thiệu rất nhiều sách, nhưng tôi cảm thấy việc giới thiệu sách đôi khi giống như ép người khác thích cái mình thích. Tôi thích những cuốn sách cho tôi một góc nhìn mới, hay một hiểu biết về những chủ đề tôi không biết nhiều. Tôi thực sự thích cuốn Complex Adaptive Systems — một cuốn sách rất thú vị về tư duy hệ thống, về cách thiết kế các động lực xã hội sao cho con người hướng đến những mục tiêu bạn muốn. Nó buộc bạn phải suy nghĩ về hệ thống. Tôi thích cuốn The Selfish Gene, vì nó khiến bạn suy nghĩ nhiều hơn về ý chí tự do — ý tưởng rằng bạn có thể "sống tiếp" qua gen, hoặc qua ý tưởng: gen sống tiếp qua con cái, qua sinh sản, nhưng mặt khác, ý tưởng cũng có thể tự nhân bản, giống như meme. Và tôi thích cuốn Antifragile — tôi nghĩ tác giả là một nhân vật rất thú vị, và tôi thực sự thích những cuốn sách của ông.

GERGELY: Cảm ơn vì những gợi ý đó, và cảm ơn bạn đã tham gia podcast. AI engineering là một lĩnh vực rất mới, và thật tuyệt khi được nghe từ một người đã đi rất rộng và cũng rất sâu, người đã ở trong lĩnh vực này từ trước khi nó được gọi là AI engineering. Cảm ơn bạn rất nhiều.

CHIP: Cảm ơn bạn rất nhiều vì đã để tôi được "tràng giang đại hải" trên show. Tôi thực sự trân trọng điều đó. Một điều tôi thực sự thích ở việc viết hay nói chuyện công khai là tôi nhận được phản hồi — đôi khi ai đó nói, "tôi không thực sự bị thuyết phục," đôi khi là "tôi đồng ý với bạn," điều đó thật tuyệt khi nghe nhưng không phải lúc nào cũng tốt cho cái tôi. Nhưng tôi thực sự thích những phản hồi trái chiều — "bạn chưa nghĩ đến điều này," "bạn quên mất điều kia" — nên nếu có điều gì bạn cảm thấy tôi đã bỏ sót, hãy cho tôi biết, tôi sẽ rất trân trọng điều đó.


Nguồn transcript: podcast "The Pragmatic Engineer", do Gergely Orosz dẫn dắt, phát hành ngày 5 tháng 2, 2025. Bản dịch tiếng Việt được biên tập, sắp xếp lại để dễ đọc từ bản ghi tiếng Anh gốc.


More from Chip Huyen

Chip Huyen on her best-selling book: "AI Engineering"

From Hoctro: I'm so proud to be a Vietnamese when seeing that a yuong countrywoman - Chip Huyen - is a best-seller author on Amazon, a well-respected AI engineer and a Stanford University lecturer. I bought her book and it is really good, the best so far on teaching how to use AI as an Engineering discipline.


Chip Huyen, author of the O'Reilly bestseller AI Engineering, on why building with foundation models is a fundamentally different discipline from machine learning engineering — and why fine-tuning should be your last resort, not your first move.

From "The Pragmatic Engineer" — a podcast hosted by Gergely Orosz.
Guest: Chip Huyen, computer scientist and author of AI Engineering: Building Applications with Foundation Models (O'Reilly).
Published: February 5, 2025.




Introduction

Chip Huyen is a computer scientist and writer, author of the book AI Engineering — currently the most-read title on the O'Reilly platform. She previously worked as a researcher at Netflix, was a core developer of NeMo (NVIDIA's GenAI framework), worked as an ML engineer at Snorkel AI, and founded and sold an AI startup called Claypot AI. She has taught machine learning systems design at Stanford, and her current book is her second on ML and AI engineering. In this conversation, host Gergely Orosz and Chip cover what AI engineering is and why it feels so much more full-stack than machine learning engineering did, what the typical steps are for building an AI application — from choosing a model, through using RAG, all the way to fine-tuning — and what practical ways exist for software engineers to get started building AI applications.

GERGELY OROSZ: Chip, welcome to the podcast.

CHIP HUYEN: Hey, hi, I'm Chip. I'm very excited to be here.

GERGELY: I've been following your newsletter for a while, so I was really looking forward to this chat. First of all, I really want to congratulate you on this book. I've started reading it — I haven't read the whole thing, I've gone through some chapters and gone deeper into others. What I found is, when I looked at the table of contents, I thought, well, this looks good in terms of breadth — it goes from how do you understand foundation models, how do you evaluate them, what is prompt engineering, and into things like fine-tuning, RAG, dataset engineering. But then within each of those sections it starts to go deep — there's an introduction, but then it goes deeper. For example, for the evaluation methodology chapter — just looking at the table of contents — I started reading it thinking, well, we know it's important to evaluate AI models, we know it's harder to do, but then you go into things like LLM-as-judge, or ranking models with comparative evaluation, and the challenges of it. That's where, in some parts, I had to slow down and look things up. So it does go really deep into a lot of these sections, which I found pretty refreshing — it's got a mix of breadth but also depth. This is definitely not a fast read for me, but it's one of those things I'll keep coming back to.

CHIP: Thank you. It was not a fast write either — it took quite a while, and a lot of references. I think I cited over a thousand references in the book, so I probably should have read even more papers. I went through a lot of GitHub repos — I have a tracking sheet of thousands of repos, at least 800 stars now — so I went through a lot of those codebases, and a lot of blog posts, and other books, some from the seventies, eighties, nineties. I also published about a hundred reference links I found really useful while writing the book, so if you just want to look at those references on their own, they're on my GitHub.

GERGELY: And I was surprised by some of the really original research — it's not just that you wrote about these papers, or here's what I read, but — as you mentioned, the thousand repos — you actually have a whole section about how the number of GitHub repositories changed over time: the ones about infrastructure, the ones at the application level, and so on. You have more than 900 repos mapped out. I've never seen anything like that, and clearly that took your own slicing and dicing and your own research.

CHIP: Yeah, I feel like I do a lot of manual labor. I think I get a lot of value out of doing things the non-optimal way. I feel like a lot of people focus on "what's the quickest way to do it, what's the fastest way to do it" — but if you're willing to put in the effort into things that a lot of people aren't willing to, I think you can get some kind of insight that other people don't get.


I. What Is AI Engineering?

GERGELY: One thing that's a little interesting about this book is that it's about AI engineering, and this field moves so quickly — just in a week we've had a new model come out, for example DeepSeek, that people have been talking about for a few weeks now. How did you write this book? How were you able to write a book about such a fast-moving industry, so that by the time it's released — which was clearly a few months after you finished it — it would still be relevant?

CHIP: That's a great question. When I started writing the book, I was thinking the same thing — I thought it wasn't the right time to write it, because there are so many things still changing. But then, when ChatGPT really came out, like a lot of people, I had this existential crisis. I was in a group chat and everyone was like, "oh no, what does this mean for us as engineers." I feel like there are two things I usually identify with — being an engineer, and being a writer. And guess what use cases AI is really good at — writing code, and writing. So I was like, oh shoot, what does this mean for me?

So I started interviewing a lot of people, I started reading a lot, I talked to a ton of people, and I made a lot of notes. And in that process, what I realized is that a lot of things that seem new — a lot of the fundamentals have actually been around for a while. Language modeling isn't a new task — Claude Shannon introduced that back in the 1950s. We talk about RAG all the time, but RAG isn't new either — it's based on retrieval-augmented generation, and retrieval is a very old technology, already powering a lot of use cases across the internet, like search or recommendation systems. Vector databases have been around for a while, and vector search already has so many cool algorithms.

So I thought, okay — first, a lot of things aren't actually new. And second, I tried to focus on asking: is this due to a fundamental limitation of AI, or is it just due to the current, temporary capabilities of AI? And if it's due to current capabilities, how fast is that capability changing? In the early days, for example, a lot of people shared prompt tips — like, try bribing the model, "hey, if you answer this correctly I'll give you $200" — or people talked about prompt robustness, how sensitive a model is to small changes in a prompt. I was reading about this and I felt like models were actually getting more and more robust to prompts — from GPT-3 to GPT-3.5, it was already so much more robust, meaning small changes to a prompt produced a lot less variation in performance. So I felt this kind of thing wasn't going to stick around — prompt tips weren't going to matter for very long. That was already happening at the height of people saying there might be a job called "prompt engineer." You could already see it trending down.

So I think writing is a bit like making a bet — when you write about a topic, you're betting on whether it's going to stay relevant. I tried to look at the trajectory of progress and see what would still be true in a year or two. Another example is context length — people wanted longer context, but then I kept seeing it move really fast, from something like 8,000 tokens to 128,000 in a few months. Super fast. So I thought, maybe the question is less about context length and more about context efficiency — can a model actually use that context well? Those were the kinds of bets I made, and certain things happened during the writing process that made me more confident in them. Multimodality is another one — when I wrote about multimodal models back in 2023, people told me I was too early, that everyone was still working on language, we're not there yet. But it just felt inevitable to me — we've learned how to work with language, but I wanted to do a lot more than just language. And now multimodality is everywhere — almost every model is multimodal now.


II. Keeping a Book Current in a Field That Moves by the Week

GERGELY: So the title of the book is AI Engineering, and we now have this term "AI engineer" spreading like wildfire. How would you define AI engineer, or AI engineering? Because I feel like it's become a bit of a loaded term these days.

CHIP: It is. I feel like a lot of terms nowadays are loaded — you're not allowed to say certain things anymore, you're not allowed to use certain words anymore. When I was agonizing over the title for the book, I knew we needed a different term from "machine learning engineering." The reason is: with foundation models, a lot of the fundamentals, the systematic approaches, are still the same as in machine learning engineering, but there are also a lot of new things.

One thing is: before, if you wanted to build a machine learning application, you had to build your own model — that meant you needed your own data, and you needed the expertise to train and babysit a model. Nowadays, if you want to build an application leveraging machine learning or AI, you can just send a direct API call and get access to this wonderful capability. That really lowers the barrier to entry — you don't need data anymore, you don't need a fancy AI degree anymore.

A second thing is: before, you needed distribution, because you deployed a machine learning application as part of an existing application. If you built a recommender system, you needed an e-commerce website to attach it to. Fraud detection was deployed as part of, say, a banking or payments app. But now you can put it out as a standalone application — you don't need an existing distribution channel, though having one is still really useful.

Another very big thing is that it's a shift from less machine learning and more engineering and product. Before, if you were a good machine learning engineer, you started from data — you had to gather data, maybe get human annotations, then you trained a model, and once the model was good, you deployed it into your product. Nowadays, you actually start with a demo — you have a cool idea, you say, "let's just try it out and see if it works." You start with a product, and once it's working pretty well, you say, "I want to make it better," so then you start gathering more data — maybe more prompt examples, or, in very rare cases (I don't recommend most people do this early on), fine-tuning. Then maybe you're sending a lot of API calls to OpenAI, Anthropic, Google, and you decide it's getting too expensive, so you start hosting your own model, using an open-source alternative, or fine-tuning one.

So before, machine learning engineering went from data, to model, to product. Now, with AI engineering, it goes from product, to data, to model. That places a lot more focus on product and data, which is where the comparative advantage lies once everyone shares similar underlying AI capabilities. I did think we needed a different term to separate it from machine learning engineering, but I didn't know which term to use — so I thought, let's just ask people. I surveyed a bunch of people I thought were doing this — building applications on top of foundation models — and almost everyone said "AI engineering." So I thought, okay, if that's what people are already calling it, let's go with that.

GERGELY: So do I understand correctly that the biggest difference is: machine learning engineers did a lot more groundwork — getting the data and building the model — whereas with AI engineering you have a lot of that available, at least initially, through APIs, so there's more of an engineering flavor, you hack things together, and then over time, as things get more serious or your product gets bigger, you do more of that — you might build your own model, host it, maybe even build your own one day, but it comes a lot later. A lot of the machine learning engineering work only comes down that path if the product is big enough and it works, whereas with AI engineering it's the other way around — you put in the effort up front and then see if it even works.

CHIP: First, I feel like every company has a different definition of the role — even within the same company, people with the same title can do very different things, so it's never really a clear-cut definition. Second, I don't think the real question is "machine [learning] or engineering." In the vast majority of GenAI systems I've seen, there's still a very strong traditional machine learning or classifier component. Imagine you're building a customer support chatbot — whenever I ask about this at a conference, I see a lot of people raise their hands, it's such a classic GenAI application. You get a request from a customer, and maybe you have several potential solutions for it — if it's an easy query, you send it to a cheap model; if it's harder, you send it to a more expensive one. But something very sensitive, like "hey, why did you charge me twice for the bill last month," you probably want to send to a human operator. So you'd have a router, or an intent classifier, to decide what goes where — that's a traditional, classical machine learning model you can build yourself. Or, after you get a response from an AI model, you might check whether it contains PII, because you don't want to send users a response with private information — PII detection can be a classifier, toxicity detection can be a classifier. Retrieval in RAG systems is also, I think, in the realm of classical machine learning you can build yourself.


III. From Data → Model → Product, to Product → Data → Model

GERGELY: What are the most common techniques used when building AI applications — things a software engineer going into AI engineering should know about? The assumption here is you've tried a lot of other solutions, and now you think GenAI is a solution for you — what should you do first?

CHIP: I think those techniques are useful, and a common pattern I've seen is a certain developmental path. Initially, the first thing I'd say is to try to understand what a good response is and what a bad response is — you want a mental model of that, and it's not always intuitive. LinkedIn has a great example here — they built a candidate job-fit assessment, and they found that the majority of their time went into just understanding what candidates actually needed from the model. Initially they focused on correctness, but they realized candidates didn't find that helpful — if a candidate asks, "am I a good fit for this job," and the AI responds, "you're a terrible fit," the candidate is left thinking, "okay, what am I supposed to do with this information?" What candidates actually wanted was more understanding of the gaps, and how they could fill those gaps, or suggestions for other roles that might be a better fit right now. So once you have that picture, you build a guideline — given this kind of response, answer like this, be helpful, show them the gaps — a very clear guideline for the model, in the prompt. You try those prompts, look at the output, add more examples, and keep going until you get really good responses. Then you evaluate — maybe create a set of queries and expected responses, and use both automated metrics, like LLM-as-judge, and human evaluation, to measure progress.


IV. First Steps: Prompting, Context, and RAG

Once you've done prompting and added more examples, you might want to make the system more complex — give the model more context so it can answer better. So when a user asks a question, you might have the model pull up related documents, or job listings, or information about the company, or a candidate's résumé. You build a system that augments the context with documents — that's the RAG pattern. I do think RAG is a very powerful pattern, and there's nothing really fancy about it.

What's interesting is that a lot of people equate RAG with vector search. When people say "I want to use RAG," the very next thing they ask is "which vector database should I use" — people jump straight to vector search.

GERGELY: Yeah, because you have the chunks, and the embeddings can be stored as vectors, so as engineers we're like, "I need a vector search database."

CHIP: People love databases. But I don't think the first solution should be jumping straight to embedding-based retrieval, because you need to build an embedding model, and the quality is highly dependent on the quality of the embeddings — bad embeddings, bad retrieval. Vector databases can also be quite expensive to run, and there's latency to think about. And embeddings can obscure certain keywords — if I'm searching for a specific error code, an embedding search doesn't necessarily surface the exact code. So there are real challenges with vector databases and vector search. The usual, common approach is to start with something as simple as keyword retrieval — extract the keywords from the user's query and find documents that match. Then maybe the documents are too long to fit into context, and that's when you start chunking — figuring out how to break documents up so they fit. And chunking creates its own problems — maybe a document is about "Company X," but says early on, "from now on, Company X is referred to as the Company," so the rest of the document never says "X" again, and if you search for X, you miss the chunks below that point. So you might want to extract keywords, add metadata to every chunk, add the document title, or add a summary — some people do that. Anthropic has a very good article called "contextual retrieval," where they have Claude generate key contextual metadata for each chunk and prepend it, so you retrieve the right chunk. Data preparation gives a really huge performance boost — I've seen it give a much bigger boost than agonizing over which vector database to use. It's not that vector databases aren't useful, it's that in the beginning you want to try the simplest thing with the biggest performance gain, and move up in complexity from there.


V. The BM25 Test — Why Boring Retrieval Still Wins

CHIP: For a lot of retrieval, someone told me something a little hot-takey but very interesting — he said, "I'm not going to take any retrieval system seriously if they don't benchmark against BM25." BM25 is a pretty old-school retrieval method, over twenty years old now — term-based retrieval, not embedding-based — and it's really, really hard to beat. A lot of the time, when you want more complexity, you combine term-based retrieval with a vector-database solution, so you get the semantic side from the embeddings, and the exact keyword match from the term-based side. Hybrid search is very, very common.


VI. Fine-Tuning: The Last Resort, Not the First

GERGELY: So we've talked about prompt engineering, adding more examples, RAG — I guess after you've maxed out on a lot of those things, which usually takes a while, people might consider fine-tuning.

CHIP: I think there's usually a lot of reservations against fine-tuning, because it brings a whole host of new problems you need to deal with. First, once you've fine-tuned a model, you need to think about how to host it — a lot of these models are big, with a lot of parameters.

GERGELY: I actually read this part in the book — you go into detail on the problems with memory size, and you cover alternatives that need less memory but bring their own trade-offs. So it's trade-offs within trade-offs within trade-offs — you solve one problem and get a bunch of others, and you have to decide whether it's worth your time, effort, and resources.

CHIP: Exactly. Also, once you fine-tune a model, you own that fine-tuned model, and the question becomes how do you maintain it. We have this whole world of very smart people releasing new models constantly, with capabilities increasing rapidly, so the question is: how long can your fine-tuned model keep outperforming the new models coming out? You might spend a lot of energy fine-tuning a model, and then some random company you've never heard of releases something extremely fast and extremely good. So it's quite challenging. Fine-tuning is the last resort, not the first line of defense.

GERGELY: What I've heard, if I've got it right, is: take a structured approach — start with prompting, start simple, get to responses that make sense, then add more data. You can do this with RAG, with chunking, keyword extraction, data preparation, which makes a bigger difference than a lot of people think — and then move on to more advanced things. There's a whole host of things you could do, but my understanding is you'll get there over time. Initially the basics will keep you busy, and you'll probably be able to build a pretty good system just with the basics and a bit of engineering — and, most importantly, understanding the problem you're trying to solve, rather than building whatever the shiniest new technology happens to be.

CHIP: The approach can be a bit different for an individual developer versus an enterprise. One thing I've seen, especially early in a technology's life, is that enabling new use cases actually brings more return than incrementally improving existing ones. So instead of pouring energy into squeezing out a little more performance with something fancier and more complex, maybe use the same stack you already have and open up new applications with it. That's why I think a lot of companies will take a while to get to the fine-tuning phase.


VII. Rolling Out AI Thoughtfully — The Customer Support Case

GERGELY: Let's say at my company we decide to build an AI solution — take the example of customer service automation. What are typical approaches I should know about? You cover some of this in the book too.

CHIP: For customer support, I'd say the first thing to look into is what the bottlenecks in your current solution actually are. For example, I worked with a setup that had a lot of customer support requests and didn't know how to answer them all. Their solution was interesting — they tried to drive a lot of the questions into a common channel, like a public Discord, so other users could help answer them, and in the future, if someone had a similar question, you could just point them to the previous discussion. Another solution that was popular around 2018–2019 was routing requests to the right department. The bottleneck there was in triaging — you get a request and don't know which department to send it to. A bunch of startups tried to build systems to predict, is this a finance query, is this a technical-support query — smart routing alone already reduced a lot of the friction.

If you decide you do need GenAI, I really recommend the framework Microsoft introduced, called "crawl, walk, run" — going from a lower-stakes to a higher-stakes deployment. It doesn't have to be a support jackpot from day one — initially you might have a human in the loop. For every request, instead of a human agent writing the response from scratch, the AI suggests a few options, and the human picks one or uses it as a starting point and makes a quick edit before sending it. Once you see the acceptance rate getting really high — say 90 percent for a category of queries — you feel more confident rolling it out further, maybe to more users, or maybe internally first. You give it more autonomy but keep the scope of deployment small, and once you're really happy with it, you roll it out to more users.

GERGELY: That's nice, because what I was expecting you to say is, "oh, you just build this AI framework, deploy it, and see" — which is what I feel a lot of companies are doing. A lot of teams say, "oh, GenAI, let's grab a model from ChatGPT or Anthropic, put it in, and put it out there." But I really like that what you're describing isn't really specific to GenAI — you look at the business problem, look at the options, which include traditional machine learning like classifiers, not just GenAI, and then you check whether these tools actually solve your problem before you roll it out, instead of blindly rolling it out. All of this sounds like it's not really new — you could have said the same thing two or three years ago, before GenAI, except we wouldn't have had these GenAI tools to play with.

CHIP: Yeah — actually, before our chat, I looked back at one of my old talks, about things that haven't changed, things that feel very similar across eras of engineering. Dealing with a new technology is one of the things that never changes. Every time a new technology comes out, I can hear the collective sigh of senior engineers everywhere saying, "not everything is a nail" — people just try to make the new technology work for everything.

I do think a very common mistake is jumping straight into GenAI when you don't need GenAI. There are two different headlines here: one is "I use AI," and the other is "I solved the problem." If you're focused on the first headline, sure, you use AI — but if you want to solve the problem, you need to understand what the problem actually is, what the roadblocks are, and remove them using the simplest solution, not the fanciest one.

GERGELY: I feel like there's a bit of a really strong fear of missing out across most tech companies — everyone knows this is such a transformative technology, it gives so many new capabilities that it's going to be important, everyone knows their company will be using it, but now there's a fear of missing out: what if my team doesn't build it, what if someone else gets ahead of me? So a lot of teams are building it, using a hammer looking for nails, even if they don't need it yet. I'm not sure that's necessarily a bad thing, because people at least get experience with it — but it's a very interesting time, because usually when a new backend framework comes out, or something domain-limited, some people jump on it, but this is the first time I've seen the whole industry jump on something at once, everyone trying to use it whether it works or not.


VIII. Staying Focused on the Problem, Not the News

CHIP: I definitely agree with you on the FOMO. I do think everyone jumping on it is actually a pretty good thing — the energy is incredible, I've never seen so many smart people focused on the same problem before, and the progress is amazing. But I do think there's an irony to it — the more we try not to miss out on things, the more things we actually miss, because if we try to keep up with the news, jumping from one piece of news to the next, we always stay at the surface level and never go deep into anything. I actually don't read the news much — I find it a bit distracting. My approach is: pick a problem you care about, and only pay attention to things that help you solve that problem. If some news comes out, I ask, does this help me solve this problem? If it doesn't, it can wait — because if something is actually important, it'll still be important two weeks from now, a month from now. I don't drop everything to go understand it right away. I try to stay a bit calmer about it.


IX. Why Evaluation Gets Harder as Models Get Smarter

GERGELY: When you're building an AI system, one of the things you'll come across is that you need to evaluate the output — how well does it work, does it solve your problem. Why is it difficult to evaluate AI systems, and what are common ways to do that?

CHIP: Evaluation, I think, is a billion-dollar question — a trillion-dollar one, given how much is being invested now. You need to go big, and if you go big, you'd better go really big. I think it's challenging because the smarter AI becomes, the harder it is for humans to evaluate it. Before, if an AI was incoherent, you could easily tell a response was bad — it just didn't sound good. But nowadays it's pretty coherent — if you ask ChatGPT to summarize a book, and the summary sounds convincing, you actually don't know whether it's a good summary — you might have to read the whole book yourself just to evaluate it. It's the same with math. I personally use AI to ask a lot of questions I don't know the answer to — and because I don't know the answer, I don't know if the answer it gives is correct. A lot of people can tell whether a first-grade math solution is correct, but very few people can tell whether a proof of some fancy equation is correct. I remember when o1 came out, Terence Tao — one of the best mathematicians of our time — took the time to evaluate it, and he said the experience of using o1 was similar to advising a mediocre, not-completely-incompetent graduate student. That makes me think — if we really need the brightest minds today to evaluate AI, we're soon going to run out of really smart people to evaluate it with.

So what would be the next step forward? For a long time, we used humans as the gold standard for AI performance — humans would write out how you should respond, and the AI would try to copy the human. But now, for a lot of tasks, AI performs way better than humans. I thought about several approaches to deal with this, which is actually why I split this into two chapters in the book — I originally had one chapter on evaluation, but the more I wrote, the more I realized there was just so much, so it became two fairly long chapters: the first on general methodology, the second on the specific techniques for evaluating an AI system.


X. Functional Correctness, LLM-as-Judge, and Comparative Evaluation

CHIP: One methodology is functional correctness — you evaluate an application's output based on how well it performs the task. If you say, "use AI to save energy," you can see how much energy it actually saves. If you say, "use AI to play this video game," you can see the score. A very common use case for this is coding — I don't think it's a coincidence that coding is one of the most popular use cases, because we actually know how to evaluate generated code. We might not know how to evaluate a generated essay, but we know how to evaluate code, because we've been testing code for a long time. With code you can use functional correctness — first, does it compile, does it run; second, does it produce the expected output.

The second approach is using AI to evaluate other AI. We've been using AI to automate a lot of applications, so can we also use it to automate evaluation? It's actually doing pretty well. Even back in 2023, the LangChain "State of AI" report found that the majority of applications they surveyed already had some sort of LLM-as-judge, and I think that's only grown. It's getting pretty cost-effective and useful, though of course there are a lot of challenges around it too.

Another approach I found very interesting is comparative evaluation. As humans, it can be hard to give an absolute score to something, but if you give us two versions of something, we can usually tell which is better. We've seen studies showing that even for tasks where AI is performing at a level human experts can't reach, humans can still detect the differences between two outputs. This has been guiding not just evaluation, but also model development.

GERGELY: Sounds like there's no simple answer — you need to go through all these options and figure out, for your case, what makes sense for cost, for what you can do, whether you can put a human in the loop. There's no real silver bullet.

CHIP: I don't think there's a simple solution. That's one reason I'm a little skeptical about evaluation tooling — a lot of the challenge with evaluation isn't that we don't know how to evaluate, it's that it requires discipline and hard work, and a lot of that just can't be automated by tools.


XI. Measuring What Users Actually Want

CHIP: One thing about evaluation is that we need to evaluate an application based on what users actually want — and we usually don't. That means going and talking to users, looking at their interactions, because a lot of what we think we should measure isn't what actually matters. We have to measure what matters. I have several examples of how counterintuitive this can be — you think you're measuring one thing, but users actually care about something else.

I have a friend building a pretty big application, basically a meeting-summarization tool. Initially they tried to measure correctness — does the summary cover the content of the meeting — and they agonized over format, whether users wanted a three-sentence summary or a five-sentence one, because they assumed users wanted shorter summaries. But eventually they found out that users don't really care about the whole content of the meeting — people only want to know, what's the action item for me, what do I have to do after this. So that changed things: correctness still matters, they still don't want the summary to make things up, but the real focus became not missing action items specific to the person asking.

Another example — a pretty big tax firm built a chatbot to help people with tax preparation, and the response was very lukewarm. They were measuring usage, and people just weren't using it much, and they wondered why — was it hallucinating, was there some other issue — they tried to measure their own kind of metrics. But in the end, they found people simply weren't using it because they hate typing. And also, if you're facing a domain you don't know much about, you don't even know what questions to ask — people use tax software precisely because they don't know a lot about tax. So they didn't know what to type, and they didn't understand the domain — they'd gone to the product because they wanted someone else to take care of their taxes. What the team started doing was trying to understand what kind of questions people would ask, and suggesting those up front — guiding users with, "here's a question you should ask," and then the answer, and it keeps going from there.

A lot of this comes down to understanding your problem domain — go talk to users, look at the data. I still think looking at data is very, very important. Greg Brockman has a great quote about this: manual data inspection is one of the activities with the highest ratio of value to prestige. People don't think highly of manually inspecting data — "let's give it to an intern," "let me think of something fancier, some algorithm" — but it's actually extremely high value, because by looking at the data you detect patterns and understand how users actually use the product. I usually highly recommend to teams: don't forget human evaluation. You use LLM-as-judge, but the judge has real challenges — its quality depends on the underlying model and the prompt, and it's fairly non-deterministic, so things can change over time. But if you also have human evaluation — very consistent, very clear guidelines, every day going and looking at, say, 50 samples of actual interactions, or more if you have the resources, 500 or a thousand — you get a real picture of how your users are using your product, any changes in behavior tied to current events, or you can correlate it with your automated metrics. If the AI judge score starts diverging from the human judge score, that's something you need to investigate.


XII. Common Mistakes Teams Make With GenAI

GERGELY: So, as you said, you can't really skip the hard work if you want good results, and you can't fully pull humans out of the loop, at least initially. What are some common mistakes you've seen when teams are building AI applications?

CHIP: I don't want to say it in a way that sounds like everyone's an idiot, but — we've touched on several already. One very common mistake is using GenAI when you don't need GenAI. A startup once pitched me on using GenAI to help people optimize their electricity usage — you'd tell the chatbot about your household's energy-intensive activities, charging a car, doing laundry, and it would tell you the best time to do each one to minimize your bill. They said their research showed you could save 30 percent on average — "it's free money, why wouldn't anyone want that." I asked what the savings would be compared to just manually scheduling the most energy-intensive activity during off-peak hours — just charge the car at 10pm. They said, "we haven't done that comparison yet, but we'll try it and let you know" — and they never got back to me, and later abandoned the idea. A lot of these optimization problems can be solved greedily, without GenAI at all.

On the other end of the spectrum, I see a lot of companies giving up on GenAI because they tried it and it didn't work, when in fact — I'm often surprised to find — another company with a very similar use case had it working really well. When you look into it, it's usually a bad product: they didn't prompt well, didn't understand their users, or didn't even know how to evaluate it properly. For example, I worked with a company doing résumé information extraction — someone submits a résumé (a PDF, not raw text), and the system extracts the raw text, then extracts the organizations the person worked for. I asked how it was working, and they said terribly — they got the organization wrong about 50 percent of the time. I asked where in the pipeline it was failing: the PDF-to-text step, or the text-to-organization step? They said, "we don't know, we didn't check that." If you can't localize where something fails, you can't fix it. It sounds like common sense, but this keeps coming up.

Another mistake is overcomplicating things — jumping straight to fancier vector databases, or fine-tuning. A common one nowadays is: you see a fancy agent framework and think, "let's use this, let's try it." Frameworks are really cool, and I'm genuinely grateful for a lot of them — they make my life easier — but a framework should encode best practices and be heavily tested, and I think we're still in the phase of learning what the best practices even are. A lot of frameworks can introduce unnecessary, painful bugs. When I was going through the codebases of several popular frameworks, I noticed something interesting — a lot of them ship default prompts to help you get started quickly. But every single one of those default prompts had typos, and they kept changing — someone would submit a quick PR to fix a typo that never made it into a proper release. So if you're using one of those default prompts and your application's performance suddenly changes, you don't know why, because the prompt changed underneath you.

GERGELY: It's interesting, because what you're describing — using this technology when you don't need it, giving up on it for reasons a bit of common sense would have fixed, using a new framework that isn't really high quality or doesn't really encode best practices — all of this sounds like stuff you could swap "GenAI" out for any new technology or stack and hear similar stories. It's not really new, is it — whoever tells you they're the expert still has, at most, a year or two of experience with it, it's still changing constantly, and there's no established best practice yet.


XIII. Systematic Thinking Never Goes Out of Style

CHIP: I definitely agree. Even though technologies change over time, systematic thinking — systematic approaches to problems — usually doesn't. If you want to solve a problem, you start by breaking it down, seeing where the challenges actually are, and going through different solutions. It sounds obvious, but a lot of the time FOMO gets in the way — you know it's the right thing to do, but you feel like you need to check this other thing out first, and you keep doing that three times a day, and the day is gone, and you never really get the time to sit down and think deeply about what you're actually trying to do.

GERGELY: So I guess we're going to see a lot of the same mistakes that happen with any new technology, and if some listeners have adopted new technologies before, they can probably reuse those approaches, localized for GenAI, and avoid some of these.


XIV. How to Learn AI Engineering

GERGELY: Speaking of picking up new technology — as a software engineer who wants to get into AI engineering, what would your recommendation be for how to learn? Things change so fast — you mentioned the importance of fundamentals — what would you focus on?

CHIP: I have a lot of thoughts on learning, because I like learning a lot, and over time I've tried to observe patterns — though the way I learn might not be the way you learn, people have different learning styles. In general, I think of learning as having two approaches: project-based and structured. Project-based learning is: you choose a project, work on it, try to solve every problem in it, and finish it. Structured learning is more like taking a course or reading a book — someone else has laid out what you should learn and in what order.

There's quite a bit of debate about this. Somebody told me recently that a good friend of theirs thinks the problem nowadays with people who want to become engineers is that they spend too much time learning and not enough time doing — forget the courses, forget the books, just pick a project and work on it. I do think project-based learning is very valuable. But if you think of it as, here's a set of skills and knowledge I want to build, project-based learning can hit a lot of those points, but not always all of them, and it can sometimes leave you confused.

Another thing about project-based learning is that a lot of people follow tutorials — someone else has already walked through how to do this. Tutorials are really cool, and I do them a lot myself, but I've noticed it's very easy to just mindlessly click from one cell to the next, run cell after cell, and never stop to ask why it's being done this way, why this library matters, why the code is written this way, why the batch size is 16 instead of 64. There's no built-in mechanism to force you to stop — you just want to run to the end and see the output, then make changes by best guess.

Something funny happened when I was doing market research on an open-source project I'd worked on, called Ibis — I knew that if you wanted to use it, you had to write "import ibis." So I searched GitHub for repos with "import ibis" in them, and found a lot of repos where that import was present but Ibis wasn't actually used anywhere else in the codebase. I realized a lot of those repos had copied from a tutorial that used "import ibis" — probably the original developer had that import, deleted the code that used it, but forgot to delete the import line, and then everyone else copied the same thing. That's something a little dangerous about tutorial-based learning — it's great, but it's important to be able to stop and ask questions, and sometimes structured learning helps you know which questions to ask.

So before starting, I'd recommend a mixture: choose a project — it doesn't have to be big or fancy, just pick one — and complement it with structured learning: a book, a course with friends, reading papers. Reading papers is its own skill, it can be time-consuming, and you need to know what you want to get out of it. But start a project, and complement it with structure.

There's also an exercise I found very useful, at least for me, when I was starting out: for a week, observe and note down everything you do, and think about what percentage of it could be automated by AI. Then try to use AI to do those things. It gave me a lot of ideas for use cases — you just think about what matters to you, and if an application can solve even one problem for you, that's already great.

GERGELY: That's an unconventional way to look at it, but a good one — it can help you get ahead of the dread of "what would AI do to my job," because you actually see what happens when you automate things. Which leads to my next question — there's a lot of fearmongering around AI meaning the end of software engineering, since it's very good at coding, better than in a lot of other areas. What's your take — as AI gets better, will it actually end software engineering, change it, or not change it that much?


XV. Why AI Is Not the End of Software Engineering

CHIP: I think it goes back to the question of what software engineering actually is. An analogy might help — writing. We tend to confuse the most salient activity of something with the thing itself. For writing, in the past, writing meant the physical act of putting words onto paper — people took pride in calligraphy, "oh, you have beautiful handwriting, you must be smart." Then we had computers, and now writing doesn't refer to that physical act anymore — it refers to the process of arranging ideas into a readable format. I think the same is true for coding. People think of engineering as the physical act of putting code into an editor, but that's not what software engineering actually is. Software engineering is about solving problems — here's a problem, how do I come up with an executable program to solve it. Coding itself is just the physical act. So yes, AI may automate coding, but I don't think it's going to fully automate problem-solving, because you still need to know what the problem is, and only you can understand what problem you're actually facing.

Software engineering is also about doing things very precisely. The reason the job of software engineer exists is that it's very hard to be precise, to speak the computer's language — move an if-statement, change a variable, and suddenly the program crashes with a stack overflow, which of course you understand if you're a software engineer. But if you're a business user who just says, "I want the button to move over when you resize the window," it's easy to say, but as the engineer you know the edge cases, the environment, the system events you need to account for, and you write code for all of it. I'm sure we'll get to a point where AI can generate a lot of that, but there will still, at some point, be a need for someone who understands the code and can find the gap — because English isn't as precise a language as a programming language. Programming languages were invented to be precise and unambiguous — there's essentially a one-to-one mapping from assembly to a higher-level language, but going from English to a programming language is very fuzzy.

I think that profession isn't going to go away. For casual users, it might work fine for hobbyist use cases — you say something, you get something roughly right, you try a few times and you're happy. But for a business or professional use case, you'll need people who can guarantee you get exactly what you want.

I'm actually really excited about AI automating part of coding, because it frees software engineers to build much more complex software. Going back to the writing analogy — when writing meant manually copying words onto paper, a book of 5,000 or 10,000 words was considered big, because it took so long to copy by hand. Now we have books hundreds of thousands of words long, and that shift made things a lot easier. It's the same with software engineering — if you don't have to hand-write every line, you can turn ideas into executable programs much faster, which enables us to write much more complex software. Maybe one engineer will be able to command, debug, or maintain a much more complex system on their own — right now, a million-line codebase usually needs several engineers, it's rare to have just one person own that, not even counting dependencies. That would be an interesting shift.


XVI. Education, Entertainment, and the Enterprise

GERGELY: What other use cases are you excited about, outside of coding?

CHIP: I'm excited about education. I think AI can help people learn a lot faster. One thing I've realized is that nowadays, if you already know the question, finding the answer is actually pretty easy — you can ask AI and get a good answer, or at least a lot of references to dig into. What's still hard is coming up with the right questions in the first place. So I think education needs to focus on building the habit of asking questions and genuinely understanding, and I think AI can make learning a lot more effective — people can learn more, faster. And if we can learn better and faster, we can actually do more things.

Another use case I'm excited about is entertainment. We tend to think of entertainment and education as separate things, but I don't see why we couldn't have games that help us learn — strategy games teaching negotiation, for example, could be really fun. Or just more intellectually stimulating content generally — movies or shows don't have to be pure escapism; I like content that makes me think a little, that helps me understand more about different fields. AI can help create content that's both entertaining and intellectually stimulating. As a simple example, we already have a lot of medium adaptations — a book becomes a movie, a movie becomes a game, a paper becomes a podcast — and if AI can help adapt content across mediums like that, it could be really exciting.

There are a lot of smaller problems I'm interested in too. I haven't touched much on the enterprise side, but that's where most of the money still is. I do think enterprise and company organizational structures are going to change. Think about what the job of middle management actually is — aggregating information from reports and transmitting it up to executives, and transmitting direction back down to lower layers. Information aggregation is something AI can do really well. I think companies can become a lot more efficient because of it.


XVII. Rapid Fire Round

GERGELY: Let's close with some rapid questions — I'll shoot some questions and you tell me what pops to mind. What programming language did you use most building AI applications, or doing ML engineering, and why?

CHIP: Python and JavaScript.

GERGELY: JavaScript as well? How come?

CHIP: Oh, definitely — a huge part of building products is building demos quickly, and JavaScript is really handy for that. I'm not very good at it — I've always been a little scared of JavaScript — but I'm grateful AI has made it a lot easier to get started with nowadays.

GERGELY: Which is your favorite LLM right now, and why?

CHIP: I don't really have a favorite — I use different ones for different things. I used to use ChatGPT out of habit, because I already had a bunch of prompts set up. I use Claude sometimes for creative writing, because I think it's a bit less clichéd. I've been reading up on R1 — who isn't, these days — just trying it out. I've also used some of the Llama models, like the vision version, for things like screenshot-to-code, just testing it out, having fun with it. But I'm not emotionally attached to any of them.

GERGELY: And what's a neat AI tool you've used and liked?

CHIP: I built something myself that's really helped with research. When I come across a link to a paper, I usually go through the same process — read the abstract, look up the authors, do a bit of digging, ask questions, check the citations — so I built a small tool that just goes and scans all of that for me and hands me the information.

GERGELY: A tool to scratch your own itch.

CHIP: Exactly — I think that's the beauty of AI now, you can build something like that in a very small amount of time. Before, it would have taken me weeks, but now I can just build one. That's something to be excited about.

GERGELY: I agree. And what are one or two books you've read and would recommend?

CHIP: I recommend a lot of books, but recommending books can feel a bit like forcing people to enjoy what you enjoy. I like books that give me a new perspective, or insight into topics I don't know much about. I really like Complex Adaptive Systems — a very interesting book on systems thinking, on how to design social dynamics so people work toward the goals you want. It forces you to think about systems. I like The Selfish Gene, because it makes you think about free will — the idea that you can live on either through your genes or through your ideas: genes live on through offspring and reproduction, but ideas can also replicate, like memes. And I like Antifragile — I think the author is a fascinating character, and I've genuinely enjoyed his books.

GERGELY: Thank you for the recommendations, and thank you for being on the podcast. AI engineering is such a new field, and it was great to hear from someone who's gone so broad and so deep, and who's been in this field even before it was called AI engineering. Thank you for this.

CHIP: Thank you so much for letting me ramble on the show. I really appreciate it. One thing I really enjoy about writing or talking publicly is that I get feedback — sometimes it's "I'm less convinced," sometimes it's "I agree with you," which is great to hear but isn't always great for the ego. But I really like pushback — "you didn't think about this," "you forgot this" — so if there's anything you feel I missed, please let me know. I'd really appreciate it.


Transcript source: "The Pragmatic Engineer" podcast, hosted by Gergely Orosz, published February 5, 2025. Cleaned up from the raw episode transcript, categorized and formatted for readability.