Homus
‹ All talks

Don't Let the LLM Drive

AI Engineer World's Fair 2026: Online Track · Video gốc

Voice tutor Ace giữ control flow trong harness: bài học là state machine, model chỉ nhận contract hẹp, nhờ đó chạy reliable trên Haiku 4.5.

AgentsWorkflow

1. Ace và ý chính của talk: LLM không cầm lái

Ornella mở đầu bằng lời giới thiệu ngắn: cô là Ornella, người bên cạnh là Joel, và hai người đã xây Ace, một AI voice tutor chạy live. Ace dạy trọn một bài học, từ lúc bắt đầu tới lúc kết thúc, và làm việc đó một cách reliable. Theo trang chính thức của sản phẩm, Ace là công cụ luyện thi ACT: học sinh làm một bài diagnostic, rồi mỗi ngày học một bài với tutor tên Pax, người vừa nói vừa vẽ để giải thích, sau đó làm bài tập.

Ornella nói luôn "mẹo" ở ngay câu thứ hai: LLM không phải là thứ nắm quyền. Cả talk xoay quanh đúng một ý đó, và tiêu đề talk nói thẳng ra: đừng để LLM cầm lái. Trên slide mở đầu, talk được xếp vào mảng harness engineering; Ornella phụ trách product, Joel phụ trách engineering.

Slide mở đầu: Don't Let the LLM Drive, harness engineering, Ace
Slide mở đầu của Ace: dòng nhỏ phía trên ghi "harness engineering", tiêu đề "Don't Let the LLM Drive." với chữ Drive tô màu nhấn. Góc dưới là tên hai diễn giả: Ornella Bahidika (product) và Joel Allou (engineering), cùng địa chỉ trang sản phẩm aceactprep.com.

2. Khoảnh khắc quen thuộc: demo chạy ngon, user thật thì không

Ornella nói với những ai đã từng ship một multi-step agent: chắc chắn bạn biết khoảnh khắc này. Agent làm demo hoàn hảo. Rồi một user thật bước vào, và tới giữa chừng thì agent tự quyết rằng nó đã xong, hoặc nó bỏ qua một state, hoặc nó lặp vòng mãi. Demo không bao giờ cho bạn thấy chuyện đó.

Với một voice tutor như Ace, hậu quả rất cụ thể: bài học bị kết thúc khi mới đi được một nửa, trước khi học sinh được kiểm tra, được chấm và được chuyển sang phần tiếp theo. Slide tóm lại: demo che giấu lỗi, người dùng thật sẽ tìm ra nó.

Slide: It ended the lesson halfway through, so sánh demo và production
Slide "the felt problem": "It ended the lesson halfway through." Hai ô so sánh: trong demo, agent chạy sạch từ đầu tới cuối; trong production, nó tự tuyên bố đã xong, bỏ bước, lặp vòng. Dòng cuối: demo che giấu lỗi, người dùng thật sẽ tìm ra nó.

3. Cái bẫy "prompt mạnh hơn nữa"

Cách sửa đầu tiên mà ai cũng với tới là prompt mạnh tay hơn: thêm luật, thêm chỉ dẫn. Ornella gọi đó là cái bẫy. Theo cô, reliability chưa bao giờ là một vấn đề về prompting. Nó là một vấn đề về control: ai đang nắm luồng điều khiển của chương trình.

Slide minh hoạ ý này bằng một đường cong: trục ngang là số luật thêm vào prompt, trục dọc là reliability. Lúc đầu, mỗi luật mới giúp reliability tăng nhanh, nhưng rồi đường cong đi ngang thành một plateau. Từ đó trở đi, thêm bao nhiêu luật nữa cũng không đẩy được nó lên. Phần còn thiếu để từ "chạy được trong demo" tới "chạy được mỗi ngày với user thật" không nằm trong prompt.

Slide: Just prompt it harder, đồ thị reliability chững lại khi thêm luật prompt
Slide "the trap": "Just prompt it harder." Đồ thị bên phải: reliability tăng theo số luật prompt rồi chững lại ở mức plateau. Dòng cuối: reliability was never a prompting problem.

4. Model là talent, harness là director

Ornella đưa ra một cách nghĩ khác. Hãy coi model là talent, tức diễn viên, còn harness là director, tức đạo diễn. Model rất giỏi ở việc nói một câu thoại: giọng tự nhiên, giải thích rõ, ứng biến hay. Nhưng nó cực tệ ở việc nhớ mình đang ở bước ba trên sáu. Vì vậy nhóm Ace ngừng hỏi nó việc đó.

Phép so sánh này đặt đúng chỗ cho từng bên. Diễn viên không quyết định cảnh nào quay trước, cảnh nào cắt, khi nào bộ phim kết thúc; đó là việc của đạo diễn. Diễn viên chỉ cần diễn thật tốt cảnh đang được giao. Tương tự, model chỉ cần làm thật tốt việc đang được giao ở bước hiện tại, còn việc "đang ở đâu trong kịch bản" là của harness, phần code bao quanh model.

Slide: The model is the talent. The harness is the director.
Slide "the reframe": "The model is the talent. The harness is the director." Dòng phụ: giỏi khi nói một câu thoại, tệ khi phải nhớ mình đang ở bước ba trên sáu, nên nhóm ngừng bắt nó nhớ.

5. Một bài học là một state machine nhỏ

Thiết kế của Ace như sau. Một bài học là một state machine nhỏ, với các state intro, teach, check, grade, advance và wrap. Mỗi bước trao cho model một contract hẹp: làm đúng một việc này, rồi trả kết quả về. Harness validate thứ model trả về, chuyển state, và quyết định bước tiếp theo là gì. Model không bao giờ quyết định chúng ta đang ở đâu. Ornella nói gọn: đó là toàn bộ thiết kế. Rồi cô nhường lời cho Joel để anh trình bày phần harness.

Trên slide có hai ô làm rõ hai chiều của contract. Chiều từ harness tới model: một contract hẹp, "làm đúng một việc này, trả về cái kia". Chiều từ model về harness: model trả về ngôn ngữ, và không bao giờ quyết định vị trí hiện tại. Một dòng chú thích nhỏ dưới sơ đồ cho biết bước advance sẽ quay lại teach nếu học sinh chưa nắm được bài, nên state machine không chỉ là một đường thẳng mà có một vòng lặp do harness điều khiển.

Slide: A lesson is a small state machine. The harness drives it.
Slide "the architecture": sáu state intro, teach, check, grade, advance, wrap nối nhau bằng mũi tên; chú thích nhỏ ghi advance quay lại teach nếu chưa thành thạo. Hai ô dưới: harness → model là một narrow contract; model → harness chỉ trả về ngôn ngữ, không bao giờ quyết định đang ở đâu.
Harness (code) giữ state hiện tại Model làm đúng một việc 1. contract hẹp: "làm việc này, trả về cái kia" 2. output (ngôn ngữ, đề xuất) 3. validate, chuyển state, chọn bước kế Model đề xuất. Harness quyết định.
Một vòng của harness trong Ace: harness gửi cho model một contract hẹp cho state hiện tại, model trả về output, harness validate rồi tự chuyển state. Quyết định "đang ở đâu" và "đi đâu tiếp" luôn nằm trong code.

6. Harness engineering: không bắt model làm mọi thứ

Joel bắt đầu bằng một quan sát về cách người ta dùng frontier model hiện nay. Lấy ví dụ Claude Opus 4.7 của Anthropic: người ta thường dùng model cho gần như mọi thứ, cho phần suy nghĩ, cho phần xử lý, và cho mọi thứ nằm ở giữa. Điều đó có thể tốt, nhưng không phải lúc nào cũng hiệu quả, nhất là trong tình huống như của Ace: một AI tutor chạy live, nói qua nói lại với học sinh. Với sản phẩm kiểu này, nhóm cần một thứ reliable, rẻ, và nhanh.

Đó là lúc khái niệm harness engineering bước vào. Thay vì để một model rất thông minh tự đi qua mọi thứ, nhóm tự xây tất cả các bước cần thiết, và chỉ đưa cho model đúng phần input nó cần để thực hiện một tình huống cụ thể. Khi xây Ace, hai người nghĩ rất kỹ về state machine: bước hiện tại là gì, những bước nào có thể đến sau nó, và trong mỗi bước, có những thứ cụ thể nào có thể đưa cho model để nó bị giới hạn vào đúng hành động đó, đúng bước đó, tại đúng thời điểm đó, và chỉ làm phần việc cần làm.

Kết quả: thay vì cần một model rất nặng như Opus 4.7, nhóm có thể dựa vào một model như Haiku 4.5. Haiku 4.5 nhỏ hơn nhiều và không có nhiều khả năng reasoning bằng, nhưng nhờ harness bao quanh, nó vẫn đạt được mức chất lượng nhóm mong đợi, đồng thời tiết kiệm tiền, tiết kiệm thời gian và giảm latency. Với một voice tutor, latency là thứ người học cảm nhận ngay: mỗi lần model chậm trả lời là một khoảng lặng giữa cuộc trò chuyện.

Model lớn làm mọi thứ • suy nghĩ, xử lý, điều phối • tự nhớ đang ở bước nào • tự quyết khi nào xong ví dụ: Opus 4.7 · đắt hơn, chậm hơn Harness + model nhỏ model nhận input hẹp, trả output cho một bước state, validate, bước kế: trong code ví dụ: Haiku 4.5 · rẻ, nhanh, ít latency
Hai cách xây: bên trái để một model lớn gánh cả phần suy nghĩ lẫn điều phối; bên phải đưa control flow ra code, model nhỏ hơn chỉ nhận một input hẹp cho từng bước. Theo Joel, cách bên phải giúp Ace dùng Haiku 4.5 mà vẫn đạt chất lượng mong muốn.

7. Xem harness chạy trong một bài học thật

Joel cho chạy một đoạn ghi lại một bài học thật, kèm log của harness ở phía bên phải màn hình. Bài học trong đoạn này là "English Foundations: Parts of Speech, Sentence Structure, and Verb Tense", và màn hình mở đầu hiện tutor Pax đang khởi động. Trong lúc bài học diễn ra, bảng log bên phải liên tục hiện các tín hiệu của harness cho từng thứ đang xảy ra.

Joel chỉ ra vài loại. Có harness cho section: nó cung cấp input cho model về chính xác điều cần nói và việc cần làm trong phần này. Có harness cho việc vẽ lên whiteboard. Có harness xử lý việc clear queue. Có các bước quy định cách kết thúc bài học, và mọi thứ nằm giữa những bước đó. Tất cả nhằm một mục đích: xây bài học sao cho nó reliable. Và khi gặp một tình huống mới, nhóm cố đưa tình huống đó vào state machine, vào chính cấu trúc của bài học, chứ không trông chờ model tự xoay xở.

Joel nhắc lại: thứ duy nhất model phải lo là, với một input cho trước, nó biết cần thực hiện hành động nào và trả về output của hành động đó. Model thật ra không phải "nghĩ" về luồng đi. Nó đề xuất, nhưng cuối cùng harness mới là bên quyết định. Dòng chữ lớn dưới đoạn demo nói đúng điều này: "The model proposes. The harness decides."

Demo Ace: màn hình khởi động tutor Pax, bên phải là console log của harness
Đầu đoạn demo: bài học English Foundations đang khởi động tutor Pax, bên phải là console của trình duyệt để xem log harness. Dòng chữ dưới: "The model proposes. The harness decides."
Demo Ace: màn hình Lesson done. Practice next. với log harness signal section, draw, clear_queue, end
Cuối đoạn demo: màn hình "Lesson done. Practice next." mời học sinh làm phần practice về grammar foundations. Log bên phải ghi lần lượt các tín hiệu harness như section, draw (thêm chữ lên bảng), clear_queue và cuối cùng là end.

8. Ba câu hỏi LLM không bao giờ được giữ

Với riêng Ace, Joel nói có ba điều nhóm muốn suy nghĩ kỹ. Thứ nhất: khi nào bài học xong. Thứ hai: học sinh có thật sự làm đúng không, nghĩa là các em có thật sự học được theo cách cần học không. Thứ ba: tiếp theo là gì. Mọi thứ nằm trong ba nhóm đó, tất cả các câu hỏi, tất cả các hành động model cần thực hiện, nhóm đều đã engineer ở bên ngoài model. Một lần nữa, đó chỉ là một input: model nhận nó và trả lại cho nhóm một output.

Joel nhấn mạnh đây là điều rất, rất quan trọng, và nhóm thấy hiệu quả của nó đáng kinh ngạc. Trên slide, ba câu hỏi bị gạch ngang, ý là chúng bị gạch khỏi danh sách việc của LLM, kèm dòng: những câu này thuộc về code, trong bất kỳ flow agent nào.

Phần mô tả talk đi kèm video nói thêm vài chi tiết về cách harness giữ các câu hỏi này: khi LLM cố nhảy cóc sang bước sau, harness bỏ qua đề xuất đó; khi LLM cố tuyên bố bài học đã xong, harness kiểm tra tín hiệu hoàn thành thật sự; cùng một pattern được dùng cho canvas chung mà agent vẽ lên, cho việc chấm điểm, và cho việc xử lý khi người học ngắt lời.

Slide: ba câu hỏi bị gạch: Is the lesson done? Did they get it right? What comes next?
Slide "what the LLM should never own": ba câu hỏi bị gạch ngang, "Is the lesson done?", "Did they get it right?", "What comes next?". Dòng cuối: "These belong to code. In any flow agent."

9. Quy tắc chung: khi reliability chỉ là tung đồng xu

Joel mở rộng ra ngoài Ace: cách làm này áp dụng cho gần như mọi thứ. Nó áp dụng cho một sản phẩm như Ace, vốn là một voice model. Nó áp dụng cho coding agent, cho app, cho runbook, cho onboarding flow. Cùng một quy tắc: tìm cách để không phải bắt model suy nghĩ, mà xây abstraction bao quanh nó.

Để biết khi nào nên dùng abstraction kiểu này, Joel đưa một cách nhớ đơn giản: hãy nhìn vào reliability của agent. Nếu nó gần như tung đồng xu, khi được khi không, thì hãy đưa control flow ra khỏi model. Hãy để model đưa ra càng ít quyết định càng tốt, xây các quyết định đó xung quanh model, rồi chỉ đưa vào một input dễ để model dễ dàng tạo ra output.

Joel tự sửa câu chốt ngay trên sân khấu: "Vậy đừng để model nói... à không, thật ra cứ để nó nói, nhưng đừng để nó cầm lái." Slide cuối diễn đạt cùng ý: hãy để model nói, còn bạn giữ vô lăng. Hai người chào khán giả với lời giới thiệu lại "chúng tôi là Joel và Ornella, đây là Ace", mời mọi người đặt câu hỏi nếu có, rồi cảm ơn.

Slide: When reliability is a coin flip, take control flow out of the model.
Slide "the rule": "When reliability is a coin flip, take control flow out of the model." Góc dưới trái liệt kê nơi áp dụng: coding agents, ops runbooks, onboarding flows. Góc dưới phải: "Let it talk. Don't let it drive."
Slide kết: Let the model talk. You keep the wheel.
Slide kết: "Let the model talk. You keep the wheel.", kèm tên Ornella Bahidika (product), Joel Allou (engineering) và trang aceactprep.com.

Nguồn và liên kết

  • Trang talk trên ai.engineer · Video gốc
  • Ace: ACT Prep: sản phẩm voice tutor luyện thi ACT với tutor Pax, nơi áp dụng harness trong talk
  • Claude Haiku 4.5: model nhỏ mà Ace dùng nhờ có harness bao quanh
  • Claude Opus 4.7: frontier model Joel lấy làm ví dụ cho cách "để model làm mọi thứ"
  • LinkedIn của Ornella Bahidika: linkedin.com/in/ornella-bahidika · LinkedIn của Joel Allou: linkedin.com/in/joel-allou