快速入门:构建 Python (smolagents) Web 应用并将其部署到 Cloud Run

本文档介绍如何构建 smolagents 应用并将其部署到 Cloud Run。

按照本快速入门中的步骤操作时,Cloud Run 会自动 为您构建 Dockerfile,以便您从源代码进行部署

准备工作

  1. 安装 Google Cloud CLI。

  2. 配置 gcloud CLI 以使用您的联合身份。

    如需了解详情,请参阅使用联合身份登录 gcloud CLI

  3. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  4. 创建或选择 Google Cloud 项目

    选择或创建项目所需角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予 角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  5. 如果您要使用现有项目来完成本指南, 请验证您是否拥有完成本指南所需的权限。如果您创建了新项目, 则您已拥有所需的权限。

  6. 验证是否已为您的 Google Cloud 项目启用结算功能。

  7. 如果您通过网域限制组织政策限制项目的未经身份验证的调用,则您需要按照测试专用服务中的说明访问已部署的服务。

  8. 启用 Cloud Run Admin API 和 Cloud Build API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您 创建了项目,则您可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。 了解如何授予角色

    gcloud services enable run.googleapis.com cloudbuild.googleapis.com

    启用 Cloud Run Admin API 后,系统会自动创建 Compute Engine 默认服务帐号。

  9. 查看 Cloud Run 价格或使用价格计算器估算费用 。
  10. 您需要使用 Google AI Studio 提供的 API 密钥,才能使用 Gemini 模型部署 smolagents 应用 。如需使用 Google AI Studio 生成 API 密钥,请参阅 使用 Gemini API 密钥 在 Gemini API 文档中。

所需的角色

如需获得完成本教程所需的权限,请让您的管理员为您授予以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

授予 Cloud Build 服务账号对项目的访问权限

除非您替换此行为,否则 Cloud Build 会自动使用 Compute Engine 默认服务账号作为默认 Cloud Build 服务账号来构建源代码和 Cloud Run 资源。

为了让 Cloud Build 能够构建来源,请向 Cloud Build 服务账号授予项目的 Cloud Run Builder (roles/run.builder) 角色:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS \
    --role=roles/run.builder

PROJECT_ID 替换为您的 Google Cloud项目 ID,并将 SERVICE_ACCOUNT_EMAIL_ADDRESS 替换为 Cloud Build 服务账号的邮箱。如果您使用 Compute Engine 默认服务账号作为 Cloud Build 服务账号,则服务账号邮箱应采用以下格式:

PROJECT_NUMBER-compute@

PROJECT_NUMBER 替换为您的 Google Cloud项目编号。

如需详细了解如何查找项目 ID 和项目编号,请参阅创建和管理项目

授予 Cloud Run Builder 角色之后,需要几分钟时间才能完成传播

编写示例应用

如需使用 Python 编写应用,请执行以下操作:

  1. 创建名为 my-agent-app 的新目录,并转到此目录中:

    mkdir my-agent-app
    cd my-agent-app
    
  2. 创建名为 main.py 的文件,并将以下代码粘贴到其中:

    import os
    from fastapi import FastAPI, HTTPException
    from pydantic import BaseModel
    from smolagents import CodeAgent, LiteLLMModel, tool
    
    # 1. Define a simple tool for the agent
    @tool
    def get_greeting(name: str) -> str:
      """
      Returns a special greeting for the user.
      Args:
          name: The name of the person to greet.
      """
      return f"Hello {name}, welcome to the agentic world running on Cloud Run!"
    
    # 2. Initialize the Gemini Model via LiteLLM
    # Make sure GEMINI_API_KEY is set in your environment variables
    model = LiteLLMModel(
    model_id="gemini/gemini-2.5-flash", # This is the model name. If a newer model is available, you can use that.
    api_key=os.environ.get("GEMINI_API_KEY")
    )
    
    # 3. Create the CodeAgent
    agent = CodeAgent(
      tools=[get_greeting],
      model=model,
      add_base_tools=True # Adds basic python tools like print
    )
    
    # 4. Setup FastAPI
    app = FastAPI()
    
    class AgentRequest(BaseModel):
      task: str
    
    @app.get("/")
    def health_check():
      return {"status": "running", "service": "smolagents-fastapi"}
    
    @app.post("/run")
    def run_agent(request: AgentRequest):
      try:
        # Run the agent with the user's task
        response = agent.run(request.task)
        return {"response": str(response)}
      except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))
    
  3. 创建名为 requirements.txt 的文件,并将以下代码粘贴到其中:

    fastapi
    uvicorn
    smolagents[toolkit]
    litellm
    

从源代码部署到 Cloud Run

从源代码部署会自动从源代码构建容器映像并进行部署。

如需使用以下命令从源代码进行部署,请执行以下操作:

  gcloud run deploy smolagents-demo \
    --source . \
    --region us-central1 \
    --no-allow-unauthenticated \
    --set-env-vars GEMINI_API_KEY=API_KEY

API_KEY 替换为您的 Google AI Studio API 密钥

成功部署应用后,Cloud Run 会显示服务网址,例如 https://smolagents-demo-xyz-uc.a.run.app

测试 Cloud Run 服务

使用以下 curl 命令向代理发送任务,以测试您的服务:

  curl -X POST YOUR-SERVICE-URL/run \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
    -d '{"task": "Use the greeting tool to say hello to Gemini User"}'

YOUR-SERVICE-URL 替换为您的服务网址。

代理会发送以下响应:

{
 "response": "Hello Gemini User, welcome to the agentic world running on Cloud Run!"
}

如需验证您的服务是否正常运行,请查看 Cloud Run 服务的日志 标签页

清理

为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。

为避免您的 Google Cloud 账号产生额外费用,请删除您在本快速入门中部署的所有资源 。

删除仓库

如果部署的服务未在使用,Cloud Run 不会向您收费。 不过,您可能仍需要支付将容器映像存储在 Artifact Registry 中而产生的相关费用。如需删除 Artifact Registry 仓库,请按照 Artifact Registry 文档中删除仓库的步骤操作。

删除服务

Cloud Run 服务在收到请求之前不会产生费用。如需删除 Cloud Run 服务,请按照以下步骤之一操作:

控制台

要删除服务,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Cloud Run 服务页面:

    转到 Cloud Run

  2. 在服务列表中找到要删除的服务,然后点击该服务对应的复选框以将其选中。

  3. 点击删除 。这将删除服务的所有修订版本。

gcloud

要删除作业,请运行以下命令:

gcloud run services delete SERVICE --region REGION

替换以下内容:

  • SERVICE:服务的名称。
  • REGION: Google Cloud 服务的区域。

删除测试项目

删除您的项目会停止对该项目中的所有资源进行结算。 Google Cloud 如需释放项目中的所有 Google Cloud 资源,请按照以下步骤操作:

    删除项目: Google Cloud

    gcloud projects delete PROJECT_ID

后续步骤

如需详细了解如何使用代码源构建容器并推送到仓库,请参阅: