- Métrica Customizada e Avaliação com DAG
Conceitos Técnicos
Métrica Customizada (G-Eval): Permite definir critérios subjetivos em linguagem natural que o DeepEval transforma em uma pontuação quantitativa.
DAG (Directed Acyclic Graph): No contexto de avaliação, usamos uma estrutura lógica de "nós" (decisões) para filtrar se a resposta do chatbot deve ou não seguir para o usuário, garantindo que ele não saia do escopo musical.
Código: Métrica de Escopo e Test Case
Python
from deepeval.metrics import GEval
from deepeval.test_case import LLMTestCase, LLMTestCaseParams
1. Definindo a Métrica Customizada de Escopo Musical
Big O: O(1) para definição, O(LLM_call) para execução
musical_scope_metric = GEval(
name="Escopo Musical Playcatch",
criteria="Verificar se a resposta está estritamente relacionada a música, artistas ou sentimentos musicais.",
evaluation_params=[LLMTestCaseParams.ACTUAL_OUTPUT],
threshold=0.8
)
def evaluate_response_dag(user_input, bot_output):
"""
Estrutura lógica (DAG) para decisão de deploy da resposta.
Nó 1: Avaliar Escopo -> Nó 2: Se aprovado, retornar. Se não, Fallback.
"""
test_case = LLMTestCase(
input=user_input,
actual_output=bot_output
)
musical_scope_metric.measure(test_case)
if musical_scope_metric.score >= 0.8:
return bot_output
else:
return "Desculpe, como assistente da Playcatch, só posso conversar sobre música e emoções."
2. Deploy no Google Cloud (GCP) com GitHub Actions
Em vez de usar o Cloud Run (Serverless), vamos configurar uma VM (Compute Engine) para ter controle total sobre o ambiente Docker e GPU.
Passo 1: Preparação da VM no GCP
No console do GCP, crie uma instância de VM (e2-medium ou superior).
Nas configurações de rede, permita tráfego HTTP/HTTPS e crie uma regra de firewall para liberar a porta 8000.
Instale o Docker na máquina:
Bash
sudo apt-get update && sudo apt-get install docker.io -y
Passo 2: Configuração dos Secrets no GitHub
No seu repositório (Settings > Secrets), adicione:
GCP_SA_KEY: O conteúdo do arquivo JSON da sua Service Account.
GCP_VM_IP: O IP externo da sua máquina virtual.
GCP_VM_USER: Seu usuário SSH (geralmente o nome da conta Google).
Passo 3: Workflow do GitHub Actions (deploy-vm.yml)
Este pipeline realiza o checkout, gera a imagem e faz o deploy direto na VM via SSH.
YAML
2. Deploy no Google Cloud (GCP) com GitHub Actions
Em vez de usar o Cloud Run (Serverless), vamos configurar uma VM (Compute Engine) para ter controle total sobre o ambiente Docker e GPU.
Passo 1: Preparação da VM no GCP
No console do GCP, crie uma instância de VM (e2-medium ou superior).
Nas configurações de rede, permita tráfego HTTP/HTTPS e crie uma regra de firewall para liberar a porta 8000.
Instale o Docker na máquina:
Bash
sudo apt-get update && sudo apt-get install docker.io -y
Passo 2: Configuração dos Secrets no GitHub
No seu repositório (Settings > Secrets), adicione:
GCP_SA_KEY: O conteúdo do arquivo JSON da sua Service Account.
GCP_VM_IP: O IP externo da sua máquina virtual.
GCP_VM_USER: Seu usuário SSH (geralmente o nome da conta Google).
Passo 3: Workflow do GitHub Actions (deploy-vm.yml)
Este pipeline realiza o checkout, gera a imagem e faz o deploy direto na VM via SSH.
YAML
name: Deploy Playcatch to GCP VM
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Auth Google Cloud
uses: 'google-github-actions/auth@v2'
with:
credentials_json: '${{ secrets.GCP_SA_KEY }}'
- name: Build and Push Docker Image
run: |
gcloud auth configure-docker
docker build -t gcr.io/${{ secrets.GCP_PROJECT_ID }}/playcatch-vm:latest .
docker push gcr.io/${{ secrets.GCP_PROJECT_ID }}/playcatch-vm:latest
- name: SSH and Deploy to VM
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.GCP_VM_IP }}
username: ${{ secrets.GCP_VM_USER }}
key: ${{ secrets.GCP_SSH_PRIVATE_KEY }}
script: |
# Autentica o Docker na VM
gcloud auth configure-docker --quiet
# Para e remove containers antigos
docker stop playcatch || true
docker rm playcatch || true
# Pull da nova imagem e Run na porta 8000
docker pull gcr.io/${{ secrets.GCP_PROJECT_ID }}/playcatch-vm:latest
docker run -d --name playcatch -p 8000:8000 gcr.io/${{ secrets.GCP_PROJEC