Xây dựng các Đặc vụ AI bằng ADK: Hỗ trợ bằng các công cụ

1. Trước khi bắt đầu

Chào mừng bạn đến với phần thứ hai của loạt bài "Tạo tác nhân AI bằng ADK"! Trong lớp học lập trình thực hành này, bạn sẽ cung cấp nhiều công cụ cho một tác nhân AI cơ bản.

Để bắt đầu, hướng dẫn này cung cấp 2 cách: một cách dành cho những người tiếp tục từ lớp học lập trình Tạo tác nhân AI bằng ADK: Nền tảng và một cách dành cho những người bắt đầu từ đầu. Cả hai cách đều đảm bảo bạn có mã tác nhân cơ bản cần thiết để bắt đầu.

Khi kết thúc lớp học lập trình này, bạn sẽ cung cấp cho tác nhân trợ lý cá nhân các công cụ cho nhiều mục đích, tiến thêm một bước để mở rộng trong các phần tiếp theo của loạt bài này khi chúng ta chuyển đổi tác nhân đó thành Hệ thống nhiều tác nhân (MAS) phức tạp.

Bạn cũng có thể truy cập vào lớp học lập trình này thông qua URL rút gọn sau: goo.gle/adk-using-tools.

Điều kiện tiên quyết

Kiến thức bạn sẽ học được

  • Cung cấp cho tác nhân các kỹ năng mới bằng cách tạo các hàm Python tuỳ chỉnh làm công cụ.
  • Kết nối tác nhân với thông tin theo thời gian thực bằng các công cụ tích hợp như Google Tìm kiếm.
  • Cấu trúc tác nhân nhiều công cụ bằng cách tạo các tác nhân phụ chuyên biệt cho các tác vụ phức tạp.
  • Tích hợp các công cụ từ các khung AI phổ biến như LangChain để nhanh chóng mở rộng các khả năng.

Bạn cần có

  • Máy tính hoạt động và WiFi đáng tin cậy
  • Trình duyệt, chẳng hạn như Chrome, để truy cập vào Google Cloud Console
  • Tâm trí tò mò và háo hức học hỏi

2. Giới thiệu

Một tác nhân cơ bản được tạo bằng ADK có bộ não LLM mạnh mẽ, nhưng cũng có những hạn chế: tác nhân đó không thể truy cập vào thông tin được tạo sau ngày huấn luyện và không thể tương tác với các dịch vụ bên ngoài. Tác nhân đó giống như một trợ lý thông minh, giỏi kiến thức sách vở nhưng bị nhốt trong thư viện mà không có điện thoại hoặc Internet. Để tác nhân thực sự hữu ích, chúng ta cần cung cấp cho tác nhân đó các công cụ.

Hãy nghĩ về các công cụ như việc cấp cho trợ lý AI đó quyền truy cập vào thế giới bên ngoài: máy tính, trình duyệt web hoặc quyền truy cập vào cơ sở dữ liệu cụ thể của công ty. Trong ADK, công cụ là một đoạn mã mô-đun cho phép tác nhân thực hiện các hành động cụ thể như tra cứu dữ liệu theo thời gian thực hoặc gọi API bên ngoài. Việc sử dụng các công cụ sẽ mở rộng khả năng của tác nhân vượt xa cuộc trò chuyện đơn giản.

ADK cung cấp 3 danh mục công cụ:

  1. Công cụ hàm: Các công cụ tuỳ chỉnh mà bạn phát triển để đáp ứng các yêu cầu riêng của ứng dụng, chẳng hạn như các hàm và tác nhân được xác định trước.
  2. Công cụ tích hợp: Các công cụ sẵn sàng sử dụng do khung cung cấp cho các thao tác phổ biến, chẳng hạn như Google Tìm kiếm và Thực thi mã.
  3. Công cụ của bên thứ ba: Các thư viện bên ngoài phổ biến như Serper và các công cụ của LangChain và CrewAI.

Để tìm hiểu thêm về cách sử dụng Công cụ với Tác nhân ADK, hãy xem tài liệu chính thức. Trong lớp học lập trình này, chúng ta sẽ thêm các công cụ để chuyển đổi tác nhân đơn giản thành trợ lý du lịch cá nhân có khả năng. Hãy bắt đầu!

3. Bắt đầu: Tác nhân cơ bản

Trước khi có thể cung cấp các công cụ cho tác nhân, bạn cần có một tác nhân cơ bản để làm việc. Chọn cách phù hợp nhất với tiến trình của bạn.

Cách A: Tiếp tục từ Lớp học lập trình nền tảng

Nếu bạn vừa hoàn thành lớp học lập trình Tạo tác nhân AI bằng ADK: Nền tảng, thì bạn đã sẵn sàng. Bạn có thể tiếp tục làm việc trong thư mục dự án ai-agents-adk hiện có.

Nếu bạn không thấy (ai-agents-adk) trong dấu nhắc Cloud Shell, hãy chạy các lệnh sau để kích hoạt môi trường ảo Python:

cd ~/ai-agents-adk
source .venv/bin/activate

Cách B: Bắt đầu từ đầu

Nếu bạn bắt đầu lớp học lập trình này trực tiếp, hãy hoàn tất 4 bước sau để thiết lập môi trường và tạo tác nhân khởi đầu cần thiết.

  1. Định cấu hình Dịch vụ Google Cloud
  2. Tạo môi trường ảo Python
  3. Tạo tác nhân
  4. Chạy tác nhân trên Giao diện người dùng phát triển

Sau khi hoàn tất các bước, bạn đã sẵn sàng bắt đầu hành trình học tập.

4. Tạo công cụ tuỳ chỉnh để trao đổi tiền tệ

Ở giai đoạn này, bạn đã biết cách tạo tác nhân AI đơn giản bằng ADK và chạy tác nhân đó trên Giao diện người dùng phát triển.

Hãy tưởng tượng bạn đang chuẩn bị cho chuyến đi Nhật Bản vào tháng tới và cần kiểm tra tỷ giá hối đoái hiện tại. Hỏi tác nhân "Tỷ giá hối đoái từ đô la Singapore sang yên Nhật là bao nhiêu?"

7b3c502f88e8ab80.png

Bạn sẽ thấy rằng tác nhân không thể truy xuất tỷ giá hối đoái theo thời gian thực. Lý do là vì tác nhân hiện không có quyền truy cập Internet và kết nối hệ thống bên ngoài. Ngay cả khi tác nhân trả lời bằng một giá trị, thì bạn cũng khó có thể tin tưởng giá trị đó vì có khả năng đó là thông tin ảo.

Để giải quyết vấn đề này, chúng ta sẽ triển khai một hàm Python để truy xuất tỷ giá hối đoái thông qua REST API và tích hợp hàm đó dưới dạng Công cụ hàm cho tác nhân.

Chấm dứt quá trình tác nhân đang chạy bằng cách sử dụng phím tắt Ctrl + C trong cửa sổ dòng lệnh.

Tạo tệp custom_functions.py

Thực thi lệnh này trong dòng lệnh để tạo tệp Python có tên là custom_functions.py trong thư mục personal_assistant, đồng thời mở tệp đó trên Trình soạn thảo mã.

cloudshell edit personal_assistant/custom_functions.py

Cấu trúc thư mục của bạn hiện sẽ có dạng như sau:

ai-agents-adk/
└── personal_assistant/
    ├── .env
    ├── __init__.py
    ├── agent.py
    └── custom_functions.py

Tệp custom_functions.py này sẽ chứa hàm Python chịu trách nhiệm truy xuất dữ liệu tỷ giá hối đoái từ một API bên ngoài. Sao chép và dán đoạn mã sau vào tệp:

import requests

# define a function to get exchange rate
def get_fx_rate(base: str, target: str):
        """
        Fetches the current exchange rate between two currencies.

        Args:
                base: The base currency (e.g., "SGD").
                target: The target currency (e.g., "JPY").

        Returns:
                The exchange rate information as a json response,
                or None if the rate could not be fetched.
        """
        base_url = "https://hexarate.paikama.co/api/rates/latest"
        api_url = f"{base_url}/{base}?target={target}"

        response = requests.get(api_url)
        if response.status_code == 200:
                return response.json()

Bây giờ, hãy chỉnh sửa tệp agent.py: nhập hàm get_fx_rate và chỉ định hàm đó làm FunctionTool.

Cập nhật tệp agent.py

Sao chép khối mã này và thay thế nội dung hiện có của tệp agent.py:

from google.adk.agents import Agent
from google.adk.tools import FunctionTool

from .custom_functions import get_fx_rate

root_agent = Agent(
    model='gemini-3.5-flash',
    name='root_agent',
    description='A helpful assistant for user questions.',
    instruction='Answer user questions to the best of your knowledge',
    tools=[FunctionTool(get_fx_rate)]
)

Sau khi thay đổi, hãy khởi động lại tác nhân bằng cách nhập:

adk web --allow_origins "regex:https://.*\.cloudshell\.dev"

Khi tác nhân hoạt động, hãy hỏi lại câu hỏi tương tự: "Tỷ giá hối đoái từ đô la Singapore sang yên Nhật là bao nhiêu?"

Lần này, bạn sẽ thấy tỷ giá hối đoái thực tế do công cụ get_fx_rate cung cấp.

76b1647fbfc0687a.png

Bạn có thể thoải mái hỏi bất kỳ câu hỏi nào liên quan đến trao đổi tiền tệ.

5. Tích hợp với Công cụ Google Tìm kiếm tích hợp

Giờ đây, tác nhân có thể cung cấp tỷ giá hối đoái, nhiệm vụ tiếp theo là lấy dự báo thời tiết của tháng tới. Hỏi tác nhân câu hỏi này: "Dự báo thời tiết ở Tokyo, Nhật Bản vào tháng tới là gì?"

399f40c4ea3e0bb3.png

Như bạn có thể dự đoán, dự báo thời tiết yêu cầu thông tin theo thời gian thực mà tác nhân của chúng ta không có. Mặc dù chúng ta có thể viết mã các hàm Python mới cho từng trường hợp sử dụng yêu cầu dữ liệu theo thời gian thực, nhưng việc thêm ngày càng nhiều công cụ tuỳ chỉnh sẽ nhanh chóng khiến tác nhân trở nên quá phức tạp và khó quản lý.

May mắn thay, Bộ công cụ phát triển tác nhân (ADK) cung cấp một bộ Công cụ tích hợp, bao gồm cả Google Tìm kiếm đã sẵn sàng sử dụng, giúp đơn giản hoá cách tác nhân của chúng ta tương tác với thế giới bên ngoài.

Để trang bị cho tác nhân công cụ Google Tìm kiếm, bạn cần triển khai mẫu nhiều tác nhân. Trước tiên, bạn tạo một tác nhân chuyên biệt có nhiệm vụ duy nhất là thực hiện tìm kiếm trên Google. Sau đó, bạn chỉ định Tác nhân Google Tìm kiếm mới này cho personal_assistant chính của chúng ta làm công cụ. Sau đây là các bước:

Tạo tệp custom_agents.py

Chạy lệnh này trong dòng lệnh để tạo tệp Python có tên là custom_agents.py trong thư mục personal_assistantmở tệp đó trên Trình soạn thảo mã:

cloudshell edit personal_assistant/custom_agents.py

Cấu trúc thư mục của bạn hiện sẽ có dạng như sau:

ai-agents-adk/
└── personal_assistant/
    ├── .env
    ├── __init__.py
    ├── agent.py
    ├── custom_functions.py
    └── custom_agents.py

Tệp custom_agents.py này sẽ chứa mã cho google_search_agent chuyên biệt. Sao chép đoạn mã sau vào tệp custom_agents.py:

from google.adk.agents import Agent
from google.adk.tools import google_search


# Create an agent with google search tool as a search specialist
google_search_agent = Agent(
    model='gemini-3.5-flash',
    name='google_search_agent',
    description='A search agent that uses google search to get latest information about current events, weather, or business hours.',
    instruction='Use google search to answer user questions about real-time, logistical information.',
    tools=[google_search],
)

Sau khi tạo tệp, hãy cập nhật tệp agent.py như minh hoạ bên dưới.

Cập nhật tệp agent.py

Sao chép khối mã này và thay thế nội dung hiện có của tệp agent.py:

from google.adk.agents import Agent
from google.adk.tools import FunctionTool
from google.adk.tools.agent_tool import AgentTool

from .custom_functions import get_fx_rate
from .custom_agents import google_search_agent


root_agent = Agent(
    model='gemini-3.5-flash',
    name='root_agent',
    description='A helpful assistant for user questions.',
    tools=[
        FunctionTool(get_fx_rate),
        AgentTool(agent=google_search_agent),
    ]
)

Hãy phân tích mẫu mới mạnh mẽ trong mã:

  • Tác nhân chuyên gia mới: Chúng ta đã xác định một tác nhân hoàn toàn mới, google_search_agent. Hãy lưu ý đến nội dung mô tả cụ thể và rằng công cụ duy nhất của tác nhân đó là google_search. Đây là một chuyên gia tìm kiếm.
  • agent_tool.AgentTool: Đây là trình bao bọc đặc biệt của ADK. Trình bao bọc này lấy toàn bộ tác nhân (google_search_agent của chúng ta) và đóng gói tác nhân đó để trông và hoạt động như một công cụ tiêu chuẩn.
  • root_agent thông minh hơn: root_agent của chúng ta hiện có một công cụ mới: AgentTool(agent=google_search_agent). Tác nhân này không biết cách tìm kiếm trên web, nhưng biết rằng tác nhân này có một công cụ mà tác nhân đó có thể uỷ quyền các tác vụ tìm kiếm.

Hãy lưu ý rằng trường hướng dẫn đã biến mất khỏi root_agent. Các hướng dẫn của tác nhân này hiện được xác định ngầm bởi các công cụ mà tác nhân đó có.

root_agent đã trở thành một trình điều phối hoặc bộ định tuyến, có nhiệm vụ chính là hiểu yêu cầu của người dùng và chuyển yêu cầu đó đến công cụ chính xác, có thể là hàm get_fx_rate hoặc google_search_agent. Thiết kế phi tập trung này là chìa khoá để xây dựng các hệ thống tác nhân phức tạp và dễ bảo trì.

Bây giờ, hãy nhập lệnh này vào dòng lệnh để khởi động thực thể:

adk web --allow_origins "regex:https://.*\.cloudshell\.dev"

Sau khi tác nhân đang chạy, hãy hỏi lại tác nhân câu hỏi này: "Dự báo thời tiết ở Tokyo, Nhật Bản vào tháng tới là gì?"

8a2a6d9532b54301.png

Tác nhân hiện đang sử dụng google_search_agent để lấy thông tin mới nhất

Bạn cũng có thể thử hỏi câu hỏi về tỷ giá hối đoái hiện tại. Giờ đây, tác nhân sẽ có thể sử dụng công cụ phù hợp cho câu hỏi tương ứng.

ff3739a0b5ede6c2.png

Bạn có thể thoải mái hỏi tác nhân các câu hỏi khác yêu cầu thông tin theo thời gian thực và quan sát cách tác nhân xử lý các truy vấn bằng các công cụ mà tác nhân đó có.

6. Khai thác công cụ Wikipedia của LangChain

Tác nhân của chúng ta đang trở thành một trợ lý du lịch tuyệt vời. Tác nhân đó có thể xử lý việc trao đổi tiền tệ bằng công cụ get_fx_rate và quản lý hoạt động hậu cần bằng công cụ google_search_agent. Tuy nhiên, một chuyến đi tuyệt vời không chỉ là về hoạt động hậu cần mà còn là về việc hiểu rõ văn hoá và lịch sử của điểm đến.

Mặc dù google_search_agent có thể tìm thấy các sự kiện văn hoá và lịch sử, nhưng thông tin từ một nguồn chuyên dụng như Wikipedia thường có cấu trúc và đáng tin cậy hơn.

May mắn thay, ADK được thiết kế để có khả năng mở rộng cao, cho phép bạn tích hợp liền mạch các công cụ từ các khung Tác nhân AI khác như CrewAI và LangChain. Khả năng tương tác này là rất quan trọng vì giúp rút ngắn thời gian phát triển và cho phép bạn sử dụng lại các công cụ hiện có. Đối với trường hợp sử dụng này, chúng ta sẽ tận dụng các công cụ Wikipedia của LangChain.

Trước tiên, hãy dừng quá trình tác nhân đang chạy (Ctrl + C) và cài đặt các thư viện bổ sung vào môi trường ảo Python hiện tại bằng cách nhập các lệnh sau vào Dòng lệnh.

uv pip install langchain-community wikipedia

Tạo tệp third_party_tools.py

Lệnh sau đây tạo tệp Python có tên là third_party_tools.py trong thư mục personal_assistantmở tệp đó trên Cloud Editor:

cloudshell edit personal_assistant/third_party_tools.py

Cấu trúc thư mục của bạn hiện sẽ có dạng như sau:

ai-agents-adk/
└── personal_assistant/
    ├── .env
    ├── __init__.py
    ├── agent.py
    ├── custom_functions.py
    ├── custom_agents.py
    └── third_party_tools.py

Tệp này sẽ chứa phương thức triển khai cho công cụ Wikipedia của LangChain. Sao chép đoạn mã sau vào tệp third_party_tools.py:

from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper

# Configure the Wikipedia LangChain tool to act as our cultural guide
langchain_wikipedia_tool = WikipediaQueryRun(
    api_wrapper=WikipediaAPIWrapper(top_k_results=1, doc_content_chars_max=3000)
)

# Give the tool a more specific description for our agent
langchain_wikipedia_tool.description = (
    "Provides deep historical and cultural information on landmarks, concepts, and places."
    "Use this for 'tell me about' or 'what is the history of' type questions."
)

Cập nhật tệp agent.py

Bây giờ, hãy cập nhật tệp agent.py bằng nội dung bên dưới:

from google.adk.agents import Agent
from google.adk.tools import FunctionTool
from google.adk.tools.agent_tool import AgentTool
from google.adk.tools.langchain_tool import LangchainTool

from .custom_functions import get_fx_rate
from .custom_agents import google_search_agent
from .third_party_tools import langchain_wikipedia_tool


root_agent = Agent(
    model='gemini-3.5-flash',
    name='root_agent',
    description='A helpful assistant for user questions.',
    tools=[
        FunctionTool(get_fx_rate),
        AgentTool(agent=google_search_agent),
        LangchainTool(langchain_wikipedia_tool),
    ]
)

Bây giờ, hãy nhập lệnh này vào dòng lệnh để khởi động thực thể:

adk web --allow_origins "regex:https://.*\.cloudshell\.dev"

Khi tác nhân đã sẵn sàng, hãy hỏi tác nhân câu hỏi này: "Hãy cho tôi biết về lịch sử của Kyoto".

9098274a483dee32.png

Tác nhân xác định chính xác đây là truy vấn lịch sử và sử dụng công cụ Wikipedia mới. Bằng cách tích hợp công cụ của bên thứ ba và chỉ định vai trò cụ thể cho công cụ đó, bạn đã giúp tác nhân của mình thông minh và hữu ích hơn đáng kể cho mục đích lập kế hoạch du lịch.

Để xem chính xác cách tác nhân đưa ra lựa chọn này, bạn có thể sử dụng trình kiểm tra sự kiện trong giao diện người dùng adk web. Nhấp vào thẻ Sự kiện, sau đó nhấp vào sự kiện functionCall gần đây nhất.

eb2cdb9806cd3734.png

Trình kiểm tra cho thấy danh sách tất cả các công cụ có sẵn và làm nổi bật tool_code cho công cụ được tác nhân thực thi.

119d55bfb0b36e17.png

7. Dọn dẹp (Không bắt buộc)

Vì lớp học lập trình này không liên quan đến bất kỳ sản phẩm chạy trong thời gian dài nào, nên bạn chỉ cần dừng các phiên tác nhân đang hoạt động (ví dụ: thực thể adk web trong dòng lệnh) bằng cách nhấn Ctrl + C trong dòng lệnh là đủ.

Xoá thư mục và tệp dự án tác nhân

Nếu bạn chỉ muốn xoá mã khỏi môi trường Cloud Shell, hãy sử dụng các lệnh sau:

cd ~
rm -rf ai-agents-adk

Tắt Vertex AI API

Để tắt Vertex AI API đã bật trước đó, hãy chạy lệnh sau:

gcloud services disable aiplatform.googleapis.com

Tắt toàn bộ Dự án trên Google Cloud

Nếu bạn muốn tắt hoàn toàn dự án trên Google Cloud, hãy tham khảo hướng dẫn chính thức để biết hướng dẫn chi tiết.

8. Kết luận

Xin chúc mừng! Bạn đã cung cấp thành công các hàm tuỳ chỉnh và quyền truy cập vào Google Tìm kiếm theo thời gian thực cho tác nhân trợ lý cá nhân. Hãy đọc tài liệu chính thức này về cách sử dụng các công cụ với Google ADK.

Quan trọng hơn, bạn đã học được mẫu kiến trúc cơ bản để tạo các tác nhân có khả năng: sử dụng các tác nhân chuyên biệt làm công cụ. Bằng cách tạo google_search_agent chuyên dụng và cung cấp tác nhân đó cho root_agent, bạn đã thực hiện bước đầu tiên từ việc tạo một tác nhân duy nhất đến việc điều phối một hệ thống nhiều tác nhân đơn giản nhưng mạnh mẽ.

Giờ đây, bạn đã chuẩn bị sẵn sàng cho lớp học lập trình tiếp theo (sắp ra mắt) trong loạt bài này, nơi chúng ta sẽ tìm hiểu sâu hơn về việc điều phối nhiều tác nhân và quy trình làm việc. Hẹn gặp bạn ở lớp học này nhé!