Bỏ qua đến nội dung chính

Building Conversational Agents — Thor Schaeff and Philipp Schmid, Google DeepMind

TL;DR

  • Workshop giới thiệu cách lấy Khóa API Gemini và sử dụng Google AI Studio, một công cụ của Google DeepMind để thử nghiệm các mô hình và API.
  • Interactions API là một API beta mới được thiết kế để hợp nhất việc tương tác với cả mô hình và tác nhân AI, mang lại giao diện thống nhất và dễ sử dụng hơn cho nhà phát triển.
  • Điểm mạnh chính của Interactions API là quản lý trạng thái phía máy chủ, hỗ trợ thực thi bất đồng bộ, và cải thiện đáng kể khả năng caching ngầm, giúp tiết kiệm chi phí và tối ưu hiệu suất.

Điểm chính

  • Lấy Khóa API: Truy cập AI.dev (hoặc AI.studio) và đăng nhập bằng tài khoản Google. Khóa API có thể được tạo miễn phí trong phần "API keys" mà không yêu cầu thẻ tín dụng.
  • Interactions API: Đây là API mới, hiện ở bản beta, được thiết kế để kế nhiệm Generate Content, cung cấp giao diện thống nhất cho các mô hình và tác nhân, gần gũi hơn với các API của OpenAI hay Anthropic.
  • Quản lý trạng thái phía máy chủ: API tự động quản lý lịch sử tương tác, giúp nhà phát triển không cần phải lưu trữ và gửi lại toàn bộ ngữ cảnh trong mỗi yêu cầu, tiết kiệm băng thông và tài nguyên.
  • Caching ngầm hiệu quả: Nhờ quản lý trạng thái phía máy chủ, tỷ lệ cache hit (truy cập bộ nhớ đệm) được cải thiện đáng kể, giúp giảm tới 90% chi phí cho các token đầu vào đã được cache.
  • Hỗ trợ tác nhân và thực thi bất đồng bộ: API cho phép xây dựng các tác nhân phức tạp như Deep Research, hỗ trợ các tác vụ nền và polling hoặc webhook để xử lý các yêu cầu dài hơi mà không cần giữ kết nối HTTP mở.
  • Khối nội dung tiêu chuẩn: Các loại đầu vào và đầu ra được thống nhất thành các "khối nội dung" với trường type (ví dụ: function call, text, image), giúp dễ dàng xây dựng và xử lý các loại dữ liệu khác nhau.
  • Công cụ tích hợp và kết hợp: Hỗ trợ tích hợp các công cụ có sẵn (built-in tools) và cho phép kết hợp các công cụ tùy chỉnh (custom functions) với Google Search, mở rộng khả năng của tác nhân.
  • Quy trình tương tác API đơn giản: Đối với trò chuyện, chỉ cần gọi interactions.create và truyền ID tương tác trước đó cho các lượt tiếp theo. Đối với tác nhân, xử lý các phản hồi Requires action bằng cách thực thi hàm và gửi lại kết quả.

Từ vựng

  • mô hình — model
  • Gemini API — Gemini API
  • Google AI Studio — Google AI Studio
  • công cụ — tool
  • Khóa API — API Key
  • workshop — workshop
  • free tier — free tier
  • lỗi — error
  • tác nhân — agent
  • API call — API call
  • Interactions API — Interactions API
  • Generate Content — Generate Content
  • API hợp nhất — unified API
  • Deep Research — Deep Research
  • giao diện — interface
  • khối nội dung — content blocks
  • function call — function call
  • text — text
  • audio — audio
  • video — video
  • image — image
  • state trên máy chủ — server-side state
  • lịch sử — history
  • ID tương tác trước đó — previous interaction ID
  • webhook — webhook
  • streaming — streaming
  • SSE — SSE (Server-Sent Events)
  • kết hợp công cụ — tool combining
  • hàm tùy chỉnh — custom function
  • quản lý trạng thái phía máy chủ — server-side state management
  • ngữ cảnh — context
  • thực thi bất đồng bộ — asynchronous execution
  • HTTP requests — HTTP requests
  • implicit caching — implicit caching
  • mã hóa — encode
  • mã thông báo đầu vào — input tokens
  • cache — cache
  • tỷ lệ truy cập bộ nhớ đệm — cache hit rate
  • Agent Loop — Agent Loop
  • client-side history — client-side history
  • Requires action — Requires action
  • máy khách — client

Nội dung chi tiết

Giới thiệu và Lấy Khóa API

Chào mọi người! Philip và tôi đều là người Đức, nên chúng tôi nghĩ sẽ rất thú vị nếu có thể nói chuyện bằng tiếng Đức. Thực ra có một nhóm người Đức ở đây, thật tuyệt. Đừng lo lắng, chúng ta sẽ nói bằng tiếng Anh. Có thể chúng ta sẽ nói bằng một vài ngôn ngữ khác, hãy xem sao. Có ai đến từ quốc gia nào khác không? Xin mời nói ra. Chúng ta có gì nào? Tiếng Tây Ban Nha. Có ai nói tiếng Iceland không? Không. Ok, gần đúng. Tiếng Romania. Hay đấy. Tiếng Hà Lan. Penae de l'ance. Ok. Gì nữa? Tiếng Hindu. Ok. Canada? Không. Ok, Bangalore? Không. Tiếng Farsi. Tiếng Farsi. Tuyệt vời. Đúng rồi. Xuất sắc. Ok, điều này thật tuyệt vời. Cảm ơn tất cả mọi người đã đến đây với tất cả các ngôn ngữ của mình, tôi thực sự cảm kích. Hôm nay chúng ta có thể thực sự thử thách mô hình này, điều đó thật tuyệt. Vâng, xin chào. Tôi là Thor, hay Torsten đối với những người nói tiếng Đức trong số các bạn. Xin chào, tôi là Philip. Chỉ Philip thôi. Vâng. Trước những người nói tiếng Đức và tiếng Anh. Vâng, rất vui được gặp các bạn.

Chúng tôi làm việc trong mảng trải nghiệm dành cho nhà phát triển tại Google DeepMind, bao quát rộng rãi Gemini API và cũng làm việc trong Google AI Studio như một công cụ để các nhà phát triển nhanh chóng thử nghiệm các mô hình, sau đó là các giao diện API. Để sử dụng API, bạn cần có Khóa API. Thực ra, ai đã có Khóa API rồi? Gemini API? Ok, một vài người. Ai đã từng sử dụng AI Studio trước đây? Google AI Studio? Ok, một vài người. Tuyệt vời. Có lẽ bạn có thể nhanh chóng... Xin lỗi? Indicremity. Vâng, đúng vậy. Bạn thực ra không cần Khóa API cho Indicremity, nhưng...

Nếu bạn chưa có Khóa API, và nếu bạn có máy tính của mình ở đây – tôi hy vọng là có, đây là một workshop thực hành. Tôi xin lỗi vì họ đã dọn đi các bàn của bạn. Vâng. Nên đây là một tình huống rất "laptop", nghĩa đen là laptop. Tôi hy vọng bạn không mang theo Mac Mini hay gì đó. Nhưng vâng, nếu bạn chỉ cần truy cập AI.dev. Và ý tôi là, bạn cũng có thể truy cập AI.studio. Bạn có thể vào AIstudio.com, nhưng chúng tôi đã trả rất nhiều tiền cho AI.dev. Vì vậy, hãy sử dụng AI.dev. Nó chỉ chuyển hướng đến AI Studio. Vậy AI.dev/API key? Vâng, hoặc ở góc bên trái. Có một nút 'Get API Key' (Lấy Khóa API) và sau đó API-keys là nơi bạn có thể... nơi bạn có thể... Vâng, đó là tài khoản cá nhân của tôi và chúng tôi không thể thay đổi ngôn ngữ. Bạn chỉ cần tài khoản Google, không cần thẻ tín dụng hay bất cứ thứ gì. Vì vậy, điều duy nhất chúng ta sẽ làm là một phần của free tier (bậc miễn phí). Nếu bạn truy cập AIstudio.dev và có một biểu mẫu đăng nhập, bạn có thể chỉ cần sử dụng tài khoản Gmail của mình và đừng lo lắng, chúng tôi sẽ không tính phí bạn. Và sau đó, trên API.keys, bạn sẽ thấy ở góc trên bên phải thường có thứ gọi là 'API key, create' (tạo Khóa API) hoặc 'Create API Key' (Tạo Khóa API). Và khi bạn làm lần đầu tiên, bạn có thể cần... Tương tự như tôi, tôi có thể nhập các dự án của mình hoặc tạo các dự án của mình. Tôi chỉ cần tạo, đặt cho nó bất kỳ tên nào. Ý tôi là, chúng ta có thể gọi nó là i-e workshop. Và sau đó 'Create project' (Tạo dự án). Chúng ta có thể... Đặt nó sang tiếng Anh. Mất vài giây và sau đó bạn sẽ có thể tạo khóa. Và khóa này sẽ được sử dụng cho các bản demo hoặc những việc thực hành chúng ta sẽ làm sau này. Nó hiển thị Khóa API. Vâng, tôi sẽ xóa nó, vì vậy đừng sao chép. Sao chép rất nhanh! Bạn có thể sử dụng khóa đó. Bạn có thể đặt nó vào tệp BASH, Rc, hoặc ZSHRC của mình, hoặc sau này bạn có thể trực tiếp đưa nó vào code, tùy theo sở thích của bạn. Nếu bạn có một khóa, bạn có thể sử dụng khóa này. Và vì chúng ta có thêm vài phút, chúng tôi thực sự muốn đảm bảo mọi người muốn làm theo, và chúng tôi muốn đảm bảo rằng chúng ta có thời gian để tạo Khóa API của mình. Nếu có lỗi xuất hiện hoặc điều gì đó khác không hoạt động, hãy giơ tay, Thor sẽ đến và giúp bạn. Và... Vâng, chỉ là một lời nhắc nhở, đó là một Khóa API bí mật. Đừng làm điều Philip đang làm. Đó là lý do tại sao tôi xóa khóa của mình một lần nữa. Vâng. Chúng tôi thường thấy rất nhiều người làm rò rỉ Khóa API của họ. Chủ yếu là clock code đẩy Khóa API lên GitHub. Vì vậy, tôi khuyên bạn không nên làm điều đó. Chỉ đùa thôi. Hãy nhớ rằng, đó là một Khóa API bí mật. Vì vậy, hãy coi nó như một bí mật. Đừng chia sẻ nó với hàng xóm của bạn. Không, đó là... Nhưng vâng, hãy tạo Khóa API đó ngay bây giờ, và chúng tôi sẽ dành cho bạn vài phút để làm điều đó.

Giới thiệu bản thân và kỳ vọng về workshop

Và trong khi bạn làm điều đó, hoặc sau khi bạn đã tạo xong Khóa API của mình, tôi rất muốn bạn giới thiệu sơ qua về bản thân nếu bạn muốn, và cho chúng tôi biết bạn muốn đạt được điều gì từ workshop này. Có thể có một trường hợp sử dụng cụ thể mà bạn đang thực hiện. Vâng, chúng tôi cũng muốn tìm hiểu một chút về bạn. Vì vậy, trong khi bạn tạo Khóa API của mình, nếu bạn muốn, hãy thoải mái gọi tên hoặc biệt danh của bạn, và nói về những gì bạn đang làm, những gì bạn muốn đạt được từ workshop. Vâng. (Một người tham dự) "Tôi sẽ bỏ phiếu từ ngày đầu tiên tôi làm podcast cho Corby cho Wets và Biasis, và là một fan lớn của Gemma, và Gemma 4. Và Gemma và tôi, tôi là một trong số ít người sử dụng nó cho code-hands stuff (việc liên quan đến code) nữa, tôi đánh giá dick use, và tôi thực sự đang chạy nó trên kính." Ồ, hay đấy. (Một người tham dự) "Và tôi muốn thấy nhiều hơn về điều này, bạn biết đấy." Được thôi. (Một người tham dự) "Và tôi muốn Google glasses." Được thôi, vâng, chúng ta sẽ xem liệu chúng ta có thể làm việc với kính vào cuối workshop không. Xin lỗi. Nếu bạn có chỗ trống bên phải, hãy ngồi vào, để bạn có thể ngồi vào chỗ trống ở đây. Giúp dễ dàng tìm thấy chỗ trong thời gian quy định. Và trong khi chúng ta chờ đợi, chúng tôi đã ra mắt một thứ hay ho trên Chrome, mà tôi chưa kích hoạt, nhưng khi bạn vào thanh tab, nhấp chuột phải, bạn có thể di chuyển tab sang một bên, và bây giờ chúng ta có tab dọc. Vâng. Vậy là có nhiều màn hình hơn, tốt đấy. Tuyệt vời. Ok, hay đấy. Vậy thì kính. Hãy kiểm tra. Bạn đang chạy gì? Bạn đang chạy gì trên kính? Chà, về mặt kỹ thuật là trên điện thoại, đúng không? Vâng. Vâng. Cross open claw nào? Hay đấy. Hay đấy. Và đó chỉ là sử dụng GemmaAI Life, thông qua web socket trên điện thoại, đúng không? Vâng. Hay đấy. Vâng, điều đó thật tuyệt. Vâng, Vision Claw, nếu bạn chưa nghe về nó, đó là một dự án mã nguồn mở khá thú vị. Và tôi nghĩ bạn có thể chạy nó, vâng, trên tường. Giờ đây Meta đã mở SDK cho Meta Ray-Ban, bạn thực sự có thể kết nối thứ gì đó như GemmaAI Life, API, vào kính. Chà, kính kết nối với điện thoại của bạn, và sau đó điện thoại thực sự kết nối với GemmaAI Life, điều này thật tuyệt. Nhưng nó cho thấy những gì sẽ khả thi. Vâng, hay đấy.

Bắt đầu workshop: Xây dựng tác nhân AI và giới thiệu Interactions API

Có vấn đề gì khi tạo Khóa API không? Mọi người đều có Khóa API chưa? Chúng ta nên kiểm tra không? Ok. Có ai khác không? Có điều gì cụ thể không, vâng? (Một người tham dự) "Michael, chúng tôi nhanh chóng với hướng dẫn của bạn ở Zurich. Đã xây dựng như ban đầu." Tuyệt. Ok. Tuyệt. Hay đấy. Cơ hội cuối cùng. Có ai khác không? Ok. Được rồi. Vậy, chúng ta có thể bắt đầu. Trước khi chúng ta đi vào phiên thực hành, tôi có khoảng 10-15 phút trình bày slide để cung cấp một chút thông tin nền về những gì chúng ta sẽ sử dụng để xây dựng. Phiên đầu tiên, tôi sẽ tập trung hơn vào việc xây dựng một tác nhân mà không cần bất kỳ đầu vào âm thanh trực tiếp nào. Đó là lúc Thor sẽ tiếp quản sau đó và chúng ta sẽ xây dựng một số tác nhân trò chuyện rất hay.

Vậy, ai trong số các bạn đã sử dụng Gemma API để thực hiện một API call tới Gemma trước đây? Ok. Có vài người. Có ai trong số các bạn đã sử dụng Interactions API chưa? Một người, ok. Hai người, ok. Ít nhất là một vài người. Vậy, Interactions API là một API mới mà chúng tôi đã ra mắt vào tháng 12 và ở phiên bản beta, mà hy vọng sẽ sớm kế nhiệm Generate Content. Đó là một API hợp nhất để sử dụng với các mô hình, với các tác nhân, và nó phù hợp hơn nhiều với, tôi phải nói, ngành công nghiệp. Vì vậy, nó gần gũi hơn nhiều với những gì bạn đã quen thuộc, từ các mô hình mở, với Chat Completions API hoặc từ Anthropic hoặc từ OpenAI. Và chúng ta sẽ làm gì? Các slide, sau đó chúng ta sẽ xây dựng một tác nhân mã hóa, giống như một Claude Code nhỏ với việc đọc tệp, ghi tệp, chạy lệnh bash, và sau đó chúng ta có một chút thời gian ở cuối nếu bạn có câu hỏi xung quanh nó, và sau đó chúng ta sẽ nghỉ giải lao ngắn, đi vệ sinh, uống nước, và sau đó Thor sẽ tiếp tục. Chúng ta đều có một Khóa API.

Đặc điểm của Interactions API và Deep Research

Như đã đề cập, chúng tôi muốn xây dựng một API hoạt động cho cả mô hìnhtác nhân, và khi chúng tôi ra mắt Interactions API, chúng tôi cũng ra mắt Deep Research. Vậy, có lẽ bạn đã sử dụng Deep Research trong ChatGPT hoặc trong ứng dụng Gemini, nơi bạn về cơ bản bắt đầu một truy vấn, sau đó bạn nhận lại một kế hoạch, và sau đó mô hình tiếp tục và thực hiện Deep Research trong 10-15 phút, truy cập hàng trăm trang web. Và API hỗ trợ cả mô hìnhtác nhân, và rất đơn giản để chuyển đổi giữa chúng. Bạn về cơ bản hoặc định nghĩa một mô hình có thể là Gemini Free Flash, hoặc bạn định nghĩa các tác nhân của mình, có thể là Deep Research. Và chúng tôi đang nỗ lực để bạn có thể mang tác nhân của riêng mình, hoặc bạn định nghĩa tác nhân của riêng mình, để bạn có thể tùy chỉnh tất cả các hành vi này, và đó là cùng một giao diện. Vì vậy, chúng ta sẽ thấy sau, nhưng khi bạn gửi một yêu cầu tới NanoBanana để tạo một hình ảnh, bạn có thể về cơ bản xâu chuỗi các tương tác đó tới một mô hình Flash để làm điều gì đó khác, tới Luria, để bạn tạo âm thanh, hoặc thậm chí hy vọng sẽ sớm có thể tạo video.

giao diện rất giống với những gì bạn thấy từ OpenAI. Vì vậy, bây giờ chúng tôi có các khối nội dung đó, về cơ bản, mọi đầu vào bạn cung cấp và đầu ra bạn cung cấp đều là cùng một loại. Nó có một trường loại, có thể là function call (gọi hàm), thought (suy nghĩ), signature (chữ ký), text (văn bản), audio (âm thanh), video (video), image (hình ảnh), điều này hy vọng sẽ giúp bạn dễ dàng hơn khi xây dựng với Gemini API, và nó ít, tôi phải nói, thương hiệu Google hơn, ít proto-specific hơn, ít gRPC hơn, để giúp các nhà phát triển dễ xây dựng hơn. Các yếu tố thúc đẩy cốt lõi của Interactions API, ngoài việc làm cho nó dễ dàng hơn, chúng tôi cũng đã giới thiệu state trên máy chủ, mà chúng tôi sẽ sử dụng để xây dựng các tác nhân của mình, vì vậy chúng tôi không cần phải quản lý vòng lặp của mình và luôn gửi lại toàn bộ lịch sử. Rất giống với responses API, giờ đây bạn có một ID tương tác trước đó mà bạn có thể cung cấp, về cơ bản gắn liền với lịch sử hiện có, vì vậy bạn chỉ cần gửi một đầu vào mới.

Ưu điểm của Interactions API: Quản lý trạng thái và tối ưu hóa chi phí

Như đã đề cập, chúng tôi có một tác nhân với Deep Researchbackground truth, vì vậy bạn có thể bắt đầu nghiên cứu của mình, có thể poll (truy vấn định kỳ) nó, hoặc sớm sử dụng webhook để được thông báo khi nghiên cứu của bạn hoàn tất, để bạn không cần phải giữ kết nối mở. Chúng tôi có các khối loại, và sau đó chúng tôi cũng có cùng một kiểu streaming (truyền tải dữ liệu theo luồng), rất điển hình cho phát triển web sử dụng SSE (Server-Sent Events), điều này cũng hy vọng giúp bạn dễ xây dựng hơn. Chúng tôi cũng hỗ trợ các công cụ tích hợp, nhưng bây giờ chúng tôi cũng hỗ trợ Remote-MCP, và tôi nghĩ hai tuần trước chúng tôi đã ra mắt kết hợp công cụ, vì vậy bạn có thể kết hợp Google Search với hàm tùy chỉnh của riêng mình, đây là một trong những tính năng lớn mà mọi người đã yêu cầu trong nhiều năm, tôi nghĩ vậy. Và bây giờ bạn có thể làm điều này.

Để tóm tắt lại, sự khác biệt giữa Generate Content (những gì chúng ta có ngày nay) và Interactions API (những gì chúng ta sẽ có ngày mai) là đáng kể. Chúng ta sẽ có quản lý trạng thái phía máy chủ, nhưng bạn không cần phải sử dụng nó. Vì vậy, nếu bạn nói, "Này, tôi muốn quản lý lượt của mình, tôi muốn quản lý ngữ cảnh của mình, tôi không tin bạn, hoặc tôi cần thực hiện kỹ thuật ngữ cảnh, tôi muốn loại bỏ một số phần nhất định," bạn có thể làm điều này. Về cơ bản, việc gửi đầu vào mới dễ dàng hơn nhiều. Chúng tôi có các tác nhân tích hợp, chúng tôi cũng có hỗ trợ nền, vì vậy bạn sẽ có được thực thi bất đồng bộ. Chúng ta đều thấy với các tác nhân khi bạn gửi vấn đề, có thể mất một, hai, ba, bốn phút để hoàn thành, và giữ các HTTP requests hoặc kết nối mở trong, tôi phải nói, hơn 10 giây không phải là một thực hành tốt lắm, vì vậy bạn muốn sử dụng các cuộc gọi bất đồng bộ để được thông báo hoặc thực hiện polling khi hoàn tất, và nó ít proto-oriented hơn, điều mà tôi thực sự thích. Nó gần gũi hơn với những gì mọi người biết từ hệ sinh thái nhà phát triển, và một tác dụng phụ của quản lý trạng tháiimplicit caching (bộ nhớ đệm ngầm) cho API tốt hơn nhiều.

Đối với những ai không biết implicit caching là gì: khi bạn gửi một yêu cầu tới mô hình, mô hình cần mã hóa tất cả các mã thông báo đầu vào của bạn. Và bạn có thể cache các mã hóa đó cho các yêu cầu tiếp theo để tiết kiệm chi phí, và các yêu cầu được cache, tôi nghĩ, rẻ hơn 90% đối với các mã thông báo đầu vào. Và khi bạn phải tự quản lý trạng thái hoặc ngữ cảnh của mình, bạn có thể loại bỏ ngắt dòng, xóa các phần nhất định; điều này làm hỏng bộ nhớ đệm. Và sử dụng trạng thái phía máy chủ, máy chủ giữ ngữ cảnh, vì vậy khả năng tỷ lệ truy cập bộ nhớ đệm của bạn cao hơn nhiều, và chúng tôi thấy tỷ lệ cache tốt hơn hai đến ba lần từ các startup sử dụng Interactions API ngày nay.

Đơn Giản Hóa API và Kiến Trúc Tác nhân

Để minh họa ý nghĩa của việc làm cho mọi thứ đơn giản hơn, ở phía bên trái, chúng ta có các thành phần đầu vào cụ thể, một lần, rất proto-specific với dữ liệu hoặc văn bản nội tuyến, trong đó trường cơ bản mô tả kiểu ở phía bên phải. Nó gần giống với các API khác, tôi nghĩ vậy, nên sẽ dễ dàng hơn nhiều nếu bạn quyết định thử sau buổi workshop này.

Tôi đoán tất cả các bạn đều biết đại khái tác nhân là gì. Chúng ta có một bộ não hoặc mô hình của mình, quyết định nó muốn làm gì: gọi một công cụ, tạo văn bản, hoặc làm điều gì đó khác. Chúng ta có các công cụ, về cơ bản cung cấp cho bộ não của chúng ta tay và mắt để tương tác với môi trường mà nó đang ở. Chúng ta có ngữ cảnh (context), đó là tất cả những gì mô hình biết mình phải làm, mình có thể làm, nếu có những ưu tiên nhất định, nếu có những ràng buộc nhất định. Và sau đó, chúng ta có Agent Loop (vòng lặp tác nhân), về cơ bản kết hợp mô hình của chúng ta với tay và công cụ, và chạy nó cho đến khi mô hình không còn gọi các công cụ nữa và tạo ra một văn bản.

Ví dụ Sử dụng API (Trò chuyện và Tác nhân)

Đây là một số ví dụ nhanh về cách sử dụng API, sau đó chúng ta sẽ đi vào phần thực hành thú vị. Việc sử dụng trò chuyện cơ bản với trạng thái phía máy chủ trở nên rất dễ dàng vì chúng ta có lệnh gọi interactions.create. Chúng ta định nghĩa mô hình của mình, định nghĩa đầu vào của mình ("Thủ đô của nước Pháp là gì?"), chúng ta nhận lại đầu ra, và sau đó chúng ta có thể tiếp tục cung cấp previous ID (ID tương tác trước đó). Mô hình ở phía sau, hoặc máy chủ ở phía sau, về cơ bản sẽ lưu giữ đầu vào của người dùng và đầu ra của mô hình của chúng ta. Điều này tùy thuộc vào đầu vào của người dùng mà bạn không cần phải có một đối tượng client-side history (lịch sử phía máy khách), nơi bạn thêm lượt của người dùng, lượt của mô hình, và sau đó lại lượt của người dùng. Điều này trở nên rất hữu ích khi bạn xây dựng các tác nhânloop (vòng lặp) và luôn cần thêm đầu vào mới từ người dùng.

Và như đã đề cập trước đó, điều này cũng hoạt động cho cả tác nhânmô hình. Vì vậy, chúng tôi thực sự muốn xây dựng một giao diện hợp nhất, nơi bạn có thể tiếp tục các cuộc trò chuyện của mình bất kể bạn sử dụng mô hình nào. Trong ví dụ này, chúng tôi về cơ bản chạy một yêu cầu nghiên cứu chuyên sâu về các tác nhân AI vào năm 2026, sau đó chúng tôi lấy kết quả nghiên cứu và tiếp tục với mô hình Nano Banana để tạo ra một hình ảnh cho nó. Về cơ bản, nó chỉ mất bốn dòng mã, mà không cần bạn phải lo lắng về ngữ cảnh là gì, làm thế nào để cung cấp đầu vào, và hy vọng điều này sẽ làm cho mọi việc dễ dàng hơn nhiều. Nhưng như đã nói, bạn không cần phải làm điều đó, vì trường đầu vào cũng chấp nhận cùng một mảng với role user, role model và tất cả các đầu vào.

Sử dụng Công cụ

Đối với việc sử dụng công cụ, giờ đây cũng hy vọng dễ dàng hơn nhiều. Chúng ta có một hàm type, tên cho hàm mà chúng ta muốn sử dụng, mô tả, và sau đó chúng ta có các tham số mà mô hình cần để tạo ra. Và đây là những gì chúng ta sẽ xây dựng. Chúng ta thực hiện lệnh gọi API với các công cụ, và sau đó chúng ta kiểm tra đầu ra của tương tác. Requires action (yêu cầu hành động) về cơ bản có nghĩa là bạn với tư cách là một client (máy khách) cần phải làm gì đó. Vì vậy, đầu ra đã tạo ra một function call (lệnh gọi hàm) hoặc một đối tượng mà bạn cần phản ứng. Chúng ta lặp qua các loại đầu ra của mình, kiểm tra function call, thực thi hàm, nối kết quả, gửi một tương tác mới cho đến khi mô hình không còn quyết định muốn gọi một hàm và tạo ra một văn bản hoặc thứ gì đó khác.

Thiết Lập Workshop và Kỹ năng Tác nhân

Lần cuối cùng tôi tổ chức một workshop, tất cả chúng tôi vẫn đang viết mã thủ công. Vì vậy, đây là lần đầu tiên tôi thực hiện một workshop thực hành mà ít nhất tôi không cần viết mã thủ công nhiều nữa. Tôi không chắc các bạn làm thế nào.

Vậy những gì chúng ta sẽ làm hôm nay là chúng ta không viết mã thủ công. Chúng ta sẽ sử dụng IDE yêu thích của bạn, CLI tác nhân mà bạn chọn. Tôi không chắc có bao nhiêu bạn đang theo dõi, nhưng để làm cho mọi việc dễ dàng hơn, chúng tôi đã tạo ra agent skills (kỹ năng tác nhân) để các tác nhân của chúng ta sử dụng. Vì vậy, nếu bạn truy cập vào Gemini, bạn có thể tìm kiếm "Gemini API docs coding agents". Tôi cũng có thể, bạn có nhìn thấy không? Vâng. Ý tôi là tôi có thể. Vâng, cái này nên là "thiết lập tác nhân mã hóa của bạn với Gemini, MCPkỹ năng", tôi nghĩ nó sẽ đưa chúng ta đến đây. Thật ư? Vâng. Hoặc nếu không, bạn có thể truy cập tài liệu và sau đó ở phía bên trái trong phần "Getting Started", có mục "Coding Agent Setup".

Chúng ta đã thành công chưa? Được rồi. Bạn có thể, bạn không cần cài đặt nó trên toàn cục. Đó là một câu hỏi hay. Vậy bạn cài đặt như thế nào? Chúng ta có nhiều kỹ năng. Chúng ta có kỹ năng Gemini API dev. Chúng ta sẽ không sử dụng cái này. Đó là cho API tạo nội dung (generate content API). Nếu bạn muốn sử dụng API đó hoặc nếu bạn quen thuộc với nó, cứ dùng đi. Nhưng chúng ta có Gemini Live API. Đó là thứ mà Torah sẽ sử dụng sau. Vì vậy, chúng ta cũng không cài đặt cái này. Nhưng sau đó chúng ta có Gemini Interactions API. Và ở đây bạn có thể chọn lệnh đầu tiên hoặc lệnh thứ hai tùy thuộc vào những gì bạn muốn. Và sau đó chỉ cần sao chép nó, mở không gian làm việc nơi bạn đang làm việc. Và tôi đã làm rồi. Nhưng bạn có thể thêm lệnh và chọn cài đặt. Và sau đó bạn sẽ nhận được một trình hướng dẫn yêu cầu bạn cài đặt. Có nhiều mục đã được chọn sẵn. Đừng bối rối bởi nó. Nó chỉ có nghĩa là tất cả các tác nhân đó đều tương thích với thư mục .agents. Vì vậy, bạn có thể có một thư mục .agents/skills/Gemini Interactions API. Và ở đó chúng ta có kỹ năng của mình.

Cài đặt và Xác minh Kỹ năng

Vâng. Để tôi đợi thêm một chút. Tôi đã thử nghiệm với Cursor, Anti-Gravity và cả Gemini CLI. Vì vậy, nếu bạn đang sử dụng một trong ba công cụ đó, bạn sẽ ổn. Nếu bạn đang sử dụng Claude Code, tôi nghĩ nó cũng sẽ hoạt động. Tôi không chắc liệu chúng có tuân theo .agents không. Có thực hành, nếu không, ý tôi là tôi chắc chắn bạn có thể. Họ đã phát minh ra nó phải không? Vâng, các kỹ năng. Nhưng tôi nghĩ họ chỉ nhìn vào .Claude. Được rồi. Vậy. Được rồi. Vâng. Có câu hỏi không? Bạn đã hiển thị hai lệnh khác nhau. Một lệnh nói skills của cùng một và lệnh kia là context seven? Vâng, cả hai đều hoạt động giống nhau. Nhưng context seven là gì? Context seven là, tôi nghĩ là một sản phẩm của Upstash. Vì vậy, context seven có một máy chủ MCP và bây giờ CLI kỹ năng của chúng ta, mà bạn có thể sử dụng để truy cập các kỹ năng. Nó giống như một kho lưu trữ công khai. Vì vậy, và các kỹ năng thì có agents to same from the world's healthy. Vì vậy, nó giống như, và nó hoạt động, cả hai đều hoạt động trên GitHub. Vì vậy, Google-Gemini-Gemini-skills là một kho lưu trữ GitHub. Và kho lưu trữ GitHub bao gồm tất cả các kỹ năng mà chúng tôi đã tài liệu hóa. Vì vậy, bạn cũng có thể vào đó và tìm thấy nó. Ở đó cũng có các lệnh dealsinstalls và nó làm cho việc này dễ dàng hơn nhiều so với việc nhân bản (cloning) nó và đảm bảo bạn có nó trong đúng thư mục. Và sau đó, những gì chúng ta có thể làm để đảm bảo kỹ năng của chúng ta hoạt động. Chúng ta có thể hỏi tác nhân của mình rằng nó có thể sử dụng những kỹ năng nào. Và sau đó, nếu bạn đã cài đặt đúng cách, bạn sẽ thấy, vâng, chúng ta có kỹ năng interactions API chuyên biệt của chúng ta. Vì vậy, Anti-Gravity ở đây đã nhận ra kỹ năng của chúng ta trong thư mục .agents/skill. Được rồi. Chúng ta đang làm gì? Giả sử nhiều hơn. Được rồi. Tốt hơn? Vâng. Tôi đang sử dụng Telegram với trợ lý của mình. Đó là kết quả của việc này được chạy trên hệ thống. Vậy tôi có phải chạy nó không? Không, bạn có thể làm điều đó trên những thứ kiểu open-clock của bạn nếu bạn yêu cầu nó cài đặt interactions API và sau đó chỉ là sản phẩm cuối cùng của virtual. Nó sẽ chạy chứ? Vâng, nó nên chạy. Đó là một script Python. Chúng ta sẽ thực thi nó sau. Vâng, không, nó sẽ hoạt động. Được rồi. Có khó khăn nào khi cài đặt kỹ năng không? Có câu hỏi nào không? Kỹ năng là gì? Mọi người đều quen thuộc với kỹ năng chứ? Được rồi.

Khám phá Kỹ năng và Ví dụ Thực tế

Những gì chúng ta có thể làm để cung cấp cho bạn một số thông tin chi tiết về kỹ năng mà chúng ta đã tạo hoặc những gì nó chứa, phải không? Điều quan trọng khi tạo kỹ năng là nó phải là thứ mà mô hình không thể thực hiện một cách đáng tin cậy, hoặc nếu bạn có một số ưu tiên cá nhân về cách thực hiện một quy trình làm việc nhất định, hoặc tôi không biết, bạn luôn cần chạy thử nghiệm bằng band hoặc thứ gì đó tương tự. Và điều chúng tôi đã làm với kỹ năng của mình là đảm bảo rằng tác nhân biết những mô hình Gemini nào có sẵn. Một vấn đề phổ biến mà chúng tôi thấy trước đây là Gemini luôn sử dụng Gemini 1.5, đây không còn là mô hình mới nhất nữa. Chúng tôi cũng đã bao gồm các tác nhân ở đây. Chúng tôi có một số thông tin rất cấp cao về cách nó hoạt động nhưng chúng tôi không bao gồm tất cả tài liệu. Thay vào đó, bạn sẽ thấy một liên kết đến tài liệu của chúng tôi, có sẵn dưới dạng markdown. Vì vậy, thay vì phải luôn cập nhật kỹ năng của chúng tôi, ví dụ, chúng tôi đã thêm một tính năng mới vào Interactions API để kết hợp các công cụ. Chúng tôi sẽ cần cập nhật kỹ năng của mình và sau đó mỗi bạn cũng cần cập nhật kỹ năng của mình để có thể sử dụng nó, và sau đó chúng ta sẽ không đạt được nhiều tiến bộ về mặt giới hạn kiến thức. Thay vào đó, chúng tôi cung cấp thông tin như một phần của kỹ năng. Vì vậy, tất cả các tác nhân hiện có fetch tool để chúng có thể truy vấn thông tin dựa trên kỹ năng và sau đó chúng ta chỉ cần duy trì tài liệu, hầu hết đều được cập nhật. Xin lỗi? Ý tôi là nó thường sẽ cung cấp nó dưới dạng tham chiếu trên tệp cục bộ của bạn, vì vậy nó cần thực hiện lệnh gọi đọc tệp hoặc lệnh gọi tệp web, điều mà tôi nghĩ là tương tự về mặt chi phí và nó hoạt động rất tốt.

Xây Dựng Lớp Tác nhân và Tương tác Đa lượt

Vậy những gì chúng ta sẽ làm làm ví dụ đầu tiên, vì chúng ta không viết mã trực tiếp, chúng ta muốn xây dựng một cái gì đó đáng kể hơn. Chúng ta không chỉ nói "xây dựng tác nhân". Chúng ta muốn cụ thể hơn, vì vậy chúng ta muốn xây dựng một lớp tác nhân với cấu trúc Kune Structure và phương thức run. Kune Structure tạo ra client Chen AI, vì vậy client Chen AI là thứ chúng ta sẽ sử dụng để gọi mô hình của mình. Chúng ta cũng cần định nghĩa một mô hình và chúng ta cũng cần global previous interaction ID (ID tương tác trước đó toàn cục), và sau đó tại phương thức main để chạy một ví dụ. Thực hiện tất cả những điều đó trong workshop.

Vì vậy, như chúng ta có thể thấy, mô hình trong trường hợp này, hoặc tác nhân, là bước đầu tiên để đọc kỹ năng của chúng ta, phân tích tệp main của chúng ta đang triển khai nhiều kỹ năng. Nó có thể sẽ thất bại vì tôi đang sử dụng UV, vì vậy tôi dừng lại và nói với nó hãy sử dụng UV từ không gian làm việc, và sau đó chúng ta để nó tạo ra. Được rồi, nó kiểm tra xem chúng ta đã cài đặt thư viện chưa. Chúng ta đã cài đặt rồi, vì vậy có thể trong trường hợp của bạn, tác nhân vẫn cố gắng cài đặt Google Chen AI, nếu không, bạn có thể tự làm bằng pip install hoặc uv pip install Google-Chen-AI và sau đó đảm bảo. Được rồi, vậy chúng ta có lớp tác nhân khởi đầu của mình, chúng ta có client Chen AI của mình, chúng ta có ID mô hình của mình, nó mặc định là Gemini Free Flash. Nó sẽ không bao giờ mặc định là Gemini Free Flash nếu nó không đọc kỹ năng đúng không, bởi vì khi đó chúng ta sẽ bị mắc kẹt với Gemini 1.5. Chúng ta có phương thức run của mình, gọi lệnh interactions.create của chúng ta, chúng ta có văn bản đầu vào, chúng ta có ID tương tác trước đó của mình, chúng ta đặt ID tương tác trước đó mới và sau đó chúng ta trả về văn bản. Và sau đó, tuyệt vời như một ví dụ chính mà chúng ta sẽ chạy trong giây lát, chúng ta tạo tác nhân của mình, chúng ta có lượt một ("Tên tôi là Phil"), và sau đó tác nhân chạy nó, và sau đó ("Tên tôi là gì?") đến lượt hai, bây giờ chúng ta có thể kiểm tra xem tác nhân Gemini đã tạo của chúng ta có hoạt động với tương tác đa lượt và Interactions API của chúng ta không.

Thông báo Thử nghiệm API

Bạn có thể thấy một cảnh báo tương tự như cái tôi đã nhận ở đây: "interaction usage is experimental" (việc sử dụng tương tác đang trong giai đoạn thử nghiệm). Điều này là do chúng tôi vẫn đang trong giai đoạn beta. Chúng tôi thực sự nỗ lực để đưa API ra khỏi giai đoạn beta nhằm đảm bảo bạn có thể sử dụng nó trong môi trường sản xuất. Và cuộc gọi của chúng ta đã thành công! Xin chào Phil, rất vui được gặp bạn. Okay, có lẽ chúng ta không thành công lắm, tôi không thực sự có một cái tên. Tên của tôi là gì nhỉ? Có lẽ bạn nên kiểm tra xem chúng ta đã làm đúng chưa. Ý tôi là, tên của tôi là... Okay, đó vẫn là cuộc gọi. Xin lỗi, tôi đã hỏi bạn tên gì. Ý tôi là, đây là một mô hình ngôn ngữ được huấn luyện bởi Google, điều đó hợp lý. Và tên của tôi là gì? Tên của bạn là Philip, tôi có thể giúp gì cho bạn? Vậy thì, vâng, ý tôi là nó hoạt động thực sự tốt nếu bạn cung cấp các hướng dẫn tốt với các kỹ năng tốt và ngữ cảnh tốt, và đừng mong đợi nó sẽ, tôi không biết, chữa khỏi ung thư. Nếu bạn có sự hiểu biết rất rõ ràng về những gì bạn đang cố gắng xây dựng, Gemini free flash rất nhanh. Ý tôi là, nó không tốn nhiều thời gian, nó không tiêu thụ credit (tín dụng), đúng không? Tất cả chúng ta đều bị giới hạn mã thông báo ở một mức độ nào đó vào lúc này và nó hoạt động thực sự tốt.

Kiểm tra và Xác nhận Thực thi Script

Vâng, nó hoạt động. Ý tôi là, chúng ta sẽ sử dụng miễn phí. Ý tôi là, nó cũng hỏi liệu nó có muốn chạy không, vì vậy chúng ta đang hoàn thành vòng lặp ngay cả với Gemini free flash, nó cố gắng chạy script của chúng ta để đảm bảo nó hoạt động và sau đó chúng ta sẽ tiếp tục một chút nữa. Chúng ta đang làm thế nào? Có ai thực hiện cuộc gọi thành công không? Vâng, được thôi, hoàn hảo. Có bất kỳ vấn đề nào không? Bất kỳ lỗi nào? Bất kỳ câu hỏi nào? Vâng, tôi đang sử dụng một chút hay ho. Okay, nó hoạt động. Tuyệt vời, thậm chí còn lập trình trên điện thoại.

Mở rộng Agent với Công cụ Đọc/Ghi Tệp

Thông thường, bước tiếp theo cho tác nhân của chúng ta, đúng không? Chúng ta bây giờ đã có một lần chạy rất cơ bản, chúng ta có thể trò chuyện với mô hình. Bây giờ chúng ta cần thêm các công cụ cho nó và chúng ta muốn xây dựng một loại tác nhân lập trình nào đó. Vì vậy, các công cụ đầu tiên chúng ta sẽ thêm là công cụ đọc và ghi tệp. Và chúng ta chỉ tiếp tục trong luồng tác nhân chính của mình. Nó giống như, được thôi, tiếp theo chúng ta cần thêm một công cụ đọc tệp và ghi tệp. Tạo một triển khai Python cơ bản và cả định nghĩa JSON schema. Vì vậy, khi bạn sử dụng function calling hoặc tool use, chúng ta cần tạo một JSON schema mà chúng ta cung cấp cho mô hình để mô hình hiểu nó cần tạo ra gì. Một khi nó tạo ra schema đó, chúng ta cũng cần có một loại triển khai mã mà chúng ta có thể chạy trên client. Vì vậy, chúng ta yêu cầu nó tạo triển khai Python và cả JSON schema và ánh xạ cho hàm keykey. Hãy xem nó sẽ đưa ra điều gì.

Chi tiết Triển khai Công cụJSON Schema

Okay, nó đang gian lận một chút. Vì vậy, tôi có một thư mục giải pháp và nó đã tìm kiếm triển khai. Triển khai nó. Vâng, ý tôi là, đó là lý do tại sao việc kiểm tra cách bạn làm vẫn quan trọng. Ý tôi là, nó đã tìm thấy giải pháp và sau đó nó nói, "Ồ, tôi có ví dụ và giải pháp Python vững chắc này cho tác nhân để hướng dẫn tôi." Nhiệm vụ là triển khai read filewrite file. Vâng, vì vậy những gì chúng ta nhận được là chúng ta có hai triển khai tệp rất cơ bản, rất rất cơ bản. Vì vậy, chúng ta có một công cụ đọc tệp với đường dẫn tệp sử dụng cú pháp Python để mở và đọc nó, và chúng ta có một công cụ ghi tệp với đường dẫn tệp và nội dung và ghi nó. Và sau đó chúng ta có schema đọc tệp của chúng ta, đọc một tệp, trả về nội dung. Ghi tệp, ghi tệp, trả về nội dung.

Cập nhật Agent và Vòng lặp Thực thi Công cụ

Và nó đã thực hiện một số cập nhật cho tác nhân của chúng ta. Vậy nó đã thay đổi gì? Okay, đầu vào của chúng ta bây giờ là một chuỗi văn bản và danh sách có ý nghĩa, vì bây giờ chúng ta cần trả về một function call. Chúng ta kiểm tra xem chúng ta làm gì. Okay, chúng ta tạo một định nghĩa công cụ cho mô hình của chúng ta, đó là schema. Vậy đó là schema ánh xạ công cụ của chúng ta. Và sau đó chúng ta có vòng lặp của chúng ta mà bạn có thể đã quen thuộc từ trang trình bày tôi đã hiển thị. Vì vậy, sau khi chúng ta chạy yêu cầu của mình, chúng ta kiểm tra các tương tác với đầu ra. Vì vậy, các tương tác với đầu ra bao gồm tất cả các sự kiện được tạo bởi mô hình và vì Gemini là một mô hình lý luận, nó cũng bao gồm, ví dụ, các thoughtsthought signatures mà chúng ta cần trả về vì chúng ta đang sử dụng ID tương tác trước đó trong trạng thái phía máy chủ. Điều đó do chúng ta thực hiện và chúng ta chỉ cần kiểm tra xem, được thôi, chúng ta có một function call không. Chúng ta có một debug đẹp để chúng ta có thể kiểm tra nó. Và cho đầu ra của chúng ta hoặc một function call, chúng ta kiểm tra các công cụ của chúng ta. Chúng ta có công cụ của chúng ta không? Ý tôi là, có lẽ mô hình muốn chỉnh sửa tệp nhưng chúng ta không có công cụ chỉnh sửa tệp. Chúng ta sẽ bắt được nó ở đây. Nó gọi mô hình của chúng ta và sau đó nó tạo ra hai kết quả. Vì vậy, đối với function call, chúng ta có một kết quả hàm. Đó cũng là một phần của sự thay đổi. Chúng tôi thực sự muốn làm cho nó dễ dàng. Chúng ta sẽ thấy sau này khi chúng ta sử dụng tìm kiếm của Google, sẽ có một cuộc gọi tìm kiếm của Google và một kết quả tìm kiếm của Google để có cùng schema. Và sau đó chúng ta sử dụng đệ quy. Vì vậy, nếu chúng ta có hai kết quả, về cơ bản chúng ta tự gọi lại phương thức self run của mình. Nếu chúng ta không có hai kết quả, chúng ta trả về văn bản tương tác. Và nó cũng đã cập nhật ví dụ của chúng ta để viết "hello from the agent" vào một tệp có tên hello.txt và trả về. Vì vậy, ý tôi là, các thay đổi nhìn chung có vẻ tốt đối với tôi.

Kiểm tra và Tương tác Liên tục với Agent

Chúng ta có thể thử chạy nó. Vì vậy, chúng ta chạy Python workshop name. Chúng ta nhận được gì? Chúng ta nhận được tool call với write file. Chúng ta nhận được tool result. Chúng ta nhận được một read file call nữa và sau đó là phản hồi cuối cùng của tác nhân. Tệp hello_agent.txt đã được tạo thành công với nội dung. Okay, các tác nhân không chỉ là singleton, đúng không? Có lẽ chúng ta muốn nó phản hồi. Bước tiếp theo về cơ bản là rất tham vọng, nói với nó rằng tôi muốn có một triển khai liên tục để kiểm tra. Hãy xem, hãy xem chúng ta sẽ tiếp tục ở đâu bây giờ. Tôi hy vọng ít nhất nó sẽ cập nhật hàm chính của chúng ta, nơi chúng ta có một đầu vào, một vòng lặp while về cơ bản đang chờ đầu vào bằng cách sử dụng các tác nhân của chúng ta. Vì vậy, vâng, chúng ta có đầu vào của người dùng và sau đó chúng ta luôn tiếp tục với phương thức agent run của chúng ta, sau đó bên trong agent chạy nó trong một vòng lặp cho đến khi không còn tool calls nào nữa và nếu có kết quả, về cơ bản chúng ta nhận lại phản hồi của mình.

Nâng cao Hiệu suất Agent với Lời nhắc hệ thống

Okay, nhanh chóng, có quá nhanh không hay chúng ta vẫn đang đi đúng hướng? Khoảng chừng. Nhanh. Okay, ý tôi là, chúng ta sẽ chia sẻ mã sau này. Cũng rất vui được trả lời các câu hỏi. Chúng ta có nhiều bài đăng trên blog và ví dụ về điều đó trực tuyến. Vì vậy, nếu bạn quan tâm đến việc xây dựng lại nó sau này với tốc độ chậm hơn, nhưng tôi cố gắng chậm lại một chút nhưng tôi cũng muốn cho bạn đủ thời gian để nói. Vậy chúng ta có thể làm gì bây giờ, vì tác nhân của chúng ta đã triển khai vòng lặp while để cung cấp đầu vào, chúng ta có thể nói điều gì đó như "xin chào", đúng không? Thông thường chúng ta sẽ không thực hiện bất kỳ tool calls nào vì "xin chào" giống như tác nhân của chúng ta đã hiểu đúng hoặc Gemini trong trường hợp này đã hiểu rằng "xin chào" không phải là thứ tôi cần giải quyết bằng công cụ đọc hoặc ghi tệp, vì vậy tôi có thể nói "xin chào, tôi có thể giúp gì cho bạn?". Bạn có thể viết hoặc có lẽ bạn có thể tạo CSV với ngón tay cái lên. Sẽ mất một chút thời gian. Vì vậy, nó suy nghĩ và nó thực hiện function call và, okay, chắc chắn rồi, đây là một tệp CSV, blah blah blah. Okay, bạn có thể ghi nó ra đĩa không? Vâng, tôi có thể. Nếu bạn đợi, có lẽ mô hình của chúng ta không có các công cụ của chúng ta. Hãy kiểm tra. Có bản đồ công cụ đó. Nó có. Tại sao nó không sử dụng các công cụ của chúng ta? Bạn có thể sử dụng những công cụ nào? Nó có một read file. Vâng, có lẽ chúng ta không đủ rõ ràng và những gì chúng ta có thể làm để cải thiện điều này trong một giây là chúng ta có thể thêm một lời nhắc hệ thống để nói với mô hình, "Này, bạn là một tác nhân lập trình, bạn có thể sử dụng các công cụ để viết và tương tác với..." Okay, ở đó chúng ta có tool call write file với CSV của chúng ta. Tuyệt vời. Vì chúng ta đã thấy một lỗi, bây giờ chúng ta có thể nói với mô hình, "Này, thêm lời nhắc hệ thống cho cuộc gọi API tương tác và thêm một lời nhắc ví dụ cho tác nhân lập trình." Okay. Và điều thực sự tuyệt vời bây giờ là vì chúng ta đã tải kỹ năng API tương tác ở đầu, mô hình vẫn có nhận thức về, okay, lời nhắc hệ thống đến API tương tác và những gì tôi có thể đảm bảo với bạn là Gemini free flash chưa bao giờ nhìn thấy bất kỳ mã nào của API tương tácmô hình đã được huấn luyện trước khi chúng tôi phát hành API. Vì vậy, tất cả công việc chúng tôi đang làm cho đến nay đều dựa trên các kỹ năng và cơ sở hạ tầng lập trình và chưa phải là một phần của quá trình huấn luyện.

Kiểm tra Agent sau khi Cập nhật Lời nhắc hệ thống

Okay, chúng ta đã nhận được gì? Okay, chúng ta có thể cung cấp nó trên lệnh chạy hoặc chúng ta có một khi chúng ta đã tạo, điều đó tốt và, okay, persona lập trình, bạn là một kỹ sư phần mềm chuyên gia và một trợ lý lập trình hữu ích. Bạn có quyền truy cập vào hệ thống tệp cục bộ. Okay, hãy chấp nhận nó. Hãy khởi động lại tác nhân của chúng ta. Hãy nói "xin chào". Xin chào, tôi có thể giúp gì cho bạn với các tác vụ kỹ thuật phần mềm và lập trình của bạn? Ý tôi là chắc chắn tốt hơn những gì chúng ta có cho đến nay. Và chúng ta đã gửi gì trước đó? Chúng ta nói, "Bạn có thể tạo một SVG với ngón tay cái lên không?" Vì vậy, bạn có thể tạo một SVG với ngón tay cái lên không? Và bây giờ hãy xem liệu nó có gọi không. Vâng, và bây giờ vào thời điểm này, chúng ta đã nhận được write file đến một cuộc gọi và sau đó chúng ta cũng nhận được, "Này, tôi đã tạo một tệp SVG ngón tay cái lên với biểu tượng ngón tay cái đơn giản." Vậy tôi có thể... Vâng, đây rồi, chúng ta có một biểu tượng ngón tay cái lên. Tuyệt vời.

Tích hợp Công cụ Bash vào Agent

Và tất nhiên, điều gì còn thiếu cho tác nhân lập trình, đúng không? Chúng ta cần có một số công cụ bash. Đó bây giờ không phải là một phần của thư mục giải pháp. Vì vậy, hãy xem chúng ta sẽ nhận công cụ bash của chúng ta như thế nào bây giờ. Thêm một công cụ lệnh chạy tương tự cho phép mô hình thực thi các lệnh bash. Okay, tạo một kế hoạch triển khai. Vâng, vâng, vâng, okay, vì vậy chúng ta có lệnh chạy của mình sử dụng một subprocess mà trong trường hợp này tôi đoán là được. Chúng ta không quan tâm quá nhiều đến bảo mật cho ví dụ này. Và sau đó đầu ra của chúng ta là stdout hoạt động. Đã chỉnh sửa. Chúng ta có công cụ lệnh chạy của mình. Vâng, thậm chí đã cập nhật lời nhắc hệ thống của chúng ta. Và bây giờ hãy dừng điều đó. Hãy xóa điều đó. Chạy lại. Bất kỳ gợi ý nào về những gì chúng ta nên kiểm tra không? Tôi không chắc điều đó sẽ hoạt động vì chúng ta không có bất kỳ kỹ năng nào hoặc bất kỳ thông tin nào cho nó. Thời gian. Lấy công cụ thời gian. Tool call run command date. Thứ Tư, ngày 8 tháng 4. Trông tốt. Vâng, tuyệt vời. Đó là tác nhân lập trình nhỏ của chúng ta. Không, ý tôi là, đừng làm điều này nữa. Có câu hỏi nào nữa không? Có ý tưởng nào nữa không? Chúng ta có khoảng năm đến bảy phút.

Quản lý ContextID Tương tác

Vâng, vâng, vâng, vì vậy những gì bạn luôn có thể làm, vì vậy những gì chúng ta đang làm ở đây là đúng, chúng ta luôn sử dụng ID tương tác trước đó từ lượt trước. Vì vậy, về cơ bản chúng ta xếp chồng nó và bạn luôn có thể quay lại bất kỳ chỉ mục nào trong ngăn xếp và phân nhánh từ đó. Vì vậy, nếu bạn giữ các ID tương tác trên phía client của mình, bạn luôn có thể sử dụng chúng để, tôi không biết, phân nhánh và giống như tôi không có lời nhắc đầu tiên về việc tìm kiếm web cơ bản và sau đó sử dụng thử nghiệm giống như một cơ sở cho năm yêu cầu song song thực hiện một số công việc khác và bạn luôn có thể nhận được ngữ cảnh. Vì vậy, chúng ta có một phương thức interactions.get mà bạn có thể sử dụng để truy xuất tương tác và sau đó cũng nhận ID tương tác trước đó, vì vậy bạn về cơ bản có thể quay lại cho đến đầu và nhận tất cả trạng thái của mình nếu bạn muốn lưu nó để sử dụng sau này. Và mặc định cho các tương tác đó được lưu trữ trên máy chủ cho ba tầng, một ngày cho việc sử dụng trả phí là 55 ngày vào thời điểm hiện tại.

Xử lý Giới hạn Cửa sổ ngữ cảnh và Lưu trữ Tương tác

Vâng, bạn có câu hỏi không? Xin lỗi, bạn, okay, thêm câu hỏi. Vâng, không, vì vậy một khi, các mô hình Gemini có cửa sổ ngữ cảnh một triệu mã thông báo. Điều gì sẽ xảy ra bây giờ nếu bạn đạt đến mức đó? Bạn sẽ nhận được một lỗi, nhưng chúng tôi đang nghiên cứu các kỹ thuật nén ngữ cảnh (context compaction), nhưng nói thì dễ hơn làm và vẫn là thứ bạn hiện cần duy trì trên phía client của mình. Không, không, vì vậy khi bạn gửi yêu cầu, bạn nhận được một ID, ID tương tácID tương tác lưu trữ đầu vào của bạn và đầu ra của mô hình. Trong tầng miễn phí, đầu vào và đầu ra và ID được lưu trữ trong một ngày, nghĩa là nếu bạn gửi yêu cầu bây giờ và bạn tiếp tục tám giờ sau từ thời điểm đó, trạng thái hoặc ngữ cảnh vẫn khả dụng. Nếu bạn gửi yêu cầu vào ngày mai, nó về cơ bản sẽ nói "không thể tìm thấy yêu cầu với ID tương tác cũ" vì nó về cơ bản bị cắt tỉa sau một ngày. Nhưng nếu bạn sử dụng API key trả phí, nó được lưu trữ trong 55 ngày và API tương tác cũng sắp có trên Vertex và tôi nghĩ có thể có một chút linh hoạt hơn về thời gian bạn muốn lưu trữ hoặc tùy chỉnh nó.

Khám phá Khả năng Đa phương thứcCông cụ

Vâng, chúng ta chưa có một cái nào nhưng hy vọng sẽ sớm có. Vâng, chúng ta có thể ý tưởng rằng bạn có thể có API job được nói ra bằng công cụ eSpeak. Xin lỗi, đó là công cụ eSpeak vì bạn thấy công cụ eSpeak thực sự nói ra câu chuyện cười về API và chúng ta cũng có thể sử dụng Gemini có mô hình TTS có thể nói ra. Nhưng nói và nghe, ý tôi là tổng cộng cho thấy rất nhiều điều thú vị. Có câu hỏi nào về API tương tác trong tác nhân nhỏ của chúng ta không? Không? Okay, vậy bạn có tám phút. Okay, năm phút để làm cho tác nhân của bạn nói. Vâng, tuyệt vời, điều đó hoạt động thực sự tốt. Vâng, vâng, đã lâu rồi.

Tối ưu hóa Bộ nhớ Đệm

Vâng, tốt hơn nhiều. Chúng tôi thậm chí còn không trả tiền cho anh ấy. Các nâng cấp lớn, vâng! À, có thể tôi biết còn vài phút nữa, nhưng về bộ nhớ đệm, vâng, vâng. Đó là một câu hỏi hay. Có lẽ chúng ta cần tìm Philip để trả lời câu đó. Tôi thực sự không biết. Philip, câu hỏi về bộ nhớ đệm: các mã thông báo đầu vào là gì? Ví dụ, khi bạn cung cấp một đầu vào như "không có ID tương tác, đầu vào PDF đầu tiên, 4.000 mã thông báo" và đầu vào văn bản với 10 mã thông báo, và bạn thực hiện một cuộc gọi tương tác tiếp theo, có thể chỉ PDF sẽ được lưu vào bộ nhớ đệm chứ không phải phần còn lại, như đoạn văn bản ngắn. Và sau đó, nếu bạn thực hiện một cuộc gọi khác, có thể PDF và các lượt tương tác tiếp theo sẽ được lưu vào bộ nhớ đệm. Vì vậy, nó giống như ở cấp độ đối tượng hơn. Nhưng vì bạn, ý tôi là, nó như thế nào? Rất dễ mắc lỗi trong bộ nhớ đệm nếu bạn, dù là thay đổi nhỏ nhất trong lời nhắc của bạn, việc xóa các ngắt dòng phổ biến cũng sẽ phá vỡ nó. Vì vậy, việc để điều này dựa vào máy chủ để duy trì, nó được đảm bảo an toàn hơn. Và nó có thể dễ dàng như, "Này, người dùng của tôi nói có một ngắt dòng trống ở cuối." Được rồi, tôi xóa nó và sau đó tôi sử dụng lại lịch sử đó, và sau đó nó sụp đổ. Vâng, tối ưu nhất. Nhưng ý tôi là, nó phụ thuộc vào nơi yêu cầu của bạn "đánh trúng" và bạn theo dõi nhanh đến mức nào. Nhưng tỷ lệ bộ nhớ đệm nên khá cao.

Giới thiệu Life APIGemini 3.1 Flash Life

Tuyệt vời. Có lẽ để bắt đầu, chúng ta có thể xem xét một trong những ví dụ mà chúng ta có thể xây dựng với Life API, mô hình mới. Hiện tại đây là Gemini 3.1 Flash Life ra mắt cách đây hai tuần, tôi nghĩ vậy. Rất thú vị. Đã khá lâu rồi. Tôi nghĩ mô hình âm thanh gốc 2.5 trước đó là từ tháng 12, vì vậy đã một thời gian rồi. Lý do là chúng tôi đã thực hiện một cuộc tái cấu trúc kiến trúc nền tảng lớn để, bạn biết đấy, lý tưởng là giảm độ trễ, cải thiện khả năng mở rộng trong tương lai khi hệ thống này phát triển. Vì vậy, điều đó rất thú vị. Và sau đó, song song, chúng tôi đang nỗ lực đưa Life API đến Interactions API nữa. Đó là điều mà Philip và tôi đang thực hiện vào lúc này. Vẫn chưa sẵn sàng, vì vậy chúng ta vẫn phải sử dụng Life API cho bây giờ. Nhưng hãy thực hiện một bản demo nhỏ.

Demo Tác nhân Trò chuyện và Sinh nhạc Luria 3

Bản demo này sử dụng Life API kết hợp với Luria 3. Vậy trên Gemini API, đã có ai dùng Luria chưa? Mô hình Luria mới thực ra là một mô hình tạo nhạc. Và Luria 3 giờ đây có thể tạo ra các bài hát, bao gồm cả các bài hát có lời. Đây là mô hình clip, tạo ra một đoạn nhạc dài khoảng 30 giây. Nhưng chúng tôi cũng có một mô hình bài hát đầy đủ, nơi bạn có thể tạo ra toàn bộ bài hát. Vì vậy, ý tưởng là chúng ta có tác nhân trò chuyện của mình, đóng vai trò như một DJ mà bạn đang tương tác. Và DJ đó có một công cụ để tạo nhạc, đúng không? Tôi vốn là người Đức, nhưng lớn lên tôi học tiếng Anh thông qua Harry Potter và BBC Radio 1. Và nếu bạn còn nhớ, ngày xưa bạn có thể gọi điện và yêu cầu một bài hát. Đó chính là ý tưởng của trải nghiệm này. Sau đó bạn sẽ nghe trên Live Jukebox. "Hôm nay chúng ta sẽ tạo ra bài hát đình đám nào? Cho tôi biết chúng ta sẽ thiên về thể loại gì và không khí nào bạn muốn?" "Hãy tạo một bản techno shlager tiếng Đức đầy năng lượng về cảnh AI ở Anh đi." " Techno shlager tiếng Đức về AI ở Anh? Tuyệt vời, bạn tôi. Đúng phong cách Radio 1. Bạn muốn nhét bất kỳ lời bài hát hay chủ đề cụ thể nào vào đó không, hay cứ bất ngờ đi?" "Tuyệt vời, nào! Hãy làm cho loa của bạn rung chuyển. Chuẩn bị cho một sự bùng nổ của hỗn loạn máy móc! Đây là techno shlager tiếng Đức về cảnh AI ở Anh! Nào!" Vâng, các TPU rất thích khi bạn vỗ tay cho chúng, vì vậy xin cảm ơn. Có ai có ý tưởng nào khác không? Chúng ta có thể làm thêm một bài nữa. Nói lớn lên nào! Bất kỳ ngôn ngữ, thể loại nào? "Một bài hát về điều dưỡng bằng tiếng Swahili?" "Được thôi. Chào mừng đến với Live Jukebox. Bạn đang lên sóng cùng tôi. Chúng ta có thể có một bài hát về điều dưỡng bằng tiếng Swahili không?" "Một bài hát về điều dưỡng bằng tiếng Swahili! Tuyệt vời. Đó là điều chúng ta không nghe thấy hàng ngày. Để biến nó thành một bản hit đình đám, chúng ta muốn không khí như thế nào? Vui tươi và hân hoan hay thư giãn và nhẹ nhàng hơn? Và chúng ta nên đưa những chi tiết cụ thể nào về điều dưỡng vào? Cho tôi biết và tôi sẽ làm cho bản nhạc này bùng nổ." "Vâng, techno hardcore, techno hardcore và tiếng Swahili về điều dưỡng. Tuyệt vời. Chuẩn bị để thổi tung những chiếc loa đó. Tôi đang gọi điện ra ngay bây giờ. Hãy sẵn sàng cho một bản hit đình đám, bạn tôi. Vâng, cứ thử đi, bạn biết đấy, để khách mời của audio house." "Được rồi, đó là DJ Live Jukebox. DJ bạn nếu muốn, nó đang bật." Vì vậy, cái này được xây dựng hoàn toàn bằng Google AI Studio. Nó giống như một bản demo codevibe nhỏ. Tôi cũng đã xuất bản nó trong AI Studio, vì vậy bạn có thể dùng thử. Bạn sẽ cần một Khóa API trả phí cho cái này. Việc tạo nhạc thực sự yêu cầu một tài khoản thanh toán. Vì vậy, nếu bạn có một tài khoản với tín dụng, bạn có thể sử dụng nó, ví dụ. Tuyệt vời.

Tổng quan về Gemini 3.1 Flash Life

Vâng, Gemini 3.1 Flash Life, bạn biết đấy, các điểm chuẩn. Rõ ràng, các điểm chuẩn không thực sự nói lên toàn bộ sự thật. Chúng rất tuyệt để đánh giá mọi thứ. Thế giới thực, đặc biệt là trong lĩnh vực âm thanh trực tiếp, thường trông hơi khác. Vì vậy, bạn biết đấy, lý tưởng là chúng ta chỉ cần tự mình dùng thử. Gemini 3.1 Flash Lifemô hình hiện có trong Gemini Life trên điện thoại của bạn. Vì vậy, nếu bạn đang sử dụng ứng dụng Gemini trên điện thoại của mình, bạn cũng đang nói chuyện với mô hình đó. Cũng như tôi nghĩ Search Life hiện cũng có nó. Vì vậy, nếu bạn đang nói chuyện với Google Search, tôi nghĩ đó là cùng một mô hình. Và sau đó bạn có thể xây dựng các ứng dụng bằng cách sử dụng mô hình này trên Life API.

Tính năng Life API

Life API là một API web sockettrạng thái. Bạn có thể gửi các nguồn cấp dữ liệu văn bản, âm thanh, video theo thời gian thực đến mô hình. Với âm thanh, bạn đang gửi các đoạn buffer của âm thanh theo thời gian thực, bạn đang truyền phát chúng. Với video, bạn có thể truyền phát với tốc độ khung hình tối đa là một khung hình mỗi giây. Vì vậy, đây có thể là một nguồn cấp dữ liệu camera, đây có thể là một canvas. Nó có thể giống như chia sẻ màn hình của bạn, đúng không? Vì vậy, bạn có thể chia sẻ màn hình với mô hình. Ví dụ, Shopify đang sử dụng tính năng này cho Shopify Sidekick nơi nó thực sự giống như một hỗ trợ kỹ thuật hướng dẫn bạn, bạn biết đấy, nếu bạn hỏi, "Ồ, làm thế nào để tôi thiết lập một tên miền tùy chỉnh cho cửa hàng Shopify của mình?" Nó về cơ bản sẽ hướng dẫn bạn cách thực hiện điều đó. Và nó có thể thấy bạn đang ở đâu trên màn hình bằng cách thu nhận các khung hình của màn hình. Và sau đó, đổi lại, web socket cung cấp cho bạn các sự kiện thời gian thực trở lại. Và những điều này về cơ bản là truyền phát lại các bộ đệm âm thanh. Và sau đó, bạn cũng có thể nhận được các phiên âm âm thanh. Đó là phần văn bản của nó. Và sau đó chúng tôi có tính năng gọi công cụ tích hợp của Google Search grounding được tích hợp theo mặc định. Vì vậy, nếu bạn cần thông tin thời tiết theo thời gian thực, bạn cũng có thể truy cập nó. Và vâng, một số tính năng chính.

Khả năng của Mô hình Âm thanh Gốc

Điều thực sự tuyệt vời về mô hình này một lần nữa, đó là một mô hình âm thanh gốc. Điều đó có nghĩa là chúng tôi không thông qua văn bản. Nó không phải là một quy trình pipeline xếp tầng nơi bạn chuyển giọng nói thành văn bản, chạy văn bản qua một LLM, và sau đó tạo ra lời nói. Mà thay vào đó, mô hình tự nó, bạn biết đấy, đi từ mã thông báo âm thanh này sang mã thông báo âm thanh khác. Và trí tuệ được tích hợp vào mô hình âm thanh này. Vì vậy, nó dựa trên Gemini 3.1, khá thông minh. Bạn có các cấp độ tư duy khác nhau mà bạn có thể bật. Và điều tuyệt vời với điều đó là hỗ trợ đa ngôn ngữ. Tôi nghĩ có 97 ngôn ngữ được hỗ trợ và ở bản xem trước vào thời điểm hiện tại, và điều tuyệt vời là vì nó là một mô hình âm thanh gốc, nó thực sự có khả năng hiểu âm thanh của Gemini được tích hợp sẵn. Vì vậy, nó có thể hiểu sự pha trộn của các ngôn ngữ khác nhau. Nó có thể, bạn biết đấy, giống như Danglish, ví dụ, là sự pha trộn giữa tiếng Đức, tiếng Hà Lan và tiếng Anh, đúng không? Vì vậy, nó sẽ có thể tự nhiên chuyển đổi giữa các ngôn ngữ khác nhau, điều này thực sự tuyệt vời.

Khả năng Ngắt lời và Hợp tác WebRTC

Vâng, ngắt lời, bạn biết đấy, rõ ràng có một loại phát hiện hoạt động giọng nói tự động được tích hợp vào mô hình, vì vậy bạn có thể ngắt lời nó. Bạn đã thấy trước đó nó đang cố gắng có một cuộc trò chuyện, nhưng chúng tôi đang cố gắng khiến nó, bạn biết đấy, sử dụng công cụ. Sử dụng công cụ là một điểm lớn khác. Vì vậy, có những cải tiến lớn trong sử dụng công cụtuân thủ hướng dẫn với mô hình đó. Và vì vậy bạn có thể xây dựng một số thứ thực sự thú vị với nó. Rõ ràng, hiện tại chúng tôi chỉ cung cấp cho bạn một API web socket. Đó là một nhược điểm. Nếu bạn đã từng sử dụng thứ gì đó như GPC real-time trước đây, bạn biết đấy, bạn sẽ có một cơ sở hạ tầng WebRTC trực tiếp có thể hữu ích. Vì vậy, chúng tôi đã hợp tác với rất nhiều đối tác tích hợp như Life Kit, Pipe Cats Software, Mentioners ở Ba Lan. Họ xây dựng một dịch vụ tuyệt vời tên là Fish Gem Vision Agents, Vox Implant. Vì vậy, những đối tác này đã tích hợp trực tiếp Life API và sau đó cung cấp cho bạn các tích hợp WebRTC dễ dàng nếu bạn, bạn biết đấy, muốn hoặc cần điều đó cho hệ thống của mình.

Demo Tương tác Trực tiếp: Webcam, Điều chỉnh Giọng nói và Google Search Grounding

Vâng, hãy thử nào. Bạn có thể tự mình thử và sẽ rất thú vị nếu tất cả chúng ta cùng thử trong phòng này cùng một lúc, vì vậy chúng ta sẽ xem nó hoạt động như thế nào. Nhưng một lần nữa, AI.Studio hoặc AI.Dev và sau đó /life, bạn có thể dùng thử mô hình. Và vì vậy bạn có thể, bạn biết đấy, đưa webcam của mình vào đây. Vì vậy, chúng tôi có thể cung cấp cho nó nguồn cấp dữ liệu webcam của mình, cho phép lần này. Và sau đó, bạn biết đấy, chúng ta cũng có thể gửi văn bản. Vì vậy, chúng ta có thể gửi như, "Trang phục của tôi thế nào?" Vì vậy, trong trường hợp này, bạn biết đấy, tôi không hứng thú gì, "Bạn đang mặc áo khoác màu xanh lá cây bên ngoài áo phông màu xanh lam cùng với mũ lưỡi trai màu đen. Sự kết hợp này trông giản dị và thoải mái. Bạn có dịp đặc biệt nào trong đầu không?" Vâng, được thôi. Vì vậy, bạn biết đấy, điều đó rõ ràng hơi khác so với DJ trực tiếp người Anh gốc Úc sôi nổi của chúng tôi. Vì vậy, những gì chúng ta có thể làm là điều chỉnh giọng nói của mình. Thông qua các hướng dẫn hệ thống. Hiện tại, về giọng trầm, chúng tôi không có nhiều, đó là khoảng 30 giọng trầm khác nhau. Có một dự án trong đầu và chúng, bạn biết đấy, khá chung chung. Nhưng bởi vì, bạn biết đấy, Gemini có khả năng hiểu âm thanh rất sâu, những gì chúng ta có thể làm thực sự là sửa đổi giọng nói thông qua lời nhắc thông qua hướng dẫn hệ thống. Vì vậy, những gì chúng ta có thể làm thực sự là cung cấp cho chúng tôi một hướng dẫn hệ thống ở đây, ví dụ, và chúng ta có thể nói, "Được rồi, nói bằng giọng Ailen thân thiện," đúng không? Và vì vậy bây giờ chúng ta có giọng trầm đó và nói bằng giọng Ailen thân thiện, "Chào, bạn có nghe thấy tôi không?" "Ồ, xin chào, rõ ràng và to! Vậy tôi có thể giúp gì cho bạn vào ngày đẹp trời này? Bạn nghĩ gì về trang phục của tôi?" "Ồ, không, ở đây, trông rất thông minh. Vâng, chiếc áo khoác xanh lá cây đó rất hợp với bạn. Tôi phải nói rằng một vẻ ngoài giản dị tuyệt vời mà bạn đang nghĩ đến và đi đâu đó." Và bây giờ tôi chỉ ở đây tại Kỹ sư AI. Được rồi, dù sao đi nữa, tôi nhận ra mình đã không bật những gì tôi muốn cho bạn thấy nữa là tính năng grounding với Google Search. Vì vậy, những gì chúng ta có thể làm là, bạn biết đấy, rõ ràng mô hình tự nó được đào tạo đến một ngày giới hạn kiến thức nhất định. Và vì vậy, bạn biết đấy, nếu chúng ta cần thông tin thời gian thực như thời tiết tuyệt đẹp này mà, bạn biết đấy, không ai thực sự tin chúng ta. Mô hình sẽ không tin chúng ta, bạn biết đấy, nếu nó không có Google Search grounding. Nhưng bây giờ, bạn biết đấy, chúng ta có thể, chúng ta có thể có Google Search grounding. Chúng ta có thể có các cấp độ tư duy khác nhau nữa. Vì vậy, "không suy nghĩ" thực ra là suy nghĩ rất tối thiểu, nhưng nó có nghĩa là, bạn biết đấy, mô hình sẽ phản hồi nhanh hơn. Nó có độ trễ thấp hơn vì càng nhiều suy nghĩ chúng ta có, rõ ràng, càng nhiều bước suy nghĩ liên quan và nó sẽ, bạn biết đấy, tăng độ trễ. Vì vậy, bạn có thể thấy trong các điểm chuẩn nữa, có các cấp độ tư duy khác nhau như "suy nghĩ cao", "suy nghĩ thấp". Nhưng bây giờ nếu chúng ta bật Google Search ở đây, "Ồ, xin chào! Tôi có thể giúp gì cho bạn với những trò tai quái gì hôm nay? Bất cứ điều gì, chỉ cần nói ra." "Vâng, thời tiết hiện tại ở London thế nào vậy?" "Ồ, hiện tại trông có vẻ khoảng chín độ và nhiều mây ở London. Có thể hơi se lạnh, vì vậy bạn chắc chắn sẽ cần một chiếc áo khoác. Bạn có cần biết thêm điều gì về những gì đang diễn ra ở đó không?" "Bạn đang nói về cái gì vậy? Bạn có thể kiểm tra lại hôm nay là ngày bao nhiêu không?" "Ồ, xin lỗi. Tôi dường như đã đi trước bản thân một chút. Hôm nay là thứ Tư, ngày 8 tháng 4 năm 2026. Bạn có cần biết điều gì cụ thể về hôm nay không?" "Vâng, bây giờ hãy tra cứu thời tiết thực tế hôm nay, thứ Tư, ngày 8 tháng 4 năm 2026, ở London. Bạn đang xem xét nhiệt độ b"

Giới thiệu và Sự cố Demo Ban đầu

... từ 5 đến 13 độ C với khả năng mưa khá cao, vì vậy đừng quên mang theo ô. Còn gì nữa không? Được rồi, có vẻ như tôi đã không "cầu nguyện" với các vị thần demo. Có vẻ như có điều gì đó đang xảy ra. Tôi tự hỏi liệu chúng ta có làm hỏng giao diện người dùng (UI) ở đó không. Nó đáng lẽ phải hoạt động tốt hơn nhiều. Tôi nghĩ rằng tính năng Google search grounding vì lý do nào đó không hoạt động.

Xây dựng Trợ lý Phỏng vấn Đa ngôn ngữ với Google AI Studio

Nhưng bây giờ chúng ta có thể làm là tự mình thử nó trong một ứng dụng. Cách dễ nhất để làm điều đó là, bạn biết đấy, như life jupebox DJ. Và chúng ta có thể sử dụng Google AI Studio để tạo code tích hợp của mình. Vì vậy, chúng ta có một skill ở đây được gọi là "Ed", bạn biết đấy, trò chuyện thoại thời gian thực với Gemini Life API. Và sau đó chúng ta có thể nói rằng đã xây dựng một trợ lý phỏng vấn đa ngôn ngữ cho phép tôi luyện tập phỏng vấn bằng các ngôn ngữ khác nhau như tiếng Đức, tiếng Anh, tiếng Tây Ban Nha và những gì bạn muốn.

Và bây giờ chúng ta có thể bắt đầu chạy nó. Điều này sử dụng Gemini 3 flash preview. Hiện tại, nó bị giới hạn trong các JavaScript full stack environment. Vì vậy, tôi nghĩ bạn có thể chọn giữa Next.js, Angular. Cũng có các khối xây dựng XR nếu bạn đang xây dựng cho các trải nghiệm web VR kiểu lớp học. Vì vậy, bạn cứ thoải mái chạy một trong số này ngay bây giờ, hoặc bạn cũng có thể clone life jupebox DJ mà tôi đã chia sẻ với bạn trước đó và bạn có thể thử nó. Sẽ mất một chút thời gian và bạn sẽ nghe thấy một tiếng chuông nhỏ khi nó sẵn sàng.

Tài liệu API và Kỹ năng Lập trình Tác nhân

Trong thời gian chờ đợi, chúng ta có thể làm là, nếu bạn truy cập vào tài liệu Gemini Life API, Gemini Life API, đây rồi. Bạn biết đấy, chúng ta đã làm điều này, chúng ta đã thử nghiệm life API trong Google AI Studio. Và chúng ta cũng có thể sử dụng các coding agent skill. Phil đã trình bày điều này cho bạn trước đó. Chúng ta có các coding agent skill chuyên dụng cho Gemini Life API nữa. Vì vậy, bạn có thể cài đặt nó, nó sẽ giúp tác nhân coding của bạn tích hợp life API dễ dàng hơn, nhanh hơn. Nhưng bên cạnh đó, chúng ta cũng có các example app cũ tốt trên GitHub, có thể rất hữu ích.

Triển khai Ứng dụng Ví dụ từ GitHub

Vì vậy, những gì bạn có thể làm là clone các example app này. Trên GitHub, bạn biết đấy, bạn có thể clone nó như bạn làm trên GitHub, phải không? Vì vậy, chúng ta sẽ mở một terminal mới và vâng, hãy cứ làm theo. Tôi sẽ phóng to nó. Tôi sẽ tạo một thư mục mới, chúng ta sẽ gọi nó là AI and Europe. Tôi thích cách họ gọi nó là Europe, phải không? Nhưng ý tôi là, tôi đoán là UK là một phần của Europe nhưng không phải là EU, hợp lý thôi. Và vì vậy, chúng ta sẽ vào đó và sau đó chúng ta sẽ thực hiện git clone ứng dụng của mình.

Hai Phương pháp Thiết lập Kết nối: Server-to-Server và Client-to-Server

Giờ đây chúng ta đã có ứng dụng của mình ở đây. Thực ra có một vài ví dụ khác nhau mà chúng ta có thể sử dụng ở đây. Nếu bạn đang sử dụng anti-gravity, có một lệnh GY tiện lợi để mở các ví dụ của bạn trong anti-gravity. Và vì vậy, chúng ta có thể xem các ví dụ khác nhau của mình ở đây và cách chúng ta cần thiết lập nó.

1. Phương pháp Server-to-Server

Chúng ta có hai kịch bản khác nhau. Ví dụ Gemini Life GenAI Python sử dụng Gemini Life API trên máy chủ. Nó tạo một kết nối WebSocket từ máy chủ của bạn đến Gemini Life API. Và sau đó, trên front end của bạn, bạn về cơ bản thiết lập một proxy để proxy kết nối WebSocket đến client side của bạn, phải không? Bởi vì cửa sổ trình duyệt của bạn là client của bạn. Và đó là thứ đang thu thập nguồn cấp âm thanh và nguồn cấp video của bạn.

Trong ví dụ này, đang sử dụng FastAPI, chúng ta về cơ bản chỉ thiết lập một WebSocketclient của chúng ta có thể kết nối. Và sau đó chúng ta về cơ bản chỉ nhận các tín hiệu âm thanh, tín hiệu video từ phía client hoặc, bạn biết đấy, tín hiệu nhập văn bản của chúng ta. Và vì vậy, chúng ta nhận được điều đó, sau đó chúng ta thiết lập một life session. Vì vậy, chúng ta đang sử dụng Gemini client của mình. Chúng ta đã trừu tượng hóa tất cả các thứ life API vào tệp Gemini Life này. Và bạn có thể thấy, như khi bắt đầu session, chúng ta về cơ bản thiết lập life connect config của mình. Có lẽ tôi sẽ đóng cái này lại bây giờ để bạn có thể thấy rằng chúng ta đang thiết lập một số system instruction. Đó là, bạn biết đấy, trước đó đã đặt một trợ lý hữu ích. Chúng ta cũng đã nói về việc nói giọng Ailen thân thiện, chẳng hạn. Bạn biết đấy, đây là nơi chúng ta đẩy system instruction của mình, hàng rào bảo vệ của mình. Chúng ta có thể làm cho nó khá dài về việc bao gồm những gì chúng ta muốn. Và sau đó chúng ta có thể định nghĩa tool của mình ở đây. Và sau đó chúng ta về cơ bản thiết lập session của mình, và session của chúng ta là WebSocket session. Và sau đó chúng ta chỉ nhận các tín hiệu âm thanh và video từ phía clientproxy chúng qua.

Đó là một phương pháp, đó là phương pháp server to server. Và, bạn biết đấy, chúng ta chỉ sử dụng UV ở đây. Vì vậy, nếu chúng ta thiết lập điều này lần đầu tiên, chúng ta có thể vào. Đây là ví dụ Gemini Life GenAI Python của chúng ta ở đây. Vì vậy, chúng ta có thể thiết lập virtual environment của mình. Sau đó chúng ta có thể kích hoạt nguồn của mình ở đây. Chúng ta có thể cài đặt các dependencies của mình.

Thiết lập Khóa API và Biến Môi trường

Được rồi, tôi có thể đã... đây là phần thú vị của bảo mật máy tính xách tay Google. Thôi nào, được rồi, cứ nhìn đi, đừng nhìn, chỉ nhìn cái đó thôi. Và sau đó, vâng, cài đặt các requirements của chúng ta. Và vì vậy chúng ta sẽ cần một API key. API key bạn có thể thấy ở đây cách cấu hình. Vì vậy, chúng ta về cơ bản chỉ cần Gemini API key của mình và chúng ta cần thiết lập một environment variable cho nó. Vì vậy, bạn có thể thấy chúng ta có một tệp ví dụ ở đây, không có nhiều trong đó vì về cơ bản chỉ có vậy. Vì vậy, chúng ta có thể sao chép tệp .env.example của mình vào tệp .env của chúng ta ở đây. Và sau đó bạn nhớ cách lấy API key của mình ở đâu không? Bạn lấy API key của mình ở đâu? Vâng, AI.dev. Được rồi, tuyệt vời, rất thích nó. AI.dev. Đó là nơi bạn lấy API key của mình. Tôi nghĩ tôi có một vài API key nên mất một chút thời gian để tải chúng ở đây. Cái nào có lẽ chúng ta sẽ sử dụng cái này. Vì vậy, một khi bạn đã tạo API key của mình, bạn có thể sao chép API key từ đây. Trong khi thực ra có lẽ tôi nên tạo một cái mới vì sau này tôi sẽ cần xóa cái này.

Vì vậy, chúng ta sẽ thấy AI and Europe, chúng ta sẽ có một vài project ở đây. Chúng ta sẽ chỉ sử dụng cái nào, cái nào chúng ta sẽ sử dụng? Quá nhiều project. Được rồi, chúng ta sẽ chỉ sử dụng cái này. Và bây giờ tôi thực sự không thích chúng ta trả về API key rõ ràng ở đây. Tôi nghĩ chúng ta đã học được điều gì đó hôm nay. Được rồi, chúng ta đã lưu cái đó. Và bây giờ chúng ta đã thiết lập API key của mình.

Chạy Demo Server-to-Server

Và bây giờ những gì chúng ta có thể làm là chúng ta có thể chạy demo của mình. Và đó chỉ là main.py. Và bây giờ demo của chúng ta sẽ hoạt động trên localhost:8000 ở đây. Và vì vậy, chúng ta có thể thấy nó chỉ là một demo cơ bản. Và khi chúng ta kết nối, "Chào buổi sáng! Tôi là Gemini Lloyd. Tôi muốn trình bày cho bạn một demo nhỏ về những gì API này có thể làm. Tại sao không thử một số tính năng thú vị như nghe tôi nói với các giọng khác nhau? Tôi có thể thấy bạn ổn, bạn đang ngồi đó với hai tay trên mặt, nhìn thẳng vào tôi, nhưng tôi không chắc. Này, tôi muốn nói tiếng Đức với bạn. Làm thế nào tôi có thể giúp bạn? Đừng cảm ơn tôi, tôi có thể rửa mặt, AI". Vì vậy, bạn có một chắc chắn là tìm thấy tôi bây giờ. Đó là, đó là thông minh, nhưng cái này tôi đang hỏi, xin lỗi, tôi vâng, vâng, nhưng nó không phiên âm đúng.

Chúng ta đang tìm ra rất nhiều điều để cải thiện, điều này rất hay. Nhưng vâng, những gì chúng ta có thể thấy là, bạn thực sự có thể nhận thấy rằng độ trễ (latency) hơi tệ hơn vì chúng ta thực sự có bước nhảy từ client sang máy chủ của chúng ta. Tôi rất muốn đổ lỗi cho Wi-Fi nhưng với thiết lập server to server, bạn chỉ có thêm độ trễ khi phải đi qua client của bạn.

2. Phương pháp Client-to-Server với Ephemeral Tokens

Những gì chúng ta có thể làm là chúng ta có thể đi trực tiếp từ client của chúng ta đến máy chủ. Và đây là ví dụ khác mà chúng ta có, đó là ví dụ này ở đây sử dụng ephemeral tokens. Với ephemeral tokens, chúng ta có thể chỉ cần xem xét thiết lập ở đây, rất giống. Thực ra, hãy để tôi mở một terminal mới ở đây. Vì vậy, chúng ta sẽ nói ephemeral tokens.

Ephemeral tokens về cơ bản là các mã thông báo có thời gian tồn tại ngắn mà chúng ta tạo bằng API key của mình ở phía máy chủ. Và sau đó chúng ta gửi mã thông báo ephemeral đó đến client của chúng ta, bạn biết đấy, điện thoại hoặc trình duyệt của chúng ta, để sau đó khởi tạo kết nối WebSocket trực tiếp từ client đến life API.

Thiết lập tương tự ở đây. Chúng ta muốn một virtual environment. Sau đó chúng ta kích hoạt virtual environment của mình và chúng ta cài đặt các dependencies của mình. Chúng ta cũng cần API key của mình một lần nữa. Vì vậy, tôi nghĩ những gì chúng ta có thể làm là chỉ sử dụng cùng một cái. Vì vậy, chúng ta sẽ sao chép, chúng ta chỉ sao chép cái này ở đây và sau đó dán cái đó vào. Nó có đủ lớn không? Tôi không biết, mọi người có thể thấy không? Có lẽ chúng ta sẽ phóng to một chút nữa. Vì vậy, bây giờ chúng ta cũng có key của mình ở đây. Và bây giờ chúng ta đã cài đặt các dependencies của mình, chúng ta có thể chạy máy chủ của mình.

Chạy Demo Client-to-Server và Thử nghiệm Google search grounding

máy chủ của chúng ta ở đây, chúng ta có thể xem xét máy chủ nhanh chóng. máy chủ này về cơ bản chỉ là một back end rất, bạn biết đấy, mỏng chỉ có Gemini API key của chúng ta, và sau đó nó tạo ra một ephemeral token cho chúng ta. Ephemeral token hiện đang nằm trên API V1 alpha, vì vậy bạn sẽ cần thực sự sử dụng một API khác vào lúc này cho điều này. Và sau đó bạn sẽ truyền vào expiration time này bởi vì lý tưởng mà nói, bạn biết đấy, mã thông báo phải có thời gian tồn tại ngắn. Vì vậy, nếu mã thông báo bị rò rỉ, bạn biết đấy, nó sẽ không quá tốn kém vì nó sẽ hết hạn khá sớm. Vậy đó là mã thông báo của chúng ta. Và sau đó chúng ta trả mã thông báo của mình về client của chúng ta.

Trên front end của chúng ta, chúng ta có tích hợp Gemini Life của mình ở đây. Và đây là một ví dụ về tích hợp WebSocket thuần túy mà không có bất kỳ SDK nào. Vì vậy, bạn biết đấy, nếu bạn, bạn có thể sử dụng bất kỳ loại WebSocket framework nào ở đây, và bạn có thể thấy, bạn biết đấy, tất cả các sự kiện WebSocket thô khác nhau được xử lý như thế nào. Và vì vậy, bạn có thể thấy ở đây chúng ta có, bạn biết đấy, đây là WebSocket API của chúng ta. Vì vậy, ở đây chúng ta cần sử dụng V1 alpha và sau đó đây là bidibidirectional, bạn biết đấy, chúng ta đang streaming theo cả hai hướng. Và ở đây chúng ta truyền access token của mình, đó là mã thông báo có thời gian tồn tại ngắn của chúng ta. Tuyệt vời.

Vì vậy, những gì chúng ta có thể làm bây giờ là service của chúng ta đang hoạt động. Vì vậy, chúng ta có thể thấy giao diện đẹp mắt này ở đây, được làm thủ công. Bạn biết đấy, không có tác nhân nào tham gia vào việc tạo ra cái này ngày xưa. Và vì vậy, chúng ta có thể thấy tất cả các nút khác nhau mà chúng ta có. Vì vậy, chúng ta sẽ thử tính năng Google grounding này nữa và hy vọng đó chỉ là điều chúng ta cần khắc phục trong UI. Và đây là model flash life preview của chúng ta, đó là 3.1 flash life. Và sau đó chúng ta có thể kết nối ở đây.

Và vì vậy, chúng ta thấy các sự kiện máy chủ. Thực ra, có lẽ tôi sẽ làm lại điều đó. Vì vậy, chúng ta nói "enable Google search grounding, connect". Những gì chúng ta có thể thấy là thiết lập WebSocket của chúng ta. Nếu chúng ta xem xét mạng, bây giờ chúng ta thấy chúng ta có kết nối WebSocket này ở đây. Vì vậy, chúng ta thấy chúng ta có access token của mình. Vì vậy, yêu cầu mã thông báo của chúng ta đến backend. Thực ra, hãy để tôi xem cái đó. Được rồi, vì vậy bạn có thể thấy chúng ta chỉ nhận mã thông báo của mình. Phản hồi chỉ là auth token của chúng ta và khi nó hết hạn. Những gì chúng ta gửi về mặt payload, payload của chúng ta ở đâu? Được rồi, thực ra không có payload nào cả, vâng, chúng ta chỉ nhận lại một mã thông báo.

Một khi chúng ta có mã thông báo của mình, chúng ta sẽ thiết lập WebSocket của mình. Và vì vậy, chúng ta có thể thấy các tin nhắn của mình ở đây. Về cơ bản, tin nhắn đầu tiên trong WebSocket của chúng ta, chúng ta đang gửi cấu hình thiết lập của mình. Vì vậy, bạn thấy chúng ta đang gửi model của mình là Gemini 3.1 flash preview. Chúng ta có một số đầu vào thời gian thực ở đó. Chúng ta có các tool. Vì vậy, hy vọng bây giờ Google search sẽ hoạt động.

Và bây giờ những gì chúng ta có thể làm là chúng ta có thể bắt đầu âm thanh của mình. "Này, bạn có thể nghe thấy tôi không?" "Vâng, tôi có thể nghe thấy bạn rất rõ. Tôi có thể giúp gì cho bạn hôm nay?" "Ừm, tôi đang ở London ngay bây giờ và tôi tự hỏi liệu tôi có cần một chiếc ô không. Thời tiết hôm nay thế nào?" "Tôi không nhận được thời tiết hiện tại cho London ngay bây giờ, xin lỗi về điều đó. Cách tốt nhất của bạn có lẽ là nhanh chóng kiểm tra ứng dụng thời tiết trên điện thoại hoặc tìm kiếm trực tuyến, điều đó sẽ cung cấp cho bạn thông tin mới nhất về mưa." "Ồ, bạn đang giết tôi đấy, chỉ cần sử dụng Google search!" "Tôi xin lỗi, tôi dường như đang gặp một số khó khăn khi tìm kiếm thông tin đó ngay bây giờ. Tôi biết điều đó thật bực bội. Bạn có thể dễ dàng nhận được dự báo bằng cách chỉ cần hỏi điện thoại hoặc tìm kiếm trực tuyến. Tôi sẽ cố gắng khắc phục điều này ở phía tôi." "Tôi hiểu sự thất vọng của bạn. Đôi khi công nghệ khiến chúng ta gặp trục trặc và tôi xin lỗi vì tôi không thể lấy được thời tiết đó cho bạn ngay bây giờ. Tôi luôn học hỏi, vì vậy hy vọng lần sau mọi thứ sẽ suôn sẻ hơn. Tôi có thể giúp gì khác cho bạn không?" Được rồi, điều đó thật đau đớn.

Vấn đề với Demo và Công cụ Tùy chỉnh

[transcript bị gián đoạn] Vâng, tôi xin lỗi về điều đó. Chắc chắn là có vấn đề gì đó không ổn. Không hay chút nào. Hãy xem liệu chúng ta có may mắn hơn với các công cụ tùy chỉnh không. Chúng ta cũng đang chuyển vào... liệu chúng ta có chuyển vào một số công cụ tùy chỉnh không, hay thực sự có vấn đề gì đó với... "Này, bạn có thể cho tôi xem một cảnh báo hello world không?" Đây rồi, một cảnh báo hello world đã được hiển thị. "Có cần giúp gì nữa không?" "Có, bạn có thể đổi màu nền của trang thành xanh lá cây không?" "Được thôi, màu nền bây giờ sẽ là xanh lá cây. Hãy cho tôi biết nếu bạn cần gì khác." "Có, bạn có thể cho tôi biết thời tiết hiện tại ở London như thế nào không?" "Tôi hiểu là bạn đang hỏi về thời tiết ở London, nhưng thật không may, tôi không thể tìm kiếm thông tin nền tảng trên Google (google grounding)." Nhưng vì lý do nào đó, nó... Vâng, với khả năng grounding của Google, nó sẽ hoạt động. Vậy tôi tự hỏi liệu mình có làm sai gì không, ở đâu? "Thông tin thời tiết không phải là thứ tôi có thể lấy ngay bây giờ, nhưng nếu bạn có bất kỳ câu hỏi nào khác hoặc cần giúp đỡ với các chức năng khác, đừng ngần ngại hỏi."

Hãy thử lại lần nữa. "Này, bạn có nghe thấy tôi không?" Vâng, chúng ta cần một ít âm thanh. "Này, bạn có thể đổi màu nền trở lại màu trắng không?" "Ước gì tôi có thể, nhưng tôi không thực sự có quyền kiểm soát cài đặt hiển thị của bạn. Bạn có thể cần xem trong menu cài đặt thiết bị để thay đổi điều đó. Có cần giúp gì khác không?" "Ồ xin lỗi, màu nền của trang web trở lại màu trắng." "Ồ, tôi hiểu. Đáng buồn là tôi vẫn không thể thay đổi điều đó cho bạn. Những cài đặt giao diện đó là một phần của trang web hoặc ứng dụng bạn đang sử dụng." "Ồ vâng, bạn đúng rồi." Nhưng được rồi, các công cụ tùy chỉnh đã được kích hoạt thì không nên như vậy nữa. Được rồi, và còn rất nhiều việc phải làm.

Hướng dẫn Bắt đầu và Khắc phục sự cố

Đây là cách bạn có thể bắt đầu. Có ai đã chạy được nó trên máy của họ chưa? Vâng, chức năng tìm kiếm trên Google (Google search grounding) có hoạt động không? Điều đó thật đáng tiếc. Được rồi, chúng ta còn gì nữa? Chúng ta cần sửa rất nhiều điều rút ra từ đây. Vâng, nếu bạn chưa nhận được liên kết, đây là liên kết đến các ví dụ Life API. Chúng cũng được liên kết từ tài liệu, vì vậy nếu bạn truy cập tài liệu Gemini Life API, bạn có thể tìm thấy chúng ở đó. Đó có phải là cuối bài trình bày của tôi không? Tôi nghĩ chúng ta còn có các kỹ năng của tác nhân (agent skills). Vì vậy, nếu bạn chỉ cần vào tài liệu Gemini Life docs, Gemini Life API và trên tài liệu chính, chúng tôi đã liên kết nó từ trên cùng ở đó: "Hãy thử Life API", "Google AI Studio", các ví dụ GitHub hoặc "sử dụng kỹ năng mã hóa". Vâng, đó là cách bạn có thể bắt đầu. Tuyệt vời. Đó không phải là cách tôi hy vọng mọi chuyện sẽ diễn ra. Vâng, chúng tôi sẽ tìm ra những gì đã sai ở đó. Nhưng vâng, cảm ơn tất cả các bạn đã tham gia và vâng, chúng tôi sẽ trả lời các câu hỏi.

Quản lý Phiên và Nén Ngữ cảnh

Vâng, bạn có thể xem xét loại quản lý phiên (session management). Vì vậy, thực sự có một loại... Life API có một tính năng nén cửa sổ ngữ cảnh (context window compression). Vì vậy, không có nén, các phiên chỉ có âm thanh (audio only sessions) bị giới hạn trong 15 phút; các phiên âm thanh-video (audio video sessions) bị giới hạn trong hai phút. Điều đó có nghĩa là phiên sẽ kết thúc (terminate), nó sẽ cung cấp cho bạn một loại điểm số. Và điều bạn có thể làm là bật tính năng nén cửa sổ ngữ cảnh. Nén cửa sổ ngữ cảnh giống như một cửa sổ trượt (sliding window) mà bạn cơ bản nói: "Tôi muốn giữ bấy nhiêu ngữ cảnh (context) trong cửa sổ của tôi." Và khi cuộc trò chuyện tiến triển, nó sẽ thực sự quên đi ngữ cảnh trước đó nằm ngoài cửa sổ đó. Vì vậy, vâng, nén cửa sổ ngữ cảnh là thứ bạn có thể bật để có cửa sổ trượt đó nhằm kéo dài các phiên. Nhưng sau đó, chỉ có bấy nhiêu ngữ cảnh tùy thuộc vào tốc độ khung hình (frame rate) mà bạn đang đưa vào dưới dạng hình ảnh. Vâng, chủ yếu là hình ảnh. Âm thanh thì trong các phiên chỉ có âm thanh, có nhiều ngữ cảnh hơn bạn có thể giữ trong cửa sổ. Nhưng khi bạn thêm các khung video vào đó, nó sẽ nén.

Các Trường hợp Sử dụng Thực tế

Có bất kỳ trường hợp sử dụng thực tế nào mà điều này đang được áp dụng không? Điều đó rất sáng tạo từ góc độ kinh doanh. Những gì bạn đã làm hôm nay rất thú vị, nhưng áp dụng nó vào kinh doanh, có bất kỳ doanh nghiệp nào đang làm điều này thực sự tốt ngay bây giờ không? Vâng, tôi nghĩ Shopify đang triển khai nó với Shopify Cycic. Có một số... thực sự có một cái tôi rất thích, nếu bạn xem blog Gemini Life API, chúng tôi có một trường hợp nghiên cứu là startup này. Vâng, Stitch cũng đang sử dụng nó. Bạn có thể mã hóa theo tâm trạng (vibe code), thiết kế theo tâm trạng (vibe designed) bằng giọng nói của mình với Stitch. Nhưng Stitch được xây dựng bởi Google, vì vậy bạn có thể đã được giảm giá. Waymo cũng đang tích hợp nó, vì vậy chúng tôi đã loại bỏ tài xế và xe hơi, và sau đó nếu bạn muốn nói chuyện với ai đó trong xe, bạn có thể nói chuyện với Gemini trong tương lai. Họ đang làm việc về điều đó.

Tôi thích cái này: "Hey Ado". Đó là một startup tuyệt vời từ Argentina. Họ đang xây dựng những người bạn đồng hành bằng giọng nói (voice companions) cho người lớn tuổi kết hợp với một ứng dụng cho những người chăm sóc hoặc con cái của người lớn tuổi, nơi họ có thể nhận được thông báo. Vâng, nếu người lớn tuổi lẩm bẩm về điều gì đó không... nhưng đó là một tương tác thực sự hay, nơi tính đa ngôn ngữ (multilinguality) thực sự tỏa sáng, bởi vì ở Argentina, rất nhiều người sẽ nói tiếng Tây Ban Nha. Nhưng có một ví dụ hay mà bạn có thể xem xét, điều đó thực sự ngọt ngào. "Tôi đến thăm bà Maria của tôi." Bạn có thể xem nó vào thời gian của riêng mình. Và sau đó tôi nghĩ có một cái khác.

Hạn chế và Sẵn sàng cho Doanh nghiệp

Vâng, đây là một trường hợp sử dụng hơi mang tính tương lai, chỉ để xem xét những điểm chưa hoàn thiện (rough edges) và hạn chế. Và tôi nghĩ hiện tại, nếu bạn đang ở trong một trường hợp sử dụng kinh doanh thực tế, bạn có thể sẽ tốt hơn với một cascading pipeline vì nó mang lại cho bạn khả năng quan sát (observability) ở mỗi bước của quy trình. Điều mà với âm thanh gốc thời gian thực (real-time native audio), bạn không thực sự có được khả năng kiểm soát chi tiết (fine-grained control) và khả năng quan sát đó về mặt việc tích hợp vào, ví dụ, viết lại phản hồi trước khi nó được nói ra. Rõ ràng có một số lợi ích với điều đó về mặt luồng tự nhiên của cuộc trò chuyện, nhưng đối với một số trường hợp sử dụng kinh doanh, nó có thể chưa phù hợp. Vì vậy, nó hơi là một cái nhìn về tương lai về các tương tác đàm thoại thời gian thực sẽ trông như thế nào trong tương lai. Nhưng vâng, tùy thuộc vào trường hợp sử dụng kinh doanh của bạn ngày hôm nay, nó có thể chưa phải là lựa chọn tốt nhất.

Lưu trữ Dữ liệu Phiên

Không, trong phiên, bạn không thể truy xuất chúng, vì vậy bạn sẽ phải lưu trữ chúng ở phía bạn. Một lần nữa, đó là nơi các đối tác tích hợp (integration partners) xuất hiện. Vì vậy, nếu... vâng, Life Kit, Pipecats, tất cả đều có các giải pháp rất tốt để lưu trữ toàn bộ âm thanh cũng như toàn bộ bản ghi và cung cấp cho bạn các công cụ khả năng quan sát (observability tooling) bổ sung trên đó. Vì vậy, đó không phải là thứ có sẵn hoàn toàn từ phía Google, đó là điều mà hiện tại chúng tôi đang dựa vào các tích hợp đối tác để cung cấp cho bạn chức năng bổ sung đó.

Thảo luận về Sử dụng trong Tuyển dụng và Nhận dạng Người nói

Ồ xin lỗi, phía sau bạn. Được rồi. Vậy bạn nói rằng điều này không hoàn toàn sẵn sàng cho doanh nghiệp đối với các trường hợp sử dụng phức tạp hơn, nhưng bạn nghĩ sao, ví dụ, về việc thay thế các cuộc phỏng vấn tuyển dụng bằng cách sử dụng công cụ này? Vâng, tôi không chắc mình sẽ thay thế toàn bộ quy trình phỏng vấn của bạn bằng điều đó, nhưng tôi nghĩ đó là một kịch bản tuyệt vời, bạn biết đấy, cho một số bước nhất định trong quá trình phỏng vấn hoặc có thể sàng lọc nhiều ứng viên hơn, chẳng hạn. Vâng, tôi nghĩ điều đó đã sẵn sàng. Bởi vì có rất nhiều ngữ cảnh mà bạn cũng muốn cung cấp cho nó, phải không? Đặc biệt ngay cả khi đó là màn sàng lọc đầu tiên hoặc các màn sàng lọc nhanh mà bạn đang đề cập, bạn vẫn muốn đưa ra một số tiêu chí sẽ hướng dẫn và các hàng rào bảo vệ (guardrails) để hướng dẫn cuộc trò chuyện.

Và phần thứ hai của điều này cũng là cách làm việc, ví dụ, nếu công ty của tôi ở trong môi trường Google, Google Meet, thì ngay bây giờ chúng tôi có bản ghi tự động. Bạn có thể kết hợp các công cụ này lại với nhau không? Vâng, đó là một bản xem trước, vì vậy bạn có thể sử dụng nó trong sản xuất. Tùy thuộc vào trường hợp sử dụng của bạn, tôi nghĩ bạn cần đánh giá xem bạn có cần SOC 2 không. Có thể có một loạt các thứ bạn cần xây dựng xung quanh nó để nó thực sự phù hợp với trường hợp sử dụng kinh doanh của bạn. Vì vậy, vâng, nó đã sẵn sàng cho thử nghiệm. Điều đó có giúp ích không? Vâng.

Ồ vâng. Một vấn đề tôi luôn gặp phải khi trình diễn các tác nhân giọng nói là có rất nhiều người nói chuyện và nó không thể phân biệt được người nói với nhau. Vậy đã có giải pháp cho vấn đề này chưa? Về việc xác định các người nói khác nhau, phải không? Vâng, và nó chỉ nghe bạn nếu đó là tác nhân của bạn chẳng hạn. Ồ, thú vị. Nó chỉ nghe bạn. Hãy tưởng tượng bạn có một tác nhân mã hóa và ai đó nói đùa và nói "xóa tệp" hoặc những thứ tương tự. Bạn không muốn điều đó. Vâng, điều đó thú vị. Không, tôi không nghĩ có bất kỳ khả năng cụ thể nào để nói "chỉ nghe tôi". Vì vậy, có một loại âm thanh chủ động (proactive audio) mà bạn có thể yêu cầu nó chỉ phản hồi trong một số ngữ cảnh nhất định, ví dụ: bỏ qua những thứ không liên quan đến cuộc trò chuyện. Vì vậy, đến một mức độ nào đó thì điều đó hoạt động, nhưng tôi không nghĩ nó siêu đáng tin cậy ở thời điểm hiện tại khi bạn nói "chỉ nghe tôi, bỏ qua bất kỳ ai khác". Tôi đã làm điều đó với Parakeet của Nvidia, nơi bạn có thể đào tạo trong 10 giây và nó có thể phân biệt được người nói theo cách đó, nhưng sẽ rất tuyệt nếu có thứ gì đó như bạn nói chuyện với nó và sau đó nó nhận ra giọng nói của bạn, và bỏ qua các giọng nói khác trong phần còn lại của phiên. Điều đó tuyệt vời. Đó là một ý tưởng tuyệt vời. Vâng, cảm ơn.

Quá trình Tư duy và Đa phương thức

Vâng, tôi nghĩ trong... vâng, quá trình suy nghĩ trông như thế nào? Nó suy nghĩ bằng văn bản hay cũng suy nghĩ bằng lời nói? Vâng, bạn chỉ nhận được quá trình suy nghĩ dưới dạng văn bản. Có các sự kiện văn bản (text events) trên kênh web socket mà... vì vậy bạn có thể chọn nhận quá trình suy nghĩ dưới dạng văn bản. Vâng, nó sẽ không nói ra quá trình suy nghĩ. Vâng, cảm ơn vì bản demo và vì đã dũng cảm đối đầu với các vị thần demo. Tôi có một câu hỏi nhỏ về khía cạnh đa phương thức (multimodality). Một trong những lĩnh vực mà tôi thực sự muốn có các mô hình chuyển lời nói thành văn bản (speech-to-text models) tốt là có chúng được grounding (dựa trên) những gì tôi đang nhìn, giống như khi tôi mã hóa, tôi chỉ muốn, bạn biết đấy, "xả lời" vào Cursor (hoặc anti-gravity) và khiến nó hiểu ngữ cảnh. Và khi tôi nói thứ gì đó là tên lớp cụ thể, nó nên thực sự sử dụng điều đó. Điều đó hoạt động như thế nào trong khung làm việc (framework) này? Điều này có phải là một cách để thực sự làm điều đó grounding không, hay bạn sẽ đề xuất một API nào khác cho điều đó?

Và điều này dành cho... vì vậy các mô hình Gemini nói chung rất giỏi trong việc hiểu âm thanh. Vì vậy, nếu trường hợp sử dụng của bạn không yêu cầu phiên âm thời gian thực hoàn toàn, tôi thực sự khuyên bạn nên sử dụng Gemini 3 Flash để cơ bản phiên âm nhưng cũng lấy ngữ cảnh và cơ bản có được bản phiên âm nhận biết ngữ cảnh. Vâng, có... vì vậy tôi nghĩ tùy thuộc vào trường hợp sử dụng của bạn, nếu bạn cần nó hoàn toàn đàm thoại thời gian thực, thì vâng, bạn có thể sử dụng văn bản để tiếp nhận đầu vào bổ sung hoặc hình ảnh nếu nó có ý nghĩa. Nhưng sau đó, điều đó làm giảm kích thước cửa sổ ngữ cảnh. Hoặc nếu bạn không cần hoàn toàn thời gian thực, thì việc sử dụng Gemini, chỉ Flash để phiên âm thực sự khá tốt.

Đầu vào đầu tiên là nói trong năm giây và không gửi thêm hình ảnh, thì bạn không sử dụng quá nhiều ngữ cảnh. Tôi nghĩ một hình ảnh là khoảng 1200 mã thông báo (token), không quá nhiều. Vì vậy, nếu bạn đang ở trong trình chỉnh sửa của mình, bạn muốn thời gian thực, bạn cơ bản có thể sử dụng API. Đầu vào đầu tiên là gửi hình ảnh thời gian thực và sau đó gửi âm thanh thời gian thực, và sau đó bạn dừng lại cơ bản. Và mô hình có đầu vào hình ảnh và đầu vào âm thanh và có thể phản hồi nó. Vậy bạn có...

Khả năng cá nhân hóa dựa trên kiến thức người dùng

Không cần truyền hình ảnh liên tục nếu nó không thay đổi hoặc nếu bạn không cần nó phải phản ứng. Vâng, hay đấy. Vâng, tôi nghĩ chúng ta còn một chút thời gian. Ở phía sau, làm thế nào để chúng tôi đưa micro cho bạn, hay bạn chỉ muốn nói lớn? Vâng, được thôi. Cảm ơn vì bài thuyết trình thú vị của bạn. Tôi có một câu hỏi về cá nhân hóa hoặc khả năng thích ứng. Liệu nó có thể nhận diện trình độ hay kiến thức của người nói trong quá trình tương tác và sau đó, dựa trên kiến thức của người nói, đưa ra kết quả không? Xin lỗi, bạn có thể nhắc lại không? Liệu nó có thể nhận diện kiến thức hoặc nền tảng của người nói trong quá trình tương tác để đưa ra phản hồi dựa trên kiến thức của người nói, hay điều gì đó tương tự, để tự cá nhân hóa? Vậy bạn muốn đưa vào một loại ngữ cảnh ban đầu, phải không? Không phải ngữ cảnh. Ví dụ, giả sử tôi đang nói về kỹ thuật xây dựng dân dụng, liệu nó có thể nhận ra tôi là một kỹ sư xây dựng dân dụng và dựa trên kiến thức của tôi, đưa ra kết quả, sử dụng các từ khóa nâng cao trong kỹ thuật xây dựng dân dụng, hay không dựa trên kiến thức của tôi?

Xử lý ngữ cảnh và cá nhân hóa liên tục

Vậy thì, nếu đó là kiến thức chuyên biệt, bạn sẽ phải cung cấp cách để nó truy cập vào. À, vậy là nó không có bộ nhớ để nhận diện nền tảng của con người hoặc để tìm ra ngữ cảnh chính của tương tác và dựa vào đó để đưa ra kết quả tiếp theo? Bạn phải bằng cách nào đó cung cấp kiến thức đó cho nó. Bạn có thể làm điều đó trước khi thiết lập phiên, bạn có thể đưa kiến thức vào như một ngữ cảnh ban đầu chẳng hạn, và sau đó nó có ngữ cảnh đó để thảo luận, hoặc bạn sẽ cung cấp cho nó các function call để truy cập kiến thức trong suốt phiên giao tiếp. Vâng, cảm ơn. Bạn biết đấy, tôi đã tìm hiểu và thấy rằng, ví dụ, trong một số lượt tương tác, GPT có thể tìm ra kiến thức của người nói hoặc người dùng hoặc khái niệm chính của thông tin, và dựa vào đó, GPT có thể tạo ra một số kết quả. Điều đó có nghĩa là từng bước, dần dần nó được cá nhân hóa theo ngữ cảnh chính của cuộc hội thoại. Vậy câu hỏi của tôi là, liệu nó có thể từng bước tự cá nhân hóa theo ngữ cảnh chính của tương tác và sau đó đưa ra kết quả không? Vâng, miễn là ngữ cảnh đó nằm trong cửa sổ ngữ cảnh trong suốt cuộc hội thoại đó, thì nó có thể làm được. Nó có thể nhận diện các người nói khác nhau và phần nào ghi nhớ những gì đã được nói trong cuộc hội thoại. Và nếu họ tự giới thiệu tên của mình, nó cũng có thể nhớ tên người đó. Vâng, đó là một phần của khả năng hiểu âm thanh trong Gemini.

Đánh giá ứng dụng giọng nói trực tiếp trong môi trường doanh nghiệp

Cảm ơn. Được, hay đấy. Vâng, chỉ muốn chuyển micro sang bên đó. Vâng, cảm ơn vì bài thuyết trình hay. Bạn có thể chia sẻ kinh nghiệm của mình về cách đánh giá các ứng dụng giọng nói trực tiếp này không? Vì tôi hình dung điều này sẽ phức tạp hơn nhiều so với các ứng dụng thông thường. Vâng, điều đó chắc chắn phụ thuộc vào trường hợp sử dụng của bạn, về các yêu cầu của bạn, như liệu bạn có tuân thủ HIPAA không? Bạn có SOC 2 không? Số lượng function call là bao nhiêu? Số lượng hàng rào bảo vệ là bao nhiêu? Vì vậy, chắc chắn có rất nhiều điều. Các bản demo này rất hay và thú vị, nhưng để đưa nó vào ngữ cảnh kinh doanh thực tế, chắc chắn có rất nhiều bước phức tạp hơn. Và đó là nơi các tích hợp đối tác phát huy tác dụng. LifeKit đã xây dựng toàn bộ doanh nghiệp của họ xung quanh việc cung cấp cho bạn tất cả các công cụ cần thiết cho các tác nhân giọng nói. Vì vậy, tôi khuyên bạn nên xem xét các tích hợp đối tác cho các trường hợp sử dụng kinh doanh thực tế. Cảm ơn.

Khả dụng của Interactions API trên Vertex và chủ quyền dữ liệu

Chắc chắn rồi. Vâng, tôi hy vọng bạn không phiền nếu tôi hỏi một câu hỏi đơn giản về Interactions API, quay lại bài nói trước đây của tôi. Vâng, xin mời. Khi nào nó có thể khả dụng trên Vertex? Hy vọng là sớm. Ý tôi là, nếu bạn nói chuyện với ai đó ở Google Cloud, ai đó ở Vertex, bạn càng nói với họ rằng bạn cần nó trên Google Cloud, thì mọi việc sẽ càng dễ dàng hơn. Chúng tôi sẽ làm. Vâng, ít nhất điều đó không nằm trong tầm kiểm soát của chúng tôi. Được rồi, vâng, điều đó tệ, điều đó tốt. Ý tôi là, API sẽ giống nhau, vì vậy bạn có thể bắt đầu ngay hôm nay trên Gemini API, bắt đầu thử nghiệm. Nếu bạn cần rate limit cao hơn hoặc bất cứ điều gì khác, bạn luôn có thể liên hệ. Nếu bạn cần các tính năng dành riêng cho doanh nghiệp của Vertex, thì bạn có thể cần đợi một chút. Tôi có thể hỏi, về PII (Thông tin nhận dạng cá nhân) trong bất kỳ lịch sử cuộc hội thoại nào, nó được lưu trữ như thế nào về chủ quyền dữ liệu? Bạn có thể chỉ định nguồn dữ liệu của riêng mình không, hay tất cả đều được xử lý ở backend trong API? Bạn luôn có thể tắt tính năng lưu trữ bất cứ điều gì. Chúng tôi có một cờ store=false, vì vậy chúng tôi sẽ không lưu trữ bất cứ điều gì. Nhưng việc không lưu trữ có nghĩa là không có trạng thái phía máy chủ (server-side state). Vì vậy, nếu bạn muốn sử dụng tính năng này, sẽ hơi khó khăn đối với các tính năng Vertex khác. Về chủ quyền dữ liệu nơi bạn gọi model, tôi mong đợi chúng sẽ tương tự như việc tạo nội dung. Vì vậy, nếu họ có nó ngày hôm nay, họ cũng sẽ có nó ở đó trong tương lai. Được rồi, tuyệt vời, cảm ơn, tôi rất trân trọng.

Xử lý hiện tượng tạo "ảo giác" trong môi trường sản xuất

Tuyệt, một câu hỏi cuối cùng. Ồ, được rồi. Ồ, xin lỗi. Không sao. Xin mời, cảm ơn. Vậy tôi có một câu hỏi về ảo giác. Chúng ta đang thảo luận về ảo giác. Bạn đã trình bày một số ví dụ về thời tiết không hoạt động tốt lắm. Nhưng khách hàng của bạn thực sự xử lý vấn đề đó trong môi trường sản xuất như thế nào? Bởi vì tôi có thể hình dung rằng đối với một số ví dụ chúng ta đã thấy ở đây, điều này không sao, nhưng trong đời thực, đó là một câu chuyện khác. Vậy bạn có thể đưa ra một số phương pháp hay nhất hoặc cách giải quyết vấn đề đó không? Vâng, chắc chắn rồi. Đối với các bản demo, chắc chắn có sự thiếu hụt các phương pháp hay nhất về lời nhắc hệ thống. Và bạn biết đấy, có rất nhiều điều bạn có thể làm với lời nhắc hệ thống tốt hơn để tác nhân thực sự tuân theo các lời nhắc hệ thống và không đi chệch hướng hay tạo ra "ảo giác" về thời tiết chẳng hạn. Và vâng, tôi nghĩ chúng tôi có một số tài liệu về các phương pháp hay nhất, vì vậy tôi khuyên bạn nên xem qua chúng. Chúng tôi cũng có một ví dụ về cách cấu trúc lời nhắc hệ thống của bạn và đặt hàng rào bảo vệ vào các hướng dẫn của chúng, cũng như các định nghĩa công cụ. Và một khi bạn đã xây dựng được điều đó, tác nhân sẽ hoạt động tốt hơn rất nhiều trong việc tuân theo các lời nhắc hệ thống và giữ vững trong các tham số đó. Tuyệt vời, tuyệt vời. Vâng, rất cảm ơn mọi người. Tôi xin lỗi vì những trục trặc, nhưng chúng tôi đã học được điều gì đó và sẽ cải thiện. Nhưng vâng, chúng tôi rất muốn tất cả các bạn dùng thử và hãy cho tôi biết trong vài ngày tới. Tôi sẽ ở đây để nghe những gì bạn tìm thấy và phản hồi của bạn. Cảm ơn, xin chào!

Góp ý / Báo lỗiPhát hiện sai sót hoặc có ý tưởng cải thiện?