.env.example 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. # Servidor
  2. PORT=3001
  3. CORS_ORIGIN=http://localhost:5173
  4. # Autenticação (jwt ou none)
  5. AUTH_MODE=jwt
  6. JWT_SECRET=coloque-um-segredo-longo-e-aleatorio-aqui
  7. JWT_ISSUER=oraculo-api
  8. JWT_ACCESS_TTL_SECONDS=900
  9. JWT_REFRESH_TTL_SECONDS=2592000
  10. # TTL do refresh token quando rememberMe=false/ausente no login (default 1 dia).
  11. JWT_REFRESH_TTL_SHORT_SECONDS=86400
  12. # API Key alternativa (opcional, deixar vazio para usar só JWT)
  13. API_KEY=
  14. # Banco de dados MySQL
  15. DB_HOST=localhost
  16. DB_PORT=3306
  17. DB_USER=usuario
  18. DB_PASS=senha
  19. DB_SCHEMA=oraculo
  20. # SSL para conexão MySQL (recomendado em produção). Deixe ambos vazios para desativar
  21. # SSL (comportamento padrão em dev local). DB_SSL_REJECT_UNAUTHORIZED=true valida o
  22. # certificado do servidor; DB_SSL_CA aponta para um arquivo de certificado CA (ex.:
  23. # ./certs/rds-ca.pem) se o servidor usar um certificado não confiável publicamente.
  24. DB_SSL_REJECT_UNAUTHORIZED=true
  25. DB_SSL_CA=
  26. # Qdrant (vector DB)
  27. QDRANT_URL=http://localhost:6333
  28. QDRANT_COLLECTION=oraculo_docs
  29. QDRANT_API_KEY=
  30. # Ollama
  31. OLLAMA_URL=http://localhost:11434
  32. OLLAMA_EMBEDDINGS_MODEL=nomic-embed-text
  33. OLLAMA_CHAT_MODEL=llama3
  34. OLLAMA_VISION_MODEL=llava
  35. # Modelo usado na sugestão de resposta ao atendente (ConversasWhatsapp). Default
  36. # já é "star-atendente" no código mesmo sem essa variável — só setar se publicar
  37. # o modelo fine-tuned com outro nome no Ollama.
  38. # OLLAMA_ATENDENTE_MODEL=star-atendente
  39. # Timeout (ms) para chamadas não-streaming ao Ollama (chat/embeddings). Sem isso, uma
  40. # chamada travada (modelo sobrecarregado, processo do Ollama pendurado) nunca resolve
  41. # nem rejeita — trava indefinidamente locks como o de avaliação em lote de atendimentos.
  42. OLLAMA_TIMEOUT_MS=180000
  43. # Timeout de inatividade (ms) para o streaming do chat (chatCompletionStream). Diferente
  44. # do OLLAMA_TIMEOUT_MS (que limita o total de uma chamada não-streaming), este reinicia a
  45. # cada chunk recebido — só dispara se o Ollama parar de mandar bytes no meio de uma
  46. # resposta, o que antes deixava a UI presa em "Gerando resposta..." para sempre.
  47. OLLAMA_STREAM_IDLE_TIMEOUT_MS=60000
  48. # Prefixos opcionais prependados ao texto antes de gerar embedding (útil para modelos
  49. # assimétricos que recomendam prefixo diferente para query de busca e passagem indexada,
  50. # ex.: "search_query: "/"search_document: " no nomic-embed-text, "query: "/"passage: " em
  51. # modelos da família e5). Deixe vazio se o modelo não precisar. Validar empiricamente com
  52. # backend/scripts/evalRetrieval.mjs antes de habilitar em produção.
  53. OLLAMA_EMBED_QUERY_PREFIX=
  54. OLLAMA_EMBED_PASSAGE_PREFIX=
  55. # RAG (valores padrão se não definidos)
  56. RAG_TOP_K=8
  57. RAG_CHUNK_SIZE=900
  58. RAG_CHUNK_OVERLAP=150
  59. # Quantidade de mensagens recentes do histórico incluídas no prompt de rewrite/chat.
  60. RAG_HISTORY_LIMIT=6
  61. # Rate limiting por IP (0 = desativado). Recomendado manter >0 em produção — sem isso
  62. # o middleware de rate limit vira um no-op e o /api fica sem proteção contra abuso.
  63. RATE_LIMIT_PER_MINUTE=60
  64. # Ajuste fino das respostas do LLM
  65. LLM_TEMPERATURE=0.2
  66. LLM_TOP_P=0.9
  67. LLM_NUM_PREDICT=2048
  68. LLM_REPEAT_PENALTY=1.1
  69. # RAG avançado
  70. RAG_QUERY_REWRITE=false
  71. RAG_MIN_SCORE=0.40
  72. RAG_RERANK=false
  73. RAG_RERANK_TOP_N=8
  74. # HyDE (Hypothetical Document Embeddings): gera um trecho hipotético de resposta via LLM
  75. # e usa ele (em vez da query crua) para o embedding de busca, o que tende a elevar o score
  76. # de similaridade porque vira matching passagem-passagem. Custa uma chamada LLM extra por
  77. # pergunta. Validar com backend/scripts/evalRetrieval.mjs antes de habilitar em produção.
  78. RAG_HYDE=false
  79. # Chatbot ifbot (sincronização de atendimentos)
  80. IFBOT_BASE_URL=https://star.ifbot.com.br/api
  81. IFBOT_TOKEN=
  82. # IFBOT_AUTH_HEADER=Authorization
  83. # base pública dos arquivos de mídia (/data/img, /data/aud); padrão: IFBOT_BASE_URL sem o sufixo /api
  84. # IFBOT_MEDIA_BASE_URL=https://star.ifbot.com.br
  85. ATENDIMENTOS_SYNC_INTERVAL_MINUTES=30
  86. # RAG de atendimentos (ingestão de conversas no Qdrant, coleção separada da de documentos)
  87. # ATENDIMENTOS_RAG_COLLECTION=atendimentos_rag
  88. # ATENDIMENTOS_RAG_INTERVAL_MINUTES=60
  89. # ATENDIMENTOS_RAG_BATCH=10
  90. # ATENDIMENTOS_RAG_CHUNK_SIZE=1800
  91. # ATENDIMENTOS_RAG_CHUNK_OVERLAP=200
  92. # ATENDIMENTOS_RAG_TOP_K=20
  93. # ATENDIMENTOS_RAG_MIN_SCORE=0.5
  94. # habilita a busca vetorial no modo "atendimentos" do chat — deixar false até calibrar
  95. # ATENDIMENTOS_RAG_MIN_SCORE com perguntas reais após o backfill inicial
  96. # ATENDIMENTOS_RAG_SEARCH_ENABLED=false
  97. # WhatsApp Cloud API (Meta) — usada pelo chat de Atendimentos (/api/conversas) e pelo
  98. # webhook em /webhooks/whatsapp (fora de /api, sem JWT — protegido por hub.verify_token
  99. # na verificação e, opcionalmente, assinatura HMAC no recebimento).
  100. #
  101. # Valores vêm do painel da Meta (developers.facebook.com/apps/<seu-app>/whatsapp-business/wa-dev-console/):
  102. # - WHATSAPP_PHONE_NUMBER_ID e WHATSAPP_TOKEN: aba "API Setup" (o token temporário expira
  103. # em 24h; gere um token permanente em System Users antes de ir pra produção)
  104. # - WHATSAPP_VERIFY_TOKEN: valor arbitrário definido por você — cole o mesmo valor no
  105. # painel da Meta em WhatsApp → Configuration → Webhook → "Verify token"
  106. # - WHATSAPP_APP_SECRET: aba "App settings → Basic", campo "App Secret" — valida a
  107. # assinatura X-Hub-Signature-256 dos eventos recebidos; vazio desativa a validação
  108. # - WHATSAPP_BUSINESS_ACCOUNT_ID (opcional, não usado ainda): mesma tela do API Setup,
  109. # reservado para gestão de templates/perfil de negócio no futuro
  110. WHATSAPP_API_VERSION=v21.0
  111. WHATSAPP_PHONE_NUMBER_ID=
  112. WHATSAPP_TOKEN=
  113. WHATSAPP_VERIFY_TOKEN=
  114. WHATSAPP_APP_SECRET=
  115. # WHATSAPP_BUSINESS_ACCOUNT_ID=
  116. # Integrador IXC (Alfred) — usadas só pelo seed (npm run seed:run), que provisiona a
  117. # linha na tabela "integracao". Em runtime o service lê Url/Login/Senha/Token do banco,
  118. # não daqui (token sobrevive a restart; ver src/functions/atualizaTokenIxcIntegradorERetorna.js).
  119. # Rodar o seed de novo com Login/Senha diferentes força um novo login (invalida o token cacheado).
  120. IXC_INTEGRADOR_BASE_URL=http://localhost:4001/
  121. IXC_INTEGRADOR_LOGIN=
  122. IXC_INTEGRADOR_SENHA=
  123. # Transcrição de áudio via Whisper local (whisper.cpp), usada como fallback quando o
  124. # ifbot não traz Transcricao — requer `brew install whisper-cpp ffmpeg` e o modelo
  125. # baixado em WHISPER_MODEL_PATH.
  126. WHISPER_TRANSCRICAO_ENABLED=false
  127. # WHISPER_BINARY_PATH=whisper-cli
  128. # WHISPER_FFMPEG_PATH=ffmpeg
  129. # WHISPER_MODEL_PATH=whisper_models/ggml-small.bin
  130. # WHISPER_TIMEOUT_MS=60000