本頁面將逐步說明如何使用 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