Skip to main content

google-agents-cli

CLI and skills for building, evaluating, and deploying AI agents on Google Cloud's Gemini Enterprise Agent Platform using ADK

الانتقال إلى التثبيت

معلومات المصدر

المستودع
reason-machines/devtools-skills
آخر نشاط في المصدر
١٦ مايو ٢٠٢٦ في ١٧:٢٦
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٤
التفرعات
٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
google-agents-cli
description
CLI and skills for building, evaluating, and deploying AI agents on Google Cloud's Gemini Enterprise Agent Platform using ADK
triggers
["build an agent with agents-cli","create a new ADK agent project","deploy my agent to Google Cloud","run evaluations on my agent","scaffold a new agents-cli project","publish my agent to Gemini Enterprise","set up CI/CD for my ADK agent","add RAG to my agent project"]
# google-agents-cli > Skill by [ara.so](https://ara.so) — Devtools Skills collection. `agents-cli` is the CLI and skills framework for building, evaluating, and deploying AI agents on Google Cloud's Gemini Enterprise Agent Platform. It works with ADK (Agent Development Kit) to provide end-to-end agent development workflows, from scaffolding to production deployment. ## What It Does - **Scaffold agent projects**: Create new ADK agent projects with best practices built-in - **Local development**: Run and test agents locally with hot reload - **Evaluation**: Run systematic evaluations with metrics, evalsets, and LLM-as-judge - **Deployment**: Deploy to Google Cloud (Agent Runtime, Cloud Run, GKE) - **Publishing**: Register agents with Gemini Enterprise - **Observability**: Integrate Cloud Trace, logging, and third-party monitoring - **CI/CD**: Set up staging/prod pipelines with automated testing ## Installation **Prerequisites**: Python 3.11+, [uv](https://docs.astral.sh/uv/), Node.js ```bash # Install CLI and skills uvx google-agents-cli setup # Or just install the CLI pip install google-agents-cli # Verify installation agents-cli --version ``` ## Authentication ```bash # Authenticate with Google Cloud agents-cli login # Check authentication status agents-cli login --status # For local development without Google Cloud, use AI Studio API key export GOOGLE_API_KEY=your_api_key_here ``` ## Core Commands ### Project Scaffolding ```bash # Create a new agent project agents-cli scaffold my-agent # Create with specific template agents-cli scaffold my-agent --template basic agents-cli scaffold my-agent --template rag # Add features to existing project agents-cli scaffold enhance --add deployment agents-cli scaffold enhance --add cicd agents-cli scaffold enhance --add rag # Upgrade project to newer agents-cli version agents-cli scaffold upgrade ``` ### Local Development ```bash # Install project dependencies agents-cli install # Run agent with a single prompt agents-cli run "What's the weather in San Francisco?" # Run with file input agents-cli run --input-file prompt.txt # Run with streaming output agents-cli run "Summarize this article" --stream # Lint code agents-cli lint ``` ### Evaluation ```bash # Run evaluations agents-cli eval run # Run specific evalset agents-cli eval run --evalset evalsets/basic.yaml # Compare two evaluation results agents-cli eval compare results/eval1.json results/eval2.json # Run with custom metrics agents-cli eval run --metrics accuracy,latency,cost ``` ### Deployment ```bash # Deploy to Google Cloud (interactive) agents-cli deploy # Deploy with specific config agents-cli deploy --config deploy.yaml # Deploy to specific environment agents-cli deploy --env production # Provision infrastructure agents-cli infra single-project --project-id my-project agents-cli infra cicd --project-id my-project # Set up datastore for RAG agents-cli infra datastore --project-id my-project ``` ### Publishing ```bash # Register with Gemini Enterprise agents-cli publish gemini-enterprise # Publish with metadata agents-cli publish gemini-enterprise --name "My Agent" --description "Does X" ``` ### Data Ingestion (RAG) ```bash # Run data ingestion pipeline agents-cli data-ingestion --source gs://my-bucket/docs agents-cli data-ingestion --source ./local-docs --datastore my-datastore ``` ### Utilities ```bash # Show project info and CLI version agents-cli info # Force reinstall skills to all IDEs agents-cli update ``` ## ADK Agent Code Patterns ### Basic Agent Structure ```python # my_agent.py from adk.agents import Agent from adk.tools import Tool from adk.models import ModelClient # Define a custom tool class WeatherTool(Tool): """Get weather information for a location.""" def __init__(self): super().__init__( name="get_weather", description="Get current weather for a location" ) def execute(self, location: str) -> str: # Implementation return f"Weather in {location}: Sunny, 72°F" # Create agent agent = Agent( name="weather-assistant", description="An agent that provides weather information", model=ModelClient(model_name="gemini-2.0-flash-exp"), tools=[WeatherTool()] ) # Run agent if __name__ == "__main__": response = agent.run("What's the weather in NYC?") print(response) ``` ### Agent with State Management ```python from adk.agents import Agent, AgentState from adk.models import ModelClient from typing import Any, Dict class ConversationState(AgentState): """Custom state for conversation tracking.""" def __init__(self): super().__init__() self.conversation_history = [] self.user_preferences = {} def add_message(self, role: str, content: str): self.conversation_history.append({"role": role, "content": content}) agent = Agent( name="stateful-assistant", model=ModelClient(model_name="gemini-2.0-flash-exp"), state=ConversationState() ) # Use state in agent execution response = agent.run("Remember my name is Alice") agent.state.user_preferences["name"] = "Alice" ``` ### Multi-Agent Orchestration ```python from adk.agents import Agent, AgentOrchestrator from adk.models import ModelClient # Create specialized agents research_agent = Agent( name="researcher", description="Researches topics and gathers information", model=ModelClient(model_name="gemini-2.0-flash-exp") ) writer_agent = Agent( name="writer", description="Writes content based on research", model=ModelClient(model_name="gemini-2.0-flash-exp") ) # Orchestrate agents orchestrator = AgentOrchestrator( agents=[research_agent, writer_agent], workflow="sequential" # or "parallel", "conditional" ) # Run orchestrated workflow result = orchestrator.run("Write an article about AI agents") ``` ### Agent with Callbacks ```python from adk.agents import Agent from adk.callbacks import Callback from adk.models import ModelClient class LoggingCallback(Callback): """Log agent execution steps.""" def on_agent_start(self, agent_name: str, input_data: Any): print(f"Agent {agent_name} starting with input: {input_data}") def on_tool_start(self, tool_name: str, tool_input: Dict[str, Any]): print(f"Tool {tool_name} called with: {tool_input}") def on_tool_end(self, tool_name: str, tool_output: Any): print(f"Tool {tool_name} returned: {tool_output}") def on_agent_end(self, agent_name: str, output: Any): print(f"Agent {agent_name} finished with: {output}") agent = Agent( name="monitored-agent", model=ModelClient(model_name="gemini-2.0-flash-exp"), callbacks=[LoggingCallback()] ) ``` ### RAG Agent Pattern ```python from adk.agents import Agent from adk.tools import Tool from adk.models import ModelClient from adk.rag import VectorStore, Retriever class RAGTool(Tool): """Retrieve relevant documents from vector store.""" def __init__(self, datastore_id: str): super().__init__( name="retrieve_docs", description="Retrieve relevant documents" ) self.retriever = Retriever(datastore_id=datastore_id) def execute(self, query: str) -> str: docs = self.retriever.retrieve(query, top_k=5) return "\n\n".join([doc.content for doc in docs]) agent = Agent( name="rag-assistant", description="Agent with RAG capabilities", model=ModelClient(model_name="gemini-2.0-flash-exp"), tools=[RAGTool(datastore_id="my-datastore")] ) ``` ## Project Configuration ### `agents.yaml` ```yaml # Project configuration name: my-agent version: 1.0.0 description: My AI agent # Agent configuration agent: name: my-assistant model: gemini-2.0-flash-exp temperature: 0.7 max_tokens: 2048 # Tools configuration tools: - name: web_search enabled: true - name: code_execution enabled: false # Evaluation configuration evaluation: evalsets: - path: evalsets/basic.yaml - path: evalsets/advanced.yaml metrics: - accuracy - latency - cost # Deployment configuration deployment: target: cloud-run region: us-central1 min_instances: 1 max_instances: 10 # Observability observability: cloud_trace: true cloud_logging: true ``` ### Evalset Configuration ```yaml # evalsets/basic.yaml name: basic-evalset description: Basic functionality tests test_cases: - id: tc-001 input: "What is 2+2?" expected_output: "4" metrics: - accuracy - latency - id: tc-002 input: "Explain quantum computing in simple terms" judge: type: llm-as-judge criteria: - clarity - accuracy - conciseness - id: tc-003 input: "Write a Python function to reverse a string" validator: type: code-execution test: | def test_reverse(): assert reverse("hello") == "olleh" assert reverse("") == "" ``` ### Deployment Configuration ```yaml # deploy.yaml target: cloud-run project_id: ${GCP_PROJECT_ID} region: us-central1 service: name: my-agent-service min_instances: 1 max_instances: 10 cpu: 2 memory: 4Gi timeout: 300s environment: - name: GOOGLE_API_KEY secret: projects/${GCP_PROJECT_ID}/secrets/gemini-api-key - name: LOG_LEVEL value: INFO ci_cd: enabled: true environments: - name: staging project_id: ${STAGING_PROJECT_ID} branch: develop - name: production project_id: ${PRODUCTION_PROJECT_ID} branch: main ``` ## Environment Variables ```bash # API Keys export GOOGLE_API_KEY=your_api_key_here export GOOGLE_CLOUD_PROJECT=your-project-id # Agent Configuration export AGENT_MODEL=gemini-2.0-flash-exp export AGENT_TEMPERATURE=0.7 export AGENT_MAX_TOKENS=2048 # Deployment export DEPLOY_REGION=us-central1 export DEPLOY_ENV=production # Observability export ENABLE_CLOUD_TRACE=true export ENABLE_CLOUD_LOGGING=true export LOG_LEVEL=INFO # RAG export DATASTORE_ID=my-datastore export VECTOR_STORE_TYPE=vertex-ai-search ``` ## Common Patterns ### Creating a Complete Agent Project ```bash # 1. Scaffold project agents-cli scaffold my-agent # 2. Navigate to project cd my-agent # 3. Install dependencies agents-cli install # 4. Edit agent code # Edit src/agent.py with your agent logic # 5. Run locally agents-cli run "Test prompt" # 6. Create evalset # Create evalsets/test.yaml # 7. Run evaluations agents-cli eval run # 8. Deploy to Google Cloud agents-cli login agents-cli deploy # 9. Publish to Gemini Enterprise agents-cli publish gemini-enterprise ``` ### Adding Tools to an Agent ```python from adk.agents import Agent from adk.tools import Tool from adk.models import ModelClient import requests class SearchTool(Tool): """Search the web for information.""" def __init__(self, api_key: str): super().__init__( name="web_search", description="Search the web for current information" ) self.api_key = api_key def execute(self, query: str, num_results: int = 5) -> str: # Implementation using search API # Use self.api_key from environment results = self._search(query, num_results) return "\n".join([r["title"] + ": " + r["snippet"] for r in results]) def _search(self, query: str, num_results: int): # Actual search implementation pass class CalculatorTool(Tool): """Perform mathematical calculations.""" def __init__(self): super().__init__( name="calculator", description="Perform mathematical calculations" ) def execute(self, expression: str) -> float: # Safe evaluation of mathematical expressions import ast import operator operators = { ast.Add: operator.add, ast.Sub: operator.sub, ast.Mult: operator.mul, ast.Div: operator.truediv, } def eval_expr(node): if isinstance(node, ast.Num): return node.n elif isinstance(node, ast.BinOp): return operators[type(node.op)]( eval_expr(node.left), eval_expr(node.right) ) else: raise ValueError("Unsupported expression")
عرض على GitHub
ملف SKILL.md هذا كبير جدا، لذلك يعرض SkillsMP القسم الاول فقط هنا. عرض على GitHub