Ask.discourse.com - No puedo encontrar un anuncio aquí

En otro sitio de Discourse, revisé Novedades y vi

Así que, al estar familiarizado con los muchos bots de IA de Discourse, comprobé si era algo diferente y nuevo, y lo era.

¿Hubo un solo tema en la categoría de Anuncios para esto? No recuerdo haber visto uno.

2 Me gusta

Creo que todavía es una especie de beta.

3 Me gusta

Se anunció en Lounge una apertura tranquila https://meta.discourse.org/t/help-us-test-ask-discourse-com/324441?u=pfaffman

4 Me gusta

Se lo anunciamos a los clientes a través de “novedades”, pero aún no a todos los sitios. Todavía está en sus primeras etapas y está un poco más adaptado para los clientes alojados en este momento, aunque, por supuesto, hay mucha superposición para la mayoría de las preguntas.

9 Me gusta

No tengo acceso a lounge en este foro, pero entiendo lo que quieres decir.

1 me gusta

Este es un desarrollo interesante. Estaba planeando abrir un tema de Feature sobre dar acceso público/invitado a una persona para que cualquier visitante pueda usarlo. ¿Es esto algo que Discourse exploraría, o quizás relacionado con esta instancia de prueba lanzada silenciosamente?

Cada persona tiene una configuración de grupos permitidos, por lo que ahora puedes permitir que cualquier persona use cualquier persona.

Disculpa, debería haber sido más claro, me refería a cualquiera, como invitados/anónimos; serviría para casos de uso como doc-categories, donde no espero que todos los lectores se registren pero aún así quiero permitirles chatear con los documentos.

1 me gusta

Parece muy peligroso permitir que personas que ni siquiera han iniciado sesión, y que podrían ni siquiera ser personas, gasten su dinero.

Por supuesto que necesita algunos límites basados en IP/cookies. O incluso un límite estricto de seguridad global.

No veo por qué gastar en mejorar la experiencia de soporte sería un problema. Si estuvieras alojando documentación con Gitbook, pagarías al menos $1200 al año, ese paquete incluye permitir que tus visitantes chateen con tu documentación. Si me preguntas a mí, ¡hay una gran oportunidad aquí para CDCK! :face_savoring_food:

En segundo lugar, hay varios informes sobre chatbots que ahorran costos (de atención al cliente).

3 Me gusta

Todo eso es cierto. Mi punto es que no sabes que son tus clientes si no han iniciado sesión.

2 Me gusta

¿Discourse Ask utiliza alguna de las Personas de IA ya disponibles o crearon ustedes mismas unas específicas para ello?

Ask usa una persona personalizada, se basa en 2 herramientas personalizadas que realizan llamadas a la API a meta.discourse.org.

¿Hay planes para lanzarlo al público?

No hay nada “ultrasecreto” aquí :slight_smile:

Existe un tema muy similar:

Y, la herramienta que usamos tiene el siguiente script:

let terms;
let API_KEY = "...";

const categories = {
  61: "theme",
  6: "support",
  148: "data & reporting",
  164: "Documentation > Hosted Customers",
  177: "Community wiki",
  31: "installation",
  10: "Documentation",
  22: "plugin",
  1: "bug",
  106: "migration",
  120: "theme-component",
  105: "community support program",
  124: "General",
  157: "site feedback > forum summaries",
  152: "site feedback > theme feedback",
  168: "Documentation > Contributing",
  30: "releases",
  126: "Documentation > Using Discourse",
  2: "feature",
  63: "praise > comparison",
  9: "ux",
  27: "dev > translations",
  24: "sso",
  3: "site feedback",
  17: "Uncategorized",
  14: "marketplace",
  21: "support > wordpress",
  13: "announcements > blog",
  53: "Documentation > Site Management",
  5: "plugin > extras",
  65: "community",
  8: "installation > hosting",
  35: "praise",
  67: "announcements",
  178: "Community wiki > Administrators",
  167: "Documentation > Integrations",
  55: "Documentation > Self-Hosting",
  169: "Documentation > Migrating to Discourse",
  56: "Documentation > Developer Guides",
  7: "dev",
  179: "Community wiki > Developers",
  181: "Community wiki > Users",
  180: "Community wiki > Sysadmins"
};


function search(terms) {
   const encoded = encodeURIComponent(terms);
   const searchUrl = "https://meta.discourse.org/discourse-ai/embeddings/semantic-search.json?hyde=false&q=";
   result = http.get(`${searchUrl}${encoded}`, {'Api-Key': API_KEY });
   return processResults(JSON.parse(result.body));
}

function invoke(p) {
  if (!p.question) {
      terms = "No search performed!"
      return "You must supply the question parameter";
  }
  terms = p.question;
  let results = search(terms + " #documentation");
  let otherResults = search(terms);

  let topicIds = {};
  results.forEach(topic => { topicIds[topic.topic_id] = topic });
  otherResults.forEach(topic => {
      if (topicIds[topic.topic_id]) {
          return;
      }
      if (results.length > 15) {
          return;
      }

      results.push(topic);
  });

  if (results.length === 0) {
      return "No results found!"
  } else {
      return results;
  }
}

function processResults(json) {

    if (!json.topics) {
        return [];
    }

    const postData = {};
    json.posts.forEach( p => {
       postData[p.topic_id] = p;
    });

    // todo meta category map
    return json.topics.map(t => {
        let result = {};
        let post = postData[t.id];
        result.url = `/t/${t.slug}/${t.id}`;
        result.title = t.title;
        result.blurb = post.blurb;
        result.tags = t.tags;
        result.topic_id = t.id;
        result.category = categories[t.category_id];
        return result;
    });
}

function details() {
  return "Searching for: " + terms
}

La herramienta de lectura utiliza:

let topicId;
let url = "https://meta.discourse.org";
const API_KEY = "...";
let title = "Unknown topic";

function invoke(p) {
    topicId = p.topicId;
    let jsonUrl = `https://meta.discourse.org/t/${p.topic_id}.json?include_raw=true`;
    result = http.get(jsonUrl, { 'Api-Key' : API_KEY });

    try {
       const parsed = JSON.parse(result.body);
       url = `https://meta.discourse.org/t/${parsed.slug}/${parsed.id}`;
       title = parsed.title;
       let raw = parsed.post_stream.posts.map( post => {
          let solution = "";
          if (post.is_solution) {
              solution = "(solution)";
          }
          return `post #${post.post_number}:${solution}\n${post.raw}`;
       }).join("\n\n");
       return llm.truncate(raw, 10000);
    } catch {
        return "Something went wrong, topic not found!"
    }
}
function details() {
  return `Read: <a href='${url}'>${title}</a>`;
}

3 Me gusta