xiaohongshu
xiaohongshu
adk-fundamentals
Foundational knowledge for creating ADK (Agent Development Kit) agents including environment setup, project structure, and basic agent scaffolding. MUST BE USED for: new ADK agent creation, ADK project setup, environment configuration, AdkApp initialization, and understanding core ADK architectur...
Full skill instructions
The Google Agent Development Kit (ADK) is an open-source Python framework for building production-grade AI agents with Vertex AI integration. ADK provides structured patterns for tool creation, state management, and multi-agent orchestration.
ADK requires Python 3.13+ and modern dependency management. Use uv for fast, reliable environment setup:
# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create new project directory
mkdir my-agent-project
cd my-agent-project
# Initialize Python 3.13 project
uv init --python 3.13
# Install ADK
uv pip install google-adk
# Install supporting libraries
uv pip install pydantic>=2.12 python-dotenv asyncio
Create a .env file for Vertex AI configuration:
# .env
GOOGLE_CLOUD_PROJECT=your-gcp-project-id
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_GENAI_USE_VERTEXAI=True
# Optional: Authentication
GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
Load environment variables in your code:
from dotenv import load_dotenv
import os
load_dotenv()
PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
LOCATION = os.getenv("GOOGLE_CLOUD_LOCATION", "us-central1")
"""
Example ADK agent with Vertex AI integration.
"""
import asyncio
from google import genai
from google.genai import types
async def main() -> None:
"""Run the basic ADK agent."""
# Initialize Vertex AI client
client = genai.Client(
vertexai=True,
project=PROJECT_ID,
location=LOCATION
)
# Create a simple agent
model_id = "gemini-2.0-flash-exp"
# Generate response
response = await client.aio.models.generate_content(
model=model_id,
contents="Hello, how can you help me today?"
)
print(response.text)
if __name__ == "__main__":
asyncio.run(main())
"""
ADK agent with custom tools.
"""
import asyncio
from typing import Annotated
from pydantic import BaseModel, ConfigDict, Field
from google import genai
from google.genai import types
# Define tool schema with Pydantic (MANDATORY)
class WeatherRequest(BaseModel):
"""Request schema for weather tool."""
model_config = ConfigDict(strict=True, frozen=True)
location: str = Field(description="City name or location")
units: str = Field(
default="celsius",
description="Temperature units: celsius or fahrenheit"
)
# Define tool function (MUST be async for I/O)
async def get_weather(request: WeatherRequest) -> dict[str, any]:
"""
Get current weather for a location.
Args:
request: Weather request with location and units
Returns:
Weather data dictionary
"""
# Simulate API call (replace with actual weather API)
return {
"location": request.location,
"temperature": 22,
"units": request.units,
"conditions": "sunny"
}
async def main() -> None:
"""Run agent with tools."""
client = genai.Client(vertexai=True)
# Create tool from function
weather_tool = types.Tool(
function_declarations=[
types.FunctionDeclaration(
name="get_weather",
description="Get current weather for a location",
parameters=WeatherRequest.model_json_schema()
)
]
)
# Create agent with tools
model = "gemini-2.0-flash-exp"
chat = client.aio.chats.create(
model=model,
config=types.GenerateContentConfig(
tools=[weather_tool],
temperature=0.7
)
)
# Send message
response = await chat.send_message(
"What's the weather in San Francisco?"
)
# Handle tool calls
if response.candidates[0].content.parts:
for part in response.candidates[0].content.parts:
if part.function_call:
# Execute tool
result = await get_weather(
WeatherRequest(**part.function_call.args)
)
# Send result back to agent
response = await chat.send_message(
types.Content(
parts=[types.Part(
function_response=types.FunctionResponse(
name=part.function_call.name,
response=result
)
)]
)
)
print(response.text)
if __name__ == "__main__":
asyncio.run(main())
Organize ADK projects with clear separation:
my-adk-agent/
├── .env # Environment configuration
├── .env.example # Template for environment variables
├── pyproject.toml # Python dependencies (uv)
├── README.md # Project documentation
├── src/
│ ├── __init__.py
│ ├── agent.py # Main agent definition
│ ├── tools/
│ │ ├── __init__.py
│ │ ├── weather.py # Weather tool
│ │ └── search.py # Search tool
│ ├── schemas/
│ │ ├── __init__.py
│ │ └── models.py # Pydantic schemas
│ └── config.py # Configuration management
└── tests/
├── __init__.py
├── test_agent.py
└── test_tools.py
LlmAgent: For dynamic, reasoning-based tasks
WorkflowAgent: For deterministic processes
Share data between tool calls:
from google.genai import types
# In tool function
async def save_preference(
context: types.ToolContext,
preference: str
) -> dict:
"""Save user preference to session state."""
context.state["user_preference"] = preference
return {"status": "saved"}
# Another tool can access state
async def get_preference(context: types.ToolContext) -> str:
"""Retrieve user preference from session state."""
return context.state.get("user_preference", "default")
For long-term memory across sessions:
# Configure memory service
config = types.GenerateContentConfig(
memory_service=types.MemoryService(
collection_name="user_memories",
max_memories=100
)
)
# BAD: Synchronous I/O
def get_data():
response = requests.get(url) # Blocks event loop
return response.json()
# GOOD: Async I/O
async def get_data():
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.json()
# BAD: Manual schema definition
tool_schema = {
"type": "object",
"properties": {
"location": {"type": "string"}
}
}
# GOOD: Pydantic BaseModel
class LocationRequest(BaseModel):
model_config = ConfigDict(strict=True)
location: str
tool_schema = LocationRequest.model_json_schema()
# BAD: No error handling
async def risky_operation():
return await api_call()
# GOOD: Comprehensive error handling
async def safe_operation() -> dict | None:
try:
return await asyncio.wait_for(
api_call(),
timeout=10.0
)
except TimeoutError:
logger.error("Operation timed out")
return None
except Exception as e:
logger.exception(f"Operation failed: {e}")
return None
Activate this skill when:
This skill is a foundational dependency for:
adk-tool-authoring-with-pydantic: Tool creation builds on this foundationagent-orchestration: Multi-agent patterns extend single-agent basicsrag-patterns: RAG integration requires basic agent structureFor deeper understanding:
agentient-python-core/pydantic-v2-strict skillagentient-python-core/async-patterns skillxiaohongshu
technical spec
product ux expert
database patterns
Conduct multi-agent task orchestration and workflow coordination.
Initialize project with Conductor artifacts (product definition,
Expert in web animations, transitions, and motion design using Framer Motion and CSS
Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...
PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.
Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...
Display project status, active tracks, and next actions
Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience