Discourse는 긴 스레드를 요약하는 기능을 갖추고 있습니다. 제 이해로는 이 기능이 반응(리액션)이나 답변 수 같은 참여 지표(engagement metrics)를 사용하여 어떤 게시물을 유지할지 식별한다고 합니다. 제 커뮤니티(회사 내부 커뮤니케이션)에서는 스레드가 20페이지에 달할 정도로 길어도 이 기능이 거의 작동하지 않습니다(답변 수는 우리에게 가장 좋은 트리거가 아닙니다).
더 강력한 접근 방식은 GPT-3나 BERT와 같은 LLM을 사용하여 전체 스레드를 요약하는 것입니다(단순히 게시물만 필터링하는 것이 아니라). 요청 시(on demand) 요약하는 방식입니다. 요약은 LLM이 가장 빛을 발하는 사용 사례(거의 대표적 사례)이며, 현재 접근 방식이 약한 신호(일부 커뮤니티에서는 사람들이 리액션을 쓰지 않거나 특정 게시물에 답글을 달지 않을 수 있음)에 기반하고 있기 때문에 이 방식이 훨씬 더 효과적일 것이라고 생각합니다.
반면, 텍스트를 요약하기 위해 GPT를 실행하는 것은 비쌀 수 있습니다. 1,000토큰당 최대 0.02달러까지요. 이 기능은 트래픽이 많은 공개 커뮤니티보다는 일부 비공개 커뮤니티에서 더 의미가 있을 것입니다.
이 기능이 다음과 같이 작동할 것이라 상상합니다:
이전에 요약된 적 없는 긴 스레드(긴 것의 정의는 설정으로 결정)를 처음 읽을 때, 요청 시 요약할 것을 제안합니다.
요약본은 스레드에 삽입됩니다(예: 이 앞의 모든 내용이 요약되었습니다).
스레드 상단에서 링크로 연결됩니다(예: 요약으로 건너뛰기).
이상적으로는 같은 피드백 메커니즘이 있습니다.
N개의 추가 답변이 게시된 후, 새 요약을 게시할 것을 제안하고 상단의 링크를 업데이트합니다.
플러그인은 OpenAI 키로 구성됩니다(사용되는 LLM이 OpenAI라고 가정). 결국 성공적으로 입증되면 다른 모델에 대한 접근을 제공하게 될 것입니다.
적어도 이론적으로는 그렇습니다 . 실제로는 그것이 얼마나 좋은지, 또는 요약의 정도를 어떻게 구성해야 하는지에 대한 불확실성이 있습니다. 직관적으로 이 기능은 일부 커뮤니티에서 ROI가 매우 높을 것입니다. 제가 듣는 가장 큰 문제는 사람들이 스레드를 따라가는 것을 싫어한다는 것입니다. 이 기능은 거대한 도움이 될 것입니다.
import openai
import requests
from bs4 import BeautifulSoup
openai.api_key = "KEY"
url = "https://meta.discourse.org/t/summarising-topics-with-an-llm-gpt-bert/254951.json"
response = requests.get(url)
data = response.json()
messages = []
messages.append("Title: " + data["title"])
for post in data['post_stream']['posts']:
soup = BeautifulSoup(post['cooked'], 'html.parser')
messages.append("Post #" + str(post["post_number"]) + " by " + post["username"])
messages.append(soup.get_text())
text_blob = "\n".join(messages)
print(text_blob)
max_chunk_len = 4000 # 각 청크의 최대 길이
chunks = [text_blob[i:i+max_chunk_len] for i in range(0, len(text_blob), max_chunk_len)]
summaries = []
for chunk in chunks:
print("processing chunk")
response = openai.Completion.create(
engine="text-davinci-003",
prompt="prompt:\n" + chunk + "\nsummary:",
temperature=0.7,
max_tokens=200,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
summary = response.choices[0].text.strip()
print("\nSUMMARY")
print(summary)
print("\nSUMMARY")
Discourse는 GPT-3나 BERT와 같은 LLM을 사용하여 긴 스레드를 요청 시 요약하는 가능성을 탐구하고 있습니다. 이 기능은 openai 키로 구성되며, 특히 비공개 커뮤니티에서 유용할 수 있습니다. 요약은 스레드에 삽입되며, 상단에 링크와 피드백 메커니즘이 포함됩니다. AI 팀은 현재 이 가능성을 탐구하고 있으며, 시연할 수 있는 것이 준비되면 업데이트할 예정입니다.
@merefield Robert, 감사합니다. 네, 해당 사항을 확인했고, 이 부분에 대한 노고에 감사드립니다. 다만, @sam (또는 Discourse 지원 담당자)이 Discourse와 네이티브로 완전히 통합된 LLM 요약 기능을 개발 중이기를 바랐습니다. 물론, Discourse 비즈니스 플랜 고객이 자신의 개별 OpenAI(또는 최종적으로 결정될 제공업체) 키를 위해 소액의 추가 요금만 지불하면 되는 방식이라면, 설정, 호환성 및 유지보수 측면에서 훨씬 간단할 것입니다. 좋은 결과 있으시길 바랍니다.
이 기능은 현재 마이크님의 인스턴스에서도 사용 가능하며, Anthropic 또는 OpenAI의 자격 증명을 등록하시면 바로 사용할 수 있습니다.
로드맵 측면에서 다음으로 ‘임베딩(embedding)’ 기능을 공개할 계획입니다. 이 기능이 활성화되면 의미론적으로 관련 있는 주제들을 파악할 수 있게 됩니다. 그 이후에는 AI 헬퍼와 요약 기능이 순서대로 추가될 것으로 예상합니다.
비즈니스 플랜에서 이러한 기능들이 모두 언제 잠금 해제될지에 대한 정확한 날짜를 제시하기는 어렵지만, 향후 몇 달에 걸쳐 단계적으로 배포할 예정입니다.
자체 호스팅(Self-hosters) 및 엔터프라이즈 고객은 이미 오늘 이 기능들을 이용할 수 있습니다.
요약 기능은 특히 흥미로운 부분입니다. A100 서버 몇 대를 구매하여 향후 몇 주 안에 설치를 완료할 예정입니다. Mistral은 의외로 성능이 뛰어나고 빠릅니다. 용량 배포가 완료되면 BYO 키 없이도 비즈니스 플랜 사용자에게 요약 기능을 제공할 수 있을 것으로 보이지만, 이를 확약하기 전에 먼저 성능 특성을 철저히 검토해야 합니다.