Ask.discourse.com - Não consigo encontrar um anúncio aqui

Em outro site Discourse verifiquei o Novidades e vi

Então, tendo me familiarizado com os muitos bots de IA do Discourse, verifiquei para ver se era algo diferente e novo, e era.

Houve um único tópico na categoria Anúncios para isso? Não me lembro de ter visto um.

2 curtidas

Acho que ainda é meio que beta.

3 curtidas

Foi anunciado no Lounge para uma abertura discreta https://meta.discourse.org/t/help-us-test-ask-discourse-com/324441?u=pfaffman

4 curtidas

Anunciamos isso aos clientes via “novidades”, mas ainda não a todos os sites. Ainda é cedo e um pouco mais voltado para clientes hospedados no momento, embora, é claro, haja muita sobreposição para a maioria das perguntas.

9 curtidas

Não tenho acesso ao lounge neste fórum, mas entendo o que você quer dizer.

1 curtida

Este é um desenvolvimento interessante. Eu estava planejando abrir um tópico de Feature sobre dar acesso público/convidado a uma persona para que qualquer visitante possa usá-la. Isso é algo que o Discourse exploraria, ou talvez relacionado a esta instância de teste lançada silenciosamente?

Cada persona tem uma configuração de grupos permitidos, para que você possa permitir que qualquer pessoa use qualquer persona agora.

Desculpe, deveria ter sido mais claro, eu quis dizer qualquer pessoa, como convidados/anônimos - serviria para casos de uso como doc-categories, onde não espero que todos os leitores se registrem, mas ainda quero permitir que eles conversem com os documentos.

1 curtida

Parece muito perigoso deixar que pessoas que nem sequer fizeram login, e que talvez nem sejam pessoas, gastem seu dinheiro.

Claro que precisa de alguns limites baseados em IP/cookies. Ou até mesmo um limite máximo de segurança global.

Não vejo por que gastar para melhorar a experiência de suporte seria um problema. Se você estiver hospedando documentação com o Gitbook, pagaria no mínimo US$ 1200 por ano, esse pacote inclui permitir que seus visitantes conversem com sua documentação. Se você me perguntar, há uma grande oportunidade aqui para a CDCK :face_savoring_food:

Em segundo lugar, existem vários relatórios por aí sobre chatbots economizando custos (de suporte ao cliente).

3 curtidas

Isso é tudo verdade. Meu ponto é que você não sabe que eles são seus clientes se eles não estiverem logados.

2 curtidas

O Discourse Ask está usando alguma das Personas de IA já disponíveis ou vocês criaram as suas especificamente para isso?

Ask usa uma persona personalizada, ela se baseia em 2 ferramentas personalizadas que fazem chamadas de API para meta.discourse.org.

Algum plano de lançar para o público?

Não há nada “super secreto” aqui :slight_smile:

Existe este tema que é muito semelhante:

E, a ferramenta que usamos tem o seguinte 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
}

A ferramenta de leitura usa:

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 curtidas