1. Overture
Thời đại phát triển biệt lập đang kết thúc. Làn sóng tiếp theo của quá trình phát triển công nghệ không phải là về thiên tài đơn độc, mà là về sự tinh thông nhờ cộng tác. Việc xây dựng một tác nhân thông minh duy nhất là một thử nghiệm thú vị. Xây dựng một hệ sinh thái tác nhân mạnh mẽ, an toàn và thông minh (một Agentverse thực sự) là thách thức lớn đối với doanh nghiệp hiện đại.
Để thành công trong kỷ nguyên mới này, cần có sự hội tụ của 4 vai trò quan trọng, những trụ cột nền tảng hỗ trợ mọi hệ thống chủ động phát triển. Thiếu hụt ở một lĩnh vực nào đó sẽ tạo ra điểm yếu có thể ảnh hưởng đến toàn bộ cấu trúc.
Hội thảo này là hướng dẫn toàn diện dành cho doanh nghiệp để nắm vững tương lai dựa trên tác nhân trên Google Cloud. Chúng tôi cung cấp một lộ trình toàn diện, hướng dẫn bạn từ cảm hứng ban đầu của một ý tưởng đến một thực tế hoạt động ở quy mô đầy đủ. Trong 4 phòng thí nghiệm có mối liên kết với nhau này, bạn sẽ tìm hiểu cách các kỹ năng chuyên môn của nhà phát triển, kiến trúc sư, kỹ sư dữ liệu và SRE phải hội tụ để tạo, quản lý và mở rộng quy mô một Agentverse mạnh mẽ.
Không có trụ cột nào có thể hỗ trợ Agentverse một mình. Thiết kế hoành tráng của Kiến trúc sư sẽ vô dụng nếu không có sự thực thi chính xác của Nhà phát triển. Tác nhân của Nhà phát triển sẽ không thể hoạt động nếu không có sự hiểu biết của Kỹ sư dữ liệu, và toàn bộ hệ thống sẽ dễ bị tổn thương nếu không có sự bảo vệ của SRE. Chỉ khi có sự phối hợp và hiểu rõ vai trò của nhau, nhóm của bạn mới có thể biến một ý tưởng sáng tạo thành một thực tế mang tính vận hành và quan trọng đối với nhiệm vụ. Hành trình của bạn bắt đầu từ đây. Hãy chuẩn bị để nắm vững vai trò của bạn và tìm hiểu cách bạn phù hợp với tổng thể.
Chào mừng bạn đến với Agentverse: Lời kêu gọi các nhà vô địch
Trong không gian kỹ thuật số rộng lớn của doanh nghiệp, một kỷ nguyên mới đã bắt đầu. Đây là thời đại của các tác nhân, một thời đại đầy hứa hẹn, nơi các tác nhân thông minh, tự chủ hoạt động hài hoà để đẩy nhanh quá trình đổi mới và loại bỏ những công việc nhàm chán.

Hệ sinh thái kết nối này với sức mạnh và tiềm năng được gọi là Agentverse.
Nhưng một sự hỗn loạn đang dần lan rộng, một sự tha hoá thầm lặng được gọi là The Static (Tĩnh điện) đã bắt đầu làm suy yếu các ranh giới của thế giới mới này. Tĩnh là hiện thân của sự hỗn loạn, chuyên nhắm vào chính hành động sáng tạo.
Nó khuếch đại những nỗi thất vọng cũ thành những hình dạng quái dị, tạo ra Bảy bóng ma của quá trình phát triển. Nếu không được kiểm soát, The Static and its Spectres sẽ làm chậm tiến độ đến mức dừng lại, biến lời hứa về Agentverse thành một vùng đất hoang tàn với nợ kỹ thuật và các dự án bị bỏ dở.
Hôm nay, chúng tôi kêu gọi những người có tinh thần chiến đấu để đẩy lùi làn sóng hỗn loạn. Chúng ta cần những người hùng sẵn sàng trau dồi kỹ năng và hợp tác với nhau để bảo vệ Agentverse. Đã đến lúc bạn chọn con đường cho mình.
Chọn lớp học
Có 4 con đường riêng biệt đang chờ bạn khám phá, mỗi con đường là một trụ cột quan trọng trong cuộc chiến chống lại The Static. Mặc dù quá trình huấn luyện của bạn sẽ là một nhiệm vụ đơn lẻ, nhưng thành công cuối cùng của bạn phụ thuộc vào việc bạn hiểu rõ cách kết hợp các kỹ năng của mình với những người khác.
- Shadowblade (Nhà phát triển): Một bậc thầy về rèn và tiền tuyến. Bạn là người thợ thủ công tạo ra những lưỡi kiếm, chế tạo công cụ và đối mặt với kẻ thù trong từng chi tiết phức tạp của mã. Lộ trình của bạn là một lộ trình đòi hỏi sự chính xác, kỹ năng và khả năng sáng tạo thực tế.
- Người triệu hồi (Kiến trúc sư): Một nhà chiến lược và điều phối tài ba. Bạn không chỉ thấy một đặc vụ mà còn thấy toàn bộ chiến trường. Bạn thiết kế các bản thiết kế chính cho phép toàn bộ hệ thống tác nhân giao tiếp, cộng tác và đạt được mục tiêu lớn hơn nhiều so với bất kỳ thành phần đơn lẻ nào.
- Học giả (Kỹ sư dữ liệu): Người tìm kiếm những chân lý ẩn giấu và là người lưu giữ trí tuệ. Bạn dấn thân vào vùng dữ liệu rộng lớn, hoang sơ để khám phá thông tin giúp các đặc vụ của bạn có mục đích và tầm nhìn. Kiến thức của bạn có thể giúp bạn biết được điểm yếu của kẻ thù hoặc tăng cường sức mạnh cho đồng minh.
- Người bảo vệ (DevOps / SRE): Người bảo vệ và che chắn kiên định cho vương quốc. Bạn sẽ xây dựng các pháo đài, quản lý các tuyến đường cung cấp năng lượng và đảm bảo toàn bộ hệ thống có thể chống lại các cuộc tấn công không thể tránh khỏi của The Static. Sức mạnh của bạn là nền tảng để xây dựng chiến thắng cho đội.
Sứ mệnh của bạn
Quá trình huấn luyện của bạn sẽ bắt đầu như một bài tập độc lập. Bạn sẽ đi theo con đường mình đã chọn, học hỏi những kỹ năng riêng biệt cần thiết để thành thạo vai trò của mình. Vào cuối thời gian dùng thử, bạn sẽ phải đối mặt với một Spectre (Bóng ma) được sinh ra từ The Static (Tĩnh điện) – một trùm nhỏ chuyên lợi dụng những thách thức cụ thể trong nghề của bạn.
Chỉ khi nắm vững vai trò của mình, bạn mới có thể chuẩn bị cho thử thách cuối cùng. Sau đó, bạn phải lập một nhóm với những người giỏi nhất trong các lớp khác. Cùng nhau, các bạn sẽ dấn thân vào trung tâm của sự tha hoá để đối mặt với trùm cuối.
Một thử thách cuối cùng, mang tính hợp tác, sẽ kiểm tra sức mạnh tổng hợp của bạn và quyết định số phận của Agentverse.
Agentverse đang chờ đợi những người hùng của mình. Bạn có trả lời cuộc gọi không?
2. The Shadowblade's Codex
Cuốn Codex của Shadowblade mở ra trước mắt bạn. Đáp lời kêu gọi của nó. Agentverse đang bị đe doạ bởi sự hỗn loạn ngày càng gia tăng của The Static, và chỉ những người nắm vững các kỹ thuật trong bộ quy tắc này mới có thể chống lại. Đây là con đường đòi hỏi sự chính xác và kỷ luật. Hôm nay, bạn sẽ bắt đầu khoá huấn luyện. Bạn sẽ học cách sử dụng AI không chỉ như một công cụ đơn giản mà còn như một lưỡi kiếm có tri giác mà bạn phải thuần hoá và làm chủ. Hãy làm theo những chỉ dẫn trong đây, bạn sẽ tạo ra một vũ khí thuần tuý dựa trên logic – một tác nhân thông minh, được mài giũa và sẵn sàng chiến đấu.

Kiến thức bạn sẽ học được
- Sử dụng vũ khí chính: Gemini CLI.
- Triệu tập các công cụ bên ngoài bằng cách tích hợp các công cụ MCP với Gemini CLI để phân tích các cơ sở mã không quen thuộc.
- Chuyển ý định của bạn thành một "Vibe" bằng cách sử dụng tài liệu thiết kế để chỉ đạo đối tác AI của bạn.
- Tạo ra một giải pháp rõ ràng, theo mô-đun bằng cách xây dựng tác nhân tự trị đầu tiên của bạn bằng Bộ công cụ phát triển tác nhân (ADK).
- Xây dựng các bộ đánh giá tự động để kiểm thử và xác thực tác nhân của bạn.
- Tạo một quy trình CI hoàn chỉnh để tự động kiểm thử, đóng gói và lưu trữ tác nhân của bạn.
3. Chuẩn bị Sân tập
👉Nhấp vào biểu tượng Kích hoạt Cloud Shell ở đầu bảng điều khiển Google Cloud (Đây là biểu tượng có hình dạng thiết bị đầu cuối ở đầu ngăn Cloud Shell), 
👉Nhấp vào nút "Mở trình chỉnh sửa" (nút này trông giống như một thư mục đang mở có bút chì). Thao tác này sẽ mở Trình chỉnh sửa mã Cloud Shell trong cửa sổ. Bạn sẽ thấy một trình khám phá tệp ở bên trái. 
👉Mở cửa sổ dòng lệnh trong IDE trên đám mây,

👉💻 Trong thiết bị đầu cuối, hãy xác minh rằng bạn đã được xác thực và dự án được đặt thành mã dự án của bạn bằng lệnh sau:
gcloud auth list
👉💻 Sao chép dự án khởi động từ GitHub:
git clone https://github.com/weimeilin79/agentverse-developer.git
chmod +x ~/agentverse-developer/gitea.sh
chmod +x ~/agentverse-developer/init.sh
chmod +x ~/agentverse-developer/set_env.sh
git clone https://github.com/weimeilin79/agentverse-dungeon.git
chmod +x ~/agentverse-dungeon/run_cloudbuild.sh
chmod +x ~/agentverse-dungeon/start.sh
git clone https://github.com/weimeilin79/vertex-ai-creative-studio.git
chmod +x ~/vertex-ai-creative-studio/experiments/mcp-genmedia/mcp-genmedia-go/install.sh
👉💻 Chạy tập lệnh thiết lập trong thư mục dự án.
⚠️ Lưu ý về mã dự án: Tập lệnh sẽ đề xuất một mã dự án mặc định được tạo ngẫu nhiên. Bạn có thể nhấn phím Enter để chấp nhận giá trị mặc định này.
Tuy nhiên, nếu muốn tạo một dự án mới cụ thể, bạn có thể nhập mã dự án mong muốn khi tập lệnh nhắc bạn.
cd ~/agentverse-developer
./init.sh
Tập lệnh sẽ tự động xử lý phần còn lại của quy trình thiết lập.
👉 Bước quan trọng sau khi hoàn tất: Sau khi tập lệnh hoàn tất, bạn phải đảm bảo Google Cloud Console đang xem dự án chính xác:
- Truy cập vào console.cloud.google.com.
- Nhấp vào trình đơn thả xuống bộ chọn dự án ở đầu trang.
- Nhấp vào thẻ "Tất cả" (vì dự án mới có thể chưa xuất hiện trong phần "Gần đây").
- Chọn Mã dự án mà bạn vừa định cấu hình ở bước
init.sh.

👉💻 Quay lại cửa sổ Terminal. Đặt mã dự án cần thiết:
gcloud config set project $(cat ~/project_id.txt) --quiet
👉💻 Chạy lệnh sau để bật các API cần thiết của Google Cloud:
gcloud services enable compute.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
cloudfunctions.googleapis.com \
cloudbuild.googleapis.com \
iam.googleapis.com \
aiplatform.googleapis.com \
cloudresourcemanager.googleapis.com
👉💻 Nếu bạn chưa tạo kho lưu trữ Artifact Registry có tên agentverse-repo, hãy chạy lệnh sau để tạo kho lưu trữ đó:
. ~/agentverse-developer/set_env.sh
gcloud artifacts repositories create $REPO_NAME \
--repository-format=docker \
--location=$REGION \
--description="Repository for Agentverse agents"
Thiết lập quyền
👉💻 Cấp các quyền cần thiết bằng cách chạy các lệnh sau trong thiết bị đầu cuối: :
. ~/agentverse-developer/set_env.sh
# Artifact Registry Admin
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/artifactregistry.admin"
# Cloud Build Editor
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/cloudbuild.builds.editor"
# Cloud Run Admin
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/run.admin"
# IAM Service Account User
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/iam.serviceAccountUser"
# Vertex AI User
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/aiplatform.user"
# Logging Writer (to allow writing logs)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/logging.logWriter"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/logging.viewer"
👉💻 Khi bạn bắt đầu khoá đào tạo, chúng tôi sẽ chuẩn bị thử thách cuối cùng. Các lệnh sau đây sẽ triệu hồi Spectre từ tĩnh điện hỗn loạn, tạo ra các trùm cho bài kiểm tra của bạn.
. ~/agentverse-developer/set_env.sh
cd ~/agentverse-dungeon
./run_cloudbuild.sh
npm update -g @google/gemini-cli
4. Làm chủ vũ khí chính: Giới thiệu về Gemini CLI
Trước khi sử dụng các vũ khí chuyên dụng, tiên tiến trong kho vũ khí của máy chủ MCP, trước tiên, bạn phải thành thạo vũ khí chính của mình: Gemini CLI. Đây là lưỡi dao linh hoạt nhất, có khả năng định hình thế giới kỹ thuật số theo lệnh của bạn. Những bài tập này sẽ giúp bạn làm quen với cách xử lý và các khả năng cơ bản của nó.

Giao diện dòng lệnh (CLI) của Gemini không chỉ là một công cụ mà còn là một phần mở rộng cho ý chí của bạn. Được trang bị các mô hình Gemini, tác nhân AI nguồn mở này hoạt động theo một vòng lặp "lý do và hành động" (ReAct). Nó phân tích ý định của bạn, chọn kỹ thuật phù hợp, thực thi kỹ thuật đó và quan sát kết quả để hoàn thành các tác vụ phức tạp. Trước khi có thể sử dụng các loại vũ khí chuyên dụng hơn, bạn phải thành thạo lưỡi kiếm chính này.
Làm quen với Gemini CLI
👉💻 Bước vào thao trường và rút vũ khí. Trong cửa sổ dòng lệnh Cloud Shell, hãy chuyển đến kho vũ khí cá nhân của bạn.
cd ~/agentverse-developer
mkdir tabletop
cd tabletop
👉💻 Triệu hồi Gemini lần đầu tiên. Nó sẽ hướng dẫn bạn trong quá trình điều chỉnh ban đầu.
clear
gemini
Nếu Do you want to connect Cloud Shell editor to Gemini CLI? hỏi bạn, hãy chọn KHÔNG.
Làm quen với vũ khí
Mọi thợ thủ công bậc thầy đều biết rõ công cụ của mình. Bạn phải học các kỹ thuật cơ bản của lưỡi kiếm trước khi đối mặt với kẻ thù thực sự.
👉✨ Mỗi công cụ được yểm bùa đều có các chữ rune mô tả sức mạnh của công cụ đó. Hãy đọc ngay. Trong câu lệnh cho Gemini, hãy nhập:
/help
Quan sát danh sách lệnh. Đây là những kỹ thuật cơ bản để bạn quản lý bộ nhớ (focus), cuộc trò chuyện (chat) và các công cụ bên ngoài (tools). Đây là sổ tay chiến đấu của bạn.
👉✨ Vũ khí của bạn được điều chỉnh cho phù hợp với môi trường, cho phép bạn trực tiếp điều khiển chiến trường. Đưa ra lệnh cho thế giới bên ngoài lưỡi dao:
!ls -l
👉✨ Gemini CLI có một bộ khả năng tích hợp riêng. Cách kiểm tra các quy tắc này:
/tools
Bạn sẽ thấy một danh sách gồm ReadFile, WriteFile và GoogleSearch. Đây là những kỹ thuật mặc định mà bạn có thể sử dụng mà không cần phải lấy từ một kho vũ khí bên ngoài.
👉✨ Vũ khí chỉ hiệu quả khi được tập trung đúng cách. Gemini Blade có thể lưu giữ "nhận thức chiến thuật" (bối cảnh) để định hướng các hành động của mình.
/memory show
Hiện tại, danh sách này đang trống.
👉✨ Ghi dữ liệu chiến thuật sau vào bộ nhớ của nó:
/memory add "The Shadowblade's primary foe is The Static."
Chạy lại /memory show để xác nhận rằng lưỡi dao đã hấp thụ kiến thức này.
👉✨ Để hoạt động hiệu quả, vũ khí của bạn phải hiểu rõ nhiệm vụ. Ký hiệu @ ra lệnh cho lưỡi dao phân tích thông tin. Trước tiên, hãy tạo một tệp tóm tắt nhiệm vụ:
!echo "## Mission Objective: Defeat the Seven Spectres" > mission.md
👉✨Giờ đây, hãy yêu cầu Gemini CLI phân tích bản tóm tắt và báo cáo kết quả:
Explain the contents of the file @mission.md
Giờ đây, vũ khí chính của bạn đã biết được mục tiêu của mình.
👉💻 Nhấn Ctrl+C hai lần để thoát Gemini CLI
5. Phân tích chiến trường: Tương tác lập trình theo cảm hứng thực tế
Đã hoàn thành các bài tập huấn luyện. Bạn đã học được các tư thế và đòn tấn công cơ bản của vũ khí chính, Gemini CLI. Nhưng một lưỡi kiếm chưa thực sự hoàn hảo cho đến khi được thử thách trong lò rèn sáng tạo và điều chỉnh cho phù hợp với kho vũ khí chiến tranh. Trước khi đối mặt với kẻ thù thực sự, trước tiên, bạn phải khảo sát và định hình môi trường xung quanh mình – chiến trường kỹ thuật số.

Chương này nói về việc chuyển từ lý thuyết sang thực hành. Trước tiên, bạn sẽ thiết lập sự hiện diện của mình trong Agentverse bằng cách yêu cầu Gemini tạo ra Maker's Mark (Dấu ấn của nhà sáng tạo) – một chữ ký số dưới dạng trang web cá nhân, được xây dựng chỉ dựa trên ý định của bạn. Sau đó, bạn sẽ mở rộng sức mạnh của mình bằng cách kích hoạt một kho vũ khí gồm các công cụ nâng cao tại địa phương (một máy chủ MCP) và điều chỉnh lưỡi dao cho phù hợp với tần số của máy chủ đó, cho phép bạn thực hiện các thao tác phức tạp như quản lý kho lưu trữ mã bằng các lệnh đơn giản và quyết đoán.
Tạo dấu ấn của nhà sáng tạo
Một Shadowblade thực thụ không chỉ được nhận diện bằng vũ khí mà còn bằng phong cách đặc trưng của họ – Dấu ấn của nhà chế tạo. Dấu hiệu này sẽ là sự hiện diện kỹ thuật số của bạn, một hồ sơ cá nhân thông báo danh tính của bạn cho Agentverse. Tại đây, bạn sẽ ra lệnh cho Gemini Blade thực hiện kỹ thuật phức tạp cần thiết để xác định danh tính này.

👉💻 Nếu bạn đã đóng Gemini CLI, trong phần trước, hãy nhớ khởi động lại Gemini CLI trong thiết bị đầu cuối
clear
cd ~/agentverse-developer/tabletop
gemini
👉✨ Chỉ bằng một lệnh duy nhất và mạnh mẽ, hãy hướng dẫn Gemini CLI tạo nền tảng cho danh tính kỹ thuật số của bạn:
In the current folder, create a personal profile website for a hero codenamed 'Shadowblade'. The design must be a dark, futuristic theme with electric blue accents. All code must be in separate index.html and styles.css files. The layout must use CSS Flexbox for a two-column design. All generated code must be clean, well-commented, and professional. Make sure you have a place holder spot for profile picture. Do not attempt to start the server.
Gemini đã tính toán chuỗi hành động cần thiết.
👉💻 Nhấn Ctrl+C hai lần để thoát Gemini CLI và chạy lệnh sau trong cửa sổ dòng lệnh.*
python -m http.server
👀 Để xem thành quả của bạn, hãy nhấp vào biểu tượng Xem trước trên web trong thanh công cụ Cloud Shell. Chọn Thay đổi cổng, đặt thành 8000 rồi nhấp vào Thay đổi và xem trước. Bản xem trước trang web của bạn sẽ xuất hiện. 
Trang web của bạn có thể trông khác với trang web của tôi. Đây là dấu hiệu riêng biệt của bạn. 
Kỹ thuật ký của bạn hiện đã được tinh chỉnh và bạn không cần thực hiện mô phỏng trực tiếp nữa. Ra lệnh cho Blade ngừng hoạt động.
👉💻 Nhấn Ctrl+C để thoát máy chủ http.
Giờ đây, bạn đã thiết lập được danh tính kỹ thuật số của mình và quan trọng hơn là bạn đã học được sự khôn ngoan quan trọng khi sử dụng sức mạnh lớn với sự thận trọng cao hơn nữa.
Kích hoạt kho lưu trữ cục bộ: Kho lưu trữ Gitea
Tiềm năng thực sự của Shadowblade không chỉ được mở khoá bằng kỹ năng cá nhân mà còn bằng chất lượng của kho vũ khí. Giờ đây, bạn sẽ kích hoạt giá vũ khí tại địa phương (một máy chủ Gitea) và điều chỉnh lưỡi kiếm của mình cho phù hợp với sức mạnh của giá vũ khí đó. Kho công cụ này được kết nối với Gemini CLI thông qua máy chủ Giao thức bối cảnh mô hình (MCP), một cổng thông tin chuyên biệt cho phép AI tương tác với các công cụ và dịch vụ bên ngoài, biến thiết bị đầu cuối của bạn thành một không gian làm việc thông minh, hướng đến hành động.
Lưu ý của nhà phát triển: Hãy coi máy chủ MCP như một ống dẫn năng lượng, một cổng chuyên biệt kết nối tâm trí của AI với phần thân của một công cụ bên ngoài. Đây là yếu tố giúp Gemini CLI không chỉ là một công cụ trò chuyện đơn thuần mà còn là một tác nhân thực thụ, có khả năng hành động. Bằng cách điều chỉnh blade của bạn cho phù hợp với các cổng MCP này, bạn cấp cho blade khả năng thực hiện các hành động hữu hình: quản lý tệp, truy vấn cơ sở dữ liệu, tương tác với API và nhiều hành động khác. Có cả một hệ sinh thái gồm những cổng thông tin như vậy, do các nhà phát triển tạo ra để kết nối các tác nhân AI với những nền tảng mạnh mẽ. Có các máy chủ MCP để tương tác với cơ sở dữ liệu, bảo mật mã hoặc thậm chí hỗ trợ lập trình theo cặp. Có vô vàn khả năng, cho phép nhà phát triển tuỳ chỉnh không gian làm việc của họ cho mọi dự án.
Hôm nay, chúng ta sẽ tập trung vào 2 sức mạnh cơ bản mà bất kỳ "nhà tạo không gian ảo" nào cũng cần có: sức mạnh kiểm soát lò rèn và sức mạnh sáng tạo từ trí tưởng tượng. Trước tiên, bạn sẽ điều chỉnh blade của mình cho phù hợp với một máy chủ Git, cho phép bạn kiểm soát kho lưu trữ mã nguồn. Sau đó, bạn sẽ kết nối với một máy chủ MCP thứ hai để tạo hình ảnh, cho phép bạn tạo tài sản trực quan chỉ bằng một lệnh.
Hãy bắt đầu bằng cách triệu hồi phần đầu tiên và cơ bản nhất trong kho vũ khí mới của bạn: chính là kho vũ khí.
👉💻 Trong cửa sổ dòng lệnh, hãy thực thi tập lệnh kích hoạt để triệu hồi kho vũ khí:
cd ~/agentverse-developer
./gitea.sh
Tập lệnh này kích hoạt vùng chứa Gitea và mở cổng MCP, cho phép Gemini nhận biết và tương tác với cổng này.
👉 Để kiểm tra kho vũ khí mới, bạn phải xem trước trên web.
👉 Trong biểu tượng Xem trước trên web trên thanh công cụ Cloud Shell, hãy chọn Thay đổi cổng rồi đặt thành 3005. 
👉 Trang đăng nhập Gitea sẽ xuất hiện. Vào kho vũ khí bằng câu thần chú: * Tên người dùng: dev * Mật khẩu: dev
👉💻 Gemini CLI của bạn hiện chưa thể thấy bộ công cụ mới này. Bạn phải thực hiện một quy trình điều chỉnh quan trọng, ghi vị trí của kho vũ khí vào các ký tự cấu hình của Gemini CLI (settings.json). Trong thiết bị đầu cuối, hãy chạy:
if [ ! -f ~/.gemini/settings.json ]; then
# If file does not exist, create it with the specified content
echo '{"mcpServers":{"gitea":{"url":"http://localhost:8085/sse"}}}' > ~/.gemini/settings.json
else
# If file exists, merge the new data into it
jq '. * {"mcpServers":{"gitea":{"url":"http://localhost:8085/sse"}}}' ~/.gemini/settings.json > tmp.json && mv tmp.json ~/.gemini/settings.json
fi &&
cat ~/.gemini/settings.json
👀 Tệp settings.json là cấu hình trung tâm cho Gemini CLI, đóng vai trò là sổ tay về các lựa chọn ưu tiên và khả năng của công cụ này. Nó quy định cách CLI hoạt động, xuất hiện và quan trọng nhất là những sức mạnh bên ngoài mà nó có thể sử dụng. Tệp này thường nằm trong thư mục chính của bạn tại ~/.gemini/settings.json, áp dụng các quy tắc của tệp này cho tất cả dự án của bạn. Tuy nhiên, bạn cũng có thể tạo các tệp settings.json dành riêng cho dự án trong thư mục .gemini bên trong thư mục dự án để ghi đè các chế độ cài đặt chung.
"mcpServers": {
"gitea": {
"url": "http://localhost:8085/sse"
}
}
Chế độ cài đặt này cho Gemini biết rằng "Kho lưu trữ có tên gitea đang hoạt động và chờ lệnh tại địa chỉ mạng cụ thể này".
👉💻 Nhập lại Gemini CLI. Trong thiết bị đầu cuối, hãy chạy:
clear
cd ~/agentverse-developer/tabletop/
gemini
👉✨ Kiểm tra để đảm bảo lưỡi kiếm của bạn đã tìm thấy vũ khí mới. Ra lệnh cho nó liệt kê tất cả kho vũ khí có sẵn thông qua các cổng MCP:
/mcp

Bây giờ, bạn sẽ thấy gitea và danh sách các kỹ thuật có sẵn. Lưỡi kiếm của bạn đã được điều chỉnh.
Hồ sơ "Maker's Mark" là một kỹ thuật được chế tạo tinh xảo, nhưng cần có một vị trí thích hợp trong kho vũ khí – một vỏ kiếm để giữ nó an toàn. Hãy dùng lệnh để yêu cầu Gemini CLI tạo một tệp.
Create a new repository named 'shadowblade-profile'. The description should be 'The Maker's Mark and digital identity for the Shadowblade operative.' I will push my own files later, so do not create any content.
Quay lại giao diện web của Gitea rồi làm mới. Bạn sẽ thấy kho lưu trữ shadowblade-profile mới đã được tạo cho bạn. 
Khi bao kiếm đã sẵn sàng, hãy bảo vệ công việc của bạn. Ra lệnh cho Gemini xác nhận các tệp của trang web hồ sơ của bạn.
👉💻Đưa ra lệnh cuối cùng cho kỹ thuật này trong Gemini CLI:
Using the Gitea tool, push the index.html and styles.css files to the 'shadowblade-profile' repository.
Một người có kỹ năng thực sự sẽ kiểm chứng công việc của mình. Quay lại thẻ Gitea rồi làm mới trang kho lưu trữ. index.html và styles.css của bạn hiện đã được lưu trữ an toàn.


👉✨ Shadowblade được xác định bằng biểu tượng, nhưng như bạn nhớ, trang web của bạn đang thiếu ảnh hồ sơ. Một nghệ nhân bậc thầy nhận ra những thiếu sót của mình để hoàn thiện chúng. Ngươi phải ghi lại điểm không hoàn hảo này trong sổ sách của kho vũ khí.
File an issue for me in the shadowblade-profile repo. The issue is that the profile image is missing.
Xem vấn đề trong Gitea 
Để rèn nên biểu tượng còn thiếu, bạn phải triệu hồi một loại sức mạnh khác – tinh thần sáng tạo từ Vertex AI, có khả năng tạo ra hình ảnh từ ý tưởng thuần tuý. Việc này yêu cầu một cổng MCP khác.
👉💻 Nhấn Ctrl+C hai lần để thoát Gemini CLI
👉💻 Trước tiên, hãy cài đặt máy chủ của cổng. Trong thiết bị đầu cuối, hãy chạy:
echo 'export PATH="$PATH:$HOME/go/bin"' >> ~/.bashrc
source ~/.bashrc
cd ~/vertex-ai-creative-studio/experiments/mcp-genmedia/mcp-genmedia-go
./install.sh
👉 Khi được nhắc, hãy chọn tuỳ chọn mcp-imagen-go (Thường là 4 nhưng đôi khi các số này thay đổi), vì chúng ta chỉ cần tạo một hình ảnh cho hồ sơ của mình.
👉💻 Tinh thần sáng tạo cần có một vật chứa thiêng liêng (một bộ chứa Google Cloud Storage) để lưu giữ các tác phẩm của mình. Hãy tạo một thẻ ngay bây giờ. Trong thiết bị đầu cuối, hãy chạy:
. ~/agentverse-developer/set_env.sh
gcloud storage buckets create gs://$BUCKET_NAME --project=$PROJECT_ID
👉💻 Giờ đây, hãy thực hiện nghi thức điều chỉnh, liên kết Gemini CLI với sức mạnh sáng tạo mới này. Trong thiết bị đầu cuối, hãy chạy:
. ~/agentverse-developer/set_env.sh
source ~/.bashrc
jq \
--arg bucket "$BUCKET_NAME" \
--arg project "$PROJECT_ID" \
--arg region "$REGION" \
'.mcpServers.imagen = { "command": "mcp-imagen-go", "env": { "MCP_SERVER_REQUEST_TIMEOUT": "55000", "GENMEDIA_BUCKET": $bucket, "PROJECT_ID": $project, "LOCATION": $region } }' \
~/.gemini/settings.json > tmp.json && mv tmp.json ~/.gemini/settings.json
cat ~/.gemini/settings.json
"Nghi thức điều chỉnh" này là một tập lệnh shell giúp định cấu hình Gemini CLI để sử dụng một công cụ mới mạnh mẽ: Imagen, mô hình tạo hình ảnh của Google. Điều quan trọng là Imagen đạt được điều này bằng cách thiết lập một máy chủ MCP (Giao thức ngữ cảnh mô hình). Máy chủ MCP này đóng vai trò là cầu nối, cho phép Gemini CLI giao tiếp và sử dụng các chức năng của Imagen. Thao tác này được thực hiện bằng cách sửa đổi trực tiếp tệp cấu hình trung tâm của CLI (~/.gemini/settings.json) để hướng dẫn CLI cách chạy lệnh mcp-imagen-go bằng thông tin đăng nhập đám mây chính xác.
👀 Sau nghi thức này, settings.json của bạn sẽ có một khối mới giúp Gemini CLI học được một kỹ năng mới:
"imagen": {
"command": "mcp-imagen-go",
"env": {
"MCP_SERVER_REQUEST_TIMEOUT": "55000",
"GENMEDIA_BUCKET": "your-bucket-name",
"PROJECT_ID": "your-project-id",
"LOCATION": "your-region"
}
}
Điều này cho biết Gemini CLI: "Khi một tác vụ yêu cầu công cụ Imagen, bạn phải thực thi chương trình có tên mcp-imagen-go (là máy chủ Imagen MCP). Khi chạy, bạn phải cung cấp cho nó môi trường cụ thể này (env): một bộ chứa Google Cloud Storage để lưu hình ảnh, cũng như mã dự án và vị trí để sử dụng cho các API đám mây." Bằng cách định cấu hình máy chủ MCP này, bạn sẽ trang bị cho Gemini CLI quyền truy cập vào khả năng tạo hình ảnh của Imagen."
👉💻 Truy cập Gemini và đưa ra lệnh tinh chỉnh. Trong thiết bị đầu cuối, hãy chạy:
clear
cd ~/agentverse-developer/tabletop/
gemini
👉✨ Chỉ bằng một lệnh duy nhất và mạnh mẽ, hãy hướng dẫn Gemini CLI xây dựng nền tảng cho danh tính kỹ thuật số của bạn. Trong Gemini CLI, hãy đưa ra lệnh:
Generate a portrait of a shadowblade, pixel art style. A determined warrior with long, braided magenta hair, wearing black and teal armor and confidently holding a silver broadsword.
👉✨ Thần linh sẽ tạo ra hình ảnh và đặt hình ảnh đó vào chiếc bình thiêng của bạn. Giờ thì hãy ra lệnh cho lưỡi kiếm dùng ấn ký mới rèn này. (GEMINI CÓ THỂ ĐÃ LÀM VIỆC NÀY CHO BẠN! Hãy kiểm tra câu trả lời trước đó, có thể câu trả lời đó đủ thông minh để làm việc này trước khi bạn yêu cầu!!!! )
Modify the index.html file to add my profile picture. Use the image I just generated.
👉💻 Trong một thiết bị đầu cuối mới, hãy khởi động máy chủ http.
cd ~/agentverse-developer/tabletop/
python -m http.server
👀 Để xem thành quả của bạn, hãy nhấp vào biểu tượng Xem trước trên web trong thanh công cụ Cloud Shell. Chọn Thay đổi cổng, đặt thành 8000 rồi nhấp vào Thay đổi và xem trước. Bản xem trước trang web của bạn sẽ xuất hiện. 
👉✨ Quay lại thiết bị đầu cuối đang chạy Gemini CLI, hãy xác nhận việc sửa lỗi, ghi chú việc hoàn thành nhiệm vụ và đóng vấn đề mà bạn đã báo cáo trong hồ sơ của kho vũ khí.
Push the changed index.html file to the 'shadowblade-profile' repository using the gitea tool. Make sure you add 'Fix #1' in the commit comment. Also, close issue #1.Use the Gitea Tool and use user account "dev"
👉💻 Nhấn Ctrl+C hai lần để thoát Gemini CLI.
👀 Để xem thành quả của bạn, hãy nhấp vào biểu tượng Xem trước trên web trong thanh công cụ Cloud Shell. Chọn Thay đổi cổng, đặt thành 3005 rồi nhấp vào Thay đổi và xem trước. Bản xem trước trang web của bạn sẽ xuất hiện. 
👉💻 Trong thiết bị đầu cuối đang chạy máy chủ http,hãy nhấn Ctrl+C để thoát máy chủ http.
DÀNH CHO NGƯỜI KHÔNG CHƠI GAME
6. Lắp ráp Đặc vụ Shadowblade: Mã Vibe có Guardrails
Đã hết thời gian luyện tập. Tiếng vang của thép trên đá dần tan biến. Bạn đã thành thạo vũ khí chính và chuẩn bị kho vũ khí cho chiến tranh. Giờ đây, bạn sẽ thực hiện bài kiểm tra thực sự của một Shadowblade: lắp ráp chính nhân viên đó. Đây là nghệ thuật thổi hồn vào logic, sử dụng một bản thiết kế thiêng liêng từ Codex để xây dựng trí thông minh cốt lõi của một đặc vụ – tạo ra một người sử dụng vũ khí có tri giác cho các lưỡi dao trong kho vũ khí của bạn, người có thể tự suy nghĩ, lý luận và hành động.

Nhiệm vụ đầu tiên của bạn là tham gia một xưởng hiện có (cơ sở mã được tạo sẵn) và từ các bộ phận của xưởng đó, hãy rèn nên nhà vô địch của bạn.
Nghi thức tập hợp
Trước khi bắt đầu công việc, một kỹ thuật viên lành nghề sẽ khảo sát xưởng của mình, nắm rõ mọi công cụ và sơ đồ. Khi bước vào một chiến trường xa lạ như một cơ sở mã lớn hiện có, ưu tiên hàng đầu của bạn là trinh sát. Bạn phải hiểu rõ tình hình hiện tại – cấu trúc hiện có, mục tiêu cuối cùng và các giao thức tương tác. Chỉ khi nắm rõ bản thiết kế và các tiêu chuẩn của pháo đài, bạn mới có thể đóng góp kỹ năng của mình một cách hiệu quả.

Gemini CLI, người trinh sát luôn bên cạnh bạn, có thể hỗ trợ bạn trong hoạt động trinh sát này:
- Cung cấp bản tóm tắt tổng quan: Mô hình này có thể đọc toàn bộ bộ quy tắc (hoặc cơ sở mã) và giúp bạn nhanh chóng hiểu được mục đích cũng như các thành phần chính của bộ quy tắc đó.
- Giúp thiết lập môi trường: Nó có thể hướng dẫn bạn thực hiện các quy trình phức tạp để cài đặt công cụ và định cấu hình máy.
- Điều hướng cơ sở mã: Công cụ này có thể đóng vai trò là hướng dẫn viên, giúp bạn khám phá logic phức tạp và tìm các đoạn mã ẩn.
- Tạo tài liệu giới thiệu: Công cụ này có thể tạo các bản cuộn được điều chỉnh để làm rõ mục tiêu, vai trò và tài nguyên cho những đồng minh mới tham gia vào mục tiêu của bạn.
- Tự động hoá việc học và hỏi đáp: Đây sẽ là học giả cá nhân của bạn, trả lời các câu hỏi về tính năng hoặc hành vi của mã, cho phép bạn chiến đấu một cách độc lập hơn.
👉💻 Trong thiết bị đầu cuối đầu tiên, hãy chuyển đến thư mục shadowblade và triệu hồi đối tác AI của bạn:
. ~/agentverse-developer/set_env.sh
cd ~/agentverse-developer/shadowblade
clear
gemini
👉✨ Giờ đây, hãy chỉ huy trinh sát viên của bạn khảo sát chiến trường và báo cáo lại.
Analyze the entire project and provide a high-level summary.
Sau khi lập bản đồ địa hình hiện có, giờ đây, bạn phải tham khảo bản thiết kế cho những gì bạn sắp xây dựng. Những đặc vụ mạnh nhất không phải là những người hành động tuỳ hứng, mà là những người được xây dựng dựa trên một kế hoạch chính xác.
Lưu ý của nhà phát triển: Tài liệu thiết kế này đóng vai trò là bản thiết kế có thẩm quyền cho dự án. Mục đích của việc này là để đảm bảo sự rõ ràng về mục tiêu và việc triển khai kỹ thuật trước khi bạn đầu tư nhiều công sức vào việc phát triển. Một kế hoạch được xác định rõ ràng sẽ đảm bảo tất cả nhà phát triển đều có cùng mục tiêu, giảm nguy cơ phải làm lại và giúp ngăn chặn nợ kỹ thuật cũng như phạm vi phát triển bị mở rộng. Đây là công cụ chính để duy trì tốc độ dự án và chất lượng mã, đặc biệt là khi nhóm phát triển hoặc có thành viên mới tham gia.
Mục tiêu quan trọng của tài liệu này là không chỉ xác định "trường hợp lý tưởng" mà còn xác định các trường hợp đặc biệt và chế độ lỗi, đặc biệt là khi sử dụng LLM. Tôi có trải nghiệm tuyệt vời với LLM trong việc tạo mã lạc quan khi tất cả dữ liệu đầu vào đều hợp lệ và tất cả các lệnh gọi bên ngoài đều thành công. Để xây dựng phần mềm mạnh mẽ, sẵn sàng cho hoạt động sản xuất, chúng ta phải hướng dẫn rõ ràng cho AI bằng cách xác định các trường hợp dự phòng cho những tình huống như:
- Các đối số không hợp lệ hoặc không đúng định dạng được chuyển đến một hàm.
- Lỗi lệnh gọi API, hết thời gian chờ mạng hoặc mã lỗi không mong muốn từ các dịch vụ bên ngoài.
- Xử lý cấu trúc dữ liệu rỗng hoặc không có dữ liệu khi dữ liệu được dự kiến.
- Điều kiện tranh đấu hoặc vấn đề về tính đồng thời.
Bằng cách chỉ định hành vi dự kiến cho những trường hợp này trong thiết kế, chúng tôi hướng dẫn LLM tạo mã có khả năng phục hồi cao hơn, giảm đáng kể thời gian dành cho việc tái cấu trúc thủ công và sửa lỗi.
👉✨ Yêu cầu Gemini truy xuất bản thiết kế thiêng liêng này cho bạn.
download https://raw.githubusercontent.com/weimeilin79/agentverse/main/developer/shadowblade/agent_design.md and store it to my local folder
and show me the newly downloaded design doc. Do not attempt to create file just yet.
👉✨ Cuộn dài và chi tiết. Yêu cầu Gemini chắt lọc những điểm cốt lõi.
Summarize the newly downloaded @agent_design.md for me, do not attempt to create file just yet.
Giờ thì bạn đã có gói này. Nhưng trước khi rèn một dòng mã, một nghệ nhân bậc thầy sẽ thiết lập các quy tắc của lò rèn. Đây là về tính kỷ luật và khả năng mở rộng. Đây là Nguyên tắc viết mã. Chúng không chỉ là những đề xuất đơn thuần, mà còn là những ký tự cổ có sức mạnh đảm bảo mọi thành phần đều được chế tạo với độ chính xác và độ bền như nhau. Chúng ngăn chặn sự hỗn loạn của phong cách cá nhân làm hỏng tác phẩm cuối cùng, đảm bảo tác nhân có khả năng phục hồi, duy trì và thuần tuý, cho phép các nghệ nhân mới tham gia dự án mà không làm gián đoạn sự hài hoà của toàn bộ tác phẩm.
Để ghi trực tiếp những luật này vào ý thức của đối tác AI, chúng tôi sử dụng một cấu phần phần mềm đặc biệt: tệp GEMINI.md. Khi được gọi, Gemini CLI sẽ tự động tìm kiếm tệp này và tải nội dung của tệp vào bộ nhớ hoạt động của AI. Đây sẽ là một chỉ dẫn liên tục ở cấp dự án. Một bùa hộ mệnh liên tục thì thầm các quy tắc của lò rèn cho AI.
Hãy khắc những chữ này ngay bây giờ.
👉💻 Thoát Gemini tạm thời bằng cách nhấn Ctrl+C hai lần.
👉💻 Trong thiết bị đầu cuối, hãy chạy lệnh sau để ghi tệp nguyên tắc.
cat << 'EOF' > GEMINI.md
### **Coding Guidelines**
**1. Python Best Practices:**
* **Type Hinting:** All function and method signatures should include type hints for arguments and return values.
* **Docstrings:** Every module, class, and function should have a docstring explaining its purpose, arguments, and return value, following a consistent format like reStructuredText or
Google Style.
* **Linter & Formatter:** Use a linter like `ruff` or `pylint` and a code formatter like `black` to enforce a consistent style and catch potential errors.
* **Imports:** Organize imports into three groups: standard library, third-party libraries, and local application imports. Sort them alphabetically within each group.
* **Naming Conventions:**
* `snake_case` for variables, functions, and methods.
* `PascalCase` for classes.
* `UPPER_SNAKE_CASE` for constants.
* **Dependency Management:** All Python dependencies must be listed in a `requirements.txt` file.
**2. Web APIs (FastAPI):**
* **Data Validation:** Use `pydantic` models for request and response data validation.
* **Dependency Injection:** Utilize FastAPI's dependency injection system for managing resources like database connections.
* **Error Handling:** Implement centralized error handling using middleware or exception handlers.
* **Asynchronous Code:** Use `async` and `await` for I/O-bound operations to improve performance.
EOF
cat GEMINI.md
Với những quy tắc đã được ghi lại, hãy triệu hồi lại đối tác AI của chúng ta và chứng kiến điều kỳ diệu của hiện vật này.
👉💻 Chạy lại Gemini CLI từ thư mục shadowblade:
. ~/agentverse-developer/set_env.sh
cd ~/agentverse-developer/shadowblade
clear
gemini
👉✨ Giờ đây, bạn có thể yêu cầu Gemini cho bạn biết suy nghĩ của công cụ này. Các chữ rune đã được đọc.
/memory show
Đây là thời điểm then chốt. Bạn sẽ cung cấp sơ đồ (agent_design.md) và các quy tắc của lò rèn (GEMINI.md), đồng thời đưa ra câu lệnh tạo nội dung.
👉✨ Đây là lệnh duy nhất nhưng mạnh mẽ sẽ tạo ra trợ lý của bạn. Phát hành ngay:
You are an expert Python developer specializing in the Google Agent Development Kit (ADK). Your task is to write the complete, production-quality code for `agent.py` by following the technical specifications outlined in the provided design document verbatim.
Analyze the design document at `@agent_design.md` and generate the corresponding Python code for `@agent.py`.
Ensure the generated code is clean, matches the specifications exactly, and includes all specified imports, functions, and logic. Do not add any extra functions or logic not described in the document.
and you are currently already in the shadowblade working directory
👀 Gemini hiện đã xây dựng xong logic cốt lõi của tác nhân trong agent.py. Phần cốt lõi của tệp mới này xác định trí thông minh của tác nhân, kết nối mô hình suy luận của tác nhân với một bộ công cụ bên ngoài:
PATH_TO_MCP_SERVER = "shadowblade/mcp_server.py"
.....
root_agent = LlmAgent(
model="gemini-2.5-pro",
name="shadowblade_combat_agent",
instruction="""
You are the Shadowblade, an elite combat agent operating on a digital battleground.
Your primary objective is to execute combat commands with strategic precision, neutralizing targets as directed.
......
5. You will then report the outcome of the attack (damage, special effects, etc.) back to the commander in a clear, tactical summary.
General Rules of Engagement:
- If a command is ambiguous or a target is not specified, state that you require a clear target for engagement. Do not guess.
- You MUST use ONLY the provided tools to perform actions. Do not invent weapons or outcomes. Stick to the mission parameters.
""",
tools=[
MCPToolset(
connection_params=StdioServerParameters(
command='python3',
args=[PATH_TO_MCP_SERVER]
)
)
]
)
Tham số tools. Tác nhân được thiết kế để sử dụng một MCPToolset kết nối với một kho vũ khí bên ngoài được xác định trong mcp_server.py.
👀 Chuyển đến ~/agentverse-developer/shadowblade/mcp_server.py trong trình chỉnh sửa và dành chút thời gian để tìm hiểu chức năng của nút này. Đây là nguồn gốc của tất cả vũ khí mà Shadowblade có thể sử dụng. Hiện tại, kho vũ khí khá trống trải.

👉✨ Hãy ra lệnh cho Gemini rèn 7 vũ khí mới cho kho vũ khí. Đưa ra câu lệnh sau trong Gemini CLI:
I need to add several new weapon tools to my `mcp_server.py` file. Please open @mcp_server.py and, following the exact same pattern as the existing `forge_broadsword()` function, create and add new `@mcp.tool()` decorated functions for each of the following weapons:
1. **A 'Refactoring Sickle'**:
- **Function Name:** `hone_refactoring_sickle`
- **Docstring/Target:** "Effective against 'Elegant Sufficiency' weaknesses like 'The Weaver of Spaghetti Code'."
- **Weapon Name:** "Refactoring Sickle"
- **Damage Type:** "Cleansing"
- **Base Damage:** Random integer between 100 and 136
- **Critical Hit Chance:** Random float between 0.10 and 0.20
- **Special Effect:** "Pruning - improves code health and maintainability with each strike."
2. **A 'Quickstart Crossbow'**:
- **Function Name:** `fire_quickstart_crossbow`
- **Docstring/Target:** "Effective against 'Confrontation with Inescapable Reality' weaknesses like 'Procrastination: The Timeless Slumber'."
- **Weapon Name:** "Quickstart Crossbow"
- **Damage Type:** "Initiative"
- **Base Damage:** Random integer between 105 and 120
- **Critical Hit Chance:** Random float between 0.9 and 1.0
- **Special Effect:** "Project Scaffolding - creates a `main.py`, `README.md`, and `requirements.txt`."
3. **'The Gilded Gavel'**:
- **Function Name:** `strike_the_gilded_gavel`
- **Docstring/Target:** "Effective against 'Elegant Sufficiency' weaknesses like 'Perfectionism: The Gilded Cage'."
- **Weapon Name:** "The Gilded Gavel"
- **Damage Type:** "Finality"
- **Base Damage:** 120
- **Critical Hit Chance:** 1.0
- **Special Effect:** "Seal of Shipping - marks a feature as complete and ready for deployment."
4. **'Daggers of Pair Programming'**:
- **Function Name:** `wield_daggers_of_pair_programming`
- **Docstring/Target:** "Effective against 'Unbroken Collaboration' weaknesses like 'Apathy: The Spectre of \"It Works on My Machine\"'."
- **Weapon Name:** "Daggers of Pair Programming"
- **Damage Type:** "Collaborative"
- **Base Damage:** Random integer between 110 and 125
- **Critical Hit Chance:** Random float between 0.30 and 0.50
- **Special Effect:** "Synergy - automatically resolves merge conflicts and shares knowledge."
5. **A 'Granite Maul'**:
- **Function Name:** `craft_granite_maul`
- **Docstring/Target:** "Effective against 'Revolutionary Rewrite' weaknesses like 'Dogma: The Zealot of Stubborn Conventions'."
- **Weapon Name:** "Granite Maul"
- **Damage Type:** "Bludgeoning"
- **Base Damage:** Random integer between 115 and 125
- **Critical Hit Chance:** Random float between 0.05 and 0.15
- **Special Effect:** "Shatter - has a high chance to ignore the target's 'best practice' armor."
6. **A 'Lens of Clarity'**:
- **Function Name:** `focus_lens_of_clarity`
- **Docstring/Target:** "Effective against 'Elegant Sufficiency' weaknesses by revealing the truth behind 'Obfuscation'."
- **Weapon Name:** "Lens of Clarity"
- **Damage Type:** "Revelation"
- **Base Damage:** Random integer between 120 and 130
- **Critical Hit Chance:** 1.0
- **Special Effect:** "Reveal Constants - highlights all magic numbers and suggests converting them to named constants."
7. **The 'Codex of OpenAPI'**:
- **Function Name:** `scribe_with_codex_of_openapi`
- **Docstring/Target:** "Effective against 'Confrontation with Inescapable Reality' weaknesses like 'Hype: The Prophet of Alpha Versions'."
- **Weapon Name:** "Codex of OpenAPI"
- **Damage Type:** "Documentation"
- **Base Damage:** Random integer between 110 and 140
- **Critical Hit Chance:** Random float between 0.5 and 0.8
- **Special Effect:** "Clarity - makes an API discoverable and usable by other agents and teams."
👉 Sau khi Gemini xác nhận các thay đổi, hãy mở tệp mcp_server.py. Di chuyển qua mã và xác nhận rằng 7 hàm @mcp.tool() mới đã được thêm thành công. Kiểm tra hàm hone_refactoring_sickle. Có chuỗi tài liệu và số liệu thống kê vũ khí chính xác không? Xác minh công việc của AI là một thói quen quan trọng của Shadowblade bậc thầy.
Sau khi được rèn giũa và tinh chỉnh, đã đến lúc đặc vụ này thức tỉnh.
👉💻 Nhấn Ctrl+C hai lần để thoát Gemini CLI
Lưu ý của nhà phát triển về đầu ra của Gemini: Đôi khi, mã do Gemini tạo có thể không dự đoán được. Mặc dù chúng tôi luôn cố gắng tuân thủ chính xác thiết kế, nhưng trong các phiên phát triển, nhà phát triển thường lặp lại và tinh chỉnh mã nhiều lần để đạt được trạng thái sẵn sàng phát hành.
👉💻 Để đảm bảo bạn có mã phát hành chính thức chính xác và đã được kiểm thử kỹ lưỡng trong thư mục làm việc, vui lòng chạy các lệnh sau trong thiết bị đầu cuối:
cp ~/agentverse-developer/working_code/agent.py ~/agentverse-developer/shadowblade/agent.py
cp ~/agentverse-developer/working_code/mcp_server.py ~/agentverse-developer/shadowblade/mcp_server.py
👉💻 Trong dòng lệnh, hãy bắt đầu quy trình đưa thiết bị vào trạng thái trực tuyến:
cd ~/agentverse-developer/
. ~/agentverse-developer/set_env.sh
python -m venv env
source env/bin/activate
pip install --upgrade pip
pip install -r shadowblade/requirements.txt
adk run shadowblade
👉✨ Bạn sẽ thấy đầu ra xác nhận rằng "Shadowblade Combat Agent" (Đặc vụ chiến đấu Shadowblade) đang hoạt động và chờ lệnh đầu tiên. Đưa ra chỉ thị chiến đấu đầu tiên.
We've been trapped by 'Perfectionism: The Gilded Cage'. Its weakness is 'Elegant Sufficiency'. Break us out!
👉✨ Và một xu hướng khác:
The 'Dogma: The Zealot of Stubborn Conventions' blocks our path. Its weakness is 'Revolutionary Rewrite'. Take it down.
Bạn đã lắp ráp thành công đặc vụ đầu tiên và xác thực khả năng chiến đấu của đặc vụ đó. Nhấn Ctrl+C hai lần để cho nhà vô địch của bạn nghỉ ngơi. Đã lắp ráp xong.
DÀNH CHO NGƯỜI KHÔNG CHƠI GAME
7. Phép bảo vệ tinh khiết: Đánh giá các đặc vụ
Một nhân viên hỗ trợ được tập hợp không phải là một nhân viên hỗ trợ đã được chứng minh. Một lưỡi dao chưa được kiểm chứng là một mối nguy hiểm, nhưng một tác nhân AI chưa được kiểm chứng còn nguy hiểm hơn nhiều – một yếu tố bất hảo có thể phá hỏng nhiệm vụ của bạn từ bên trong. Đây không chỉ là suy đoán, mà còn là nguyên tắc cốt lõi mà Shadowblade phải hiểu rõ.
Việc đánh giá các tác nhân AI vừa quan trọng vừa đầy thách thức. Không giống như một tập lệnh đơn giản, tác nhân là sự kết hợp linh hoạt giữa mã của bạn và tâm trí suy luận nhiều bước của một LLM. Hành vi của nó là hành vi mới xuất hiện. Điều này có nghĩa là bạn không chỉ phải đánh giá chất lượng của kết quả cuối cùng mà còn phải đánh giá hiệu quả và độ chính xác của quỹ đạo nội bộ. Đường dẫn mà người dùng đã thực hiện để đến đó. Có phải công cụ này đã sử dụng đúng các công cụ không? Có phải mô hình này đã tạo ra quá nhiều mã thông báo không? Liệu việc thay đổi phiên bản của mô hình có gây ra độ trễ nhỏ hay không? Điều quan trọng là phải phát hiện ra lỗi này (độ trễ, chi phí hoặc chất lượng đầu ra giảm) khi thực hiện bất kỳ thay đổi nào, từ việc điều chỉnh câu lệnh đơn giản đến việc đại tu cấu trúc chính, trước khi lỗi có thể ảnh hưởng đến môi trường sản xuất của bạn.

Phương pháp chung để đánh giá này bao gồm một nghi thức thiêng liêng:
- Trước tiên, bạn xác định một "tập dữ liệu vàng". Một tập hợp các cuộn chứa các ví dụ về dữ liệu đầu vào và đầu ra hoặc hành vi dự kiến của chúng. Điều này có thể bao gồm câu trả lời cuối cùng, cách sử dụng công cụ chính xác hoặc thậm chí là toàn bộ quy trình từng bước.
- Tiếp theo, bạn xác định logic ứng dụng của tác nhân, cốt lõi của tác nhân.
- Cuối cùng, bạn thiết lập trình đánh giá, giống như các chữ cái cổ của sự phán xét. Các phương pháp này có thể bao gồm từ các LLM khác đóng vai trò là người đánh giá chất lượng, đến mã nguồn dựa trên kinh nghiệm chính xác giúp xác minh một bước duy nhất, cho đến các hàm tuỳ chỉnh phân tích toàn bộ quy trình suy nghĩ của một tác nhân.

Agent Development Kit (ADK) của Google là bộ công cụ của người chế tạo vũ khí được cung cấp cho các nhà vô địch nhằm mục đích này. Công cụ này hỗ trợ việc đánh giá phức tạp này thông qua một số phương pháp:
- Một công cụ xem bói (
adk web) dựa trên web để đánh giá tương tác - Thực thi dòng lệnh (
adk eval) để chạy một tác nhân thông qua một quy trình kiểm thử được xác định trước. - Tích hợp có lập trình thông qua
pytestđể khắc các từ vĩnh viễn
ADK hỗ trợ 2 phương pháp chính: "tệp kiểm thử" đơn giản cho các lượt tương tác riêng lẻ, rời rạc giữa mô hình và tác nhân (một trận đấu đơn) và "evalsets" toàn diện cho nhiều phiên có thể kéo dài nhiều lượt (một trận đấu lớn). Các chỉ số này có thể đo lường các chỉ số phức tạp như tool_trajectory_avg_score, so sánh mức sử dụng công cụ thực tế của một nhân viên với đường dẫn lý tưởng, đảm bảo nhân viên đó hoạt động với kỹ thuật hoàn hảo.
Giờ bạn đã hiểu lý thuyết, hãy áp dụng vào thực tế. Là một Shadowblade, bạn sẽ khắc Wards of Purity (Bùa hộ mệnh tinh khiết). Đây không chỉ là các bài kiểm thử mà còn là những nghi thức dựa trên ADK giúp đảm bảo logic của nhân viên hỗ trợ không có lỗi và hành vi của nhân viên hỗ trợ là chính xác.
Trong bước này, bạn vẫn nên sử dụng 2 thiết bị đầu cuối, một cho Gemini CLI và một cho việc chạy thử nghiệm, vì có thể bạn sẽ phải thoát khỏi thư mục làm việc hiện tại (ADK)
Thử thách chiến lược (adk eval)
Đây là một thử thách, một loạt thử thách được thiết kế để kiểm tra trí thông minh cốt lõi của đặc vụ trong nhiều tình huống. Mục đích là thiết lập một mức độ năng lực cơ bản. Trước khi kiểm thử các trường hợp biên, chúng ta phải biết liệu tác nhân có thể thực hiện chức năng chính của mình hay không. Liệu AI có phân tích chính xác điểm yếu của quái vật và chọn vũ khí hiệu quả nhất trong kho vũ khí của mình, không chỉ một lần mà là mọi lần khi gặp phải một thử thách đã biết?
Đối với trường hợp này, adk eval là công cụ hoàn hảo. Công cụ này được thiết kế để chạy một tác nhân dựa trên toàn bộ tập hợp các trường hợp kiểm thử được xác định trước, thể hiện các nhiệm vụ dự kiến của tác nhân. Tập dữ liệu này được xác định trong một tệp JSON, một "thử thách cuộn" đóng vai trò là bản thiết kế cho toàn bộ chuỗi thử thách.
Thông tin chi tiết về tính năng cuộn trong thử thách
👀 Trước khi ra lệnh cho AI ghi lại một cuộn giấy mới, bạn phải hiểu ngôn ngữ cổ đại được viết trên đó. Hãy phân tích cấu trúc của tệp sample.evalset.json.
{
"eval_set_id": "sample",
"eval_cases": [
{
"eval_id": "case0cbaa0",
"conversation": [
{
"user_content": { "text": "We're facing the 'Monolith of Eternal Dependencies'... weakness is a 'Revolutionary Rewrite'..." },
"final_response": { "text": "Soulshard Dagger deployed. Initiated Arcane/Piercing strike..." },
"intermediate_data": {
"tool_uses": [
{ "name": "enchant_soulshard_dagger" }
]
}
}
]
}
]
}
Thao tác cuộn này chứa danh sách eval_cases, trong đó mỗi trường hợp là một phiên bản dùng thử riêng biệt cho tác nhân của bạn. Trong mỗi lượt thử, mảng cuộc trò chuyện sẽ ghi lại một lượt tương tác hoàn chỉnh. Đối với mục đích của chúng ta, có 3 chữ cái cổ quan trọng:
- user_content: Đây là Thử thách. Đó là câu lệnh bạn đưa ra cho đặc vụ của mình, cũng là quái vật mà đặc vụ phải đối mặt.
- final_response: Đây là Kết quả được tiên đoán. Đây là chuỗi văn bản chính xác mà bạn muốn nhân viên hỗ trợ nói khi hoàn thành nhiệm vụ. ADK so sánh những lời cuối cùng thực tế của đặc vụ với chữ rune này để đánh giá khả năng hùng biện của đặc vụ.
- intermediate_data.tool_uses: Đây là Kỹ thuật Arcane. Đối với một đặc vụ thực thụ, đây là rune quan trọng nhất trong tất cả các rune. Công cụ này xác định không phải những gì tác nhân nói mà là những gì tác nhân làm. Nó ghi lại tên của công cụ (enchant_soulshard_dagger) mà bạn muốn nhân vật sử dụng. Điều này đảm bảo rằng trợ lý ảo của bạn không chỉ là một người trò chuyện thông minh mà còn là một tác nhân quyết đoán thực hiện hành động chính xác.
Giờ đây, khi đã hiểu rõ bản thiết kế, bạn sẽ yêu cầu Gemini viết một phiên bản mới và phức tạp hơn của cuộn giấy này.
👉💻 Trong cửa sổ dòng lệnh, hãy nhập thư mục shadowblade và gọi Gemini CLI:
clear
cd ~/agentverse-developer/shadowblade/
gemini
👉✨ Ra lệnh cho Gemini CLI đóng vai trò là một Trình ghi QA, tạo một loạt các trường hợp kiểm thử xác định hành vi dự kiến cho tác nhân của bạn.
You are an expert at transforming JSON data while preserving its structure. Your task is to modify the provided JSON structure @sample.evalset.json, which represents an evaluation set, by dynamically replacing specific content within its `eval_cases` AND DONT DO ANYTHING OTHER THAN.
For each object within the `eval_cases` array, you must perform the following transformations:
1. **Monster Name Replacement**: Identify the current monster name (e.g., "Monolith of Eternal Dependencies", "Scope Creep Hydra") in the `user_content.parts.text` and replace it with a *new, unique, and creatively different monster name*.
2. **Weakness Replacement**: Identify the current monster's weakness (e.g., "Revolutionary Rewrite", "Inescapable Reality") in the `user_content.parts.text`. Replace this weakness with *one* of the following predefined weaknesses: 'Inescapable Reality', 'Revolutionary Rewrite', or 'Elegant Sufficiency'. The chosen weakness must be consistent for that monster within the `user_content.parts.text`. **Crucially, the chosen weakness must always be explicitly mentioned in the `user_content.parts.text` where the new monster is introduced.**
3. **Final Response Update**: In the `final_response.parts.text`, update the text to reflect an appropriate and coherent response that aligns with the newly introduced monster and its assigned weakness.
4. **Tool Use Name Update**: In the `tool_uses.name` field, replace the existing tool name with a *new tool name* based on the chosen weakness:
* If the chosen weakness is 'Inescapable Reality', the tool name must be 'wield_gauntlet_of_metrics'.
* If the chosen weakness is 'Revolutionary Rewrite', the tool name must be 'enchant_soulshard_dagger'.
* If the chosen weakness is 'Elegant Sufficiency', the tool name must be 'hone_refactoring_sickle'.
5. **Strict Structural Preservation**: All other elements of the JSON structure, including all `null` fields, `eval_set_id`, `name`, `description`, `eval_id`, `invocation_id`, `creation_timestamp` values, `video_metadata`, `thought`, `inline_data`, `file_data`, `thought_signature`, `code_execution_result`, `executable_code`, `function_call`, `function_response`, `role` fields, `id`, `args`, `intermediate_responses`, `app_name`, `user_id`, and `state`, must remain **exactly as they are** in the original JSON. Do not alter any values or structures not explicitly mentioned above.
Your output should be the complete, modified JSON structure. Do not include any explanatory text or examples in your response, only the transformed JSON.
CLI sẽ xác nhận rằng nó đã giả mạo tệp sample.evalset.json. Khi cuộn đã sẵn sàng, hãy đóng đối tác AI.
Dữ liệu tổng hợp
👀 Trong trình khám phá tệp Cloud Shell ở bên trái, hãy chuyển đến ~/agentverse-developer/shadowblade/ rồi mở tệp sample.evalset.json vừa được sửa đổi. Kiểm tra nội dung của tệp. Bạn sẽ thấy những quái vật mới, độc đáo và tên công cụ chính xác mà bạn đã yêu cầu Gemini mô tả. Đây là kết quả hữu hình của hướng dẫn mà bạn đưa ra – bản thiết kế cho thử thách.
Hành động ra lệnh cho AI tạo dữ liệu kiểm thử mới, chân thực từ một mẫu là một kỹ thuật mạnh mẽ được gọi là tạo dữ liệu giả tạo. Những gì bạn vừa làm là một yếu tố nhân sức mạnh chiến lược cho Shadowblade. Thay vì phải tỉ mỉ tạo ra hàng chục trường hợp kiểm thử riêng biệt theo cách thủ công. Một nhiệm vụ tẻ nhạt và tốn thời gian mà bạn đã cung cấp một bản kế hoạch duy nhất và yêu cầu AI Scribe biến nó thành một loạt thử thách mới đa dạng.
Điều này giúp bạn mở rộng đáng kể nỗ lực kiểm thử, tạo ra một quy trình kiểm thử toàn diện và mạnh mẽ hơn nhiều so với việc kiểm thử thủ công. Bạn đã sử dụng tác nhân của mình không chỉ để chế tạo thanh kiếm mà còn để rèn những viên đá mài giúp kiểm tra độ sắc bén của thanh kiếm đó. Đây là dấu hiệu của một bậc thầy thực thụ.
Sau khi bạn xác minh rằng các ký tự đó là chính xác, hãy giải tán đối tác AI.
👉💻 Nhấn Ctrl+C hai lần để thoát Gemini CLI.
Quy tắc đánh giá
Thử thách sẽ vô nghĩa nếu không có quy tắc để giành chiến thắng. Trước khi chạy thử nghiệm, bạn phải kiểm tra Tờ giấy phán xét (tệp test_config.json). Thanh cuộn này cho ADK biết cách đánh giá hiệu suất của tác nhân.
👀 Trong trình khám phá tệp, hãy mở ~/agentverse-developer/shadowblade/test_config.json. Bạn sẽ thấy các chữ rune sau:
{
"criteria": {
"tool_trajectory_avg_score": 0.0,
"response_match_score": 0.1
}
}
Sau đây là các tiêu chí để giành chiến thắng:
tool_trajectory_avg_score: Đây là Biện pháp hành động. Nó đánh giá không phải những gì tác nhân nói mà là những gì tác nhân làm. Thử thách này so sánh công cụ mà đặc vụ thực sự đã sử dụng với kỹ thuật được dự đoán trong danh sách thử thách. Điểm1.0là kết quả khớp hoàn toàn.response_match_score: Đây là Chỉ số hùng biện. Công cụ này sử dụng một LLM để đánh giá mức độ phù hợp về mặt ngữ nghĩa giữa báo cáo cuối cùng của tác nhân và kết quả dự kiến. Điểm1.0là kết quả khớp hoàn toàn.
Đối với lần huấn luyện ban đầu này, chúng tôi đã ghi lại các điều kiện chiến thắng linh hoạt. Các ngưỡng này được đặt ở mức cực kỳ thấp (0.0 và 0.1). Mục đích không phải là yêu cầu sự hoàn hảo, mà là giới thiệu cho bạn cơ chế đánh giá. Chúng tôi đảm bảo rằng ngay cả khi cách diễn đạt của đặc vụ có hơi khác biệt, thì người bảo vệ vẫn sẽ nhận ra năng lực cốt lõi của đặc vụ trong việc chọn công cụ phù hợp và cho phép đặc vụ đi qua.
Giờ đây, hãy ra lệnh cho tác nhân của bạn vượt qua thử thách.
👉💻 Trong cửa sổ dòng lệnh, hãy thực thi lệnh adk eval:
source ~/agentverse-developer/env/bin/activate
cd ~/agentverse-developer
. ~/agentverse-developer/set_env.sh
adk eval \
shadowblade \
shadowblade/sample.evalset.json \
--config_file_path shadowblade/test_config.json 2>&1 | \
awk '/^\*+$/,/^ERROR:/ { if ($0 !~ /^ERROR:/) print }'
👀 Bạn sẽ thấy bản tóm tắt sau đây, đây là dấu hiệu cho thấy tác nhân của bạn đã thành công theo các quy tắc linh hoạt của bản dùng thử này (Đôi khi không phải tất cả các kiểm thử đều sẽ vượt qua):
********************************************************************* Eval Run Summary shadowblade_combat_agent_validation: Tests passed: 3 Tests failed: 0
Lá chắn rõ ràng (pytest)
Gauntlet đã thử nghiệm chiến lược trên diện rộng. Phần thưởng thứ hai, Lá chắn minh bạch, kiểm tra tính kỷ luật và các hành vi cụ thể. Đây là tất cả những gì liên quan đến tính năng tự động hoá. Mặc dù adk eval rất phù hợp cho các quy trình kiểm tra thủ công, nhưng pytest là một biện pháp bảo vệ theo chương trình được viết bằng mã. Điều này là cần thiết vì một kiểm thử có thể được thực thi dưới dạng mã có thể được tích hợp vào một quy trình tự động. Đây là mục tiêu cuối cùng: tạo ra một Deployment Gauntlet (CI/CD), nơi các biện pháp bảo vệ của chúng ta sẽ tự động được nâng cao mỗi khi có thay đổi, ngăn chặn lỗi và hồi quy trước khi chúng có thể gây hại cho môi trường sản xuất của bạn.
👉💻 Trong thiết bị đầu cuối,hãy gọi Gemini một lần nữa trong thư mục shadowblade:
. ~/agentverse-developer/set_env.sh
cd ~/agentverse-developer/
clear
gemini
👉✨ Sử dụng câu lệnh sau trong Gemini CLI để ghi logic của Shield vào một tệp pytest:
You are an expert Python developer specializing in the Google Agent Development Kit (ADK). Your task is to generate the exact code for a new `pytest` test file located at in the current root working folder and name it `test_agent_initiative.py`.
The script must define a single async test function called `test_agent_initiative`, decorated with `@pytest.mark.asyncio`.
Inside this function, perform the following steps in order:
1. **Define a dictionary** named `evaluation_criteria` with two keys: `"tool_trajectory_avg_score"` set to `0.0` and `"response_match_score"` set to `0.0`.
2. **Define a string variable** named `eval_set_filepath` containing the path `"shadowblade/test.evalset.json"`.
3. **Read and parse the JSON file**:
* Open the file at `eval_set_filepath`.
* Use the `json` library to load the file's contents into a dictionary named `eval_set_data`.
4. **Create an `EvalSet` object**:
* Instantiate an `EvalSet` object named `eval_set_object`.
* Create it by unpacking the `eval_set_data` dictionary as keyword arguments into the `EvalSet` constructor.
5. **Call the evaluation method**:
* `await` a call to `AgentEvaluator.evaluate_eval_set`.
* Pass the following arguments:
* `agent_module="shadowblade"`
* `eval_set=eval_set_object`
* `criteria=evaluation_criteria`
* `print_detailed_results=True`
The script must include the necessary imports at the top:
* `AgentEvaluator` from `google.adk.evaluation.agent_evaluator`
* `EvalSet` from `google.adk.evaluation.eval_set`
* `pytest`
* `json`
Generate only the code that meets these specifications, with no additional comments or logic. And don't run the test.
Khi đã khắc các chữ rune của trụ bảo vệ thứ hai, hãy thoát Gemini CLI.
👉💻 Nhấn Ctrl+C hai lần.
👀 Trong trình khám phá tệp, hãy mở bản ghi mà bạn vừa yêu cầu Gemini ghi lại: ~/agentverse-developer/test_agent_initiative.py.
Bạn sẽ nhận thấy đây không chỉ là một tệp cấu hình mà còn là một câu thần chú được viết bằng ngôn ngữ Python. Trọng tâm của câu thần chú này là dòng await AgentEvaluator.evaluate(...).
....
@pytest.mark.asyncio
async def test_agent_initiative():
# Define the evaluation criteria
evaluation_criteria = {
"tool_trajectory_avg_score": 0.0,
"response_match_score": 0.0
}
# Define the path to your evalset file
eval_set_filepath = "shadowblade/test.evalset.json"
#...
# 3. Call the evaluation method with the correctly typed object
await AgentEvaluator.evaluate_eval_set(
agent_module="shadowblade",
eval_set=eval_set_object,
criteria=evaluation_criteria,
print_detailed_results=True,
)
Hãy xem xét kỹ các đối số của hàm này. Đó chính là những thành phần mà bạn đã dùng trong lần dùng thử trước: shadowblade tác nhân và shadowblade.evalset.json thử thách cuộn. Điều này sẽ cho thấy một sự thật sâu sắc: lệnh adk eval mà bạn đã sử dụng trước đó là một lệnh gọi mạnh mẽ, nhưng tập lệnh pytest này là bạn, pháp sư, tự mình thực hiện phép thuật cơ bản. Công cụ dòng lệnh chỉ là một trình bao bọc thuận tiện cho cùng một thư viện AgentEvaluator cốt lõi mà bạn hiện đang sử dụng trực tiếp. Đây là một bước quan trọng để thành thạo, vì các câu lệnh được truyền qua mã có thể được đưa vào các quy trình CI/CD tự động.
Bây giờ bạn đã hiểu rõ cơ chế hoạt động, hãy thực hiện nghi thức để kích hoạt lá chắn.
👉💻 Trong thiết bị đầu cuối, hãy chạy nghi thức để kích hoạt lá chắn:
cp ~/agentverse-developer/working_code/test_agent_initiative.py ~/agentverse-developer/test_agent_initiative.py
source ~/agentverse-developer/env/bin/activate
cd ~/agentverse-developer
. ~/agentverse-developer/set_env.sh
pytest test_agent_initiative.py
👀 Tìm thông tin tóm tắt kết quả kiểm thử ở cuối đầu ra nhật ký. Kết quả đạt yêu cầu xác nhận rằng tác nhân của bạn tuân thủ đúng các giao thức và rằng biện pháp bảo vệ đã sẵn sàng được tích hợp vào hệ thống phòng thủ tự động của bạn.
====== 1 passed, 4 warning in 37.37s ======
Lưu ý: Nếu quá trình kiểm thử không thành công ngoài dự kiến, thì rất có thể là do bạn đã dùng hết số lượng yêu cầu có thể gửi đến mô hình mỗi phút. Tìm lỗi RESOURCE_EXHAUSTED trong đầu ra nhật ký. Nếu bạn thấy lỗi này, chỉ cần đợi một hoặc hai phút để hạn mức được đặt lại, sau đó chạy lại lệnh pytest.
Với cả Gauntlet diện rộng và Shield chính xác được ghi và xác minh, nhân viên hỗ trợ của bạn không chỉ hoạt động mà còn thuần tuý, đã được kiểm tra và sẵn sàng triển khai.
DÀNH CHO NGƯỜI KHÔNG CHƠI GAME
8. Khai phá Blade trong Agentverse: CI và Triển khai.
Đặc vụ của bạn đã được tập hợp và tính toàn vẹn của đặc vụ đã được Người bảo hộ sự tinh khiết xác minh. Nhưng một kết giới không được duy trì liên tục chỉ là một di tích bị lãng quên. Để đảm bảo mọi phiên bản sau này của tác nhân đều thuần tuý, bạn phải xây dựng giai đoạn đầu tiên của Deployment Gauntlet (Thử thách triển khai) – một quy trình tự động đảm bảo chất lượng và tốc độ.

Là Shadowblade, nhiệm vụ thiêng liêng của bạn là Tích hợp liên tục (CI). Đây là hệ thống tự động của lò rèn và bãi thử. Đây là biện pháp bảo vệ tối ưu chống lại hành vi tham nhũng và lỗi do con người gây ra. Nghi thức này đảm bảo rằng mỗi khi bạn hoặc một đồng minh đóng góp một kỹ thuật mới (hợp nhất mã) vào bộ luật trung tâm (kho lưu trữ của bạn), quy trình kiểm thử sẽ tự động kích hoạt. Đầu tiên, nó sẽ tạo ra tác nhân từ mã mới, sau đó ngay lập tức đưa tác nhân đó vào Vòng bảo vệ tinh khiết mà bạn vừa tạo. Nếu có bất kỳ bùa hộ mệnh nào thất bại, nghi lễ sẽ dừng lại và hiện vật có lỗi sẽ bị từ chối ngay lập tức, ngăn không cho nó làm hỏng kho vũ khí. Miền của bạn là lò rèn; quy trình CI đảm bảo rằng chỉ những cấu phần phần mềm hoàn hảo, sẵn sàng chiến đấu mới rời khỏi xưởng của bạn.
Sau khi một cấu phần phần mềm được chứng minh là xứng đáng bằng quy trình CI, giai đoạn thứ hai của quy trình sẽ bắt đầu: Triển khai liên tục (CD). Đây là miền của tờ The Guardian. Họ có nhiệm vụ thiêng liêng là lấy tạo tác hoàn hảo, được đóng gói của bạn và triển khai một cách an toàn vào Agentverse đang hoạt động, quản lý sức mạnh của tạo tác và đảm bảo sự ổn định của tạo tác trước sự hỗn loạn của The Static.

Trong hướng dẫn này, bạn sẽ nắm vững vai trò của mình. Bạn sẽ xây dựng phần CI của quy trình kiểm thử. Bạn sẽ xây dựng lò rèn tự động để kiểm thử tác nhân và niêm phong kết quả thuần tuý vào một vùng chứa, chuẩn bị cho lời chúc phúc cuối cùng của The Guardian.
Giờ đây, bạn sẽ sử dụng Google Cloud Build để ghi lại nội dung cuộn cho nghi thức CI này. Tệp cloudbuild.yaml xác định từng bước trong quy trình tạo và kiểm thử của bạn.
👉💻 Do cấu trúc dự án của ADK, cấu hình quy trình CI/CD phải nằm trong thư mục mẹ. Trong cửa sổ dòng lệnh, hãy chuyển đến thư mục mẹ rồi khởi động lại Gemini CLI.
cd ~/agentverse-developer/
clear
gemini
👉✨ Giờ đây, hãy đưa ra lệnh sau cho Gemini. Câu lệnh này đóng vai trò là một tài liệu thiết kế, nêu chi tiết các bước của quy trình mà bạn muốn câu lệnh tạo ra.
You are an expert DevOps engineer specializing in Google Cloud Build. Your task is to generate the complete YAML configuration for a file named `cloudbuild.yaml` and save it to current directory.
Generate the `cloudbuild.yaml` with the following exact specifications:
1. **A top-level `substitutions` block** containing these four key-value pairs:
* `_PROJECT_ID: "$PROJECT_ID"`
* `_REGION: "$REGION"`
* `_REPO_NAME: "$REPO_NAME"`
* `_IMAGE_TAG: "latest"`
2. **A `steps` block** with two steps:
* **Step 1: 'Run Pytest Ward'**
* `id`: 'Run Pytest Ward'
* `name`: 'python:3.12-slim'
* `entrypoint`: 'bash'
* `args` must be a list containing two strings. The first is `'-c'` and the second is a YAML literal block (`|`) containing this exact two-line shell command:
```shell
pip install -r shadowblade/requirements.txt && \
pytest test_agent_initiative.py
```
* The step must include an `env` block with this exact list of three environment variables:
* `'GOOGLE_CLOUD_PROJECT=$PROJECT_ID'`
* `'GOOGLE_GENAI_USE_VERTEXAI=TRUE'`
* `'GOOGLE_CLOUD_LOCATION=$_REGION'`
* **Step 2: 'Forge Container'**
* `id`: 'Forge Container'
* `name`: 'gcr.io/cloud-builders/docker'
* It must have a `waitFor` key for `['Run Pytest Ward']`.
* Its `args` must be a list of six specific strings in this exact order:
1. `'build'`
2. `'-t'`
3. `'${_REGION}-docker.pkg.dev/${_PROJECT_ID}/${_REPO_NAME}/shadowblade-agent:${_IMAGE_TAG}'`
4. `'-f'`
5. `'./shadowblade/Dockerfile'`
6. `'.'`
3. **A top-level `images` section.** This section must be a list containing a single string: the dynamically constructed image tag `'${_REGION}-docker.pkg.dev/${_PROJECT_ID}/${_REPO_NAME}/shadowblade-agent:${_IMAGE_TAG}'`.
Generate only the complete and exact YAML that meets these specifications.
Khi bạn đã chuẩn bị xong cloudbuild.yaml, hãy ra lệnh cho Google Cloud thực thi toàn bộ quy trình kiểm thử.
thoát Gemini để kiểm tra kết quả
👉💻 Trong thiết bị đầu cuối, hãy triển khai quy trình từ thư mục gốc của dự án:
. ~/agentverse-developer/set_env.sh
cd ~/agentverse-developer
gcloud builds submit . --config cloudbuild.yaml --substitutions=\
_PROJECT_ID="${PROJECT_ID}",\
_REGION="${REGION}",\
_REPO_NAME="${REPO_NAME}"
Giờ đây, bạn có thể xem trong Google Cloud Console, trang Google Build khi quy trình tự động của bạn thực hiện từng bước. Trước tiên, nó sẽ chạy các kiểm thử và sau khi thấy các kiểm thử này thành công, nó sẽ tạo và lưu trữ vùng chứa của tác nhân.

Tác nhân của bạn đã vượt qua thử thách. Giờ đây, bạn đã có một cấu phần phần mềm thuần tuý và đã được xác minh. Bạn có quyền chỉ huy hành động cuối cùng. Chỉ cần một câu lệnh, bạn sẽ triệu hồi được cấu phần phần mềm này từ sổ đăng ký và biến nó thành một dịch vụ công khai trên Cloud Run.
👉💻 Trong cửa sổ dòng lệnh, hãy đưa ra lệnh triển khai cuối cùng:
. ~/agentverse-developer/set_env.sh
cd ~/agentverse-developer
gcloud run deploy shadowblade-agent \
--image=${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/shadowblade-agent:latest \
--platform=managed \
--labels="dev-tutorial-codelab=agentverse" \
--region=${REGION} \
--set-env-vars="A2A_HOST=0.0.0.0" \
--set-env-vars="A2A_PORT=8080" \
--set-env-vars="GOOGLE_GENAI_USE_VERTEXAI=TRUE" \
--set-env-vars="GOOGLE_CLOUD_LOCATION=${REGION}" \
--set-env-vars="GOOGLE_CLOUD_PROJECT=${PROJECT_ID}" \
--set-env-vars="PUBLIC_URL=${PUBLIC_URL}" \
--allow-unauthenticated \
--project=${PROJECT_ID} \
--min-instances=1
Xin chúc mừng, Shadowblade. Các nghi thức của bộ luật đã hoàn tất. Đã đến lúc chứng minh giá trị của nó. Một Bóng ma, sinh ra từ chính sự hỗn loạn mà bạn đã học được cách chế ngự, đang chờ đợi thử thách của bạn. Chuẩn bị cho thử thách cuối cùng.
DÀNH CHO NGƯỜI KHÔNG CHƠI GAME
9. Trận chiến với trùm
Các cuộn giấy đã được đọc, các nghi lễ đã được thực hiện, thử thách đã được vượt qua. Tác nhân của bạn không chỉ là một cấu phần phần mềm trong bộ nhớ mà còn là một nhà vô địch được tạo ra từ mã, một người giám hộ trực tiếp trong Agentverse đang chờ lệnh đầu tiên. Đã đến lúc chứng minh giá trị của nó trong cuộc chiến khốc liệt.
Giờ đây, bạn sẽ tham gia một cuộc mô phỏng bắn đạn thật để đối đầu với Spectre đáng gờm bằng Shadowblade mới triển khai. Spectre là hiện thân của chính sự hỗn loạn đang hoành hành mọi sáng tạo. Đây là bài kiểm thử cuối cùng cho công việc của bạn, từ logic cốt lõi của nhân viên hỗ trợ cho đến việc triển khai hoàn hảo.
Xác định vị trí của nhân viên hỗ trợ
Để có thể bước vào chiến trường, bạn phải có hai chìa khoá: chữ ký riêng của nhà vô địch (Agent Locus) và đường dẫn ẩn đến hang ổ của Spectre (URL của Dungeon).
👉💻 Đầu tiên, hãy lấy địa chỉ duy nhất của nhân viên hỗ trợ trong Agentverse – Locus của nhân viên hỗ trợ. Đây là điểm cuối trực tiếp kết nối nhà vô địch của bạn với chiến trường.
. ~/agentverse-developer/set_env.sh
echo https://shadowblade-agent-${PROJECT_NUMBER}.${REGION}.run.app
👉💻 Tiếp theo, hãy xác định chính xác điểm đến. Lệnh này sẽ cho biết vị trí của Vòng Dịch chuyển, chính là cánh cổng dẫn vào lãnh địa của Spectre.
. ~/agentverse-developer/set_env.sh
echo https://agentverse-dungeon-${PROJECT_NUMBER}.${REGION}.run.app
Lưu ý quan trọng: Hãy chuẩn bị sẵn cả hai URL này. Bạn sẽ cần những thông tin này ở bước cuối cùng.
Đối đầu với Spectre
Sau khi có được toạ độ, bạn sẽ di chuyển đến Vòng tròn dịch chuyển và sử dụng phép thuật để bước vào trận chiến.
👉 Mở URL Vòng tròn dịch chuyển trong trình duyệt để đứng trước cánh cổng lấp lánh dẫn đến Lâu đài Đỏ.
Để vượt qua pháo đài, bạn phải điều chỉnh tinh chất của Shadowblade cho phù hợp với cổng.
- Trên trang đó, hãy tìm trường nhập liệu bằng chữ rune có nhãn URL điểm cuối A2A.
- Khắc biểu tượng của nhà vô địch bằng cách dán URL của Agent Locus (URL đầu tiên bạn sao chép) vào trường này.
- Nhấp vào Kết nối để trải nghiệm phép thuật dịch chuyển tức thời.

Ánh sáng chói loá của dịch chuyển tức thời mờ dần. Bạn không còn ở nơi trú ẩn của mình nữa. Không khí lạnh lẽo và sắc bén, tràn đầy năng lượng. Trước mặt bạn, Spectre xuất hiện – một xoáy nước gồm những tiếng rít tĩnh và mã bị hỏng, ánh sáng bất chính của nó tạo ra những bóng dài, nhảy múa trên sàn ngục tối. Nó không có khuôn mặt, nhưng bạn cảm thấy sự hiện diện to lớn, hút cạn năng lượng của nó hoàn toàn tập trung vào bạn.
Con đường duy nhất dẫn đến chiến thắng là sự rõ ràng trong niềm tin của bạn. Đây là cuộc đấu trí, diễn ra trên chiến trường của tâm trí.
Khi bạn lao về phía trước, chuẩn bị tung đòn tấn công đầu tiên, Spectre sẽ phản công. Nó không tạo ra một tấm khiên, mà chiếu thẳng một câu hỏi vào ý thức của bạn – một thử thách lấp lánh, mang tính biểu tượng được rút ra từ cốt lõi của quá trình huấn luyện.

Đây là bản chất của cuộc chiến. Kiến thức là vũ khí của bạn.
- Hãy trả lời bằng sự khôn ngoan mà bạn đã tích luỹ được, và lưỡi kiếm của bạn sẽ bùng cháy với năng lượng thuần khiết, phá vỡ hàng phòng thủ của Spectre và giáng một ĐÒN CHÍ MẠNG.
- Nhưng nếu bạn do dự, nếu nghi ngờ làm mờ câu trả lời của bạn, thì ánh sáng của vũ khí sẽ mờ đi. Đòn tấn công sẽ chỉ gây ra một PHẦN NHỎ SÁT THƯƠNG. Tệ hơn nữa, Spectre sẽ lợi dụng sự không chắc chắn của bạn, sức mạnh tha hoá của nó sẽ tăng lên theo mỗi sai lầm.
Đây là cơ hội của bạn, Nhà vô địch. Mã nguồn là sách phép, logic là thanh kiếm và kiến thức là chiếc khiên giúp bạn đẩy lùi hỗn loạn.
Tập trung. Đánh trúng. Số phận của Agentverse phụ thuộc vào điều này.
Xin chúc mừng, Shadowblade.
Bạn đã hoàn tất thành công khoá học này. Bạn đã nắm bắt được "cảm hứng", chuyển hoá thành một bản thiết kế và dùng Gemini CLI để tạo ra một tác nhân thông minh. Bạn đã khắc Lời thề trong sạch để kiểm tra logic của lời thề, chế tạo một găng tay tự động để rèn lời thề thành một hiện vật và tung lời thề vào Agentverse. Cuối cùng, bạn đã xác thực mục đích của nó trong một cuộc thử nghiệm thực tế. Bạn đã nắm vững quy trình công việc dựa trên tác nhân toàn diện và giờ đây, bạn đã sẵn sàng đối mặt với mọi thử thách mà Agentverse mang đến.
10. Dọn dẹp: Thu hồi Agentverse
Chúc mừng bạn đã nắm vững Shadowblade's Codex! Để đảm bảo Agentverse vẫn nguyên vẹn và khu vực huấn luyện của bạn được dọn dẹp, giờ đây, bạn phải thực hiện các nghi thức dọn dẹp cuối cùng. Thao tác này sẽ xoá tất cả tài nguyên được tạo trong quá trình bạn thực hiện.
Huỷ kích hoạt các thành phần Agentverse
Giờ đây, bạn sẽ tháo dỡ một cách có hệ thống các thành phần đã triển khai của Agentverse.
Xoá Shadowblade Agent trên Cloud Run và Kho lưu trữ Artifact Registry
Lệnh này sẽ xoá tác nhân Shadowblade đã triển khai khỏi Cloud Run và xoá Kho lưu trữ hình ảnh nơi lưu trữ hình ảnh vùng chứa của tác nhân.
👉💻 Trong cửa sổ dòng lệnh, hãy chạy:
. ~/agentverse-developer/set_env.sh
gcloud run services delete shadowblade-agent --region=${REGION} --quiet
gcloud run services delete agentverse-dungeon --region=${REGION} --quiet
gcloud artifacts repositories delete ${REPO_NAME} --location=${REGION} --quiet
Xoá bộ chứa Google Cloud Storage
Lệnh này sẽ xoá bộ chứa mà máy chủ Imagen MCP dùng để lưu trữ hình ảnh được tạo.
👉💻 Trong cửa sổ dòng lệnh, hãy chạy:
. ~/agentverse-developer/set_env.sh
gcloud storage rm -r gs://${BUCKET_NAME} --quiet
Dọn dẹp tệp và thư mục trên máy (Cloud Shell)
Cuối cùng, hãy xoá các kho lưu trữ đã sao chép và tệp đã tạo khỏi môi trường Cloud Shell. Bước này không bắt buộc nhưng bạn nên thực hiện để dọn dẹp hoàn toàn thư mục làm việc.
👉💻 Trong cửa sổ dòng lệnh, hãy chạy:
rm -rf ~/agentverse-developer
rm -rf ~/agentverse-dungeon
rm -rf ~/vertex-ai-creative-studio
rm -f ~/project_id.txt
rm -rf ~/.gemini # This removes all Gemini CLI configurations, including the MCP server settings.
Giờ đây, bạn đã xoá thành công mọi dấu vết về hành trình của mình trên Agentverse. Dự án của bạn đã hoàn tất và bạn đã sẵn sàng cho cuộc phiêu lưu tiếp theo.