Xây dựng ứng dụng trong kỷ nguyên AI

1. Tổng quan

Trong phòng thí nghiệm này, bạn sẽ sử dụng các sản phẩm AI tạo sinh của Google để xây dựng cơ sở hạ tầng trong Google Cloud với sự trợ giúp của Gemini Cloud Assist, truy vấn dữ liệu BigQuery bằng cách sử dụng các tính năng ngôn ngữ tự nhiên sang SQL của Data Canvas, viết mã trong sổ tay Colab Enterprise Jupyter và trong Eclipse Theia (Visual Studio Code) với sự trợ giúp của Gemini Code Assist, đồng thời tích hợp các tính năng tìm kiếm và trò chuyện bằng AI được xây dựng dựa trên các nguồn liên kết thực tế Cloud Storage và BigQuery trong Vertex AI Agent Builder.

Mục tiêu của chúng tôi là tạo ra một trang web về công thức nấu ăn và nấu nướng có tên là AI Recipe Haven. Trang web này sẽ được xây dựng bằng Python và Streamlit, đồng thời sẽ có 2 trang chính. Cooking Advice sẽ lưu trữ một chatbot mà chúng tôi tạo bằng Gemini và một nguồn cơ sở Vertex AI Agent Builder được liên kết với một nhóm sách dạy nấu ăn. Chatbot này sẽ đưa ra lời khuyên về cách nấu ăn và trả lời các câu hỏi liên quan đến việc nấu ăn. Recipe Search sẽ là một công cụ tìm kiếm do Gemini cung cấp, lần này dựa trên cơ sở dữ liệu công thức BigQuery.

Nếu bạn gặp khó khăn với bất kỳ đoạn mã nào trong bài tập này, thì giải pháp cho tất cả các tệp mã đều nằm trong kho lưu trữ GitHub của bài tập trên nhánh solution.

Mục tiêu

Trong bài thực hành này, bạn sẽ tìm hiểu cách thực hiện các thao tác sau:

  • Kích hoạt và sử dụng Gemini Cloud Assist
  • Tạo một ứng dụng tìm kiếm trong Vertex AI Agent Builder cho chatbot tư vấn nấu ăn
  • Tải và làm sạch dữ liệu trong sổ tay Colab Enterprise, với sự trợ giúp của Gemini Code Assist
  • Tạo một ứng dụng tìm kiếm trong Vertex AI Agent Builder cho trình tạo công thức
  • Lên khung cho ứng dụng web cốt lõi bằng Python và Streamlit, với sự trợ giúp của Gemini
  • Triển khai ứng dụng web lên Cloud Run
  • Kết nối trang Lời khuyên nấu ăn với ứng dụng Agent Builder tìm kiếm sách nấu ăn của chúng tôi
  • (Không bắt buộc) Kết nối trang Tìm kiếm công thức với ứng dụng Trình tạo tác nhân tìm kiếm công thức
  • (Không bắt buộc) Khám phá ứng dụng cuối cùng

2. Thiết lập và yêu cầu

Trước khi bạn nhấp vào nút Bắt đầu phòng thí nghiệm

Đọc các hướng dẫn này. Các bài thực hành có tính giờ và bạn không thể tạm dừng. Đồng hồ hẹn giờ (bắt đầu khi bạn nhấp vào Bắt đầu phòng thực hành) cho biết thời gian bạn có thể sử dụng các tài nguyên trên Google Cloud.

Phòng thí nghiệm thực hành này trên Qwiklabs cho phép bạn tự thực hiện các hoạt động trong phòng thí nghiệm trong một môi trường đám mây thực tế, chứ không phải trong môi trường mô phỏng hoặc minh hoạ. Qwiklabs sẽ cấp cho bạn thông tin đăng nhập mới, tạm thời để bạn sử dụng trong thời gian làm bài thực hành.

Bạn cần có

Để hoàn tất bài thực hành này, bạn cần:

  • Có quyền truy cập vào một trình duyệt Internet tiêu chuẩn (nên dùng trình duyệt Chrome).
  • Thời gian hoàn thành bài tập thực hành.

Lưu ý: Nếu bạn đã có Tài khoản Google Cloud hoặc dự án cá nhân của riêng mình, thì đừng sử dụng tài khoản hoặc dự án đó cho bài thực hành này.

Lưu ý: Nếu bạn đang sử dụng Pixelbook, hãy mở một cửa sổ ẩn danh để chạy lớp học này.

Cách bắt đầu bài thực hành và đăng nhập vào Google Cloud Console

  1. Nhấp vào nút Start Lab (Bắt đầu Lab). Nếu bạn cần thanh toán cho phòng thí nghiệm, một cửa sổ bật lên sẽ xuất hiện để bạn chọn phương thức thanh toán. Ở bên trái là một bảng chứa thông tin đăng nhập tạm thời mà bạn phải sử dụng cho bài thực hành này.

52e0878388c0d9ed.png

  1. Sao chép tên người dùng, rồi nhấp vào Mở Google Console. Phòng thí nghiệm sẽ tạo tài nguyên, sau đó mở một thẻ khác hiển thị trang Đăng nhập.

2a4b7165afebf5ab.png

Lưu ý: Mở các thẻ trong các cửa sổ riêng biệt, cạnh nhau.

Nếu bạn thấy trang Chọn tài khoản, hãy nhấp vào Sử dụng một tài khoản khác.

6463aa9b492a3b60.png

  1. Trong trang Đăng nhập, hãy dán tên người dùng mà bạn đã sao chép từ bảng điều khiển Chi tiết kết nối. Sau đó, hãy sao chép và dán mật khẩu.

Lưu ý quan trọng: Bạn phải sử dụng thông tin đăng nhập trong bảng Chi tiết kết nối. Đừng sử dụng thông tin đăng nhập Qwiklabs của bạn. Nếu bạn có tài khoản Google Cloud riêng, đừng sử dụng tài khoản đó cho bài thực hành này (tránh phát sinh phí). 4. Nhấp vào các trang tiếp theo:

  1. Chấp nhận các điều khoản và điều kiện.
  2. Không thêm các tùy chọn khôi phục hoặc tính năng xác thực hai yếu tố (vì đây là tài khoản tạm thời).
  3. Không đăng ký dùng thử miễn phí.

Sau vài giây, Bảng điều khiển Google Cloud sẽ mở ra trong thẻ này.

Lưu ý: Bạn có thể xem trình đơn có danh sách Sản phẩm và dịch vụ của Google Cloud bằng cách nhấp vào Trình đơn điều hướng ở trên cùng bên trái.

bbdc8ea800bf0adc.png

3. Nhiệm vụ 0. Kiểm tra cụm máy trạm

Trong phần sau của phòng thí nghiệm này, bạn sẽ sử dụng một Google Cloud Workstation để thực hiện một số công việc phát triển. Quy trình khởi động cho phòng thí nghiệm này sẽ bắt đầu quá trình tạo cụm của Trạm làm việc. Trước khi chuyển sang bước tiếp theo, hãy đảm bảo rằng cụm đang được tạo.

  1. Trong Google Cloud Console, hãy sử dụng hộp tìm kiếm để chuyển đến Cloud Workstations.
  2. Sử dụng trình đơn điều hướng bên trái để xem Quản lý cụm.
  3. Nếu có một cụm đang ở trạng thái Cập nhật, thì bạn có thể chuyển sang Bài tập 1. Nếu bạn không thấy bất kỳ cụm nào ở trạng thái nào, hãy làm mới trang. Nếu bạn vẫn không thấy cụm Đang cập nhật (đang tạo), hãy Kết thúc phòng thí nghiệm này bằng cách sử dụng nút ở phía trên bên trái của các hướng dẫn này rồi khởi động lại phòng thí nghiệm.

4. Nhiệm vụ 1. Kích hoạt và sử dụng Gemini Cloud Assist

Trong nhiệm vụ này, chúng ta sẽ kích hoạt và sử dụng Gemini Cloud Assist. Trong khi bạn làm việc trong Bảng điều khiển Google Cloud, Gemini Cloud Assist có thể đưa ra lời khuyên, giúp bạn xây dựng, định cấu hình và giám sát cơ sở hạ tầng Google Cloud, đồng thời có thể đề xuất các lệnh gcloud và viết tập lệnh Terraform.

  1. Để kích hoạt Cloud Assist, hãy nhấp vào Hộp tìm kiếm ở đầu giao diện người dùng bảng điều khiển Cloud rồi chọn Hỏi Gemini (hoặc có thể là Hỏi Gemini cho bảng điều khiển Cloud).
  2. Di chuyển đến phần API bắt buộc của trang rồi Bật Gemini cho Google Cloud API.
  3. Nếu bạn không thấy giao diện trò chuyện ngay lập tức, hãy nhấp vào Bắt đầu trò chuyện. Bắt đầu bằng cách yêu cầu Gemini giải thích một số lợi ích khi sử dụng Cloud Workstations. Dành vài phút để khám phá câu trả lời được tạo.
  4. Tiếp theo, hãy hỏi về những lợi ích của Agent Builder và cách công cụ này có thể giúp đưa ra các câu trả lời dựa trên thông tin thực tế.
  5. Cuối cùng, hãy xem một bảng so sánh. Trong cửa sổ trò chuyện của Gemini trên Google Cloud Console, hãy đặt câu hỏi sau:
What are the major steps to creating a search app grounded in a
GCS data source using Vertex AI Agent builder?
  1. Giờ đây, trong cửa sổ không ở chế độ ẩn danh, hãy truy cập trang web công khai của Gemini tại đây, đăng nhập nếu cần và đặt cùng một câu hỏi. Các câu trả lời có giống nhau hoặc ít nhất là tương tự nhau không? Các bước cụ thể? Có lựa chọn nào tốt hơn đáng kể không? Dù sao đi nữa, hãy ghi nhớ các câu trả lời khi chúng ta thực hiện các bước tiếp theo.

Lưu ý: Nếu cố gắng thực hiện bước trên bằng tài khoản Qwiklabs tạm thời, bạn sẽ bị chặn. Nếu tài khoản công việc cũng bị chặn vì tổ chức của bạn không cho phép sử dụng ứng dụng web Gemini, bạn chỉ cần bỏ qua bước này và chuyển sang bước tiếp theo. Việc này sẽ không ảnh hưởng đến khả năng hoàn thành bài tập này của bạn.

5. Nhiệm vụ 2. Tạo một ứng dụng tìm kiếm trong Vertex AI Agent Builder cho chatbot tư vấn nấu ăn

Trang web mà chúng tôi đang xây dựng sẽ có một trang tư vấn nấu ăn, trong đó có một chatbot được thiết kế để giúp người dùng tìm thấy câu trả lời cho các câu hỏi liên quan đến nấu ăn. Gemini sẽ cung cấp thông tin dựa trên một nguồn chứa 70 cuốn sách nấu ăn thuộc phạm vi công cộng. Sách dạy nấu ăn sẽ đóng vai trò là nguồn thông tin đáng tin cậy mà Gemini sử dụng khi trả lời câu hỏi.

  1. Sử dụng hộp tìm kiếm trên Cloud Console để chuyển đến Vertex AI. Trên trang Tổng quan, hãy nhấp vào Bật tất cả API được đề xuất. Nếu bạn thấy một hộp bật lên cho biết cần bật Vertex AI API, vui lòng Bật API này.
  2. Sử dụng tính năng tìm kiếm để chuyển đến Trình tạo tác nhân, sau đó nhấp vào Tiếp tục và kích hoạt API.
  3. Như Gemini đã đề xuất trong lời khuyên trước đó của chúng tôi, việc tạo một ứng dụng tìm kiếm trong Agent Builder bắt đầu bằng việc tạo một nguồn dữ liệu đáng tin cậy. Khi người dùng tìm kiếm, Gemini hiểu câu hỏi và cách soạn câu trả lời thông minh, nhưng Gemini sẽ tìm thông tin trong nguồn có cơ sở để sử dụng trong câu trả lời đó, thay vì lấy thông tin từ kiến thức vốn có của mình.

Trong trình đơn bên trái, hãy chuyển đến mục Kho dữ liệu rồi chọn Tạo kho dữ liệu. 4. Các sách dạy nấu ăn thuộc phạm vi công cộng mà chúng tôi đang sử dụng để làm cơ sở cho trang lời khuyên nấu ăn hiện nằm trong một bộ chứa Cloud Storage trong một dự án bên ngoài. Chọn loại nguồn Cloud Storage. 5. Kiểm tra nhưng không thay đổi các lựa chọn mặc định liên quan đến loại thông tin mà chúng ta đang nhập. Để loại nhập được đặt thành Thư mục và đường dẫn đến nhóm sử dụng: labs.roitraining.com/labs/old-cookbooks, sau đó nhấp vào Tiếp tục. 6. Đặt tên cho kho lưu trữ dữ liệu: old-cookbooks. Chỉnh sửa và thay đổi mã nhận dạng thành old-cookbooks-id rồi Tạo kho dữ liệu.

Vertex AI Agent Builder hỗ trợ nhiều loại ứng dụng và Data Store đóng vai trò là nguồn thông tin đáng tin cậy cho từng loại. Ứng dụng tìm kiếm phù hợp cho mục đích sử dụng và tìm kiếm thông thường. Ứng dụng Chat dành cho các luồng tạo sinh trong các ứng dụng chatbot/voicebot dựa trên Dataflow. Các ứng dụng đề xuất giúp tạo ra những công cụ đề xuất hiệu quả hơn. Còn ứng dụng Agent dùng để tạo các tác nhân dựa trên AI tạo sinh. Cuối cùng, Agent có lẽ sẽ phục vụ chúng ta tốt nhất trong những việc chúng ta muốn làm, nhưng vì sản phẩm này hiện đang được xem trước, nên chúng ta sẽ sử dụng loại ứng dụng Tìm kiếm. 7. Sử dụng trình đơn bên trái để chuyển đến Ứng dụng, sau đó nhấp vào Tạo ứng dụng. 8. Chọn loại ứng dụng Tìm kiếm. Xem xét nhưng không thay đổi các lựa chọn. Đặt tên cho ứng dụng: cookbook-search. Chỉnh sửa và đặt mã nhận dạng ứng dụng thành cookbook-search-id. Đặt công ty thành Google rồi nhấp vào Tiếp tục. 9. Kiểm tra kho dữ liệu old-cookbooks mà bạn đã tạo ở một vài bước trước đó và Tạo Ứng dụng tìm kiếm.

Nếu kiểm tra thẻ Hoạt động, có thể bạn sẽ thấy rằng các sổ tay nấu ăn vẫn đang nhập và lập chỉ mục. Agent Builder sẽ mất hơn 5 phút để lập chỉ mục hàng nghìn trang có trong 70 cuốn sách nấu ăn mà chúng tôi đã cung cấp cho công cụ này. Trong khi chờ đợi, hãy tải và làm sạch một số dữ liệu cơ sở dữ liệu công thức cho trình tạo công thức của chúng ta.

6. Nhiệm vụ 3. Tải và làm sạch dữ liệu trong sổ tay Colab Enterprise, với sự trợ giúp của Gemini Code Assist

Google Cloud cung cấp một số cách chính để bạn có thể làm việc với sổ tay Jupiter. Chúng ta sẽ sử dụng sản phẩm mới nhất của Google là Colab Enterprise. Một số bạn có thể đã biết đến sản phẩm Colab của Google. Đây là sản phẩm thường được các cá nhân và tổ chức sử dụng để thử nghiệm sổ tay Jupiter trong một môi trường miễn phí. Colab Enterprise là một sản phẩm thương mại của Google Cloud, được tích hợp đầy đủ với các sản phẩm đám mây khác của Google và tận dụng tối đa các khả năng bảo mật và tuân thủ của môi trường GCP.

Một trong những tính năng mà Colab Enterprise cung cấp là tích hợp với Gemini Code Assist của Google. Bạn có thể sử dụng Trợ lý lập trình trong một số trình chỉnh sửa mã khác nhau và nhận được lời khuyên cũng như các đề xuất nội tuyến liền mạch trong khi lập trình. Chúng ta sẽ tận dụng trợ lý tạo sinh này trong khi xử lý dữ liệu công thức.

  1. Sử dụng tính năng tìm kiếm để chuyển đến Colab EnterpriseTạo sổ tay. Nếu bạn nhận được lời mời dùng thử các tính năng mới của Colab, hãy bỏ qua lời mời đó. Để có được thời gian chạy, sức mạnh tính toán đằng sau sổ tay, hãy nhấn vào Kết nối ở góc trên bên phải của sổ tay mới.

386577c713522b4d.png

  1. Để đổi tên sổ tay hiện tại, hãy sử dụng trình đơn có biểu tượng ba dấu chấm bên cạnh tên sổ tay trong ngăn Tệp của Colab Enterprise Data Wrangling.

4cb787f255bac415.png

  1. Tạo một hộp + Văn bản mới rồi dùng mũi tên lên để di chuyển hộp đó sao cho hộp này là ô đầu tiên trên trang.

6a08b3ccc9c2174b.png

  1. Chỉnh sửa hộp văn bản và nhập:
# Data Wrangling

Import the Pandas library
  1. Trong khối mã bên dưới khối văn bản mà bạn vừa tạo, hãy bắt đầu nhập imp và Gemini Code Assist sẽ đề xuất phần còn lại của lệnh nhập bằng màu xám. Nhấn phím tab để chấp nhận nội dung đề xuất.
import pandas as pd
  1. Bên dưới hộp nhập mã, hãy tạo một hộp văn bản khác rồi nhập:
Create a Pandas DataFrame from: gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv. View the first few records.
  1. Tạo và chỉnh sửa một khối mã khác. Một lần nữa, hãy bắt đầu nhập df và xem xét mã do Gemini Code Assistant tạo. Nếu bạn thấy danh sách thả xuống tự động hoàn thành các từ khoá Python trên đề xuất được tạo, hãy nhấn phím thoát để xem mã được đề xuất màu xám nhạt. Nhấn phím tab một lần nữa để chấp nhận đề xuất. Nếu đề xuất của bạn không chứa lệnh gọi hàm head(), hãy thêm lệnh gọi này.
df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv')
df.head()
  1. Nhấp vào ô mã đầu tiên (nơi bạn đã nhập Pandas) rồi sử dụng trình đơn Lệnh hoặc bàn phím để chạy ô đã chọn. Trên bàn phím, tổ hợp phím shift+enter sẽ chạy ô và chuyển tiêu điểm sang ô tiếp theo, đồng thời tạo một ô nếu cần. Đợi ô thực thi xong rồi mới chuyển sang bước tiếp theo.

Lưu ý: Bạn sẽ thấy [ ] ở ngay bên trái khi một ô chưa được thực thi. Trong khi một ô đang thực thi, bạn sẽ thấy một ảnh động cho biết ô đang hoạt động. Sau khi ô này kết thúc, một số sẽ xuất hiện, chẳng hạn như [13]. 9. Thực thi ô tải tệp CSV vào DataFrame. Đợi tệp tải xong rồi kiểm tra 5 hàng dữ liệu đầu tiên. Đây là dữ liệu về công thức mà chúng ta sẽ tải vào BigQuery và cuối cùng sẽ dùng dữ liệu này để làm cơ sở cho trình tạo công thức. 10. Tạo một khối mã mới và nhập nhận xét bên dưới. Sau khi nhập nhận xét, hãy chuyển đến dòng mã tiếp theo và bạn sẽ nhận được đề xuất df.columns. Chấp nhận rồi chạy ô.

# List the current DataFrame column names

Chúng ta vừa minh hoạ rằng bạn thực sự có 2 lựa chọn về cách nhận trợ giúp từ Gemini Code Assist trong sổ tay Jupyter: ô văn bản phía trên ô mã hoặc nhận xét bên trong chính ô mã. Các nhận xét bên trong ô mã hoạt động tốt trong sổ tay Jupyter, nhưng phương pháp này cũng sẽ hoạt động trong mọi IDE khác hỗ trợ Gemini Code Assist của Google.

  1. Hãy dọn dẹp một chút cho các cột. Đổi tên cột Unnamed: 0 thành idlink thành uri. Sử dụng kỹ thuật tạo câu lệnh > mã mà bạn chọn để tạo mã, sau đó chạy ô khi bạn hài lòng.
# Rename the column 'Unnamed: 0' to 'id' and 'link' to 'uri'
df.rename(columns={'Unnamed: 0': 'id', 'link': 'uri'}, inplace=True)
  1. Xoá các cột sourceNER, rồi dùng head() để xem một vài hàng đầu tiên. Một lần nữa, hãy nhờ Gemini trợ giúp. Chạy hai dòng cuối cùng và kiểm tra kết quả.
# Remove the source and NER columns
df.drop(columns=['source', 'NER'], inplace=True)
df.head()
  1. Hãy xem có bao nhiêu bản ghi trong tập dữ liệu của chúng ta. Một lần nữa, hãy bắt đầu bằng kỹ thuật ra lệnh mà bạn chọn và xem liệu bạn có thể yêu cầu Gemini giúp bạn tạo mã hay không.
# Count the records in the DataFrame
df.shape # count() will also work
  1. 2,23 triệu bản ghi có lẽ là nhiều công thức hơn chúng ta có thời gian để xem. Quá trình lập chỉ mục trong Agent Builder có thể mất quá nhiều thời gian cho bài tập hôm nay của chúng ta. Để thoả hiệp, hãy lấy mẫu 150.000 công thức và làm việc với số lượng đó. Sử dụng phương pháp "dữ liệu đầu vào > mã" để lấy mẫu và lưu trữ mẫu đó trong một DataFrame mới có tên là dfs (s là viết tắt của small – nhỏ).
# Sample out 150,000 records into a DataFrame named dfs
dfs = df.sample(n=150000)
  1. Dữ liệu nguồn công thức của chúng tôi đã sẵn sàng để tải vào BigQuery. Trước khi tải, hãy chuyển đến BigQuery và chuẩn bị một tập dữ liệu để lưu trữ bảng của chúng ta. Trong Google Cloud Console, hãy sử dụng Hộp tìm kiếm để chuyển đến BigQuery. Bạn có thể nhấp chuột phải vào BigQuery rồi mở trong một thẻ trình duyệt mới.
  2. Nếu bảng điều khiển Gemini AI Chat chưa xuất hiện, hãy mở bảng điều khiển này bằng cách nhấp vào biểu trưng Gemini ở phía trên bên phải của Cloud Console. Nếu bạn được yêu cầu bật lại API, hãy nhấn vào nút bật hoặc làm mới trang. Chạy câu lệnh: What is a dataset used for in BigQuery? Sau khi bạn khám phá câu trả lời, hãy hỏi: How can I create a dataset named recipe_data using the Cloud Console? So sánh kết quả với một vài bước sau.

3c38e5975c5c519.png

  1. Trong ngăn BigQuery Explorer, hãy nhấp vào trình đơn có biểu tượng ba dấu chấm Xem các thao tác bên cạnh mã dự án của bạn. Sau đó, hãy chọn Tạo tập dữ liệu.

e28c2fc55a04c694.png

  1. Cung cấp tập dữ liệu và mã nhận dạng của recipe_data. Để loại vị trí là Hoa KỳTạo tập dữ liệu. Nếu bạn nhận được thông báo lỗi cho biết tập dữ liệu đã tồn tại, thì bạn chỉ cần chuyển sang bước tiếp theo.

Sau khi tạo tập dữ liệu trong BigQuery, hãy chuyển về sổ tay và thực hiện thao tác chèn. 19. Quay lại sổ tay Xử lý dữ liệu trong Colab Enterprise. Trong một ô mã mới, hãy tạo một biến có tên là project_id và dùng biến này để lưu trữ mã dự án hiện tại của bạn. Hãy xem ở phía trên bên trái của các hướng dẫn này, bên dưới nút Kết thúc lớp học, bạn sẽ thấy mã dự án hiện tại. Bạn cũng có thể xem thông tin này trên trang chủ của Cloud Console. Chỉ định giá trị cho biến project_id rồi chạy ô.

# Create a variable to hold the current project_id
project_id='YOUR_PROJECT_ID'
  1. Sử dụng phương pháp > mã để tạo một khối mã sẽ chèn DataFrame dfs vào một bảng có tên là recipes trong tập dữ liệu mà chúng ta vừa tạo recipe_data. Chạy ô.
dfs.to_gbq(destination_table='recipe_data.recipes', project_id=project_id, if_exists='replace')

7. Nhiệm vụ 4. Tạo một ứng dụng tìm kiếm trong Vertex AI Agent Builder cho trình tạo công thức

Tuyệt vời! Sau khi tạo bảng dữ liệu công thức, hãy sử dụng bảng này để tạo nguồn dữ liệu có cơ sở cho trình tạo công thức. Phương pháp mà chúng ta sẽ sử dụng tương tự như phương pháp chúng ta đã dùng cho chatbot nấu ăn. Chúng ta sẽ dùng Vertex AI Agent Builder để tạo một Kho dữ liệu, sau đó dùng kho dữ liệu đó làm nguồn thông tin đáng tin cậy cho một Ứng dụng tìm kiếm.

Nếu muốn, bạn có thể yêu cầu Gemini trong Google Cloud Console nhắc bạn về các bước tạo một ứng dụng tìm kiếm Agent Builder hoặc bạn có thể làm theo các bước bên dưới.

  1. Sử dụng tính năng Tìm kiếm để chuyển đến Trình tạo tác nhân. Mở Data Stores (Lưu trữ dữ liệu) và Create Data Store (Tạo kho dữ liệu). Lần này, hãy Chọn loại Kho dữ liệu BigQuery.
  2. Trong ô chọn bảng, hãy nhấn vào Duyệt qua rồi tìm recipes. Chọn nút chọn bên cạnh bảng của bạn. Nếu bạn thấy các công thức từ những dự án qwiklabs-gcp-... khác, hãy nhớ Chọn công thức thuộc về bạn.

Lưu ý: Nếu bạn nhấp vào recipes thay vì chọn nút chọn bên cạnh, thì thao tác này sẽ mở một thẻ mới trong trình duyệt và đưa bạn đến trang tổng quan về bảng trong BigQuery. Bạn chỉ cần đóng thẻ trình duyệt và chọn nút chọn trong Trình tạo tác nhân. 3. Kiểm tra nhưng không thay đổi các lựa chọn mặc định còn lại, sau đó nhấp vào Tiếp tục. 4. Trong trang xem xét giản đồ, hãy xem xét các cấu hình mặc định ban đầu nhưng không thay đổi nội dung nào. Tiếp tục 5. Đặt tên cho kho dữ liệu recipe-data. Chỉnh sửa mã nhận dạng kho dữ liệu và đặt mã nhận dạng đó thành recipe-data-id. Tạo Kho dữ liệu. 6. Chuyển đến Ứng dụng bằng trình đơn điều hướng bên trái rồi nhấp vào Tạo ứng dụng. 7. Chọn ứng dụng Tìm kiếm một lần nữa. Đặt tên cho ứng dụng là recipe-search và đặt mã nhận dạng thành recipe-search-id. Đặt tên công ty thành Google rồi nhấp vào Tiếp tục. 8. Lần này, hãy kiểm tra nguồn dữ liệu recipe-data. Tạo ứng dụng.

Bảng cơ sở dữ liệu của chúng ta sẽ mất một khoảng thời gian để lập chỉ mục. Trong thời gian chờ đợi, hãy thử nghiệm Data Canvas mới của BigQuery và xem liệu chúng ta có thể tìm thấy một hoặc hai công thức thú vị hay không. 9. Sử dụng hộp tìm kiếm để chuyển đến BigQuery. Ở đầu BigQuery Studio, hãy nhấp vào mũi tên xuống bên cạnh thẻ ở ngoài cùng bên phải rồi chọn Canvas dữ liệu. Đặt khu vực thành us-central1.

5d562cddb1717c32.png

  1. Trong hộp tìm kiếm của Canvas dữ liệu, hãy tìm recipes rồi Thêm vào canvas bảng của bạn.
  2. Một bản trình bày trực quan về bảng công thức của bạn sẽ được tải vào Canvas dữ liệu BigQuery. Bạn có thể khám phá giản đồ của bảng, xem trước dữ liệu trong bảng và xem xét các thông tin chi tiết khác. Bên dưới biểu diễn bảng, hãy nhấp vào Truy vấn.
  3. Canvas sẽ tải một hộp thoại truy vấn BigQuery ít nhiều điển hình với một điểm bổ sung: phía trên cửa sổ truy vấn là một hộp văn bản mà bạn có thể dùng để yêu cầu Gemini trợ giúp. Hãy xem chúng ta có thể tìm thấy công thức làm bánh nào trong mẫu này không. Chạy câu lệnh sau (bằng cách nhập văn bản và nhấn phím Enter/Return để kích hoạt quá trình tạo SQL):
Please select the title and ingredients for all the recipes with a title that contains the word cake.
  1. Xem SQL được tạo. Khi bạn đã hài lòng, hãy Chạy truy vấn.
  2. Không tệ chút nào! Bạn có thể thử nghiệm một vài câu lệnh và cụm từ tìm kiếm khác trước khi tiếp tục. Khi thử nghiệm, hãy thử các câu lệnh ít cụ thể hơn để xem câu lệnh nào hiệu quả và câu lệnh nào không. Ví dụ: câu lệnh này:
Do I have any chili recipes?

(Đừng quên chạy truy vấn mới) Trả về danh sách các công thức nấu ớt nhưng không có thành phần cho đến khi tôi sửa đổi thành:

Do I have any chili recipes?  Please include their title and ingredients.

(Có, tôi nói "làm ơn" khi đưa ra câu lệnh. Mẹ tôi sẽ rất tự hào.)

Tôi nhận thấy một công thức ớt có nấm, mà ai lại muốn nấm trong ớt chứ? Tôi đã yêu cầu Gemini giúp tôi loại trừ những công thức đó.

Do I have any chili recipes?  Please include their title and ingredients, and ignore any recipes with mushrooms as an ingredient.

8. Nhiệm vụ 5. Lên khung cho ứng dụng web cốt lõi bằng Python và Streamlit, với sự trợ giúp của Gemini

Với cả hai kho dữ liệu của Vertex AI Agent Builder đều đang lập chỉ mục và các ứng dụng tìm kiếm của chúng ta gần như đã sẵn sàng ra mắt, hãy bắt đầu xây dựng ứng dụng web.

Chúng tôi sẽ tận dụng Gemini Code Assist trong quá trình làm việc. Để biết thêm thông tin về cách sử dụng Gemini Code Assist trong Visual Studio Code, hãy xem tài liệu tại đây

Chúng ta sẽ phát triển trong Google Cloud Workstation; một môi trường phát triển dựa trên đám mây, trong trường hợp này, được tải sẵn Eclipse Theia (Visual Studio Code mã nguồn mở). Một tập lệnh tự động trong bài tập này đã tạo cụm và cấu hình Cloud Workstation cho chúng ta, nhưng chúng ta vẫn cần tạo Cloud Workstation. Nếu muốn biết thêm thông tin về Cloud Workstations và cách sử dụng, bạn nên hỏi Gemini Cloud Assist :-)

  1. Sử dụng tính năng tìm kiếm để chuyển đến Cloud Workstations, sau đó chọn Tạo máy trạm. Đặt tên cho dev-env Trạm làm việc và sử dụng cấu hình my-config. Tạo máy trạm.
  2. Sau vài phút, bạn sẽ thấy máy trạm mới trong danh sách Máy trạm của tôi. Khởi động dev-env và sau khi dev-env chạy, hãy Khởi chạy môi trường phát triển.
  3. Trình chỉnh sửa máy trạm sẽ mở ra trên một thẻ trình duyệt mới và sau vài giây, bạn sẽ thấy giao diện Theia (Visual Studio Code) quen thuộc. Ở bên trái giao diện, hãy mở rộng thẻ Source Control (Kiểm soát nguồn) rồi nhấn vào Clone Repository (Sao chép kho lưu trữ).

c03d05b42d28a518.png

  1. Nhập https://github.com/haggman/recipe-app cho URL kho lưu trữ. Sao chép kho lưu trữ vào thư mục user, sau đó Mở kho lưu trữ đã sao chép để chỉnh sửa.
  2. Trước khi khám phá thư mục được sao chép và bắt đầu làm việc trên ứng dụng web, chúng ta cần đăng nhập trình bổ trợ Cloud Code của trình chỉnh sửa vào Google Cloud và bật Gemini. Hãy thực hiện ngay. Ở dưới cùng bên trái của trình chỉnh sửa, hãy nhấp vào Cloud Code – Sign in (Cloud Code – Đăng nhập). Nếu bạn không thấy đường liên kết, hãy đợi một phút rồi kiểm tra lại.

f4ebfbd96026c0d8.png

  1. Cửa sổ dòng lệnh sẽ hiển thị một URL dài. Mở URL trong trình duyệt rồi thực hiện các bước để cấp cho Cloud Code quyền truy cập vào môi trường Google Cloud của bạn. Đảm bảo bạn sử dụng tài khoản student-... tạm thời cho bài tập chứ không phải tài khoản Google Cloud cá nhân khi xác thực. Trong hộp thoại cuối cùng, hãy Sao chép mã xác minh rồi dán lại vào cửa sổ thiết bị đầu cuối đang chờ trong thẻ trình duyệt Cloud Workstation.
  2. Sau vài giây, đường liên kết Cloud Code ở dưới cùng bên trái của trình chỉnh sửa sẽ thay đổi thành Cloud Code – Không có dự án. Nhấp vào đường liên kết mới để chọn một dự án. Bảng lệnh sẽ mở ra ở đầu trình chỉnh sửa. Nhấp vào Chọn một dự án trên Google Cloud rồi chọn dự án qwiklabs-gcp-.... Sau một lát, đường liên kết ở phía dưới bên trái của trình chỉnh sửa sẽ cập nhật để hiển thị mã dự án của bạn. Điều này cho biết Cloud Code đã được đính kèm thành công vào dự án đang hoạt động của bạn.
  3. Khi Cloud Code được kết nối với dự án của bạn, bạn có thể kích hoạt Gemini Code Assist. Ở phía dưới bên phải của giao diện trình chỉnh sửa, hãy nhấp vào biểu trưng Gemini bị gạch chéo. Ngăn Gemini Chat sẽ mở ra ở bên trái của trình chỉnh sửa. Nhấp vào Chọn một dự án trên Google Cloud. Khi bảng lệnh mở ra, hãy chọn dự án qwiklabs-gcp-.... Nếu đã làm theo đúng các bước (và Google chưa thay đổi bất cứ điều gì), thì giờ đây bạn sẽ thấy một cửa sổ cuộc trò chuyện với Gemini đang hoạt động.

70e4e06ed6565329.png

  1. Cuối cùng, hãy định cấu hình cửa sổ dòng lệnh của trình chỉnh sửa một cách tương tự. Sử dụng trình đơn có biểu tượng ba dấu gạch ngang > View (Xem) > Terminal (Dòng lệnh) để mở cửa sổ dòng lệnh. Thực thi gcloud init. Một lần nữa, hãy sử dụng đường liên kết để cho phép thiết bị đầu cuối Cloud Shell hoạt động trên dự án qwiklabs-gcp-... của bạn. Khi được hỏi, hãy chọn lựa chọn bằng số cho dự án qwiklabs-gcp-... của bạn.
  2. Tuyệt vời! Với Terminal, cuộc trò chuyện với Gemini và cấu hình Cloud Code đã được thiết lập, hãy mở thẻ Explorer (Trình khám phá) và dành vài phút để khám phá các tệp trong dự án hiện tại.

3b2dc3820ed643e2.png

  1. Trong Explorer, hãy mở tệp requirements.txt để chỉnh sửa. Chuyển sang ngăn trò chuyện Gemini rồi hỏi:
From the dependencies specified in the requirements.txt file, what type of application are we building?
  1. Vì vậy, chúng ta sẽ tạo một ứng dụng web có tính tương tác bằng Python và Streamlit, ứng dụng này sẽ tương tác với Vertex AI và Discovery Engine. Hiện tại, hãy tập trung vào các thành phần của ứng dụng web. Theo Gemini, Streamlit là một khung để xây dựng các ứng dụng web dựa trên dữ liệu bằng Python. Bây giờ, hãy hỏi:
Does the current project's folder structure seem appropriate for a Streamlit app?s

Đây là điểm mà Gemini thường gặp vấn đề. Gemini có thể truy cập vào tệp mà bạn hiện đang mở trong trình chỉnh sửa, nhưng không thể xem toàn bộ dự án. Hãy thử hỏi:

Given the below, does the current project's file and folder structure seem appropriate for a Streamlit app?

- build.sh
- Home.py
- requirements.txt
- pages
-- Cooking_Advice.py
-- Recipe_Search.py

Bạn có câu trả lời chính xác hơn?

  1. Hãy tìm hiểu thêm thông tin về Streamlit:
What can you tell me about Streamlit?

Rất tốt. Chúng ta có thể thấy Gemini đang cung cấp cho chúng ta một thông tin tổng quan hữu ích, bao gồm cả ưu và nhược điểm.

  1. Nếu muốn tìm hiểu về nhược điểm, bạn có thể hỏi:
What are the major downsides or shortcomings?

Xin lưu ý rằng chúng ta không cần phải nói "của Streamlit" vì cuộc trò chuyện với Gemini là một mô hình đàm thoại (nhiều lượt). Gemini biết chúng ta đang nói về điều gì vì chúng ta đang trong một phiên trò chuyện. Nếu bạn muốn xoá nhật ký trò chuyện trên Gemini bất cứ lúc nào, hãy sử dụng biểu tượng thùng rác ở đầu cửa sổ trò chuyện về mã của Gemini.

9. Nhiệm vụ 6: Triển khai ứng dụng web lên Cloud Run

Tuyệt vời, chúng ta đã có cấu trúc ứng dụng cốt lõi, nhưng liệu tất cả có hoạt động không? Tốt hơn nữa là chúng ta nên lưu trữ ở đâu trong Google Cloud?

  1. Trong cửa sổ cuộc trò chuyện với Gemini, hãy hỏi:
If I containerize this application, what compute technologies
in Google Cloud would be best for hosting it?
  1. Xin lưu ý rằng nếu chưa làm việc trong IDE, bạn cũng có thể sử dụng Google Cloud Assist. Mở Google Cloud Console, sau đó mở Gemini Cloud Assist và hỏi:
If I have a containerized web application, where would be the
best place to run it in Google Cloud?

Hai lời khuyên này có giống nhau không? Bạn có đồng ý/không đồng ý với lời khuyên nào không? Hãy nhớ rằng Gemini là một trợ lý AI tạo sinh và giống như trợ lý là con người, bạn sẽ không phải lúc nào cũng đồng ý với mọi điều mà Gemini nói. Tuy nhiên, việc có trợ lý luôn bên cạnh trong khi bạn làm việc trên Google Cloud và trong trình soạn thảo mã có thể giúp bạn làm việc hiệu quả hơn nhiều.

  1. Đối với một ứng dụng web trong vùng chứa ngắn hạn không trạng thái, Cloud Run sẽ là một lựa chọn tuyệt vời. Trong cửa sổ cuộc trò chuyện với Gemini trong trình soạn thảo mã, hãy thử câu lệnh:
What steps would be required to run this application in
Cloud Run?
  1. Có vẻ như việc đầu tiên chúng ta cần làm là tạo một Dockerfile. Sử dụng trình chỉnh sửa, hãy tạo một tệp có tên là Dockerfile trong thư mục gốc của dự án. Đảm bảo rằng bạn không vô tình đặt tệp này vào thư mục trang. Mở tệp để chỉnh sửa.
  2. Hãy sử dụng bảng điều khiển bên của cuộc trò chuyện với Gemini để tạo Dockerfile. Hãy dùng một câu lệnh như câu lệnh bên dưới. Khi kết quả xuất hiện trong cuộc trò chuyện, hãy dùng dấu + bên cạnh biểu tượng sao chép ngay phía trên Dockerfile được đề xuất để chèn mã được đề xuất vào Dockerfile.
Create a Dockerfile for the application in the current folder.
The dependencies are defined in requirements.txt and I want you
to use the Python 3 slim bookworm base image.

Gemini không phải lúc nào cũng trả về cùng một câu trả lời cho cùng một câu lệnh. Lần đầu tiên tôi yêu cầu Gemini cung cấp một Dockerfile, tôi đã nhận được chính xác tệp mà tôi sẽ đề xuất bạn sử dụng. Tôi vừa nhận được đề xuất:

```docker
# Base image
FROM python:3-bookworm-slim

# Set working directory
WORKDIR /app

# Install dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    gcc \
    python3-dev \
    && rm -rf /var/lib/apt/lists/*

# Install pip and virtualenv
RUN pip install --upgrade pip virtualenv

# Create virtual environment
RUN python3 -m venv venv

# Activate virtual environment
WORKDIR /app/venv/bin
RUN . activate

# Install Streamlit and libraries from requirements.txt
RUN pip install -r requirements.txt

# Copy application files
COPY . /app

# Expose port 8501 for Streamlit
EXPOSE 8501

# Start Streamlit app
CMD ["streamlit", "run", "main.py"]
That's a heck of a Dockerfile. I'd simplify it a bit. We don't need the apt-get section as anything needed for Python is already in our base image. Also, using a virtual environment in a Python container is a waste of space, so I'd remove that. The expose command isn't strictly necessary, but it's fine. Also, it's trying to start main.py which I don't have.

6. Tweak the Dockerfile so it resembles the following:


FROM python:3.11-slim-bookworm

WORKDIR /app

COPY requirements.txt . RUN pip install –no-cache-dir –upgrade pip &&
pip install –no-cache-dir -r requirements.txt

SAO CHÉP . .

CMD ["streamlit", "run", "Home.py"]

7. We need a place in Google cloud where we can store our container image. Let's get a little help from Gemini. In the Google Cloud Console Gemini Cloud Assist ask:

Đâu là nơi tốt nhất trong Google Cloud để lưu trữ các hình ảnh Docker?

8. If one of the answers you received is the Google Container Registry, then I guess Gemini hasn't gotten word that GCR is deprecated. Again, just like human assistants, you may get out of date or simply wrong answers (hallucinations). Always make sure to consider your choices carefully, even when Gemini is recommending something.

Let's go with Artifact Registry. Ask Gemini Cloud Assist how to create a docker registry in Artifact Registry named cooking-images.

Làm cách nào để dùng gcloud tạo một sổ đăng ký Docker trong Artifact Registry?

9. Now ask Gemini how you could use Cloud Build to build a new image named `recipe-web-app` from the Dockerfile in the current folder.

Làm cách nào để tôi có thể dùng gcloud để tạo một dịch vụ Cloud Run mới có tên là recipe-web-app từ một hình ảnh có cùng tên trong kho lưu trữ Artifact Registry mà chúng ta vừa tạo?

10. To save you a little time, I've created a script that will create the Artifact Registry repo (if needed), use Cloud Build to build and push the image to the repo, and finally to deploy the application to Cloud Run. In your code editor use the **Explorer** view to open `build.sh` and explore the file.
11. Gemini can operate via the chat window, but it can also work directly in your code file using comments, like we used in the Data Wrangling notebook, and it also may be invoked using Control+i on Windows or Command+i on Mac. Click somewhere in the build.sh script file, activate Gemini using the appropriate Command+i / Control+i command.

<img src="img/61ac2c9a245a3695.png" alt="61ac2c9a245a3695.png"  width="624.00" />

12. At the prompt enter the below. Examine and **Accept** the change.

Vui lòng nhận xét về tệp hiện tại.

How cool is that?! How many times have you had to work with someone elses code, only to have to waste time gaining a base understanding of their commentless work before you can even start making your changes. Gemini to the rescue!

13. Let's build and deploy our application. In the terminal window execute the `build.sh` file.

. build.sh

14. If you watch the build process, first it will build the Artifact Registry docker repo. Then, it uses Cloud Build to create the container image from the Dockerfile in the local folder (since we didn't supply a `cloudbuild.yaml`). Lastly, the docker image will be deployed into a new Cloud Run service. At the end of the script you'll get a Cloud Run test URL to use.

Open the returned link in a new tab of your browser. Take a moment and explore the application's structure and pages. Nice, now we need a hook in our generative AI functionality.


## Task 7: Connect the Cooking Advice page to our cookbook-search Agent Builder app



We have the framework for the web application running, but we need to connect the two work pages to our two Vertex AI Agent Builder search apps. Let's start with Cooking Advice.

1. In the Google Cloud console use search to navigate to **Chat** in Vertex AI.
2. In the right hand settings page pane set the model to **gemini-1.5-flash-002**. Slide the output token limit up to the max so the model can return longer answers if needed. Open the **Safety Filter Settings**. Set Hate speech, Sexually explicit content, and Harassment content to **Block some**. Set Dangerous content to **Block few** and **Save**. We're setting Dangerous Content a bit lower because talking about knives and cutting can be misinterpreted by Gemini as violence.
3. Slide on the toggle to enable **Grounding** then click **Customize**. Set the grounding source to **Vertex AI search** and for the datastore path use the following. Change YOUR_PROJECT_ID to the project ID found up near the End Lab button in these instructions, then **Save** the grounding settings

projects/YOUR_PROJECT_ID/locations/global/collections/default_collection/dataStores/old-cookbooks-id

**Note:** If you get an error then you either didn't change the project ID to your actual project ID, or you may have missed the step where you changed the old-cookbooks Agent Builder Data Store ID. Check your Agent Builder &gt; Data Stores &gt; old-cookbooks for its actual Data store ID.

4. Test a couple of chat messages. Perhaps start with the below. Try a few others if you like.


Làm cách nào để biết cà chua đã chín?

5. The model works, now let's experiment with the code. Click **Clear Conversation** so our conversations don't become part of the code then click **Get Code**.

<img src="img/dce8ad7ee006cca1.png" alt="dce8ad7ee006cca1.png"  width="624.00" />

6. At the top of the code window, press Open Notebook so we can experiment and perfect the code in Colab Enterprise before integrating it into our app.
7. Take a few minutes to familiarize yourself with the code. Let's make a couple of changes to adapt it to what we want. Before we start, run the first code cell to connect to the compute and install the AI Platform SDK. After the block runs you will be prompted to restart the session. Go ahead and do that.
8. Move to the code we pulled out of Vertex AI Studio. Change the name of the method *multiturn_generate_content* to `start_chat_session`.
9. Scroll to the `model = GenerativeModel(` method call. The existing code defines the `generation_config` and `safety_settings` but doesn't actually use them. Modify the creation of the `GenerativeModel` so it resembles:

model = GenerativeModel( "gemini-1.5-flash-002", tools=tools, generation_config=generation_config, safety_settings=safety_settings, )

10. Lastly, add a final line to the method, just below `chat = model.start_chat()`, so the function returns the `chat` object. The finished function should look like the below.

**Note:** DO NOT COPY this code into your notebook. It is simply here as a sanity check.

def start_chat_session(): vertexai.init(project="qwiklabs-gcp-02-9a7298ceaaec", location="us-central1") tools = [ Tool.from_retrieval( retrieval=grounding.Retrieval( source=grounding.VertexAISearch(datastore="projects/qwiklabs-gcp-02-9a7298ceaaec/locations/global/collections/default_collection/dataStores/old-cookbooks-id"), ) ), ] model = GenerativeModel( "gemini-1.5-flash-002", tools=tools, generation_config=generation_config, safety_settings=safety_settings, ) chat = model.start_chat() return chat

11. Scroll to the bottom of the code cell and change the final line calling the old function so it calls the new function name and stores the returned object in a variable `chat`. Once you are satisfied with your changes, run the cell.

chat = start_chat_session()

12. Create a new code cell and add the comment `# Use chat to invoke Gemini and print out the response`. Move to the next line and type resp and Gemini should auto complete the block for you. Update the prompt to `How can I tell if a tomato is ripe?`. Run the cell

response = chat.send_message("Làm cách nào để biết cà chua đã chín?") print(response)

13. That's the response alright, but the part we really want is that nested text field. Modify the codeblock to print just that section, like:


response = chat.send_message("Làm cách nào để biết cà chua đã chín?") print(response.candidates[0].content.parts[0].text)

14. Good, now that we have working chat code, let's integrate it into our web application. Copy all the contents of the code cell that creates the `start_chat_session` function (we won't need the test cell). If you click into the cell you can click the triple dot menu in the upper right corner and copy from there

<img src="img/17bf8d947393d4b.png" alt="17bf8d947393d4b.png"  width="326.00" />

15. Switch to your Cloud Workstation editor and open pages\Cooking_Advice.py for editing.
16. Locate the comment:


Thêm mã bạn đã sao chép từ sổ tay vào bên dưới thông báo này

17. Paste your copied code just below the above comment. Nice, now we have the section which drives the chat engine via a grounded call to Gemini. Now let's integrate it into Streamlit.
18. Locate section of commented code directly below the comment:

Sau đây là mã để thiết lập các biến phiên

Huỷ đánh dấu khối này khi được hướng dẫn

19. Uncomment this section of code (Up till the next `Setup done, let's build the page UI` section) and explore it. It creates or retrieves the chat and history session variables.
20. Next, we need to integrate the history and chat functionality into the UI. Scroll in the code until you locate the below comment.

Dưới đây là mã để tạo giao diện trò chuyện

Huỷ nhận xét đoạn mã bên dưới khi được hướng dẫn

21. Uncomment the rest of the code below the comment and take a moment to explore it. If you like, highlight it and get Gemini to explain its functionality.
22. Excellent, now let's build the application and deploy it. When the URL comes back, launch the application and give the Cooking Advisor page a try. Perhaps ask it about ripe tomatoes, or the bot knows a good way to prepare brussels sprouts.

. build.sh

How cool is that! Your own personal AI cooking advisor :-)


## Task 8: (Optional) Connect the Recipe Search page to the recipe-search Agent Builder app



When we connected the Cooking Advice page to its grounded source, we did so using the Gemini API directly. For Recipe Search, let's connect to the Vertex AI Agent Builder search app directly.

1. In your Cloud Workstation editor, open the `pages/Recipe_Search.py` page for editing. Investigate the structure of the page.
2. Towards the top of the file, set your project ID.
3. Examine the `search_sample` function. This code more or less comes directly from the Discovery Engine documentation  [here](https://cloud.google.com/generative-ai-app-builder/docs/preview-search-results#genappbuilder_search-python). You can find a working copy in this notebook  [here](https://github.com/GoogleCloudPlatform/generative-ai/blob/main/search/create_datastore_and_search.ipynb).
4. The only change I made was to return the `response.results` instead of just the results. Without this, the return type is an object designed to page through results, and that's something we don't need for our basic application.
5. Scroll to the very end of the file and uncomment the entire section below `Here are the first 5 recipes I found`.
6. Highlight the whole section you just uncommented and open Gemini Code chat. Ask, `Explain the highlighted code`. If you don't have something selected, Gemini can explain the whole file. If you highlight a section and ask Gemini to explain, or comment, or improve it, Gemini will.

Take a moment and read through the explanation. For what it's worth, using a Colab Enterprise notebook is a great way to explore the Gemini APIs before you integrate them into your application. It's especially helpful at exploring some of the newer APIs which may not be documented as well as they could be.
7. At your editor terminal window, run `build.sh` to deploy the final application. Wait until the new version is deployed before moving to the next step.


## Task 9: (Optional) Explore the final application



Take a few minutes to explore the final application.

1. In the Google Cloud console, use search to navigate to **Cloud Run**, then click into your **recipe-web-app**.
2. Locate the application test URL (towards the top) and open it in a new browser tab.
3. The application home page should appear. Note the basic layout and navigation provided by Streamlit, with the python files from the `pages` folder displayed as navigational choices, and the `Home.py` loaded as the home page. Navigate to the **Cooking Advice** page.
4. After a few moments the chat interface will appear. Again, note the nice core layout provided by Streamlit.
5. Try a few cooking related questions and see how the bot functions. Something like:

Bạn có lời khuyên nào về cách chế biến bông cải xanh không?

Bạn có muốn thử công thức súp gà truyền thống không?

Cho tôi biết về bánh trứng đường.

6. Now let's find a recipe or two. Navigate to the Recipe Search page and try a few searches. Something like:

Chili con carne

Ớt, ngô, gạo

Bánh kem trứng chanh

Một món tráng miệng có dâu tây

## Congratulations!



You have created an application leveraging Vertex AI Agent Builder applications. Along the way you've explored Gemini Cloud Assist, Gemini Code Assist, and the natural language to SQL features of BigQuery's Data Canvas. Fantastic job!