Giới thiệu Dự án
Đại lý lập kế hoạch nội dung là một tác nhân lập kế hoạch nội dung thông minh được xây dựng trên Google Agent Development Kit (ADK) và Python A2A SDK. Tác nhân này có khả năng tạo ra các dàn ý nội dung chi tiết dựa trên mô tả nội dung cấp cao.
A2A Protocol là gì?
A2A Protocol (Giao thức Agent2Agent) là một giao thức tiêu chuẩn mở được thiết kế đặc biệt cho các tác nhân AI. Mục tiêu cốt lõi của nó là đạt được khả năng tương tác giữa các tác nhân trên các nền tảng và công nghệ khác nhau, cho phép chúng hợp tác như những "đồng nghiệp" để hoàn thành các nhiệm vụ, bất kể công nghệ nền tảng.
Công nghệ sử dụng
- Python: 3.10+
- UV: Trình quản lý gói Python
- Google ADK: Bộ công cụ phát triển tác nhân của Google
- A2A SDK: Giao thức giao tiếp giữa các tác nhân
- Gemini 2.5 Flash: Mô hình ngôn ngữ lớn
- Google Search: Công cụ tìm kiếm
- Uvicorn: Máy chủ ASGI
Các yêu cầu trước khi bắt đầu
1. Cài đặt môi trường
Đảm bảo hệ thống của bạn đã cài đặt các phần mềm sau:
# Kiểm tra phiên bản Python (yêu cầu 3.10+)
python --version
# Cài đặt trình quản lý gói UV (nếu chưa cài)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Hoặc sử dụng pip
pip install uv
2. Khóa API
Bạn cần lấy khóa API của Google để sử dụng các mô hình Gemini và chức năng tìm kiếm của Google:
- Truy cập Google AI Studio
- Tạo một khóa API mới
- Lưu khóa để sử dụng sau này
Cấu trúc dự án
samples/python/agents/content_planner/
├── __init__.py # Tập tin khởi tạo gói
├── __main__.py # Tập tin nhập chính
├── agent_executor.py # Thực thi tác nhân
├── content_planner_agent.py # Định nghĩa tác nhân lập kế hoạch nội dung
├── pyproject.toml # Tập tin cấu hình dự án
├── requirements.txt # Danh sách phụ thuộc
├── .env.example # Ví dụ biến môi trường
└── README.md # Tài liệu dự án
Khởi động nhanh
Bước 1: Sao chép dự án và điều hướng đến thư mục
# Giả sử bạn đã có dự án a2a-samples
git clone https://github.com/a2aproject/a2a-samples.git
cd a2a-samples/samples/python/agents/content_planner
Bước 2: Cấu hình biến môi trường
# Sao chép tập tin ví dụ biến môi trường
cp .env.example .env
# Chỉnh sửa tập tin .env và thêm khóa API Google của bạn
echo "GOOGLE_API_KEY=your_actual_api_key_here" > .env
Bước 3: Cài đặt các phụ thuộc và chạy tác nhân
# Sử dụng UV để cài đặt các phụ thuộc và chạy dự án
uv run .
# Lưu ý:
"gradio>=5.30.0" không cần thiết trong tác nhân hiện tại.
Mặc định, tác nhân sẽ khởi động tại http://localhost:10001
.
Bước 4: Kiểm tra tác nhân (cửa sổ terminal mới)
# Điều hướng đến thư mục khách hàng CLI
cd samples/python/hosts/cli
# Kết nối với tác nhân và gửi tin nhắn
uv run . --agent http://localhost:10001
Bước 5: Tương tác với tác nhân
Trong khách hàng CLI, bạn có thể gửi các tin nhắn như:
Tạo một dàn ý cho một bài viết ngắn, vui tươi, khuyến khích về việc học Java
Giải thích mã
1. Tập tin nhập chính (__main__.py
)
@click.command()
@click.option("--host", default="localhost")
@click.option("--port", default=10001)
def main(host, port):
# Thẻ tác nhân (metadata)
agent_card = AgentCard(
name='Content Planner Agent',
description=content_planner_agent.description,
url=f'http://{host}:{port}',
version="1.0.0",
defaultInputModes=["text", "text/plain"],
defaultOutputModes=["text", "text/plain"],
capabilities=AgentCapabilities(streaming=True),
skills=[
AgentSkill(
id="content_planner",
name="Tạo dàn ý cho nội dung",
description="Tạo dàn ý cho nội dung dựa trên mô tả cấp cao của nội dung",
tags=["plan", "outline"],
examples=[
"Tạo một dàn ý cho một bài viết ngắn, vui tươi, khuyến khích về việc học Java",
],
)
],
)
Giải thích các thành phần chính:
- AgentCard: Thẻ metadata của tác nhân chứa tên, mô tả, URL, phiên bản, v.v.
- AgentSkill: Định nghĩa kỹ năng của tác nhân bao gồm ID, tên, mô tả, thẻ và ví dụ
- AgentCapabilities: Cấu hình khả năng của tác nhân, chẳng hạn như hỗ trợ phát trực tuyến
2. Định nghĩa tác nhân (content_planner_agent.py
)
from google.adk.agents import Agent
from google.adk.tools import google_search
root_agent = Agent(
name="content_planner_agent",
model="gemini-2.5-flash",
description=("Tác nhân lập kế hoạch tạo ra một dàn ý chi tiết và hợp lý cho một nội dung,"
"dựa trên mô tả cấp cao."),
instruction=("Bạn là một chuyên gia lập kế hoạch nội dung. Nhiệm vụ của bạn là tạo ra một dàn ý chi tiết và hợp lý cho một nội dung"
"dựa trên mô tả cấp cao."),
tools=[google_search],
)
Các tính năng chính:
- Model: Sử dụng Gemini 2.5 Flash làm mô hình nền tảng
- Tools: Tích hợp công cụ tìm kiếm Google để truy xuất thông tin liên quan
- Instructions: Định nghĩa rõ ràng vai trò và nhiệm vụ của tác nhân
3. Thực thi tác nhân (agent_executor.py
)
class ADKAgentExecutor(AgentExecutor):
def __init__(self, agent, status_message="Đang xử lý yêu cầu...", artifact_name="response"):
self.agent = agent
self.status_message = status_message
self.artifact_name = artifact_name
self.runner = Runner(
app_name=agent.name,
agent=agent,
artifact_service=InMemoryArtifactService(),
session_service=InMemorySessionService(),
memory_service=InMemoryMemoryService(),
)
Chức năng cốt lõi:
- Runner: Trình chạy ADK quản lý việc thực thi tác nhân
- Service Components:
ArtifactService
: Quản lý các artefact được tạo raSessionService
: Quản lý trạng thái phiênMemoryService
: Quản lý bộ nhớ cuộc trò chuyện
Sơ đồ kiến trúc hệ thống
graph TB
A[User Request] --> B[A2A CLI Client]
B --> C[HTTP Request]
C --> D[A2A Starlette Application]
D --> E[DefaultRequestHandler]
E --> F[ADKAgentExecutor]
F --> G[ADK Runner]
G --> H[Content Planner Agent]
H --> I[Gemini 2.5 Flash Model]
H --> J[Google Search Tool]
I --> K[Generate Content Outline]
J --> K
K --> L[Response Artifact]
L --> M[Task Completion]
M --> N[Return Result to User]
subgraph "ADK Components"
O[InMemoryArtifactService]
P[InMemorySessionService]
Q[InMemoryMemoryService]
end
G --> O
G --> P
G --> Q
Quy trình thực thi chi tiết
1. Giai đoạn khởi tạo
sequenceDiagram
participant Main as __main__.py
participant Agent as content_planner_agent
participant Executor as ADKAgentExecutor
participant Server as A2AStarletteApplication
Main->>Agent: Tải cấu hình tác nhân
Main->>Executor: Tạo phiên thực thi
Main->>Server: Tạo máy chủ A2A
Server->>Server: Khởi động máy chủ Uvicorn
2. Giai đoạn xử lý yêu cầu
sequenceDiagram
participant Client as CLI Client
participant Server as A2A Server
participant Handler as DefaultRequestHandler
participant Executor as ADKAgentExecutor
participant Runner as ADK Runner
participant Model as Gemini 2.5 Flash
participant Search as Google Search
Client->>Server: Gửi yêu cầu lập kế hoạch nội dung
Server->>Handler: Định tuyến yêu cầu
Handler->>Executor: Thực hiện nhiệm vụ tác nhân
Executor->>Runner: Bắt đầu trình chạy ADK
Runner->>Model: Gọi mô hình Gemini
Runner->>Search: Thực hiện tìm kiếm Google
Model->>Runner: Trả về nội dung đã tạo
Search->>Runner: Trả về kết quả tìm kiếm
Runner->>Executor: Gộp kết quả
Executor->>Handler: Trả về artefact
Handler->>Server: Hoàn thành nhiệm vụ
Server->>Client: Trả về dàn ý nội dung
Cấu hình nâng cao
Cổng tùy chỉnh
# Khởi động tác nhân trên cổng đã chỉ định
uv run . --port=8080
Máy chủ tùy chỉnh
# Khởi động trên máy chủ và cổng đã chỉ định
uv run . --host=0.0.0.0 --port=8080
Cấu hình biến môi trường
Bạn có thể cấu hình thêm các tùy chọn trong tập tin .env
:
GOOGLE_API_KEY=your_api_key_here
# Bạn có thể thêm các mục cấu hình khác
LOG_LEVEL=INFO
Khắc phục sự cố
Các vấn đề phổ biến
- Lỗi khóa API
Error: Khóa API không hợp lệ
Solution: Kiểm tra xem GOOGLE_API_KEY trong tập tin .env có đúng không
- Cổng đã được sử dụng
Error: Cổng 10001 đã được sử dụng
Solution: Sử dụng tham số --port để chỉ định cổng khác
- Cài đặt phụ thuộc thất bại
Error: Không thể cài đặt các phụ thuộc
Solution: Đảm bảo UV đã được cài đặt đúng cách, thử uv sync
Mở rộng và tùy chỉnh
Thêm công cụ mới
Thêm các công cụ mới trong content_planner_agent.py
:
from google.adk.tools import google_search, web_search
root_agent = Agent(
# ... các cấu hình khác
tools=[google_search, web_search], # Thêm nhiều công cụ hơn
)
Thay đổi mô hình
root_agent = Agent(
name="content_planner_agent",
model="gemini-1.5-pro", # Sử dụng mô hình khác
# ... các cấu hình khác
)
Hướng dẫn tùy chỉnh
root_agent = Agent(
# ... các cấu hình khác
instruction=(
"Bạn là một lập kế hoạch nội dung chuyên biệt cho tài liệu kỹ thuật. "
"Tạo các dàn ý chi tiết bao gồm các ví dụ mã và các thực hành tốt nhất."
),
)
Thực hành tốt nhất
-
Bảo mật:
- Luôn lưu trữ các khóa API trong biến môi trường
- Không cam kết các tập tin
.env
vào quản lý phiên bản
-
Tối ưu hóa hiệu suất:
- Sử dụng kích thước mô hình phù hợp
- Cấu hình đúng bộ nhớ và dịch vụ phiên
-
Xử lý lỗi:
- Thực hiện xử lý lỗi và ghi lại đúng cách
- Cung cấp thông báo lỗi có ý nghĩa
-
Kiểm tra:
- Viết các bài kiểm tra đơn vị và bài kiểm tra tích hợp
- Kiểm tra phản hồi của tác nhân với các đầu vào khác nhau
Tóm tắt
Đại lý lập kế hoạch nội dung cho thấy cách xây dựng các tác nhân thông minh sử dụng Google ADK và Giao thức A2A. Qua hướng dẫn này, bạn nên có thể:
- Hiểu kiến trúc tổng thể của dự án
- Chạy và kiểm tra tác nhân thành công
- Tùy chỉnh và mở rộng khi cần
- Giải quyết các vấn đề phổ biến
Tác nhân này có thể phục vụ như một nền tảng để xây dựng các hệ thống đa tác nhân phức tạp hơn, chẳng hạn như quy trình tạo nội dung hoàn chỉnh.
Thêm ví dụ về Giao thức A2A
- Giao thức A2A
- Ví dụ A2A Multi-Agent: Trò chơi đoán số
- Ví dụ tác nhân thông minh A2A MCP AG2
- Hướng dẫn tạo biểu đồ A2A + CrewAI + OpenRouter
- Ví dụ A2A JS: Tác nhân phim
- Ví dụ A2A Python: Tác nhân Github
- Ví dụ A2A: Lập kế hoạch du lịch OpenRouter
- Ví dụ A2A Java
- Ví dụ A2A: Tác nhân Hello World
- Ví dụ A2A Phương thức và phản hồi JSON
- Quy trình trò chuyện với tệp LlamaIndex bằng Giao thức A2A