- Conceitos e Exemplos Práticos
A. CI/CD para LLMs (LLMOps)
Conceito: Diferente do CI tradicional (que testa apenas a sintaxe do código), o CI para LLMs testa a qualidade estocástica. Se uma mudança no prompt fizer a métrica de Toxicity subir, o pipeline "quebra" e impede o deploy.
Exemplo Prático: Você faz um push corrigindo um bug no chatbot. O GitHub Actions roda o DeepEval e percebe que, embora o código esteja certo, a resposta do bot ficou menos irrelevante. O deploy é bloqueado.
B. Estratégia de Deploy: Blue-Green ou Rolling
Conceito: Como o Google Cloud (Cloud Run) lida com containers, podemos subir a nova versão da Playcatch e só direcionar o tráfego quando o Health Check der positivo.
Exemplo Prático: O container sobe no GCP, o sistema testa se a porta 8080 responde. Se sim, a versão antiga é desligada
2 Implementação: GitHub Actions Workflow
Tópicos Principais:
Runners: Máquinas virtuais que executam os comandos do pipeline.
Secrets: Armazenamento seguro de chaves (GCP Keys, DeepEval Tokens).
Artefatos: Imagens Docker prontas para produção.
Código Fonte: .github/workflows/main.yml
Este arquivo deve ser colocado na pasta .github/workflows/ do seu repositório.
YAML
name: Playcatch CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test-and-eval:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install deepeval
- name: Run LLM Evaluation (DeepEval)
env:
CONFIDENT_AI_API_KEY: ${{ secrets.CONFIDENT_AI_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} # Caso use como juiz
run: |
deepeval test run tests/test_playcatch.py
build-and-deploy:
needs: test-and-eval
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- name: Checkout Code
uses: actions/checkout@v4
# 1. Configuração Docker & Google Cloud
- name: Google Auth
uses: 'google-github-actions/auth@v2'
with:
credentials_json: '${{ secrets.GCP_SA_KEY }}'
- name: Set up Cloud SDK
uses: 'google-github-actions/setup-gcloud@v2'
- name: Configure Docker
run: gcloud auth configure-docker
# 2. Build com Health Check
- name: Build Docker Image
run: |
docker build -t gcr.io/${{ secrets.GCP_PROJECT_ID }}/playcatch-app:${{ github.sha }} .
# 3. Deploy para Google Cloud Run
- name: Deploy to Cloud Run
run: |
gcloud run deploy playcatch-service \
--image gcr.io/${{ secrets.GCP_PROJECT_ID }}/playcatch-app:${{ github.sha }} \
--platform managed \
--region us-central1 \
--allow-unauthenticated \
--health-check-path=/health
3. Configuração do Docker com Health Check
alide se o servidor Dockerfile
Dockerfile:
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
Expõe a porta do Gradio
EXPOSE 7860
Health check simples (verifica se o processo está rodando)
HEALTHCHECK --interval=30s --timeout=10s --retries=3
CMD curl -f http://localhost:7860/ || exit 1
CMD ["python", "app.py"]