3.6 KiB
Fix: Captain Agent Não Respondia Corretamente
Data: 2026-01-07 Autor: Antigravity AI
Problema
O Captain Agent estava retornando conversation_handoff ou mensagens de erro genéricas ao invés de responder às perguntas dos usuários corretamente.
Diagnóstico
1. API Key Inválida no .env
A chave OPENAI_API_KEY no arquivo .env estava inválida/revogada:
OPENAI_API_KEY=sk-proj-l5XCl-...iu5U # INVÁLIDA
Resultado: Erro UnauthorizedError: Incorrect API key provided
2. Método RubyLLM.configuration Errado
O código estava usando RubyLLM.configuration que não existe. O correto é RubyLLM.config:
# ERRADO
RubyLLM.configuration.openai_api_key
# CORRETO
RubyLLM.config.openai_api_key
3. FAQs Sem Embeddings
Os FAQs cadastrados não tinham embeddings gerados, tornando-os invisíveis para a busca semântica:
# Verificação
faq.embedding.present? # => false
Solução
1. Atualizar API Key no .env
Substituir a chave inválida pela chave válida:
# Arquivo: .env
OPENAI_API_KEY=sk-proj-xKi75fs_... # NOVA CHAVE VÁLIDA
2. Corrigir AgentRunnerService
Arquivo: enterprise/app/services/captain/assistant/agent_runner_service.rb
def with_assistant_api_key
api_key = @assistant.api_key.presence
original_key = RubyLLM.config.openai_api_key # CORRIGIDO
if api_key.present?
RubyLLM.config.openai_api_key = api_key # CORRIGIDO
Rails.logger.info "[Captain V2] Using assistant API key: #{api_key[0..15]}..."
end
yield
ensure
RubyLLM.config.openai_api_key = original_key if api_key.present? # CORRIGIDO
end
3. Gerar Embeddings para FAQs
Executar manualmente o job de geração de embeddings:
Captain::AssistantResponse.approved.find_each do |faq|
if faq.embedding.nil?
Captain::Llm::UpdateEmbeddingJob.perform_now(faq, "#{faq.question}: #{faq.answer}")
end
end
4. Recriar Containers
O docker-compose restart não recarrega variáveis de ambiente. É necessário recriar:
docker-compose up -d rails sidekiq
Validação
- Verificar chave no container:
docker-compose exec rails bundle exec rails runner 'puts RubyLLM.config.openai_api_key[0..20]'
# Output esperado: sk-proj-xKi75fs_ntsx6
- Verificar embeddings:
docker-compose exec rails bundle exec rails runner 'puts Captain::AssistantResponse.approved.last.embedding.present?'
# Output esperado: true
- Testar no Playground com uma pergunta que existe nos FAQs
Arquivos Modificados
| Arquivo | Alteração |
|---|---|
.env |
Atualizada OPENAI_API_KEY |
enterprise/app/services/captain/assistant/agent_runner_service.rb |
Corrigido RubyLLM.config e adicionado with_assistant_api_key |
docker-compose.yaml |
Corrigido volume do Postgres (/var/lib/postgresql/data) |
Lições Aprendidas
- Sempre validar API key via curl antes de assumir problemas no código
docker-compose restart≠docker-compose up -dpara mudanças de.env- Embeddings são obrigatórios para busca semântica funcionar
- Verificar API da gem antes de usar métodos (ex:
RubyLLM.configvsRubyLLM.configuration)