Vejo que há alguns tópicos interessantes sobre a integração de bots em vários níveis no Discourse, mas não vi nenhum tópico sobre a integração de grandes modelos de IA com grande memória como GPT-3, BlenderBot, etc. Alguém pensou sobre isso? Ou até mesmo fez algum progresso na implementação da ideia?
Estou pensando em configurar outra instância do Discourse com um dos grandes bots de IA como um usuário comum no sistema, que participa como qualquer outro usuário humano - mas talvez só responda quando uma postagem for direcionada especificamente a ele ou onde seu nome de usuário for mencionado em uma postagem.
Antes de começar novamente com uma nova instância, pensei em obter algum feedback primeiro desta vez . .
Excelente! Meu pensamento no momento é ser capaz de adicionar muitos aplicativos de IA diferentes à entidade central com o tempo - mais ou menos da mesma forma que o cérebro mamífero / humano evoluiu com duplicação e especialização. .
Talvez eu devesse criar a instância do Discourse para começar?
Talvez possamos começar com um projeto técnico primeiro. A qual tipo de API nos conectamos? Precisamos de um software entre os dois sistemas ou um plugin que chame a API do GPT seria suficiente?
Eu vi as postagens do Hubot antes - e pensei em experimentar essa opção como um exercício de aprendizado antes de começar com algo que exigisse a invenção de uma roda - você acha que isso seria útil?
Sim, com certeza. Estarei fora por cerca de uma semana e depois disso poderei dedicar algum tempo a experimentar as coisas. Não sou um grande fã do Node, prefiro fazer isso em Python, Ruby ou PHP. Mas vamos primeiro ganhar alguma experiência com isso.
Estive praticamente fora da internet nos últimos meses e voltei a ver muita empolgação em torno do GPT-3. Isso me fez pensar em como ele poderia ser aplicado ao Discourse.
Tenho brincado com a ideia de criar um bot de “assistente de equipe” usando a OpenAI. Estou testando com o modelo text-davinci-003 por enquanto. Eu acho que o design básico será um webhook de evento de postagem do Discourse apontando para um servidor com a biblioteca Python OpenAI instalada nele.
A primeira tarefa em que estou trabalhando é fazer com que o bot retorne consultas do Data Explorer a partir de descrições em texto simples. Ainda não tentei ajustar um modelo, mas se informações sobre a estrutura do banco de dados do Discourse forem fornecidas com o prompt da solicitação, ele está retornando resultados surpreendentemente bons.
Pode ser que usar a OpenAI para esse tipo de coisa seja muito caro, ou que os resultados não sejam precisos o suficiente para serem usados em um site de produção.
Estou trabalhando nisso apenas por diversão. A outra coisa óbvia a se considerar é treinar um bot de suporte ao cliente com base em respostas existentes em um fórum do Discourse. Isso parece um problema mais difícil (tanto em termos de custo quanto de precisão) do que apenas configurar um bot para usuários da equipe.
Tenho um caso de uso diferente (o bot DEVE se lembrar de conversas anteriores com os membros de nossas organizações sem fins lucrativos). Fiz um pouco de progresso na última semana com várias versões do BlenderBot - postarei mais aqui onde configuramos o Discourse especificamente para o projeto:
Eu ia perguntar o mesmo, um bot ChatGPT para que possamos fazer perguntas em um chat ou em um tópico seria muito útil. Aqui está um tutorial executando-o em uma VM
Ficarei feliz em estar errado sobre isso, mas meu entendimento é que o ChatGPT só “se lembra” do texto do prompt mais recente que você enviou. Você pode testar isso no playground da OpenAI iniciando um chat e, em seguida, clicando no botão “View code” após enviar seu texto. Você verá que cada vez que você envia mais texto, ele é anexado ao prompt:
prompt="The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.\n\nHuman: Just testing to see how the prompt gets set.\nAI: Hi there! It looks like you're trying to find out about how to configure the prompts. Is there anything else I can help you with today?\nHuman: If I use OpenAI's chat functionality on my own application, should I keep updating the prompt each time a user posts a new question? It's definitely a good idea to keep your prompts up-to-date, as it will help ensure your users are getting the most relevant information for each question they post. Depending on the size of your application and the complexity of your conversations, you may want to update your prompts regularly or develop a more sophisticated system to determine when updates are necessary. Let me know if there is anything else I can help you with."
Isso pode continuar até você atingir o limite de 4000 tokens (~3k palavras) mencionado na documentação que você linkou. Note que enviar prompts grandes pode ficar caro. Acho que atualmente custa US$ 0,02 por 1000 tokens com o modelo Davinci.
Se meu entendimento estiver correto, um aplicativo ou plugin do Discourse que lida com o ChatGPT para Discourse precisaria anexar cada nova pergunta e resposta ao prompt. Ele poderia fazer isso até atingir 4k tokens (~3k palavras). Se esse limite for excedido, parece que um erro é retornado pela OpenAI. Esse erro precisaria ser tratado pelo aplicativo que está fazendo as requisições para a OpenAI.
Uma possível solução alternativa para o limite de tokens seria encontrar uma maneira de extrair os detalhes principais de uma conversa e, em seguida, atualizar o prompt apenas com esses detalhes. Poderia ser possível fazer uma requisição em nome do usuário para obter essas informações. Algo como:
Esses detalhes poderiam então ser salvos no aplicativo que está fazendo as requisições para a OpenAI e usados para reiniciar a conversa em uma data posterior.
Você obterá respostas muito mais definitivas sobre isso aqui: https://community.openai.com/. É ótimo ver que eles estão usando o Discourse para a comunidade deles!
Acho que você está correto, mas o link que forneci diz basicamente que o ChatGPT NÃO tem memória entre as sessões. . . o que eu preciso para o meu caso de uso. .
Ao interagir com o ChatGPT e observar as requisições de rede, você pode ver que também há um conversation_id fornecido que é enviado para o backend. Acho que a documentação da OpenAI também menciona isso.