1. Trước khi bắt đầu
Chào mừng bạn đến với phần thứ hai của loạt video "Xây dựng các tác nhân AI bằng ADK"! Trong chuỗi lớp học lập trình thực hành này, bạn sẽ bắt đầu hành trình thú vị để tạo ra tác nhân AI thông minh của riêng mình bằng Bộ công cụ phát triển tác nhân (ADK) của Google.
Lớp học lập trình này tiếp nối từ lớp học lập trình cơ bản về ADK. Chúng tôi giả định rằng bạn đã hoàn tất các bước thiết lập cần thiết và đã tạo thành công tác nhân trợ lý cá nhân bằng ADK tại thời điểm này, vì vậy chúng tôi sẽ không lặp lại các bước thiết lập đó ở đây.
Khi kết thúc lớp học lập trình này, bạn sẽ trang bị cho trợ lý cá nhân của mình 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 biến trợ lý đó thành một Hệ thống đa tác nhân (MAS) tinh vi.
Điều kiện tiên quyết
- Hiểu rõ các khái niệm về AI tạo sinh
- Có kiến thức cơ bản về lập trình Python
- Đã hoàn thành lớp học lập trình cơ bản về ADK
Kiến thức bạn sẽ học được
- Cung cấp cho tác nhân của bạn các kỹ năng mới bằng cách tạo các hàm Python tuỳ chỉnh dưới dạng công cụ.
- Kết nối tác nhân của bạn với thông tin theo thời gian thực bằng các công cụ tích hợp sẵn như Google Tìm kiếm.
- Cấu trúc một tác nhân đa 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 chức năng.
Bạn cần có
- Máy tính hoạt động và Wi-Fi đáng tin cậy
- Một trình duyệt, chẳng hạn như Chrome, để truy cập vào Google Cloud Console
- Một Dự án trên Google Cloud đã bật tính năng thanh toán
- Có trí tò mò và ham học hỏi
2. Giới thiệu
Trong lớp học lập trình cơ bản về ADK, bạn đã tạo một tác nhân trợ lý cá nhân có bộ não LLM mạnh mẽ. Tuy nhiên, có thể bạn đã nhận thấy những hạn chế của mô hình này: mô hình 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. Giống như một trợ lý thông minh, hiểu biết bị mắc kẹt trong thư viện mà không có điện thoại hoặc Internet.
Để nhân viên hỗ trợ của chúng ta thực sự hữu ích, chúng ta cần cung cấp cho nhân viên đó các công cụ.
Hãy coi các công cụ như việc cấp cho trợ lý thông minh đó 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 một cơ sở dữ liệu cụ thể của công ty. Trong ADK, công cụ là một đoạn mã theo 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 một API bên ngoài. Việc sử dụng các công cụ giúp AI đàm thoại có khả năng vượt xa một cuộc trò chuyện đơn thuần.
ADK cung cấp 3 danh mục công cụ:
- Công cụ chức năng: 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.
- Công cụ tích hợp: Các công cụ có sẵn 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ã.
- 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 ADK Agents, 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ụ để biến tác nhân đơn giản của mình thành một trợ lý du lịch cá nhân có năng lực. Bắt đầu nào!
3. Thêm một Công cụ hàm
Tiếp tục từ phiên trước, bạn sẽ có một trợ lý cá nhân đang chạy thông qua giao diện web.
Giả sử bạn đang chuẩn bị cho chuyến đi đến 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 nhân viên hỗ trợ:
What is the exchange rate from Singapore dollars to Japanese yen?
Bạn sẽ thấy rằng trợ lý không thể truy xuất tỷ giá hối đoái theo thời gian thực. Lý do là vì hiện tại, trợ lý không có quyền truy cập vào Internet và không kết nối được với hệ thống bên ngoài. Để 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 này dưới dạng một Công cụ hàm cho tác nhân.
Trước tiên, hãy kết thúc quy trình tác nhân đang chạy bằng cách sử dụng phím tắt Ctrl + C (đối với Windows/Linux) hoặc Cmd + C (đối với macOS).
Sau đó, hãy tạo một tệp Python có tên là custom_functions.py
. Tệp 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.
Tạo custom_functions.py
:
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
.
Đang cập nhật 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-2.0-flash-001',
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:
uv run adk web
Khi tác nhân hoạt động, hãy hỏi lại câu hỏi tương tự:
What is the exchange rate from Singapore dollars to Japanese yen?
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.
Bạn có thể đặt bất kỳ câu hỏi nào liên quan đến việc đổi ngoại tệ.
4. Thêm công cụ tích hợp
Giờ đây, khi có thể cung cấp tỷ giá hối đoái, tác vụ tiếp theo là lấy thông tin dự báo thời tiết của tháng tới. Đặt câu hỏi này cho nhân viên hỗ trợ:
What is the weather forecast in Tokyo, Japan for next month?
Như bạn có thể thấy, thông tin dự báo thời tiết cần có thông tin theo thời gian thực mà nhân viên hỗ trợ của chúng tôi không có. Mặc dù có thể viết mã các hàm Python mới cho từng phần dữ liệu theo thời gian thực cần thiết, 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ý.
Rất may là Bộ công cụ phát triển (ADK) của Trợ lý cung cấp một bộ công cụ tích hợp sẵn, bao gồm cả Google Tìm kiếm, sẵn sàng sử dụng, giúp đơn giản hoá cách trợ lý của chúng tôi tương tác với thế giới bên ngoài. Hãy thêm một công cụ Tìm kiếm của Google vào tác nhân của chúng ta. Để làm việc đó, bạn cần chỉnh sửa tệp agent.py
như sau:
from google.adk.agents import Agent
from google.adk.tools import FunctionTool
from google.adk.tools import google_search
from .custom_functions import get_fx_rate
root_agent = Agent(
model='gemini-2.0-flash-001',
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),
google_search,
]
)
Sau khi bạn chỉnh sửa tệp, hãy khởi động lại phiên bản adk web
. Trong trường hợp bạn quên,
- Nhấp vào cửa sổ dòng lệnh, nhấn tổ hợp phím Ctrl + C hoặc Cmd + C để dừng phiên bản
uv run adk web
để khởi động phiên bản
Bạn sẽ gặp phải lỗi!
Lỗi này là có chủ ý và hướng dẫn một nguyên tắc kiến trúc cốt lõi của ADK. Để tránh sự mơ hồ và giữ cho thiết kế của tác nhân gọn gàng, tác nhân được thiết kế để chỉ sử dụng một công cụ chính dựa trên tìm kiếm. Bạn không thể chỉ liệt kê google_search
cùng với các công cụ phức tạp khác trong cùng một tác nhân.
Cách tiếp cận phù hợp là áp dụng mô hình nhiều tác nhân: chúng ta tạo một tác nhân mới, chuyên biệt, có nhiệm vụ duy nhất là thực hiện các lượt tìm kiếm trên Google. Sau đó, chúng tôi cung cấp tác nhân tìm kiếm này cho personal_assistant
chính của mình dưới dạng một công cụ.
Bây giờ, hãy tạo một tệp Python có tên là custom_agents.py
. Tệp này sẽ chứa mã cho google_search_agent
chuyên biệt. Sao chép mã nguồn sau đây vào tệp custom_agents.py
.
Đang tạo 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-2.0-flash-001',
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ạ dưới đây.
Đang cập nhật agent.py
from google.adk.agents import Agent
from google.adk.tools import FunctionTool
from google.adk.tools import agent_tool
from .custom_functions import get_fx_rate
from .custom_agents import google_search_agent
root_agent = Agent(
model='gemini-2.0-flash-001',
name='root_agent',
description='A helpful assistant for user questions.',
tools=[
FunctionTool(get_fx_rate),
agent_tool.AgentTool(agent=google_search_agent),
]
)
Hãy phân tích mẫu mới mạnh mẽ trong mã:
- Một tác nhân chuyên trách mới: Chúng tôi đã xác định một tác nhân hoàn toàn mới là
google_search_agent
. Lưu ý nội dung mô tả cụ thể và công cụ duy nhất của thẻ này làgoogle_search
. Đây là một chuyên gia về tìm kiếm. agent_tool.AgentTool
: Đây là một trình bao bọc đặc biệt từ ADK. Công cụ này lấy toàn bộ một tác nhân (google_search_agent của chúng tôi) và đóng gói tác nhân đó để trông giống như một công cụ tiêu chuẩn.- Thông minh hơn **
root_agent
**:root_agent
của chúng tôi hiện có một công cụ mới:agent_tool.AgentTool(agent=google_search_agent)
. Mô hình này không biết cách tìm kiếm trên web, nhưng biết rằng mình có một công cụ có thể uỷ quyền các tác vụ tìm kiếm.
Lưu ý rằng trường chỉ dẫn đã biến mất khỏi root_agent
. Giờ đây, các chỉ dẫn của công cụ này được xác định ngầm bằng những công cụ mà nó có. Đây là 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 đúng công 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 khởi động lại phiên bản adk web
và hỏi lại tác nhân câu hỏi này:
What is the weather forecast in Tokyo, Japan for next month?
Giờ đây, trợ lý đang sử dụng google_search_agent
để lấy thông tin mới nhất
Bạn cũng có thể thử đặt câu hỏi về tỷ giá hối đoái hiện tại. Giờ đây, trợ lý ảo có thể sử dụng công cụ phù hợp cho từng câu hỏi.
Bạn có thể thoải mái đặt cho trợ lý những câu hỏi khác cần thông tin theo thời gian thực và quan sát cách trợ lý xử lý các câu hỏi đó bằng những công cụ mà trợ lý có.
5. Thêm công cụ của bên thứ ba
Trợ lý AI của chúng tôi đang trở thành một trợ lý du lịch tuyệt vời. Công cụ này có thể xử lý việc quy đổ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ấn đề về hậu cần mà còn là việc tìm hiểu văn hoá và lịch sử của điểm đến.
Mặc dù công cụ google_search_agent
có thể cung cấp thông tin về văn hoá và lịch sử dựa trên kết quả tìm kiếm, nhưng bạn nên lấy thông tin đó từ một nguồn đáng tin cậy hơn như Wikipedia. Tương tự, bạn có thể tạo hàm Python của riêng mình để trích xuất thông tin từ Wikipedia, nhưng chắc chắn phải có cách tốt hơn.
Rất may là 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 AI Agent khác như CrewAI và LangChain. Khả năng tương tác này là yếu tố quan trọng vì giúp giảm 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ụ của Wikipedia trong LangChain.
Trước tiên, hãy dừng quy trình tác nhân đang chạy (Ctrl + C hoặc Cmd + C) rồi cài đặt các thư viện bổ sung vào môi trường ảo Python hiện tại.
uv add langchain-community
uv add wikipedia
Sau khi quá trình cài đặt hoàn tất. Tạo một tệp có tên là third_party_tools.py
. Tệp này sẽ chứa phương thức triển khai cho công cụ LangChain Wikipedia.
Đang tạo 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."
)
Bây giờ, hãy cập nhật tệp agent.py
.
Đang cập nhật agent.py
from google.adk.agents import Agent
from google.adk.tools import FunctionTool
from google.adk.tools import agent_tool
from google.adk.tools import langchain_tool
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-2.0-flash-001',
name='root_agent',
description='A helpful assistant for user questions.',
tools=[
FunctionTool(get_fx_rate),
agent_tool.AgentTool(agent=google_search_agent),
langchain_tool.LangchainTool(langchain_wikipedia_tool),
]
)
Bây giờ, hãy khởi động lại phiên bản adk web
và hỏi lại tác nhân câu hỏi này:
Tell me about the history of Kyoto
Trợ lý xác định chính xác đây là một câu hỏi trong quá khứ và sử dụng công cụ Wikipedia mới của mình. Bằng cách tích hợp một công cụ của bên thứ ba và chỉ định cho công cụ đó một vai trò cụ thể, 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.
Để biết chính xác cách mà 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, rồi nhấp vào sự kiện functionCall
gần đây nhất.
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ụ mà tác nhân đã thực thi.
6. Dọn dẹp
Vì lớp học lập trình này không liên quan đến bất kỳ sản phẩm nào chạy trong thời gian dài, nên bạn chỉ cần dừng các phiên hoạt động của tác nhân (ví dụ: phiên bản adk web
trong thiết bị đầu cuối) bằng cách nhấn Ctrl + C trong thiết bị đầu cuối.
Xoá thư mục và tệp dự án của nhân viên hỗ trợ
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 đã được 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 Google Cloud, hãy tham khảo hướng dẫn chính thức để biết hướng dẫn chi tiết.
7. Kết luận
Xin chúc mừng! Bạn đã uỷ quyền thành công cho tác nhân trợ lý cá nhân bằ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.
Quan trọng hơn, bạn đã học được mẫu kiến trúc cơ bản để xây dựng 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 một google_search_agent
chuyên dụng và cung cấp nó cho root_agent
, bạn đã thực hiện bước đầu tiên từ việc xây dựng một tác nhân duy nhất đến việc điều phối một hệ thống đa 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 trong chuỗi lớp học lập trình này. Trong lớp học lập trình đó, 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é!