Agora você pode usar o Discourse para criar sua própria página inicial de perguntas e respostas com IA

Se você está seguindo o canal de lançamentos mais recente, agora pode acessar configurações que permitem executar seu próprio site de discussão com bot de IA, como o ask.discourse.com!

As novas configurações são:

  1. Uma opção ai bot conversations na configuração do site default homepage (página inicial padrão).

    Para habilitar esta opção, você primeiro precisa ter o ai_bot_enabled ativado. Se um usuário não tiver permissão para usar bots de IA, ele será direcionado para a primeira opção na configuração top_menu como alternativa.

  2. A opção de adicionar anonymous users (usuários anônimos) à configuração do site AI bot allowed groups (grupos permitidos para bot de IA)

    quando habilitada, os usuários anônimos não podem usar o bot, mas podem ver uma pré-visualização da página. Se fizerem uma pergunta, serão direcionados para fazer login, e a pergunta será mantida após o login.

Para saber mais sobre a configuração de IA no Discourse, confira nossa visão geral do plugin em Discourse AI. Todos os nossos planos de Discourse hospedado incluem créditos para usar com nossos LLMs hospedados pelo Discourse. :rocket:

11 curtidas

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.

  1. Crie um novo agente no plugin de IA em seu ask.example.com e comece com um prompt

    Nosso 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:


    Tratamento de Consultas do Usuário:

    1. 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.
    2. 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 discourse ou meta.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”.
    3. 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.
    4. 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.
    5. 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:

    1. 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.
    2. 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:

    1. 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.
    2. 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.
    3. 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.
    4. 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.
    5. 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.
    6. 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
    7. 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.

  2. 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 usando forum.example.com como 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_id com 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.

    1. 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

    2. 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

5 curtidas

Isso também me faz pensar na ideia do entrevistador de aplicativo. Será que uma versão futura poderia guiar alguém por meio de uma tarefa fazendo perguntas de acompanhamento, ajudando a encontrar as informações certas ou coletando os detalhes necessários para um relatório de bug útil? Ter a IA ajudando ao longo do caminho pode tornar uma tarefa complexa muito mais acessível.