本頁面將逐步說明如何使用 Vertex AI API,將文字從一種語言翻譯成另一種語言。
在本範例中,您部署工作負載時不會使用 GPU。如要使用 GPU 部署,請按照「部署 GPU 容器工作負載」一文的步驟操作。
Translation API
以下範例說明如何使用 Vertex AI 翻譯文字。
- 請務必按照「使用 Vertex AI」一文所述,設定 Vertex AI 存取權。
按照這篇 Vertex AI 快速入門指南的說明,設定 Python Vertex AI API。詳情請參閱 Vertex AI Python API 參考說明文件。
建立 Python 檔案
main.py。這個指令碼會利用 Google CloudTranslation API (透過容器端點存取) 執行翻譯。import os import requests # Use requests for HTTP calls from flask import Flask, request, jsonify app = Flask(__name__) TRANSLATE_API_URL = 'https://translation.googleapis.com/language/translate/v2' @app.route('/translate', methods=['POST']) def translate_text(): try: data = request.get_json() text_to_translate = data.get('text') target_language = data.get('target_language', 'en') # Default to English if not text_to_translate: return jsonify({'error': 'Missing "text" in request body'}), 400 params = { 'key': '${API_KEY}', // insert API key 'q': text_to_translate, 'target': target_language } response = requests.post(TRANSLATE_API_URL, params=params) response.raise_for_status() # Raise an exception for bad status codes (4xx or 5xx) result = response.json() # The structure of the response from the REST API is slightly different # It's usually: {'data': {'translations': [{'translatedText': '...', 'detectedSourceLanguage': '...'}]}} if 'data' in result and 'translations' in result['data'] and len(result['data']['translations']) > 0: translation_info = result['data']['translations'][0] return jsonify({ 'original_text': text_to_translate, 'translated_text': translation_info['translatedText'], 'detected_source_language': translation_info.get('detectedSourceLanguage') }) else: return jsonify({'error': 'Unexpected response format from Translation API', 'details': result}), 500 except requests.exceptions.HTTPError as http_err: print(f"HTTP error occurred: {http_err} - {response.text}") return jsonify({'error': f"Translation API request failed: {http_err}", 'details': response.text}), response.status_code except Exception as e: print(f"Error during translation: {e}") return jsonify({'error': str(e)}), 500 if __name__ == '__main__': port = int(os.environ.get('PORT', 8080)) app.run(debug=True, host='0.0.0.0', port=port)建立包含 Python 指令碼的 Docker 檔案:
FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install --no-cache-dir -r requirements.txt EXPOSE 8080 ENV PORT 8080 CMD ["python", "main.py"]建構翻譯應用程式的 Docker 映像檔:
docker build -t translation-app .請按照「設定 Docker」中的操作說明執行下列操作:
- 設定 Docker,
- 建立密鑰,並
- 將映像檔上傳至 HaaS (Harbor 即服務)。
登入使用者叢集,並使用使用者身分產生 kubeconfig 檔案。請務必將 kubeconfig 路徑設為環境變數:
export KUBECONFIG=${CLUSTER_KUBECONFIG_PATH}建立及部署 Kubernetes 部署和服務自訂資源。如要啟用容器輸出,請務必加入
egress.networking.gke.io/enabled: "true"標籤,如以下範例所示。kubectl --kubeconfig ${KUBECONFIG} -n TENANT_PROJECT \ create -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: translation-deployment-apikey spec: replicas: 2 selector: matchLabels: app: translation-apikey template: metadata: labels: app: translation-apikey egress.networking.gke.io/enabled: "true" spec: dnsConfig: nameservers: - 8.8.8.8 containers: - name: translation-app image: HARBOR_INSTANCE_URL/HARBOR_PROJECT/translation-app:latest ports: - containerPort: 8080 imagePullSecrets: - name: SECRET --- apiVersion: v1 kind: Service metadata: name: translation-service-apikey spec: type: LoadBalancer selector: app: translation-apikey ports: - protocol: TCP port: 80 targetPort: 8080 EOF更改下列內容:
HARBOR_INSTANCE_URL:Harbor 執行個體網址。HARBOR_PROJECT:Harbor 專案。SECRET:為儲存 Docker 憑證而建立的密鑰名稱。
確認 Deployment 已建立 Pod:
kubectl --kubeconfig ${KUBECONFIG} get pods -n TENANT_PROJECT建立網路政策,允許所有網路流量傳輸至租戶專案:
kubectl --kubeconfig ${KUBECONFIG} -n TENANT_PROJECT \ create -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: annotations: name: allow-all spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 podSelector: {} policyTypes: - Ingress EOF匯出服務的 IP 位址:
export IP=`kubectl --kubeconfig=${KUBECONFIG} get service nginx-service \ -n TENANT_PROJECT -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`建立 SSH 通道工作階段,連線至您部署的工作負載。
sshuttle -r zone1-org-1-data@GDC_SANDBOX_INSTANCE_NAME --no-latency-control \ --ssh-cmd 'gcloud compute ssh --project PROJECT_NAME --zone ZONE --tunnel-through-iap' \ 10.200.0.0/16 --dns如要測試服務,請使用 POST 要求,將含有文字和目標語言的 JSON 酬載傳送至
http://${IP}:8080/translate,並將Content-Type標頭設為application/json。以下 curl 指令會將「Hello, world!」翻譯成西班牙文 (es):curl -X POST -H "Content-Type: application/json" -d '{"text": "Hello, world\\!", "target\_language": "es"}' http://${IP}:8080/translate