chatwoot-develop/scripts/debug_faq_search.rb
2026-01-12 19:04:15 -03:00

58 lines
1.9 KiB
Ruby

# scripts/debug_faq_search.rb
puts '--- DEBUGGING FAQ SEARCH ---'
question_query = 'Qual a senha do wifi?'
# 1. Check if the specific FAQ exists
faq = Captain::AssistantResponse.where('question ILIKE ?', '%wifi%').last
if faq
puts "\n[1] FAQ Record Found:"
puts " ID: #{faq.id}"
puts " Question: #{faq.question}"
puts " Answer: #{faq.answer}"
puts " Embedding present?: #{faq.embedding.present?}"
puts " Embedding size: #{faq.embedding&.size}"
else
puts "\n[!] FAQ NOT FOUND in database matching 'wifi'."
end
# 2. Perform a search using the Service
puts "\n[2] Testing SearchService with query: '#{question_query}'"
begin
# Mocking the assistant context if needed, or using the first assistant
assistant = Captain::Assistant.first
puts " Using Assistant ID: #{assistant.id} (#{assistant.name})"
# Ensure we are searching within the correct scope (assistant.responses.approved)
# Mimicking SearchDocumentationService logic
account_id = assistant.account_id
# Manual vector search calculation to see raw distances
embedding_service = Captain::Llm::EmbeddingService.new(account_id: account_id)
query_embedding = embedding_service.get_embedding(question_query)
results = assistant.responses.approved.nearest_neighbors(:embedding, query_embedding, distance: 'cosine').limit(5)
puts "\n Raw Vector Search Results:"
if results.empty?
puts ' No results found.'
else
results.each do |res|
dist = res.neighbor_distance
puts " - ID: #{res.id}"
puts " Q: #{res.question}"
puts " Distance: #{dist}"
puts " Low confidence? (> #{Captain::Tools::SearchDocumentationService::LOW_CONFIDENCE_DISTANCE}): #{dist.to_f > Captain::Tools::SearchDocumentationService::LOW_CONFIDENCE_DISTANCE}"
end
end
rescue StandardError => e
puts " Error during search test: #{e.message}"
end
puts "\n--- END DEBUG ---"