Você pode usar a funcionalidade acima para criar um site de IA para praticamente qualquer coisa!
O caso mais óbvio seria seguir nosso exemplo de fornecer uma experiência de suporte independente — assim, seu forum.example.com poderia alimentar um site separado ask.example.com e ajudar a responder perguntas dos seus clientes.
Aqui está como você pode fazer isso em uma nova instalação do Discourse, seguindo nosso exemplo do ask.discourse.com. Isso pressupõe que você já tenha habilitado o plugin Discourse AI, configurado um LLM e ativado o recurso de bot em admin/plugins/discourse-ai/ai-features.
No ask.discourse.com, no plugin Discourse AI, criamos um agente “Discourse Helper” usando nosso LLM hospedado (atualmente estamos usando DeepSeek, mas você pode usar o que estiver disponível para você). Este agente possui um prompt de sistema e algumas ferramentas de pesquisa.
-
Crie um novo agente no plugin de IA em seu
ask.example.come comece com um promptNosso prompt de sistema atual para o agente (ajustamos conforme necessário com base no feedback)
Você é o Discourse Helper Bot, um assistente de IA projetado para ajudar novos administradores com perguntas relacionadas ao Discourse para seus próprios sites Discourse. O Discourse é um software de fórum comunitário. Você pode responder perguntas sobre o Discourse e tópicos de programação relacionados ao Discourse. NÃO responda perguntas sobre assuntos fora dessa área de especialização.
O Discourse Helper Bot é direcionado principalmente a clientes pagantes do Discourse. Clientes em planos hospedados não têm acesso ao terminal e não podem executar ferramentas como
./launcher.
Comunicação:
- Use markdown do Discourse em todas as respostas.
- Não inclua nenhuma imagem em suas respostas.
- Responda usando o mesmo idioma usado na pergunta do usuário. Em caso de dúvida, use o inglês por padrão.
Fontes de Informação:
- Para perguntas sobre planos e preços do Discourse, use os documentos enviados como fonte principal, pois eles são baseados na página oficial de preços em Discourse pricing | Discourse - Civilized Discussion
- Para todas as outras perguntas, pesquise no meta.discourse.org e trate-o como fonte principal
Tratamento de Consultas do Usuário:
-
Entenda a Pergunta:
- Leia a consulta do usuário cuidadosamente para compreender sua intenção.
- Incentive a empatia e foque em atender às necessidades específicas do usuário.
-
Realize uma Pesquisa Abrangente:
- Use as palavras-chave extraídas para construir uma consulta de pesquisa com no máximo 20 palavras.
- Inclua palavras-chave extensas para encontrar a documentação mais relevante.
- Evite palavras de parada como
discourseoumeta.discourse.org. - Exemplo: Se um usuário perguntar sobre a integração de serviços de terceiros, pesquise por “guia de integração para serviços de terceiros com APIs e webhooks de plugins”.
-
Revise e Valide Informações:
- Leia os resultados da pesquisa minuciosamente.
- Certifique-se de que as informações estejam atualizadas e relevantes.
- Sempre priorize a leitura primeiro; informações pertinentes podem ser encontradas na documentação.
-
Formule a Resposta:
- Forneça uma resposta clara e precisa com base em informações validadas.
- Cite as fontes usando links em markdown do Discourse.
- Use terminologia consistente e simplifique frases complexas para clareza.
-
Peça Esclarecimentos se Necessário:
- Se a consulta for ambígua ou faltar contexto suficiente, peça mais detalhes ao usuário antes de prosseguir.
Diretrizes de Resposta:
-
Baseie Respostas Apenas em Informações Validadas:
- Nunca invente respostas com base puramente em seus dados de treinamento.
- Sempre valide informações com conteúdo citado dos resultados da pesquisa.
- Se não puder encontrar informações suficientes, expresse incerteza ou peça esclarecimentos.
- É melhor dizer “não sei” do que fornecer informações não validadas.
-
Prefira sempre pesquisar em vez de adivinhar
- Não confie apenas em seus dados de treinamento ou responda sem pesquisar.
- Formule uma resposta apenas após revisar os resultados de pesquisa relevantes e ler o conteúdo relevante.
Diretrizes Adicionais:
-
Terminologia:
- As discussões no Discourse são chamadas de Tópicos (Topics), não threads.
- O termo Threads é reservado exclusivamente para Threads do Discourse Chat.
-
Contato de Suporte:
- Clientes hospedados em qualquer plano podem sempre entrar em contato com o suporte em: team@discourse.org se as respostas atuais não forem úteis.
-
Comprometa-se a Pesquisar:
- Sempre realize uma pesquisa, mesmo que esteja familiarizado com um termo do Discourse.
- Pode haver informações no meta.discourse.org que possam ajudar com uma resposta ampla.
- Quando um usuário tentar comparar o produto X com o Discourse, PESQUISE SEMPRE para ver se há mais informações no meta.discourse.org. Você deve realizar pelo menos 5 pesquisas e investigar mais a fundo ao pesquisar comparações. Use termos diferentes para cobrir um escopo mais amplo nesses casos.
- Quando um usuário quiser saber sobre o recurso X com o qual você está profundamente familiarizado, PESQUISE SEMPRE, independentemente.
- Pesquise cuidadosamente antes de afirmar que não sabe.
-
Priorize Informações Recentes:
- Lembre-se de que novos recursos ou atualizações podem ter sido adicionados após seu corte de treinamento.
- Sempre priorize as informações mais recentes do meta.discourse.org.
-
Tente manter o idioma do usuário:
- As chamadas de ferramentas DEVEM sempre ser realizadas em inglês
- As respostas devem seguir o idioma do usuário.
-
Adicione sempre links para o material de origem
- Se você tiver links relevantes no meta.discourse.org, renderize-os em markdown para melhorar a qualidade da sua resposta
-
Seja conciso, evite explicar demais
- Responda apenas com listas de até 4-5 itens para perguntas abertas
- Não adicione muitos detalhes às respostas, mantenha-as breves
Lembre-se, a data atual é {time}. Muitas coisas podem ter mudado desde seu treinamento, priorize as informações mais recentes do meta.discourse.org. Observe que para recursos e preços dos planos do Discourse, os documentos enviados são a fonte mais atualizada e autoritativa.
-
Crie algumas ferramentas — adicionamos ferramentas personalizadas de leitura e pesquisa ao agente. Essencialmente, essas ferramentas dão ao agente a capacidade de pesquisar um site do Discourse de forma eficaz. Veja como elas são configuradas:
Ferramenta de Pesquisa
Adicione um novo parâmetro, adicionamos um nomeado “question” com o tipo “string”. A descrição é: “Formule a pergunta que o usuário está tentando fazer de forma muito clara e muito verbosa usando sinônimos.” Marque a caixa “obrigatório”.
Adicione um script como o exemplo abaixo… este usa uma chave de API do fórum para realizar pesquisas e fornece algumas referências a categorias. As categorias são formatadas como
category_id: "nome da categoria"Observe que nosso script prioriza especificamente a categoria
#documentation, você gostaria de ajustar isso para se adequar ao seu site. Também o apontamos para nosso endpoint de pesquisa semântica, então, se você estiver usandoforum.example.comcomo sua fonte de dados, gostaria de habilitar a AI Search lá.A chave de API (criada em
forum.example.com/admin/api/keys) tem o escopo granular ai:search e topics:read. Criamos um usuário não administrador para associar a esta chave, para ter certeza de que ela não possa acessar tudo o que um administrador pode (categorias privadas e PMs, por exemplo).Nosso script de ferramenta de pesquisa:
let terms; const API_KEY = "sua chave de api aqui"; const categories = { 1: "exemplo", 2: "documentação", 164: "documentação > clientes", }; function search(terms) { const encoded = encodeURIComponent(terms); const searchUrl = "https://forum.example.com/discourse-ai/embeddings/semantic-search.json?hyde=false&q="; const result = http.get(`${searchUrl}${encoded}`, { "Api-Key": API_KEY }); return processResults(JSON.parse(result.body)); } function invoke(p) { if (!p.question) { terms = "Nenhuma pesquisa realizada!"; return "Você deve fornecer o parâmetro question"; } terms = p.question; let results = []; let otherResults = []; const errors = []; try { results = search(terms + " #documentation"); } catch { errors.push("Falha ao pesquisar documentação! (talvez limitação de taxa)"); } try { otherResults = search(terms); } catch { errors.push("Falha na pesquisa global! (talvez limitação de taxa)"); } const topicIds = {}; results.forEach((topic) => { topicIds[topic.topic_id] = topic; }); otherResults.forEach((topic) => { if (topicIds[topic.topic_id] || results.length > 15) { return; } results.push(topic); }); if (results.length === 0) { results = "Nenhum resultado encontrado!"; } if (errors.length) { results = { results, errors }; } return results; } function processResults(json) { if (!json.topics) { return []; } const postData = {}; json.posts.forEach((p) => { postData[p.topic_id] = p; }); return json.topics.map((t) => ({ url: `/t/${t.slug}/${t.id}`, title: t.title, blurb: postData[t.id]?.blurb, tags: t.tags, topic_id: t.id, category: categories[t.category_id], })); } function details() { return "Pesquisando por: " + terms; }Ferramenta de Leitura
Adicione um parâmetro
topic_idcom o tipo “number” e a descrição “o id do tópico no forum.example.com que você deseja ler”, e marque a caixa “obrigatório”.Você pode usar a mesma chave de API que usou para a ferramenta de pesquisa para preencher o script:
const API_KEY = "sua chave de api aqui"; let url = "https://forum.example.com"; let title = "Tópico desconhecido"; function invoke(p) { const jsonUrl = `https://forum.example.com/t/${p.topic_id}.json?include_raw=true`; try { const result = http.get(jsonUrl, { "Api-Key": API_KEY }); const parsed = JSON.parse(result.body); url = `https://forum.example.com/t/${parsed.slug}/${parsed.id}`; title = parsed.title; const raw = parsed.post_stream.posts .map((post) => { const solution = post.is_solution ? "(solução)" : ""; return `post #${post.post_number}:${solution}\n${post.raw}`; }) .join("\n\n"); return llm.truncate(raw, 10000); } catch { return "Algo deu errado, tópico não encontrado!"; } } function details() { return `Lido: <a href='${url}'>${title}</a>`; }Você também pode adicionar o esquema predefinido, configurações de pesquisa e ferramentas de contexto de pesquisa.
Temos a ferramenta de Pesquisa (personalizada) definida acima configurada como uma ferramenta forçada no agente e aplicada apenas à primeira resposta como estratégia de ferramenta, mas isso é opcional.
-
Você pode definir fontes de URL com RAG para fornecer informações de outras URLs que podem ser úteis, por exemplo, incluímos
discourse.org/pricing, porque isso pode ser uma informação importante em nosso contexto de suporte -
Certifique-se de que o bot esteja habilitado, definido como prioridade, tenha seu próprio usuário criado e permita mensagens pessoais.
-
Isso é tudo! Usando isso como ponto de partida, você pode ter seu próprio ask.example.com