Homus
‹ All talks

Voice In, Visuals Out: The Agony and the Ecstasy

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

Vì sao voice-in, visuals-out là UX tốt nhất cho AI, và ba trụ cột giữ phản hồi dưới một giây: model nhanh, inference chu kỳ ngắn, prefix caching ổn định.

AI UXAgentsModel RoutingContext Engineering

1. Voice in, visuals out: lập luận của Karpathy

Slide tiêu đề Voice In, Visuals Out: The Agony and the Ecstasy, Allen Pike, Forestwalk Labs
Slide mở đầu: "Voice In, Visuals Out", dòng phụ "The Agony and the Ecstasy", Allen Pike, Forestwalk Labs, AI Engineering WF 2026. Góc trái là Allen đứng ở bục.

Allen Pike mở đầu bằng lời tự giới thiệu ngắn: anh là Allen Pike, và hôm nay anh sẽ chia sẻ một phần những gì đội của anh đã học được khi build các trải nghiệm voice-in, visuals-out bằng AI, tức là người dùng nói vào, còn hệ thống trả lời bằng hình ảnh và giao diện trên màn hình. "Here we go", và anh vào thẳng vấn đề.

Điểm xuất phát là Andrej Karpathy. Allen kể rằng tháng trước Karpathy đã đưa ra một lập luận: voice là kiểu input con người ưa thích nhất khi làm việc với AI, nhưng visuals mới là kiểu output con người ưa thích. Theo lời Allen, Karpathy "biết đôi điều" về chuyện này, nên lập luận đó đáng được nghe kỹ.

Slide trích dẫn của Andrej Karpathy về audio là input và vision là output
Câu trích dẫn trên slide, đặt trên một khung hình Karpathy đang nói chuyện: "Audio is the human-preferred input to AIs, but vision is the preferred output from them." (Andrej Karpathy, May 2026). Hai chữ input và output được tô đậm để nhấn sự bất đối xứng.

2. Từ dấu nhắc DOS tới markdown: ta vẫn đang gõ phím với AI

Thế nhưng, Allen nói, phần lớn cách chúng ta đang build và dùng AI lại không giống như vậy. Ta gõ phím cho nó. Nó gõ phím đáp lại, có lẽ kèm thêm một chút markdown. Về bản chất, giao diện vẫn là một cuộc trao đổi bằng chữ qua lại.

Màn hình IBM PC DOS phiên bản 2.00 với dấu nhắc lệnh A
Màn hình IBM Personal Computer DOS Version 2.00 từ đầu thập niên 1980: hỏi ngày giờ rồi dừng ở dấu nhắc A>. Hình này đi cùng ý "ta vẫn đang gõ phím với AI".

Nhưng vài tháng gần đây đã có những bước đột phá, và trải nghiệm audio-in, visuals-out đã thay đổi hẳn. Trải nghiệm đó giờ đã thật sự khả thi, và ta có thể tạo ra những trải nghiệm rất thú vị, khiến người dùng thích thú (delightful) với nó.

3. Visuals out: trần khả năng đã được nâng lên

Slide Visuals Out trên nền nhiều loại biểu đồ
Slide "Visuals Out" đặt trên nền một bộ biểu đồ minh hoạ: cột, vùng, đường và vòng tròn. Đây là nửa "dễ hiểu" của luận điểm.

Nửa visuals-out thì khá trực quan, Allen nói. Dĩ nhiên rồi: khoảng một phần ba bộ não chúng ta dành cho việc xử lý thông tin thị giác. Chúng ta thích nhìn ngắm mọi thứ.

Và các model gần đây đã đến mức có thể sinh ra HTML phong phú và dùng tool calling, nên ta có thể làm những trải nghiệm trong đó câu trả lời quay về dưới dạng visualization: chúng giải thích sự việc, giúp ta hiểu, và truyền đạt câu trả lời của model. Model còn có thể đưa ra các control tương tác, cho phép ta khám phá, hiểu, chỉnh sửa, thay đổi và điều hướng model. Và chúng thậm chí có thể trả lời bằng những hình minh hoạ và hình ảnh đẹp.

Ba thẻ Visualization, Interactivity và Beauty
Ba thẻ tương ứng ba điều model giờ làm được ở phía output. Visualization: một sơ đồ kiến trúc Transformer. Interactivity: một bảng điều khiển với các nút chọn theme dark hoặc light, breakpoint desktop, tablet, mobile và các thanh trượt tham số. Beauty: hình vẽ một chú chim đạp xe đạp.

Vì vậy, theo Allen, trần khả năng của phần visuals-out đã thật sự được nâng lên, và ta có nhiều năng lực hơn hẳn về những gì có thể làm khi trả lời người dùng từ các model này.

4. Voice in: nửa gây tranh cãi

Slide Voice In trên nền một nhân vật điện ảnh nói chuyện với trợ lý AI qua màn hình hologram
Slide "Voice In" đặt trên một cảnh phim khoa học viễn tưởng, nơi nhân vật chính nói chuyện với trợ lý AI giữa các màn hình hologram: hình mẫu mà ta vẫn mơ tới khi nghĩ về giao tiếp bằng giọng nói với máy.

Nửa còn lại trong lập luận của Karpathy thì gây tranh cãi hơn: ý tưởng rằng voice là input được ưa thích. Từ lâu chúng ta đã lý tưởng hoá và mơ mộng về việc nói chuyện với một AI, có một cuộc hội thoại real-time trong đó nó hiểu ta cần gì và phản ứng phù hợp ngay lập tức.

Nhưng trải nghiệm mà hầu hết mọi người từng có với giao diện giọng nói cho tới giờ thì giống như cố bảo Siri bật đèn mà nó không chịu làm. Hoặc giống như anh chàng này, Allen chỉ lên slide và cười: một người đang cố khiến ChatGPT voice mode làm việc gì đó, nhưng nó cứ lóng ngóng và bối rối. Slide lúc đó là một dãy video ngắn mạng xã hội hàng triệu lượt xem, trong đó cùng một người cầm điện thoại thử các phản ứng của AI.

Các model mà ta có cho tới nay, và những trải nghiệm mà phần lớn mọi người từng thấy, vừa chậm vừa ngốc. Allen nhận xét đó không phải là một sự kết hợp hay ho gì. Và vì thế rất nhiều người đang có cái nhìn tiêu cực về voice như một kiểu input.

5. Nói là kênh băng thông cao nhất của con người

Một diễn giả đứng ở bục chỉ tay lên bức ảnh Trái Đất trước khán phòng
Một diễn giả đứng ở bục, chỉ tay lên tấm ảnh Trái Đất khổng lồ trước cả khán phòng: hình ảnh cho sức mạnh của lời nói khi con người cần truyền đạt điều quan trọng.

Tuy vậy, Allen khẳng định, nói vẫn là cách giao tiếp tối thượng của con người. Khi nói, ta đưa ra được nhiều từ mỗi phút hơn khi gõ phím, nhưng ta còn truyền tải được nhiều hơn trong mỗi từ.

Hai chữ okay giống nhau đi kèm một emoji nghi ngờ và một emoji cười tươi
Cùng một chữ "okay" viết y hệt nhau, nhưng một bên đi với gương mặt nhướng mày nghi ngờ, bên kia là gương mặt cười tươi. Chữ viết mất hết sắc thái mà giọng nói mang theo.

Có một khác biệt rất lớn giữa việc bạn nói với tôi "Okay," một cách lửng lơ và việc bạn nói "Okay!" một cách hào hứng. Đó là lý do khi có điều gì thật sự quan trọng cần truyền đạt hoặc cần làm cho ai đó hiểu ra, chúng ta sẽ nhảy vào một cuộc gọi, hoặc nói chuyện trực tiếp, để có được kênh giao tiếp băng thông cao (high bandwidth) đó.

6. Agent ngồi trong cuộc gọi của Forestwalk

Và vì thế, ở Forestwalk, đội của Allen đã build một agent nằm ngay trong các cuộc gọi, có thể giúp họ theo thời gian thực.

Đoạn hội thoại trong cuộc gọi Google Meet và thông báo agent đã tạo issue trên Linear
Diễn lại cuộc gọi trên Google Meet: "I saw a weird thing where the Slack integration missed a response in a thread, I think." Rồi "Oh yeah, I've seen a problem with threading too." Rồi "Okay, let's file that in Linear." Ngay bên dưới, agent báo đã tạo issue với tiêu đề "Slack integration drops threaded replies".

Allen kể một lần gần đây: trong một cuộc gọi, anh nhắc với co-founder của mình rằng anh đã thấy một bug với Slack integration, hoặc ít nhất anh nghĩ là mình đã thấy. Chị ấy trả lời rằng chị cũng đã gặp đúng bug đó. Thế là anh chỉ nói: "Okay, vậy mình file cái đó thành một issue trên Linear đi." Và voice agent, trong vòng một giây, đã phản hồi rằng nó làm xong rồi.

Khi được tinh chỉnh thật chuẩn, trải nghiệm này cảm thấy hoàn toàn tự nhiên. Bạn có thể đang nói một cách tình cờ, hoặc có chủ đích, cố ý nói với AI, và nó phản hồi theo cách không làm gián đoạn bạn. Nó không cần phải đáp lại bằng giọng nói. Nó chỉ đơn giản là hành động dựa trên ý định (intent) của bạn.

Allen tin rằng chúng ta sẽ thấy kiểu trải nghiệm này ngày càng nhiều trong những tháng và những năm tới. Nhưng có một rào cản lớn, một thách thức khổng lồ để làm cho nó thật sự chạy được và cảm thấy dễ chịu.

7. The tyranny of latency: 100 ms và một giây

Slide The Tyranny of
Slide "The Tyranny of..." hiện lên từng chữ; chữ còn thiếu là latency.

Rào cản đó là sự chuyên chế của latency (the tyranny of latency), Allen nói và bật cười. Rất khó để đưa một phản hồi chạy qua cả chuỗi xử lý đủ nhanh.

Từ những năm sáu mươi, chúng ta đã biết rằng để máy tính phản ứng đủ nhanh tới mức cảm giác như tức thì, nó cần phản ứng trong khoảng một trăm mili giây, tức một phần mười giây. Vì thế, dĩ nhiên, ta luôn khao khát làm sản phẩm của mình phản ứng nhanh đến vậy, và đôi khi ta làm được. Nhưng với network và mọi thứ khác, việc này có thể khó, tuỳ vào khối lượng việc cần làm.

Trục thời gian với một vạch đánh dấu 100ms feels instant
Trục thời gian latency bắt đầu với một vạch duy nhất ở gần đầu trục: "100ms · feels instant", mốc mà phản hồi được cảm nhận là tức thì.

Nên đôi khi ta có thể nới ra tới một nghìn mili giây. Bạn có trọn một giây. Đó gần như là giới hạn trước khi người ta bắt đầu mất mạch suy nghĩ. Người ta nhờ Siri làm gì đó, nó mất hơn một giây, và đầu óc ta đã chạy sang chuyện khác rồi.

Vì thế ta luôn xoay xở ở khoảng giữa hai giới hạn của con người đó: cố gắng phản hồi trong vòng một giây, lý tưởng nhất là trong vòng một trăm mili giây. Hai ngưỡng này trùng với các mốc response time kinh điển mà Nielsen Norman Group tổng kết, dựa trên nghiên cứu của Miller năm 1968.

8. Ngưỡng 200 ms của hội thoại voice-in, voice-out

Nhưng nếu ta muốn có một cuộc hội thoại bằng giọng nói liền mạch với một AI, hay với một người khác, thì giới hạn còn khắt khe hơn nhiều. Ta cần latency từ 200 mili giây trở xuống nếu muốn có một cuộc trò chuyện thực thụ: khi người ta đang nói thành lời, họ ngắt lời nhau, chen vào, đồng tình, và tạo nên kiểu kết nối đó trong một cuộc hội thoại voice-in, voice-out trọn vẹn.

Trục thời gian với vạch 100ms feels instant, vạch 200ms seamless voice và một thanh đỏ dài gồm STT và first token
Trục thời gian giờ có thêm vạch "200ms · seamless voice". Thanh đỏ dài bên dưới là chuỗi xử lý thật: STT (speech-to-text) rồi tới first token của model, kéo dài vượt xa cả hai vạch.

Hãy hình dung việc làm điều đó khi bạn có một request qua network, có thể bạn chuyển giọng nói thành text, rồi chạy một kiểu model inference nào đó trên text đó, rồi gửi ngược lại qua network. Allen gọi đó là một khối lượng việc phi lý nếu phải gói trong 200 mili giây.

Có một số cách tiếp cận khéo léo để lách quanh giới hạn này. Thinking Machines, một lab mới, có một kiến trúc rất chu đáo mà họ demo gần đây, chỉ vài tuần trước: họ chia thời gian (time slice) thành từng lát 200 mili giây, đúng bằng mục tiêu 200 mili giây kia, và có một model chạy inference liên tục, vào và ra, trên từng lát 200 mili giây. Lab này mô tả cách làm đó trong bài Interaction Models, gọi mỗi lát là một micro-turn.

9. Đổi sang visuals-out để có vùng latency dễ thở hơn

Vậy là có những cách lách quanh giới hạn này cho voice-in, voice-out. Nhưng Allen chỉ ra rằng ta cũng không cần phải chờ những kiến trúc mới lạ. Ta có thể đơn giản là chuyển sang voice-in, visuals-out, và khi đó ta hưởng lợi từ vùng latency cho phản hồi bằng hình ảnh mà con người dễ dãi hơn (the more forgiving visual response envelope).

Nếu có thứ gì đó xuất hiện trên màn hình trong vòng một giây sau khi bạn nói, cảm giác là nó đã đạt yêu cầu: nó vẫn nằm trong khoảng chú ý của bạn. Nó phản ứng với bạn theo cách cảm thấy liền mạch.

0 100 ms 200 ms 1000 ms Voice-in, voice-out: hội thoại liền mạch cần ≤ 200 ms Voice-in, visuals-out: hình lên màn hình trong khoảng 1 giây vẫn thấy liền mạch Ngân sách latency cho mỗi kiểu phản hồi
Cùng là voice in, nhưng phản hồi bằng giọng nói chỉ có khoảng 200 ms, còn phản hồi bằng hình ảnh có cả một giây. Đổi kiểu output là cách có thêm ngân sách latency mà không phải chờ kiến trúc mới.

Vì vậy, vài tháng qua đội Forestwalk đã build hướng tới đúng điều đó. Allen nói việc này rất vui và họ học được rất nhiều. Phần cuối talk, anh chia sẻ ba điều họ thấy là thật sự quan trọng để lọt vào được vùng latency đó và làm cho trải nghiệm thật sự thú vị với những người sử dụng.

10. Trụ cột 1: model nhanh trên hạ tầng ưu tiên latency

Slide Pillars of low latency
Slide "Pillars of low latency": ba trụ cột để giữ hệ thống trong vùng latency, sẽ hiện lần lượt.

Điều thứ nhất: để phản hồi theo cách cảm thấy liền mạch, bạn phải dùng một model thật sự nhanh. Đó không chỉ là một model đủ nhỏ để có thể trả lời đủ nhanh trong vài trăm mili giây. Dĩ nhiên nó cần nhỏ như vậy. Nhưng nó còn phải chạy trên một inference platform ưu tiên latency.

Allen kể: khi GPT-5 Mini ra mắt, đội anh rất hào hứng. Họ nghĩ, được rồi, giờ có một model thông minh hơn, và chắc hẳn nó sẽ nhanh. Nhưng trên thực tế, họ thấy latency P95 lên tới 5.000 mili giây, 7.000 mili giây, có lúc 10.000 mili giây, anh cười, cho một model nhỏ. Nó rẻ hơn model lớn, nhưng họ không thấy nó phản hồi đủ nhanh một cách ổn định, thậm chí là chưa từng thấy nó đủ nhanh.

Haiku tốt hơn nhiều xét về latency P95 đó. Vậy nên bạn thật sự cần một model cỡ Haiku làm model phản hồi trong vòng real-time này, hoặc một trong những model open source nhỏ hơn.

Rồi nếu có một khối việc lớn hơn cần làm, model nhanh đó sẽ chuyển giao (hand off), tức gửi một message bất đồng bộ (asynchronous) sang một model lớn hơn có thể suy nghĩ kỹ. Trong lúc đó, model real-time liên tục, hay model soft real-time đang phản hồi nhanh, có thể đan xen (interleave) các câu trả lời từ model lớn vào khi model lớn đang làm phần việc nặng hơn.

Người dùng nói Model nhanh cỡ Haiku soft real-time, vài trăm ms Màn hình Model lớn, suy nghĩ lâu gửi async kết quả, interleave Trụ cột 1: model nhanh ở vòng trong, model lớn chạy nền
Model nhỏ, nhanh giữ vòng phản hồi trong vài trăm mili giây. Việc nặng được gửi bất đồng bộ sang model lớn, rồi model nhanh đan kết quả đó vào câu trả lời khi có.

Đó là điều số một: bạn cần một model nhanh, và tất nhiên kèm theo một context đủ ngắn mà bạn đưa vào để nó có thể phản hồi trong vài trăm mili giây.

11. Trụ cột 2: gửi inference theo chu kỳ ngắn

Slide Pillars of low latency với hai thẻ Fast models và Short intervals
Hai trụ cột đầu tiên đã hiện trên slide: 1. Fast models, 2. Short intervals.

Điều thứ hai thật sự then chốt nếu ta muốn có cảm giác hệ thống phản hồi rất nhanh là phải có các khoảng ngắn (short intervals) giữa những lần gửi đi inference.

Theo cách truyền thống, với một ứng dụng giọng nói chẳng hạn, bạn có thể nghe người dùng nói vài giây, rồi họ dừng. Bạn lắng nghe thêm một giây im lặng, rồi mới có một kiểu inference nào đó diễn ra. Tới lúc đó bạn đã tiêu lố ngân sách với một khoảng chênh khá lớn, chỉ vì ngồi chờ im lặng.

Trụ cột 2: đừng chờ im lặng Cách truyền thống người dùng nói vài giây chờ 1 s im inference lố ngân sách Gửi sớm, gửi đều người dùng nói vài giây một lượt inference mỗi 1 đến 2 giây, ngay trong lúc người dùng còn nói
Chờ một giây im lặng mới bắt đầu inference là đã tiêu hết ngân sách một giây. Gửi inference đều đặn trong lúc người dùng nói giúp màn hình đổi gần như cùng nhịp với lời nói.

Vậy nếu ta muốn có thứ gì đó hiện lên màn hình trong vòng một giây, ta muốn inference phản hồi khá hăng hái (eagerly) ngay khi người dùng đang nói, kể cả khi ta chưa hoàn toàn chắc họ đã nói xong. Hãy sẵn sàng gửi inference mỗi một hoặc hai giây trong lúc họ nói.

Lý do là đôi khi ta nói một câu kiểu: "Ồ, này, mình sẽ muốn đổi cái này", rồi thật ra thêm "và làm luôn cái việc kia nữa". Trải nghiệm sẽ liền mạch hơn nhiều nếu hệ thống làm những việc đó ngay trong lúc người ta đang nói. Nên bạn phải có một model và một hạ tầng cho phép những lượt (turn) nhanh như vậy chạy liên tục.

12. Trụ cột 3: một chế độ caching ổn định

Và cuối cùng, để toàn bộ những điều trên thật sự chạy được, bạn cần một chế độ caching ổn định (a stable caching regimen).

Trong năm vừa qua, cách chúng ta làm việc với LLM đã có một cải tiến rất lớn: trên các nền tảng khác nhau đều có những dạng prefix caching. Nếu phần đầu của context bạn gửi lên model giống hệt nhau mỗi lần, thì bạn có thể có inference rẻ hơn và nhanh hơn tới chín mươi phần trăm, tuỳ điều kiện. Tài liệu chính chủ về cơ chế này: prompt caching của Anthropic và prompt caching của OpenAI.

Vì vậy bạn cần dựa thật nhiều vào kiến trúc này. Allen nghĩ rằng với hầu hết các ứng dụng, chúng ta đều đang đi về hướng đó, dù là một agent chạy dài (long-running agent) hay một agent chạy thường xuyên (frequently running agent). Nguyên tắc vẫn là một: ta muốn chín mươi phần trăm đầu tiên của context window, nếu được, giữ nguyên từ request này sang request khác, và chỉ dùng mười phần trăm cuối cùng cho phần thay đổi.

Trụ cột 3: giữ prefix đứng yên ~90% đầu: giống hệt mỗi request, trúng prefix cache ~10% Request 1, 2, 3...: chỉ phần cuối đổi (lời người dùng mới nhất) Output: càng ít output token càng tốt
Ba nút vặn cùng lúc: phần đầu context ổn định để được cache, phần thay đổi dồn về cuối, và số output token giữ ở mức tối thiểu.

Và tất nhiên, hãy giảm tối đa số output token, để bạn có được những lượt inference thật nhanh và tương đối phải chăng, tạo nên trải nghiệm thú vị kia.

13. Lời kết: hãy build thứ gì đó tuyệt vời

Pillars of low latency 1 Fast models 2 Short intervals 3 Stable caching
Tóm lại ba điều Allen chia sẻ để giữ voice-in, visuals-out trong vòng một giây: model nhanh, gửi inference theo chu kỳ ngắn, và caching ổn định.

Đó là một vài kỹ thuật mà đội Forestwalk thấy thật sự hữu ích. Allen nói anh rất muốn nghe từ bất kỳ ai đang khám phá, thử nghiệm, dù là với real-time hay với bất kỳ cách nào mà mọi người đang đẩy giới hạn của việc tạo ra những trải nghiệm thú vị với các model này. Anh rất sẵn lòng trò chuyện và chia sẻ những gì đội anh đang học được.

Và anh hy vọng một phần những điều này sẽ truyền cảm hứng để vài người trong khán phòng đi ra và build một thứ gì đó thật tuyệt. "Thanks."

Sources and links