Ask.discourse.com - 여기서 공지를 찾을 수 없습니다

다른 Discourse 사이트에서 What's New를 확인해 보았더니

Discourse의 수많은 AI 봇에 익숙했던 터라 이것이 다른 무엇인지, 새로운 것인지 확인해 보았는데, 실제로 그랬습니다.

이와 관련하여 공지(Announcement) 카테고리에 단일 토픽이 있었나요? 본 적이 없는 것 같습니다.

아직 베타 버전인 것 같아요.

#lounge에서 조용한 오픈을 공지했습니다 https://meta.discourse.org/t/help-us-test-ask-discourse-com/324441?u=pfaffman

고객들에게는 "새로운 기능"을 통해 공지했지만, 아직 모든 사이트에는 배포하지 않았습니다. 아직 초기 단계이며, 현재로서는 호스팅 고객에 조금 더 최적화되어 있지만, 대부분의 질문에는 상당한 공통점이 있습니다.

이 포럼에서 라운지 접근 권한이 없지만, 말씀하신 뜻을 이해합니다.

흥미로운 발전입니다. 저는 페르소나에게 공개/게스트 액세스를 부여하여 모든 방문자가 사용할 수 있도록 하는 Contribute > Feature 주제를 열려고 계획하고 있었습니다. 이것이 Discourse가 탐구할 내용인가요, 아니면 조용히 출시된 이 테스트 인스턴스와 관련이 있을까요?

각 페르소나에는 허용된 그룹 설정이 있어, 이제 누구나 모든 페르소나를 사용할 수 있습니다.

죄송합니다, 더 명확히 설명했어야 했는데, 제가 말한 'anyone’은 게스트나 비로그인 사용자를 의미합니다. doc-categories 같은 사용 사례에서는 모든 독자가 가입할 것이라고 기대하지는 않지만, 그래도 문서에 대해 채팅할 수 있도록 허용하고 싶거든요.

아직 로그인조차 하지 않았고, 심지어 사람조차 아닐 수 있는 사람들에게 돈을 쓰게 하는 것은 매우 위험해 보입니다.

물론 IP/쿠키 기반 제한이 필요합니다. 또는 전역 안전 하드 제한도 괜찮습니다.

고객 지원 경험을 개선하기 위해 지출하는 것이 왜 문제가 되겠습니까? Gitbook으로 문서를 호스팅한다면 최소한 연간 1,200달러를 지불하게 되며, 이 패키지는 방문자가 문서와 채팅할 수 있는 권한도 포함됩니다. 제 생각에는 CDCK에게 여기 훌륭한 기회가 있습니다 :face_savoring_food:

둘째, 챗봇이 (고객 지원) 비용을 절감한다는 보고서가 여러 개 있습니다: reports.

그 말은 맞습니다. 제 말은, 로그인하지 않은 상태에서는 그들이 당신의 고객인지 알 수 없다는 겁니다.

Discourse Ask는 이미 사용 가능한 AI 페르소나 중 하나를 사용하고 있나요, 아니면 해당 용도로 특별히 자체 페르소나를 만들었나요?

Ask는 커스텀 페르소나를 사용하며, meta.discourse.org에 API 호출을 수행하는 두 개의 커스텀 도구에 의존합니다.

일반 대중에게 공개할 계획이 있나요?

여기에는 "최고 기밀"인 것이 아무것도 없습니다 :slight_smile:

아주 유사한 주제가 하나 있습니다:

그리고, 우리가 사용하는 도구는 다음과 같은 스크립트를 가지고 있습니다:

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
}

읽기(read) 도구는 다음을 사용합니다:

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>`;
}