模块 1:Google Cloud 生成式 AI 概览

本课程将带你深入理解 Google Cloud Platform (GCP) 上的生成式 AI 服务。Google Cloud 提供了一套完整的 AI/ML 工具链,从 Vertex AI 到 Generative AI Studio,帮助开发者快速构建和部署智能应用。

什么是 Google Cloud 生成式 AI?

Google Cloud 的生成式 AI 建立在 PaLM、Gemini 等大语言模型的基础上,通过 Vertex AI 平台提供统一的模型访问、微调和部署能力。开发者无需从零训练模型,即可利用 Google 的前沿 AI 能力。

核心优势:Google Cloud AI 将 Google Research 最新的模型研究成果(如 Gemini、PaLM 2、Imagen)通过 API 开放给全球开发者,让任何人都能快速接入最先进的 AI 能力。

核心服务一览

Vertex AI

GCP 的统一机器学习平台,提供模型训练、部署、监控的全流程管理。支持 AutoML 和自定义训练。

Generative AI Studio

低代码的交互式界面,允许你通过提示工程快速测试和迭代语言模型、图像模型的效果。

Model Garden

Google 提供的模型仓库,包含 Google 自研模型和开源模型,一键部署即可使用。

PaLM API / Gemini API

直接访问 Google 大语言模型的 REST API,支持文本生成、对话、嵌入等多种任务。

快速上手:调用 Gemini API

import google.generativeai as genai

# 配置 API Key
genai.configure(api_key="YOUR_API_KEY")

# 选择 Gemini Pro 模型
model = genai.GenerativeModel('gemini-pro')

# 生成文本
response = model.generate_content(
    "解释量子计算的基本原理,使用中文回答"
)
print(response.text)

这段代码展示了如何使用 Google 的 Python SDK 调用 Gemini Pro 模型。首先配置 API Key,然后初始化模型实例,最后通过 generate_content 方法发送提示并获取生成结果。

Google Cloud AI 技术栈全景

架构层次:

  • 应用层 — Generative AI Studio、Document AI、Dialogflow CX
  • 平台层 — Vertex AI(训练/部署/管道/MLOps)
  • 模型层 — Gemini、PaLM 2、Imagen、Chirp(语音)
  • 基础设施层 — TPU v5、GPU(A100/H100)、GKE
# 使用 gcloud CLI 启用 Vertex AI API
gcloud services enable aiplatform.googleapis.com

# 列出可用的基础模型
gcloud ai models list \
  --region=us-central1 \
  --filter="displayName:gemini"

使用 gcloud CLI 命令行工具启用 Vertex AI 服务,并列出所有可用的 Gemini 模型。这是在 GCP 上开始使用生成式 AI 的第一步。

GCP AI 服务与其他云厂商对比

Google Cloud vs AWS

Google 优势在于自研模型(Gemini)和多模态能力;AWS Bedrock 提供更多第三方模型选择。Google 在 TPU 硬件上有独特优势。

Google Cloud vs Azure

Azure 与 OpenAI 深度集成(GPT 系列),Google 则以 Gemini 和 PaLM 为核心。选择取决于你的模型偏好和现有云基础设施。

Vertex AI 特有优势

内置 MLOps 管道、Feature Store、Model Monitoring,以及与 BigQuery、Dataflow 的深度集成,适合端到端 ML 工作流。

环境准备与项目设置

# 安装 Google Cloud AI Python SDK
pip install google-cloud-aiplatform
pip install google-generativeai

# 设置应用默认凭证
gcloud auth application-default login

# 设置项目 ID
export GOOGLE_CLOUD_PROJECT="your-project-id"
export GOOGLE_CLOUD_LOCATION="us-central1"

这三步是使用 Google Cloud AI 服务的基础准备工作:安装 Python SDK 包、配置认证凭证、设置项目和区域环境变量。us-central1 是 Vertex AI 支持最全面的区域。

Google Cloud 生成式 AI 的核心平台是什么?

模块 2:Vertex AI 核心概念

在这一模块中,我们将深入探讨 Vertex AI 的核心概念,包括模型注册、端点部署、批量预测和 MLOps 管道。

Vertex AI 架构解析

Vertex AI 是 Google Cloud 的统一机器学习平台,它将模型生命周期管理的所有环节整合到一个平台中。从数据准备到模型训练、部署、监控,Vertex AI 提供了完整的工具链。

关键概念:

  • Model — 注册在 Vertex AI 中的模型工件,可以是自定义训练的,也可以是从 Model Garden 导入的
  • Endpoint — 模型部署的在线推理服务,支持自动扩缩容
  • Pipeline — 基于 Kubeflow Pipelines 的 ML 工作流编排
  • Feature Store — 用于存储和提供 ML 特征的统一服务

模型类型与选择指南

Gemini Pro

通用大语言模型,支持文本生成、对话、代码编写、推理分析。最多支持 32K tokens 输入。

Gemini Ultra

最强大的 Gemini 模型,处理高度复杂的推理和编码任务。适合需要深度分析的场景。

Gemini Nano

轻量级模型,专为设备端部署优化。适合移动应用和边缘计算场景。

Imagen / Chirp

Imagen 用于图像生成,Chirp 用于语音识别。多模态能力的核心组件。

初始化 Vertex AI SDK

from google.cloud import aiplatform

# 初始化 Vertex AI SDK
aiplatform.init(
    project="your-project-id",
    location="us-central1",
    staging_bucket="gs://your-bucket/staging"
)

# 从 Model Garden 加载预训练模型
model = aiplatform.Model(
    model_name="publishers/google/models/gemini-pro"
)

# 部署模型到端点
endpoint = model.deploy(
    machine_type="n1-standard-4",
    accelerator_type="NVIDIA_TESLA_T4",
    accelerator_count=1,
    min_replica_count=1,
    max_replica_count=3,
)

这段代码展示了完整的 Vertex AI SDK 初始化和模型部署流程。首先设置项目和区域,然后从 Model Garden 选择 Gemini Pro 模型,最后部署到一个自动扩缩容的在线端点。

Prompt Engineering 核心技巧

import google.generativeai as genai

genai.configure(api_key="YOUR_API_KEY")

# 系统指令:定义 AI 的角色和行为
model = genai.GenerativeModel(
    'gemini-pro',
    generation_config=genai.GenerationConfig(
        temperature=0.7,
        top_p=0.95,
        top_k=40,
        max_output_tokens=2048,
    ),
    safety_settings={
        'HATE': 'BLOCK_NONE',
        'HARASSMENT': 'BLOCK_NONE',
    }
)

# Few-shot 示例:通过示例引导模型输出格式
prompt = """
你是一个专业的技术文档翻译。

示例:
Input: "The API returns a JSON response"
Output: "该 API 返回 JSON 格式的响应"

现在翻译以下内容:
Input: "Vertex AI provides a unified platform for ML"
Output:
"""

response = model.generate_content(prompt)
print(response.text)

这段代码展示了 Prompt Engineering 的两个核心技巧:系统指令通过 generation_config 控制模型的创造性和安全性;Few-shot 通过在提示中提供输入输出示例,引导模型按指定格式生成结果。

Token 计算与成本优化

成本管理要点:

  • Gemini Pro 输入:$0.00025/1K characters
  • Gemini Pro 输出:$0.0005/1K characters
  • 使用 max_output_tokens 控制输出长度
  • 批量预测比在线请求便宜约 50%
  • 缓存常用系统指令可减少重复 token 消耗
# 计算 token 用量
def count_tokens(text: str, model_name: str = "gemini-pro"):
    model = genai.GenerativeModel(model_name)
    token_count = model.count_tokens(text)
    print(f"Token 数量: {token_count.total_tokens}")
    return token_count.total_tokens

# 批量预测以降低成本
from google.cloud import aiplatform

batch_prediction_job = aiplatform.BatchPredictionJob(
    display_name="gemini-batch-analysis",
    model_name="publishers/google/models/gemini-pro",
    input_config={
        "instances_format": "jsonl",
        "gcs_source": {"uris": ["gs://bucket/input.jsonl"]},
    },
    output_config={
        "predictions_format": "jsonl",
        "gcs_destination": {"output_uri_prefix": "gs://bucket/output/"},
    },
)

Token 计数帮助你预估成本,count_tokens 方法可在发送请求前检查 token 用量。批量预测通过异步处理大量请求来节省成本,适合离线数据分析场景。

Embeddings 与向量搜索

from vertexai.language_models import TextEmbeddingModel

# 初始化嵌入模型
embedding_model = TextEmbeddingModel.from_pretrained("text-embedding-004")

# 生成文本嵌入向量
embeddings = embedding_model.get_embeddings([
    "Google Cloud 生成式 AI 提供 Vertex AI 平台",
    "Gemini 是 Google 最新的大语言模型",
    "机器学习需要大量训练数据"
])

for i, emb in enumerate(embeddings):
    print(f"文本 {i+1}: 向量维度 = {len(emb.values)}")
    print(f"  前5维: {emb.values[:5]}")

# 使用 Vertex AI Vector Search 进行相似度检索
from google.cloud import aiplatform

index = aiplatform.MatchingEngineIndex.create_tree_ah_index(
    display_name="doc-embeddings-index",
    dimensions=768,
    approximate_neighbors_count=10,
)

嵌入模型将文本转换为高维向量(768维),用于语义搜索、文本分类和聚类。Vertex AI Vector Search(基于 ScaNN 算法)提供毫秒级的向量相似度检索能力,是构建 RAG 应用的核心组件。

以下哪个是 Vertex AI 的核心组件?

模块 3:实践应用 — 构建 AI 应用

本模块将带你通过实际案例学习如何在 Google Cloud 上构建生成式 AI 应用,包括 RAG(检索增强生成)、对话系统和内容生成。

实战 1:构建 RAG(检索增强生成)应用

RAG 是目前最流行的 LLM 应用架构,它将检索系统和生成模型结合,使 AI 能够基于私有数据回答问题。

from vertexai.language_models import TextEmbeddingModel
from vertexai.preview.generative_models import GenerativeModel
import numpy as np

class SimpleRAG:
    def __init__(self, project_id: str, location: str = "us-central1"):
        import vertexai
        vertexai.init(project=project_id, location=location)
        self.embedding_model = TextEmbeddingModel.from_pretrained(
            "text-embedding-004"
        )
        self.generation_model = GenerativeModel("gemini-pro")
        self.documents = []
        self.embeddings = []

    def index_documents(self, docs: list[str]):
        """将文档分块并生成嵌入向量"""
        self.documents = docs
        self.embeddings = self.embedding_model.get_embeddings(docs)
        # 转换为 numpy 数组便于相似度计算
        self.embedding_matrix = np.array(
            [e.values for e in self.embeddings]
        )

    def retrieve(self, query: str, top_k: int = 3) -> list[str]:
        """检索与查询最相关的文档"""
        query_embedding = self.embedding_model.get_embeddings([query])
        query_vec = np.array(query_embedding[0].values)

        # 余弦相似度
        similarities = np.dot(self.embedding_matrix, query_vec) / (
            np.linalg.norm(self.embedding_matrix, axis=1) * np.linalg.norm(query_vec)
        )

        top_indices = np.argsort(similarities)[-top_k:][::-1]
        return [self.documents[i] for i in top_indices]

    def generate(self, query: str) -> str:
        """基于检索结果生成回答"""
        relevant_docs = self.retrieve(query)

        prompt = f"""基于以下参考资料回答问题。如果无法从参考资料中找到答案,请说明。

参考资料:
{chr(10).join(f'- {doc}' for doc in relevant_docs)}

问题:{query}
回答:"""

        response = self.generation_model.generate_content(prompt)
        return response.text

# 使用示例
rag = SimpleRAG(project_id="your-project-id")
rag.index_documents([
    "Vertex AI 是 Google Cloud 的统一 ML 平台",
    "Gemini 支持文本、图像、音频的多模态理解",
    "BigQuery 是 Google Cloud 的数据仓库服务",
    "Cloud Functions 支持事件驱动的无服务器计算",
])

answer = rag.generate("Google Cloud 的 ML 平台是什么?")
print(answer)

这是一个完整的 RAG 实现流程:索引阶段将文档转换为嵌入向量存储;检索阶段计算查询与文档的余弦相似度,返回最相关的 top_k 文档;生成阶段将检索到的文档作为上下文注入提示,让模型基于事实生成回答。

实战 2:多轮对话系统

import google.generativeai as genai

class ChatAssistant:
    def __init__(self, api_key: str, system_instruction: str = ""):
        genai.configure(api_key=api_key)
        self.model = genai.GenerativeModel(
            'gemini-pro',
            system_instruction=system_instruction,
        )
        self.chat = self.model.start_chat(history=[])

    def send_message(self, message: str) -> str:
        response = self.chat.send_message(message)
        return response.text

    def get_history(self):
        return self.chat.history

# 创建一个技术支持助手
assistant = ChatAssistant(
    api_key="YOUR_API_KEY",
    system_instruction="""你是 Google Cloud 技术支持专家。
回答问题时:
1. 先确认问题关键点
2. 提供具体解决方案和代码示例
3. 如有必要,推荐官方文档链接
4. 使用中文回答"""
)

# 模拟多轮对话
print(assistant.send_message("如何在 Vertex AI 上部署自定义模型?"))
print("---")
print(assistant.send_message("那自定义容器呢?我需要什么 Dockerfile?"))
print("---")
print(assistant.send_message("如何设置自动扩缩容策略?"))

Gemini 的 Chat Session 自动管理对话历史,无需手动传递上下文。system_instruction 定义了 AI 的角色和行为规范。每次 send_message 会自动将完整历史发送给模型,确保连贯的多轮对话。

实战 3:Function Calling(函数调用)

Function Calling 是 Gemini 的重要能力,让模型能够调用外部 API、查询数据库或执行其他操作。模型不会直接执行函数,而是生成结构化的调用参数,由你的代码来执行。

import google.generativeai as genai
import json

genai.configure(api_key="YOUR_API_KEY")

# 定义可用函数
def get_weather(location: str) -> dict:
    """模拟天气 API"""
    return {
        "location": location,
        "temperature": 22,
        "condition": "晴天",
        "humidity": 65,
    }

def get_cloud_status(project_id: str) -> dict:
    """查询 GCP 项目状态"""
    return {
        "project": project_id,
        "services": ["compute", "aiplatform", "storage"],
        "status": "healthy",
        "region": "us-central1",
    }

# 声明函数给模型
model = genai.GenerativeModel('gemini-pro', tools=[
    {
        "function_declarations": [
            {
                "name": "get_weather",
                "description": "获取指定位置的天气信息",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "城市名称,如'北京'、'上海'"
                        }
                    },
                    "required": ["location"]
                }
            },
            {
                "name": "get_cloud_status",
                "description": "查询 Google Cloud 项目运行状态",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "project_id": {
                            "type": "string",
                            "description": "GCP 项目 ID"
                        }
                    },
                    "required": ["project_id"]
                }
            }
        ]
    }
])

chat = model.start_chat()
response = chat.send_message("北京今天天气怎么样?")

# 处理函数调用
if response.parts[0].function_call:
    fc = response.parts[0].function_call
    print(f"模型请求调用: {fc.name}({dict(fc.args)})")

    # 执行函数
    if fc.name == "get_weather":
        result = get_weather(**dict(fc.args))

    # 将结果返回给模型
    response = chat.send_message(
        genai.protos.Content(
            parts=[genai.protos.Part(
                function_response=genai.protos.FunctionResponse(
                    name=fc.name,
                    response={"result": result}
                )
            )]
        )
    )
    print(response.text)

Function Calling 的工作流程:1) 定义函数签名和参数 schema;2) 用户提问时,模型判断是否需要调用函数;3) 模型返回函数调用请求(函数名 + 参数);4) 你的代码执行实际函数;5) 将结果返回模型,模型生成最终回答。这使得 AI 可以与真实世界交互。

实战 4:内容生成流水线

from vertexai.preview.generative_models import GenerativeModel
from vertexai.language_models import TextEmbeddingModel
import json

class ContentPipeline:
    """AI 内容生成流水线"""

    def __init__(self, project_id: str):
        import vertexai
        vertexai.init(project=project_id, location="us-central1")
        self.model = GenerativeModel("gemini-pro")

    def generate_blog_post(self, topic: str, style: str = "技术教程") -> dict:
        """生成技术博客文章"""
        prompt = f"""请为主题 "{topic}" 生成一篇 {style} 风格的技术博客。

要求:
1. 标题吸引眼球
2. 包含 3-5 个代码示例
3. 每个代码示例有详细中文解释
4. 总结部分包含关键要点

以 JSON 格式返回:
{{
    "title": "文章标题",
    "summary": "100字以内的摘要",
    "sections": [
        {{"heading": "小节标题", "content": "内容", "code": "代码示例"}}
    ],
    "key_takeaways": ["要点1", "要点2"]
}}"""

        response = self.model.generate_content(prompt)
        try:
            return json.loads(response.text)
        except json.JSONDecodeError:
            return {"raw": response.text}

    def generate_api_docs(self, endpoint: str, method: str) -> str:
        """生成 API 文档"""
        prompt = f"""为以下 API 端点生成 OpenAPI 3.0 格式的文档:

端点: {endpoint}
方法: {method}

包含:
- 完整的请求参数说明
- 响应示例(成功和错误)
- 认证要求
- 速率限制说明"""

        response = self.model.generate_content(prompt)
        return response.text

# 使用示例
pipeline = ContentPipeline(project_id="your-project-id")

# 生成博客
blog = pipeline.generate_blog_post("Google Cloud Vertex AI 入门指南")
print(f"生成文章: {blog.get('title', 'N/A')}")

# 生成 API 文档
docs = pipeline.generate_api_docs("/v1/models/gemini-pro:generateContent", "POST")
print(docs[:500])

内容生成流水线展示了如何将 Gemini 的生成能力集成到自动化工作流中。博客生成器接收主题和风格参数,输出结构化的 JSON 内容。API 文档生成器则根据端点信息自动生成标准格式的文档。这种模式可以扩展到报告生成、邮件撰写、数据摘要等场景。

错误处理与最佳实践

重试机制

使用指数退避策略处理速率限制和临时故障。Google API 默认重试 3 次,建议自定义重试逻辑。

输入验证

发送前验证输入长度和格式,避免超出 token 限制。使用 count_tokens 预检。

安全过滤

配置 safety_settings 根据应用场景调整内容安全级别,避免误拦截。

异步调用

使用 asyncio + aiohttp 并发调用 API,提升吞吐量。注意并发限制。

import asyncio
import aiohttp
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(
    stop=stop_after_attempt(3),
    wait=wait_exponential(multiplier=1, min=2, max=10)
)
async def call_gemini_async(session, prompt: str) -> str:
    """带重试的异步 Gemini API 调用"""
    url = f"https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent"
    params = {"key": "YOUR_API_KEY"}
    payload = {
        "contents": [{"parts": [{"text": prompt}]}],
        "generationConfig": {
            "temperature": 0.7,
            "maxOutputTokens": 1024,
        }
    }

    async with session.post(url, params=params, json=payload) as resp:
        if resp.status == 429:
            raise Exception("Rate limited - will retry")
        resp.raise_for_status()
        data = await resp.json()
        return data["candidates"][0]["content"]["parts"][0]["text"]

async def batch_generate(prompts: list[str]) -> list[str]:
    """批量异步生成"""
    async with aiohttp.ClientSession() as session:
        tasks = [call_gemini_async(session, p) for p in prompts]
        return await asyncio.gather(*tasks)

# 使用示例
prompts = [
    "用一句话解释机器学习",
    "用一句话解释深度学习",
    "用一句话解释强化学习",
]
results = asyncio.run(batch_generate(prompts))
for r in results:
    print(r)

生产环境的最佳实践:使用 tenacity 库实现指数退避重试;使用 aiohttp 进行异步并发调用提升吞吐量;asyncio.gather 同时处理多个请求。注意 API 密钥应使用环境变量而非硬编码。

RAG 应用的核心组件是什么?

模块 4:进阶主题 — 模型微调与 MLOps

在本模块中,我们将探讨 Google Cloud AI 的高级特性,包括模型微调、Vertex AI Pipelines、Model Monitoring 和 Responsible AI。

模型微调(Fine-tuning)

当预训练模型无法满足特定领域需求时,微调是提升模型表现的关键手段。Vertex AI 支持对 Gemini、PaLM 等模型进行有监督微调。

from google.cloud import aiplatform
from google.cloud.aiplatform.compat.types import (
    pipeline_state as ps
)

aiplatform.init(project="your-project-id", location="us-central1")

# 准备微调数据集(JSONL 格式)
# 每行一个训练样本,包含 input_text 和 output_text
training_data = """
{"input_text": "解释 Vertex AI", "output_text": "Vertex AI 是 Google Cloud 的统一 ML 平台..."}
{"input_text": "什么是 Gemini?", "output_text": "Gemini 是 Google 的多模态大语言模型..."}
{"input_text": "如何使用 BigQuery?", "output_text": "BigQuery 是无服务器数据仓库,支持 SQL 查询..."}
"""

# 上传训练数据到 GCS
from google.cloud import storage
client = storage.Client()
bucket = client.bucket("your-training-bucket")
blob = bucket.blob("training/fine_tune_data.jsonl")
blob.upload_from_string(training_data.strip())

# 启动微调任务
tuning_job = aiplatform.SupervisedTuningJob(
    display_name="gemini-domain-finetune",
    base_model="gemini-pro",
    training_data_uri="gs://your-training-bucket/training/fine_tune_data.jsonl",
    tuned_model_display_name="gemini-domain-v1",
    epoch_count=4,
    learning_rate_multiplier=1.0,
    batch_size=8,
)

tuning_job.run()
print(f"微调状态: {tuning_job.state}")
print(f"微调后模型: {tuning_job.tuned_model_endpoint_name}")

微调流程:1) 准备 JSONL 格式的训练数据(每行包含输入和期望输出);2) 上传到 Cloud Storage;3) 配置微调参数(epochs、学习率、batch size);4) 提交微调任务到 Vertex AI;5) 获取微调后的模型端点。微调通常需要几十分钟到几小时。

Vertex AI Pipelines 构建 MLOps 工作流

from google.cloud import aiplatform
from kfp import dsl
from kfp.v2 import compiler

@dsl.component(packages_to_install=["google-cloud-aiplatform"])
def train_model(dataset_uri: str, model_name: str) -> str:
    from google.cloud import aiplatform
    aiplatform.init(project="your-project-id", location="us-central1")

    # 自定义训练任务
    job = aiplatform.CustomTrainingJob(
        display_name=model_name,
        script_path="train.py",
        container_uri="us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-12:latest",
        requirements=["google-cloud-aiplatform", "scikit-learn"],
    )
    model = job.run(
        dataset=dataset_uri,
        model_display_name=model_name,
        args=["--epochs", "10", "--batch_size", "32"],
    )
    return model.resource_name

@dsl.component(packages_to_install=["google-cloud-aiplatform"])
def deploy_model(model_resource_name: str) -> str:
    from google.cloud import aiplatform
    aiplatform.init(project="your-project-id", location="us-central1")

    model = aiplatform.Model(model_resource_name)
    endpoint = model.deploy(
        machine_type="n1-standard-4",
        min_replica_count=1,
        max_replica_count=5,
    )
    return endpoint.resource_name

@dsl.pipeline(name="ml-training-pipeline")
def ml_pipeline(dataset_uri: str, model_name: str):
    train_task = train_model(
        dataset_uri=dataset_uri,
        model_name=model_name,
    )
    deploy_task = deploy_model(
        model_resource_name=train_task.output,
    )
    deploy_task.after(train_task)

# 编译并运行管道
compiler.Compiler().compile(
    pipeline_func=ml_pipeline,
    package_path="ml_pipeline.json"
)

job = aiplatform.PipelineJob(
    display_name="ml-training-pipeline-run",
    template_path="ml_pipeline.json",
    parameter_values={
        "dataset_uri": "gs://your-bucket/datasets/train.csv",
        "model_name": "production-model-v1",
    },
)
job.run()

Vertex AI Pipelines 基于 Kubeflow Pipelines 构建,允许你将 ML 工作流定义为有向无环图(DAG)。每个组件是一个独立的函数,可以运行在不同的容器环境中。@dsl.component 装饰器定义组件,@dsl.pipeline 定义管道拓扑。组件之间通过输入输出参数传递数据。

Model Monitoring(模型监控)

为什么需要模型监控?模型部署后,输入数据分布可能随时间变化(数据漂移),导致模型性能下降。Vertex AI Model Monitoring 自动检测预测请求中的异常分布,并在超过阈值时发送告警。

from google.cloud import aiplatform

aiplatform.init(project="your-project-id", location="us-central1")

# 为已部署的端点启用模型监控
endpoint = aiplatform.Endpoint("your-endpoint-id")

# 配置特征漂移检测
monitoring_job = aiplatform.ModelDeploymentMonitoringJob(
    display_name="production-model-monitor",
    endpoint=endpoint.resource_name,
    logging_sampling_strategy={
        "random_sample_config": {"sample_rate": 0.8}
    },
    model_monitoring_objective_configs=[
        {
            "objective_config": {
                "training_dataset": {
                    "data_format": "csv",
                    "gcs_source": {"uris": ["gs://bucket/training_data.csv"]},
                },
                "training_prediction_skew_config": {
                    "skew_thresholds": {
                        "feature_a": {"value": 0.05},
                        "feature_b": {"value": 0.1},
                    }
                },
                "drift_thresholds": {
                    "feature_a": {"value": 0.05},
                    "feature_b": {"value": 0.1},
                }
            }
        }
    ],
    model_monitoring_alert_config={
        "email_alert_config": {
            "user_emails": ["team@example.com"],
        }
    },
)

模型监控配置了三种检测机制:训练/预测偏差检测(skew)比较生产数据与训练数据的分布差异;特征漂移检测(drift)追踪时间维度上的分布变化;告警配置在超过阈值时通过邮件通知团队。

Responsible AI 与安全最佳实践

内容安全过滤

Gemini 内置安全过滤器,可检测和阻止有害内容输出。支持按类别配置过滤级别,适应不同应用场景。

数据隐私保护

Google Cloud 默认加密所有数据(静态和传输中)。Vertex AI 不使用客户数据训练基础模型,确保数据主权。

公平性评估

使用 Vertex AI Model Evaluation 评估模型在不同人口统计组的表现差异,识别和缓解偏见。

可解释性工具

Vertex Explainable AI 提供特征归因分析,帮助理解模型为什么做出特定预测,增强透明度和信任。

# 配置安全过滤和内容审核
import google.generativeai as genai

safety_config = {
    generativeai.HarmCategory.HARM_CATEGORY_HARASSMENT:
        generativeai.HarmBlockThreshold.BLOCK_ONLY_HIGH,
    generativeai.HarmCategory.HARM_CATEGORY_HATE_SPEECH:
        generativeai.HarmBlockThreshold.BLOCK_ONLY_HIGH,
    generativeai.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT:
        generativeai.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
    generativeai.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT:
        generativeai.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
}

model = genai.GenerativeModel(
    'gemini-pro',
    safety_settings=safety_config,
)

response = model.generate_content("解释量子计算原理")

# 检查安全评级
for candidate in response.candidates:
    print(f"安全评级: {candidate.safety_ratings}")
    # 如被过滤,给出替代响应
    if candidate.finish_reason == 3:  # SAFETY
        print("内容被安全过滤器拦截")

安全配置通过 safety_settings 字典控制每个伤害类别的过滤阈值。BLOCK_ONLY_HIGH 只拦截高风险内容,BLOCK_MEDIUM_AND_ABOVE 拦截中等及以上风险。生成后检查 safety_ratings 了解每个类别的风险评分,实现多层安全防护。

多模态应用开发

import google.generativeai as genai
from PIL import Image
import io

genai.configure(api_key="YOUR_API_KEY")

# 使用 Gemini Pro Vision 处理图像
vision_model = genai.GenerativeModel('gemini-pro-vision')

# 从本地加载图像
img = Image.open("architecture_diagram.png")

# 发送图像 + 文本提示
response = vision_model.generate_content([
    "请分析这张架构图,解释其组件和数据流。使用中文回答。",
    img
])
print(response.text)

# 视频理解(Gemini 1.5 Pro)
video_model = genai.GenerativeModel('gemini-1.5-pro')

# 上传视频文件
video_file = genai.upload_file(
    path="product_demo.mp4",
    display_name="Product Demo Video"
)

# 等待视频处理完成
import time
while video_file.state.name == "PROCESSING":
    print("视频处理中...")
    time.sleep(10)
    video_file = genai.get_file(video_file.name)

response = video_model.generate_content([
    video_file,
    "请总结这个产品演示视频的要点,包括关键功能和时间节点。"
])
print(response.text)

Gemini 的多模态能力支持图像和视频理解。图像分析直接传入 PIL Image 对象,模型可以识别图表、截图、文档等。视频理解通过文件上传 API 处理,Gemini 1.5 Pro 支持最长 1 小时的视频输入,可以定位特定事件的时间节点。

模型微调需要准备什么格式的训练数据?

模块 5:总结与综合练习

在本模块中,我们将回顾 Google Cloud 生成式 AI 的所有核心知识点,并通过综合练习巩固所学内容。

课程知识图谱

核心知识回顾:

  • 模块 1:GCP AI 服务概览 — Vertex AI、Generative AI Studio、Model Garden
  • 模块 2:核心概念 — 模型类型、SDK 初始化、Prompt Engineering、Embeddings
  • 模块 3:实践应用 — RAG 构建、对话系统、Function Calling、内容生成流水线
  • 模块 4:进阶主题 — 模型微调、MLOps 管道、模型监控、Responsible AI、多模态

综合练习 1:构建完整的 AI 客服系统

"""综合练习:Google Cloud AI 客服系统"""
import google.generativeai as genai
from vertexai.language_models import TextEmbeddingModel
from google.cloud import aiplatform
import numpy as np
import json

class AICustomerService:
    """基于 Gemini + RAG 的智能客服"""

    def __init__(self, project_id: str, api_key: str):
        genai.configure(api_key=api_key)
        aiplatform.init(project=project_id, location="us-central1")

        # 初始化模型
        self.chat_model = genai.GenerativeModel(
            'gemini-pro',
            system_instruction="""你是专业的客服代表。
规则:
1. 礼貌、专业、有同理心
2. 优先使用知识库中的信息回答
3. 无法回答时诚实告知并提供升级路径
4. 记录用户反馈用于改进""",
        )
        self.embedding_model = TextEmbeddingModel.from_pretrained("text-embedding-004")

        # 知识库
        self.knowledge_base = {}
        self.embeddings_cache = {}

    def load_knowledge_base(self, category: str, documents: list[str]):
        """加载知识库文档"""
        self.knowledge_base[category] = documents
        embeddings = self.embedding_model.get_embeddings(documents)
        self.embeddings_cache[category] = np.array([e.values for e in embeddings])

    def search_knowledge(self, query: str, category: str = None, top_k: int = 3) -> list[str]:
        """语义检索知识库"""
        query_emb = self.embedding_model.get_embeddings([query])
        query_vec = np.array(query_emb[0].values)

        categories = [category] if category else list(self.knowledge_base.keys())
        results = []

        for cat in categories:
            if cat not in self.embeddings_cache:
                continue
            emb_matrix = self.embeddings_cache[cat]
            sims = np.dot(emb_matrix, query_vec) / (
                np.linalg.norm(emb_matrix, axis=1) * np.linalg.norm(query_vec)
            )
            top_idx = np.argsort(sims)[-top_k:][::-1]
            for idx in top_idx:
                results.append({
                    "text": self.knowledge_base[cat][idx],
                    "score": float(sims[idx]),
                    "category": cat,
                })

        results.sort(key=lambda x: x["score"], reverse=True)
        return [r["text"] for r in results[:top_k]]

    def handle_query(self, user_id: str, query: str) -> dict:
        """处理用户查询"""
        # 1. 检索相关知识
        relevant_docs = self.search_knowledge(query)

        # 2. 构建增强提示
        context = "\n".join(f"- {doc}" for doc in relevant_docs)
        enhanced_query = f"""参考知识:
{context}

用户问题:{query}

请基于参考知识回答用户问题。如果知识库中没有相关信息,请说明。"""

        # 3. 生成回答
        chat = self.chat_model.start_chat()
        response = chat.send_message(enhanced_query)

        return {
            "user_id": user_id,
            "query": query,
            "answer": response.text,
            "sources": relevant_docs,
            "model": "gemini-pro",
        }

# 初始化系统
service = AICustomerService(
    project_id="your-project-id",
    api_key="YOUR_API_KEY"
)

# 加载知识库
service.load_knowledge_base("billing", [
    "账单每月1号生成,可在控制台查看明细",
    "支持信用卡和支付宝付款",
    "退款申请需在消费后30天内提交",
    "企业客户可申请月结",
])
service.load_knowledge_base("technical", [
    "API 调用频率限制为每分钟60次",
    "使用 API Key 进行认证",
    "支持 REST 和 gRPC 两种调用方式",
    "错误码 429 表示请求过于频繁,请稍后重试",
])

# 处理用户查询
result = service.handle_query("user_123", "怎么付款?账单什么时候出?")
print(json.dumps(result, ensure_ascii=False, indent=2))

这个综合练习整合了课程所有核心知识:RAG(嵌入检索增强)、Prompt Engineering(系统指令和上下文注入)、Function Calling(扩展为知识库检索)、错误处理(降级策略)。这是一个可以直接部署到生产环境的 AI 客服系统骨架。

综合练习 2:多模态文档分析器

"""综合练习:多模态文档分析器"""
import google.generativeai as genai
from PIL import Image

genai.configure(api_key="YOUR_API_KEY")

class DocumentAnalyzer:
    """支持文本、图像、表格的多模态文档分析"""

    def __init__(self):
        self.model = genai.GenerativeModel('gemini-1.5-pro')
        self.vision_model = genai.GenerativeModel('gemini-pro-vision')

    def analyze_image(self, image_path: str, prompt: str = None) -> str:
        """分析图像内容"""
        img = Image.open(image_path)
        analysis_prompt = prompt or """
请详细分析这张图片,包括:
1. 内容描述
2. 如果是图表,提取关键数据
3. 如果是截图,解释界面元素
4. 如果是文档,提取关键信息
"""
        response = self.vision_model.generate_content([analysis_prompt, img])
        return response.text

    def extract_structured_data(self, content: str, schema: dict) -> dict:
        """从非结构化内容中提取结构化数据"""
        prompt = f"""从以下内容中提取结构化数据。

目标 JSON Schema:
{json.dumps(schema, ensure_ascii=False, indent=2)}

内容:
{content}

请严格按照 schema 格式返回 JSON,不要包含其他文字。"""

        response = self.model.generate_content(prompt)
        try:
            # 尝试解析 JSON(可能包裹在 ```json``` 中)
            text = response.text
            if "```json" in text:
                text = text.split("```json")[1].split("```")[0]
            return json.loads(text.strip())
        except:
            return {"error": "Failed to parse", "raw": response.text}

    def summarize_document(self, content: str, max_length: int = 200) -> str:
        """生成文档摘要"""
        prompt = f"""请用中文生成以下文档的摘要,不超过 {max_length} 字。
重点突出:
1. 核心主题
2. 关键结论
3. 行动建议(如有)

文档内容:
{content}"""

        response = self.model.generate_content(prompt)
        return response.text

    def compare_documents(self, doc1: str, doc2: str) -> str:
        """比较两份文档的差异"""
        prompt = f"""请比较以下两份文档的异同:

文档 A:
{doc1}

文档 B:
{doc2}

请列出:
1. 相同点
2. 不同点
3. 哪份文档更完整/准确"""

        response = self.model.generate_content(prompt)
        return response.text

# 使用示例
analyzer = DocumentAnalyzer()

# 分析架构图
# result = analyzer.analyze_image("architecture.png")
# print(result)

# 提取结构化数据
text_content = """
Google Cloud Next '24 大会上宣布了 Gemini 1.5 Pro 正式发布。
该模型支持 100 万 token 上下文窗口,价格为企业版 $0.0125/千字符。
首发区域包括 us-central1、europe-west1 和 asia-northeast1。
"""

schema = {
    "type": "object",
    "properties": {
        "event": {"type": "string"},
        "product": {"type": "string"},
        "features": {"type": "array", "items": {"type": "string"}},
        "pricing": {"type": "string"},
        "regions": {"type": "array", "items": {"type": "string"}}
    }
}

data = analyzer.extract_structured_data(text_content, schema)
print(data)

多模态文档分析器结合了图像理解和文本处理能力:analyze_image 处理视觉内容;extract_structured_data 通过 JSON Schema 约束输出格式;summarize_document 生成精准摘要;compare_documents 比较文档差异。这个工具可以集成到文档管理、合规审查、竞品分析等场景。

学习路径与进阶方向

Google Cloud AI 认证

考取 Google Cloud Professional Machine Learning Engineer 认证,系统化验证你的 AI/ML 工程能力。

深入学习 TensorFlow

Vertex AI 深度集成 TensorFlow。掌握 TF Extended (TFX) 可以构建更强大的 ML 生产管道。

MLOps 工程实践

学习 CI/CD for ML、模型版本管理、A/B 测试、特征工程平台等 MLOps 核心实践。

LLMOps 新兴领域

LLM 运维(LLMOps)是 MLOps 的演进,关注 prompt 版本管理、模型评估、幻觉检测等新挑战。

常用资源与参考链接

官方资源:

  • Vertex AI 文档 — cloud.google.com/vertex-ai/docs
  • Gemini API 参考 — ai.google.dev/docs
  • Google Cloud AI 博客 — cloud.google.com/blog/topics/ai-ml
  • Generative AI Studio — console.cloud.google.com/vertex-ai/generative
  • Model Garden — console.cloud.google.com/vertex-ai/models
  • Google AI 开发者社区 — discuss.ai.google.dev

以下哪些是本课程涵盖的核心技能?