Sistema de curadoria automatizada de filmes usando IA híbrida (OpenAI + Gemini + DeepSeek) para análise de sentimentos e intenções emocionais
Dominar o sistema de curadoria automatizada de filmes do vibesfilm, que utiliza inteligência artificial híbrida para analisar e categorizar filmes baseado em sentimentos e intenções emocionais.
O sistema de curadoria é uma ferramenta automatizada que:
Arquivo: src/scripts/orchestrator.ts
tmdbId para máxima eficiênciaArquivo: src/utils/aiProvider.ts
Quando usar cada provider:
| Provider | Casos de Uso | Exemplos |
|---|---|---|
| OpenAI | Coming-of-age, thrillers psicológicos, dramas complexos, lente 16 (Ansioso) | "Lady Bird", "As Vantagens de Ser Invisível" |
| DeepSeek | Romance/Comédia, Família/Animação, Ação/Aventura, lentes 13 (Feliz) e 17 (Animado) | "John Wick", "Mad Max", filmes leves |
| USe como padrão, deepseek, a menos que o usuário especifique o contrário |
| Script | Função | Uso |
|---|---|---|
populateMovies.ts | Adiciona filmes usando TMDB ID | Busca e insere filme no banco |
analyzeMovieSentiments.ts | Análise de sentimentos com IA | Analisa emoções e sugere subsentimentos |
discoverAndCurateAutomated.ts | Curadoria automatizada completa | Valida e gera reflexão final |
orchestrator.ts | Orquestrador principal | Executa todo o fluxo automaticamente |
| Ferramenta | Função |
|---|---|
testAIProviders.ts | Comparação OpenAI vs Gemini vs DeepSeek |
duplicateMovieSuggestion.ts | Duplicação de sugestões entre jornadas |
healthCheck.ts | Verificação de integridade do sistema |
reprocessMovieSentiments.ts | Reprocessa relevanceScore e reflexão |
rephrase_reasons | Refaz as reflexões |
npx ts-node src/scripts/orchestrator.ts \
--title="John Wick" \
--year=2014 \
--journeyOptionFlowId=26 \
--analysisLens=17 \
--journeyValidation=13 \
--ai-provider=deepseek
| Parâmetro | Descrição | Exemplo | Obrigatório |
|---|---|---|---|
--title | Título do filme | "John Wick" | ✅ |
--year | Ano de lançamento | 2014 | ✅ |
--journeyOptionFlowId | ID da opção de jornada | 26 | ✅ |
--analysisLens | Lente de análise (ID do MainSentiment) | 17 (Animado) | ✅ |
--journeyValidation | Sentimento de validação | 13 (Feliz) | ✅ |
--ai-provider | Provider de IA | deepseek/openai/gemini/auto | ❌ (default: auto) |
--approve-new-subsentiments | Aprovar novos subsentimentos | Flag opcional | ❌ |
| ID | Sentimento | Quando Usar |
|---|---|---|
| 13 | Feliz | Filmes positivos, alegres, românticos |
| 14 | Triste | Dramas, filmes emocionais |
| 15 | Calmo | Filmes contemplativos, relaxantes |
| 16 | Ansioso | Suspense, thrillers, tensão |
| 17 | Animado | Ação, aventura, energia |
O orchestrator executa automaticamente 4 etapas:
# Executado internamente pelo orchestrator
populateMovies.ts --title="John Wick" --year=2014
O que faz:
TMDB_ID_FOUND: 245891# Executado internamente pelo orchestrator
analyzeMovieSentiments.ts 245891 26 17 --ai-provider=auto
O que faz:
tmdbId# Executado internamente pelo orchestrator
executeSqlFromFile.ts inserts.sql
O que faz:
MovieSentiment para filmeJourneyOptionFlowSubSentiment com pesos# Executado internamente pelo orchestrator
discoverAndCurateAutomated.ts 245891 13 --ai-provider=deepseek
O que faz:
MovieSuggestionFlow finalnpx ts-node src/scripts/orchestrator.ts \
--title="John Wick" \
--year=2014 \
--journeyOptionFlowId=26 \
--analysisLens=17 \
--journeyValidation=13 \
--ai-provider=deepseek
# Sistema escolhe: DEEPSEEK (ação + animado)
# Resultado: "Adrenalina / Emoção Intensa", "Deslumbramento Visual"
npx ts-node src/scripts/orchestrator.ts \
--title="Lady Bird" \
--year=2017 \
--journeyOptionFlowId=25 \
--analysisLens=14 \
--journeyValidation=13 \
--ai-provider=auto
# Sistema escolhe: OPENAI (coming-of-age complexo)
# Resultado: "Autodescoberta e Crescimento", "Esperança e Superação"
npx ts-node src/scripts/orchestrator.ts \
--title="O Fabuloso Destino de Amélie Poulain" \
--year=2001 \
--journeyOptionFlowId=25 \
--analysisLens=13 \
--journeyValidation=13 \
--ai-provider=deepseek
# Gemini manual: Otimizado para romance
# Resultado: "Doçura / Encanto", "Conforto / Aconchego Emocional"
| Categoria | Provider Recomendado | Economia |
|---|---|---|
| Romance/Comédia | 100% DeepSeek | Máxima |
| Ação/Aventura | 90% DeepSeek | Alta |
| Coming-of-age | 100% OpenAI | Qualidade prioritária |
| Drama psicológico | 100% OpenAI | Precisão necessária |
🎬 === ORQUESTRADOR DE CURADORIA DE FILMES ===
📋 Processando 1 filmes...
🔄 Processando: John Wick (2014)
🎯 TMDB ID capturado: 245891
🤖 AI Provider selecionado automaticamente: DEEPSEEK
📊 Baseado em: Gêneros [Ação], Lente 17
✅ Filme processado com sucesso
Erro: SyntaxError: Unexpected end of JSON input
Solução: Verificar stopSequences removido, maxTokens suficiente
Erro: "Suspense Crescente" já existe em mainSentiment diferente
Solução: Não aprovar com --approve-new-subsentiments
Erro: orchestrator.ts passa title em vez de tmdbId
Solução: Verificar regex de captura TMDB_ID_FOUND
Erro: Request failed with status code 401
Solução: Verificar .env carregado, keys válidas
# Ativar logs verbose
DEBUG=true npx ts-node src/scripts/orchestrator.ts [params]
# Verificar configuração
npx ts-node src/scripts/testConnection.ts
# Validar AI providers
npx ts-node src/scripts/testAIProviders.ts
# Banco de dados
DATABASE_URL="postgresql://..."
DIRECT_URL="postgresql://..."
# APIs obrigatórias
OPENAI_API_KEY="sk-..."
TMDB_API_KEY="your-tmdb-key"
# APIs opcionais
GEMINI_API_KEY="your-gemini-key"
DEEPSEEK_API_KEY="your-deepseek-key"
OMDB_API_KEY="your-omdb-key"
# Configuração padrão de AI
AI_PROVIDER="auto" # openai|gemini|deepseek|auto
# Comparação direta entre providers
npx ts-node src/scripts/testAIProviders.ts
# Resultado mostra:
# - Tempo de resposta
# - Qualidade das sugestões
# - Custo estimado
# - Formato da resposta
# Duplicar sugestão existente para a jornada 61, exemplo
# --journeyOptionFlowId=61 --> destino
# --baseJourneyOptionFlowId=6 --> origem
# para descobrir a origem precisa olhar a tabela MovieSuggestionFlow e capturar um código journeyOptionFlowId
npx ts-node src/scripts/duplicateMovieSuggestion.ts --title="John Wick 4: Baba Yaga" --year=2023 --journeyOptionFlowId=61 --baseJourneyOptionFlowId=6
# Verificação de integridade do sistema
npx ts-node src/scripts/healthCheck.ts
# Verifica:
# - Conexão com APIs
# - Integridade do banco
# - Configurações corretas
# - Performance dos providers
--ai-provider=deepseek para novos filmes (economia)--ai-provider=auto quando não tiver certezasrc/scripts/orchestrator.ts - Orquestrador principalsrc/utils/aiProvider.ts - Configuração de AI providersprisma/schema.prisma - Estrutura do banco de dadosdocs/README_CURADORIA.md - Documentação completa original# Curadoria completa (recomendado)
npx ts-node src/scripts/orchestrator.ts --title="FILME" --year=ANO --journeyOptionFlowId=ID --analysisLens=LENS --journeyValidation=VALIDATION --ai-provider=deepseek
# Teste de providers
npx ts-node src/scripts/testAIProviders.ts
# Health check
npx ts-node src/scripts/healthCheck.ts
# Duplicar sugestão
npx ts-node src/scripts/duplicateMovieSuggestion.ts "FILME" ANO JOURNEY_ID
vibesfilm Curation System v2.0 - Powered by OpenAI + Gemini + DeepSeek 🎬🤖