mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-25 15:34:55 +00:00
40 lines
1.2 KiB
Ruby
40 lines
1.2 KiB
Ruby
class Captain::Tools::FaqLookupTool < Captain::Tools::BasePublicTool
|
|
description 'Search FAQ responses using semantic similarity to find relevant answers'
|
|
param :query, type: 'string', desc: 'The question or topic to search for in the FAQ database'
|
|
|
|
def perform(_tool_context, query:)
|
|
log_tool_usage('searching', { query: query })
|
|
|
|
# Use existing vector search on approved responses
|
|
responses = @assistant.responses.approved.search(query).to_a
|
|
|
|
if responses.empty?
|
|
log_tool_usage('no_results', { query: query })
|
|
"No relevant FAQs found for: #{query}"
|
|
else
|
|
log_tool_usage('found_results', { query: query, count: responses.size })
|
|
format_responses(responses)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def format_responses(responses)
|
|
responses.map { |response| format_response(response) }.join
|
|
end
|
|
|
|
def format_response(response)
|
|
formatted_response = "
|
|
Question: #{response.question}
|
|
Answer: #{response.answer}
|
|
"
|
|
if response.documentable.present? && response.documentable.try(:external_link)
|
|
formatted_response += "
|
|
Source: #{response.documentable.external_link}
|
|
"
|
|
end
|
|
|
|
formatted_response
|
|
end
|
|
end
|