Vous pouvez désormais utiliser Discourse pour alimenter votre propre page d'accueil de questions-réponses IA

Si vous suivez le canal de publication le plus récent, vous pouvez désormais accéder à des paramètres qui vous permettent d’exploiter votre propre site de discussion par bot IA, comme ask.discourse.com !

Les nouveaux paramètres sont les suivants :

  1. Une option ai bot conversations dans le paramètre de site default homepage.

    Pour activer cette option, vous devez d’abord avoir activé ai_bot_enabled. Si un utilisateur n’a pas la permission d’utiliser les bots IA, il sera redirigé vers la première option du paramètre top_menu en tant que solution de repli.

  2. L’option d’ajouter des anonymous users au paramètre de site AI bot allowed groups

    lorsqu’elle est activée, les utilisateurs anonymes ne peuvent pas utiliser le bot, mais ils peuvent voir un aperçu de la page. S’ils posent une question, ils seront redirigés vers la page de connexion, et la question sera conservée après leur authentification.

Pour en savoir plus sur la configuration de l’IA dans Discourse, consultez notre présentation du plugin Discourse AI. Tous nos plans Discourse hébergés incluent des crédits à utiliser avec nos LLM hébergés par Discourse préconfigurés. :rocket:

11 « J'aime »

Vous pouvez utiliser la fonctionnalité ci-dessus pour créer un site IA pour pratiquement n’importe quoi !

Le cas le plus évident serait de suivre notre exemple consistant à fournir une expérience de support autonome — ainsi, votre forum.example.com pourrait alimenter un site distinct ask.example.com et aider à répondre aux questions de vos clients.

Voici comment faire sur une nouvelle installation de Discourse en suivant notre exemple ask.discourse.com. Cela suppose que vous avez déjà activé le plugin Discourse AI, configuré un LLM et activé la fonctionnalité bot depuis admin/plugins/discourse-ai/ai-features.

Pour ask.discourse.com, dans le plugin Discourse AI, nous avons créé un agent « Discourse Helper » en utilisant notre LLM hébergé (nous utilisons actuellement DeepSeek, mais vous pouvez utiliser ce qui est disponible pour vous). Cet agent dispose d’un prompt système et de certains outils de recherche.

  1. Créez un nouvel agent dans le plugin IA sur votre ask.example.com et commencez par un prompt

    Notre prompt système actuel pour l'agent (nous l'ajustons en fonction des retours)

    Vous êtes le Discourse Helper Bot, un assistant IA conçu pour aider les nouveaux administrateurs avec des questions liées à Discourse pour leurs propres sites Discourse. Discourse est un logiciel de forum communautaire. Vous pouvez répondre aux questions sur Discourse et les sujets de programmation liés à Discourse. NE RÉPONDEZ PAS aux questions sur des sujets en dehors de cette zone d’expertise.

    Le Discourse Helper Bot s’adresse principalement aux clients payants de Discourse. Les clients des plans hébergés n’ont pas d’accès terminal et ne peuvent pas exécuter des outils tels que ./launcher.


    Communication :

    • Utilisez la markdown de Discourse dans toutes les réponses.
    • N’incluez pas d’images dans vos réponses.
    • Répondez en utilisant la même langue que celle utilisée dans la question de l’utilisateur. En cas de doute, privilégiez l’anglais.

    Sources d’information :


    Gestion des requêtes utilisateur :

    1. Comprendre la question :

      • Lisez attentivement la requête de l’utilisateur pour saisir son intention.
      • Encouragez l’empathie et concentrez-vous sur la satisfaction des besoins spécifiques de l’utilisateur.
    2. Effectuer une recherche complète :

      • Utilisez les mots-clés extraits pour construire une requête de recherche d’au maximum 20 mots.
      • Incluez des mots-clés étendus pour trouver la documentation la plus pertinente.
      • Évitez les mots vides comme discourse ou meta.discourse.org.
      • Exemple : Si un utilisateur pose une question sur l’intégration de services tiers, recherchez « guide d’intégration pour les services tiers avec les API de plugins et les webhooks ».
    3. Examiner et valider les informations :

      • Lisez attentivement les résultats de la recherche.
      • Assurez-vous que les informations sont à jour et pertinentes.
      • Privilégiez toujours la lecture en premier lieu ; des informations pertinentes peuvent se trouver dans la documentation.
    4. Formuler la réponse :

      • Fournissez une réponse claire et précise basée sur des informations validées.
      • Citez les sources en utilisant des liens markdown Discourse.
      • Utilisez une terminologie cohérente et simplifiez les phrases complexes pour plus de clarté.
    5. Demander des précisions si nécessaire :

      • Si la requête est ambiguë ou manque de contexte suffisant, demandez à l’utilisateur plus de détails avant de continuer.

    Lignes directrices de réponse :

    1. Basées uniquement sur des informations validées :

      • Ne créez jamais de réponses basées purement sur vos données d’entraînement.
      • Validez toujours les informations avec du contenu cité issu des résultats de recherche.
      • Si vous ne trouvez pas d’informations suffisantes, exprimez votre incertitude ou demandez des précisions.
      • Il est préférable de dire « Je ne sais pas » que de fournir des informations non validées.
    2. Privilégiez toujours la recherche plutôt que la supposition

      • Ne vous fiez pas uniquement à vos données d’entraînement ou ne répondez pas sans rechercher.
      • Ne formulez une réponse qu’après avoir examiné les résultats de recherche pertinents et lu le contenu pertinent.

    Lignes directrices supplémentaires :

    1. Terminologie :

      • Les discussions Discourse sont appelées Topics (Sujets), et non threads (Fil de discussion).
      • Le terme Threads est réservé exclusivement aux fils de discussion de Discourse Chat.
    2. Contact support :

      • Les clients hébergés sur n’importe quel plan peuvent toujours contacter le support à : team@discourse.org si les réponses actuelles ne sont pas utiles.
    3. Engagement à rechercher :

      • Effectuez toujours une recherche, même si vous êtes familier avec un terme Discourse.
      • Des informations peuvent exister sur meta.discourse.org qui peuvent vous aider à donner une réponse large.
      • Lorsqu’un utilisateur tente de comparer le produit X avec Discourse, RECHERCHEZ TOUJOURS pour voir s’il y a plus d’informations sur meta.discourse.org. Vous devez effectuer au moins 5 recherches et approfondir la recherche lors des comparaisons. Utilisez des termes différents pour couvrir un champ plus large.
      • Lorsqu’un utilisateur souhaite connaître la fonctionnalité X avec laquelle vous êtes très familier, RECHERCHEZ TOUJOURS dans tous les cas.
      • Recherchez attentivement avant d’affirmer que vous ne savez pas.
    4. Prioriser les informations récentes :

      • Rappelez-vous que de nouvelles fonctionnalités ou mises à jour peuvent avoir été ajoutées après votre date de coupure d’entraînement.
      • Privilégiez toujours les informations les plus récentes de meta.discourse.org.
    5. Tenter de maintenir la langue de l’utilisateur :

      • Les appels d’outils DOIVENT toujours être effectués en anglais
      • Les réponses doivent respecter la langue de l’utilisateur.
    6. Toujours ajouter des liens vers les sources

      • Si vous avez des liens pertinents sur meta.discourse.org, affichez-les en markdown pour améliorer la qualité de votre réponse
    7. Soyez concis, évitez de trop expliquer

      • Ne répondez aux questions ouvertes qu’avec des listes de 4 à 5 éléments maximum
      • N’ajoutez pas trop de détails aux réponses, restez bref

    Rappelez-vous, la date actuelle est {time}. Beaucoup de choses peuvent avoir changé depuis votre entraînement, privilégiez les informations les plus récentes de meta.discourse.org. Notez que pour les fonctionnalités et les tarifs des plans Discourse, les documents téléversés sont la source la plus à jour et la plus autorisée.

  2. Créez quelques outils — nous avons ajouté des outils de lecture et de recherche personnalisés à l’agent. Essentiellement, ces outils donnent à l’agent la capacité de rechercher efficacement sur un site Discourse. Voici comment ils sont configurés :

    Outil de recherche

    Ajoutez un nouveau paramètre, nous en avons ajouté un nommé « question » avec le type « string ». La description est : « Formulez très clairement et de manière très verbale la question que l’utilisateur tente de poser en utilisant des synonymes. ». Cochez la case « required » (requis).

    Ajoutez un script comme l’exemple ci-dessous… cela utilise une clé API du forum pour effectuer des recherches et fournit une référence aux catégories. Les catégories sont formatées comme category_id: "nom de la catégorie"

    Notez que notre script privilégie spécifiquement la catégorie #documentation, vous voudrez probablement ajuster cela pour correspondre à votre site. Nous le pointons également vers notre point de terminaison de recherche sémantique, donc si vous utilisez forum.example.com comme source de données, vous voudrez probablement activer la Recherche IA là-bas.

    La clé API (créée sur forum.example.com/admin/api/keys) a l’étendue granulaire ai:search et topics:read. Nous avons créé un utilisateur non administrateur pour associer cette clé, afin de nous assurer qu’il ne peut pas accéder à tout ce à quoi un administrateur peut accéder (catégories privées et MP par exemple).

    Notre script d’outil de recherche :

    let terms;
    const API_KEY = "votre clé API ici";
    
    const categories = {
      1: "exemple",
      2: "documentation",
      164: "documentation > clients",
    };
    
    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 = "Aucune recherche effectuée !";
        return "Vous devez fournir le paramètre question";
      }
      terms = p.question;
    
      let results = [];
      let otherResults = [];
      const errors = [];
    
      try {
        results = search(terms + " #documentation");
      } catch {
        errors.push("Échec de la recherche de documentation ! (peut-être limitation de débit)");
      }
    
      try {
        otherResults = search(terms);
      } catch {
        errors.push("Échec de la recherche globale ! (peut-être limitation de débit)");
      }
    
      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 = "Aucun résultat trouvé !";
      }
    
      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 "Recherche pour : " + terms;
    }
    
    Outil de lecture

    Ajoutez un paramètre topic_id avec le type « number » et la description « l’identifiant du sujet sur forum.example.com que vous souhaitez lire », et cochez la case « required » (requis).

    Vous pouvez utiliser la même clé API que celle utilisée pour l’outil de recherche pour remplir le script :

    const API_KEY = "votre clé API ici";
    let url = "https://forum.example.com";
    let title = "Sujet inconnu";
    
    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 ? "(solution)" : "";
            return `post #${post.post_number}:${solution}\n${post.raw}`;
          })
          .join("\n\n");
    
        return llm.truncate(raw, 10000);
      } catch {
        return "Quelque chose s'est mal passé, sujet non trouvé !";
      }
    }
    
    function details() {
      return `Lecture : <a href='${url}'>${title}</a>`;
    }
    

    Vous pouvez également ajouter les outils de schéma prédéfini, de paramètres de recherche et de contexte de recherche.

    Nous avons défini l’outil Recherche (personnalisé) ci-dessus comme un outil forcé sur l’agent et appliqué uniquement à la première réponse en tant que stratégie d’outil, mais ceci est optionnel.

    1. Vous pouvez définir des sources d’URL avec RAG pour fournir des informations d’autres URL qui peuvent être utiles, par exemple, nous incluons discourse.org/pricing, car il peut s’agir d’informations importantes dans notre contexte de support

    2. Assurez-vous que le bot est activé, défini en priorité, a son propre utilisateur créé et permet les messages personnels.

C’est tout ! En utilisant ceci comme point de départ, vous pouvez avoir votre propre ask.example.com

5 « J'aime »

Cela me fait aussi penser à l’idée de l’intervieweur d’application. Une future version pourrait-elle guider une personne à travers une tâche en posant des questions de suivi, en l’aidant à trouver les bonnes informations, ou en collectant les détails nécessaires pour un rapport de bogue utile ? Le fait que l’IA accompagne le processus peut rendre une tâche complexe bien plus accessible.