Resumindo tópicos com um LLM (GPT, BERT, ...)?

Prezada equipe do Discourse,

O Discourse tem a capacidade de resumir longas threads. Entendo que ele usa métricas de engajamento como reações ou número de respostas para identificar quais posts devem ser mantidos. Em minha comunidade (comunicação interna dentro da empresa), isso quase nunca é acionado, apesar de threads com 20 páginas de comprimento (a contagem de respostas não é o melhor gatilho para nós).

Uma abordagem mais poderosa seria usar um LLM como GPT-3 ou BERT para resumir toda a thread sob demanda (em vez de apenas filtrar os posts). A sumarização é um caso de uso onde os LLMs se destacam (praticamente o pôster infantil) e acredito que isso seria muito mais eficaz do que a abordagem atual, que se baseia em sinais fracos (em algumas comunidades, as pessoas podem não usar reações ou responder a posts específicos).

Por outro lado, executar o GPT para resumir texto pode ser caro, até US$ 0,02 por 1k tokens. Esse recurso provavelmente faria mais sentido em algumas comunidades privadas do que em comunidades públicas de alto tráfego.

Imagino que o recurso funcione assim:

  • ao ler uma thread longa pela primeira vez (longa definida com uma configuração) que nunca foi resumida, sugira resumi-la sob demanda.
  • a sumarização seria inserida na thread (por exemplo, tudo antes é resumido)
  • é vinculada do topo da thread (por exemplo, pular para o resumo)
  • idealmente, há algum mecanismo de feedback :+1: :-1:
  • após N respostas adicionais, ofereça-se para publicar um novo resumo e atualizar o link no topo.
  • o plugin seria configurado com uma chave openai (assumindo que este é o LLM usado). Eventualmente, se provar bem-sucedido, você vai querer oferecer acesso a diferentes modelos.

Pelo menos essa é a teoria :slight_smile:. Na prática, há incógnitas sobre quão bom seria, ou como configurar o grau de sumarização. Meu instinto é que isso tem um ROI extremamente alto para algumas comunidades. O principal problema que ouço é que as pessoas odeiam se atualizar sobre threads. Isso seria de grande ajuda.

Pensamentos?

8 curtidas

Nossa equipe de IA certamente está explorando este espaço. A sumarização é uma das possibilidades mais interessantes.

Responderemos aqui assim que tivermos algo para mostrar.

8 curtidas

FWIW:

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  # Maximum length of each chunk

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")

O Discourse está explorando a possibilidade de usar um LLM como GPT-3 ou BERT para resumir longas threads sob demanda. Este recurso seria configurado com uma chave openai e poderia ser especialmente útil para comunidades privadas. A sumarização seria inserida na thread, com um link no topo e um mecanismo de feedback. A equipe de IA está atualmente explorando essa possibilidade e atualizará quando tiver algo para mostrar.

É interessante, mas razoavelmente desigual

9 curtidas

Não pude deixar de dar uma olhada hoje:

É muito experimental e há pouquíssimas salvaguardas para quando as coisas dão errado no momento, então definitivamente não é para uso profissional (!!)

Observe que, devido aos limites de tokens, atualmente ele só pode levar em conta os primeiros ~40 posts (com base na atividade de um dos meus fóruns).

Possui um sistema de downvote. Prévia da interface do usuário:

(a propósito, este exemplo é baseado nos dados bastante aleatórios nos fixtures de desenvolvimento, ele tem um desempenho muito melhor em dados reais).

A propósito, eu “gastei” US$ 0,33 em chamadas construindo isso até agora :smiley:

(US$ 18 é uma alocação gratuita)

8 curtidas

@Julienlavigne Fiz algumas melhorias significativas nisso em termos de estabilidade, flexibilidade e feedback administrativo.

Os erros retornados pelo modelo agora são registrados, por exemplo, para que você possa dizer facilmente se excedeu os limites do modelo.

Se você (ou qualquer pessoa) quiser experimentar, posso oferecer um pouco de suporte informal por um tempo e talvez incorporar feedback onde for razoável.

O conjunto completo de configurações agora é:

5 curtidas

@merefield isso parece incrível!

Infelizmente, estou usando a versão empresarial do Discourse e não posso implantar plugins personalizados, então não consigo testar isso facilmente. Posso tentar rodar o Discourse localmente com um backup e brincar com ele. Manterei você informado.

3 curtidas

@sam houve algum progresso nesse esforço?

Meu plug-in tem fornecido isso por muito tempo.

A CDCK subsequentemente lançou o plug-in Discourse AI com uma solução de resumo semelhante também.

Aproveite.

Obrigado @merefield Robert, e sim, eu tinha visto isso, e obrigado pelo seu trabalho nisso. Eu esperava, no entanto, que @sam (ou alguém com suporte do Discourse) estivesse trabalhando em um recurso de sumarização LLM com integração total com o Discourse nativo. Obviamente, se os clientes do plano de negócios do Discourse simplesmente precisarem ser cobrados um pouco a mais por sua própria chave OpenAI (ou o que quer que o provedor venha a ser), isso seria muito mais simples em termos de configuração, compatibilidade de nível superior e manutenção. Tudo de bom.

1 curtida

Não posso falar pela CDCK, mas a nuance aqui é que suspeito que muitos sites preferem que isso seja opcional, pois alguns estão receosos com IA (enquanto outros desejam abraçá-la totalmente).

Portanto, suspeito que isso permanecerá um plugin opcional e permitirá que a CDCK personalize a oferta do produto como eles e os clientes acharem adequado.

No entanto, falando como engenheiro, isso permite uma experiência totalmente nativa e não apresentaria nenhuma limitação significativa do ponto de vista funcional.

Não posso falar sobre configuração de faturamento/conta OpenAI.

Olá Mike, recentemente desbloqueamos o bot de IA, veja:

Isso agora está disponível na sua instalação, você pode inserir credenciais para Anthropic ou OpenAI.

Em termos de roadmap, estamos pensando em desbloquear o “embedding” em seguida, o que lhe dará tópicos semanticamente relacionados. Depois disso, acho que os próximos 2 seriam o assistente de IA e o resumo.

Não consigo colocar uma data exata em quando todos esses recursos serão desbloqueados no plano empresarial, mas pretendemos implementá-los nos próximos meses.

Usuários auto-hospedados e clientes empresariais já podem acessá-los hoje.


A sumarização é particularmente interessante, estamos comprando alguns servidores A100 e devemos tê-los instalados nas próximas semanas. Mistral é surpreendentemente capaz e rápido, assim que tivermos a capacidade implementada, podemos ser capazes de fornecer resumo até mesmo para planos empresariais sem chaves BYO (traga sua própria chave), mas precisamos primeiro explorar as características de desempenho antes de fazer qualquer compromisso nesse sentido.

4 curtidas

Obrigado, Sam. Teríamos muito interesse neste recurso, e suspeito que outros clientes de hospedagem também teriam. Tudo de bom.

1 curtida