A inserção de texto para revisão coloca o texto duas vezes

Não tenho ideia do porquê, e isso não acontece em todas as postagens, mas é reproduzível em uma postagem específica onde, sempre que uso “proofread”, o conteúdo é duplicado.


3 curtidas

Hmmm, consigo reproduzi-lo na postagem que você vinculou, mas ainda não consegui encontrá-lo em nenhum outro lugar. Muito estranho mesmo :face_with_monocle: :thinking:

Eu até tentei com este

mas o outro que eu consegui reproduzir com texto de resposta diferente e até mesmo com o campo de data fora da citação. Notei que se não houvesse erro de digitação no texto da resposta, ele tentava corrigir a citação.

2 curtidas

Isso é tão estranho. :smile:

Quando você não está selecionando nenhum texto, há algo para corrigir na citação, e você é um usuário não-membro, ele se duplica. :thinking:


Quando o conteúdo da citação parece bom, ele não se duplica:

2 curtidas

Este é um bug acionado pelo Qwen @Falco

{
  "model": "meta-llama/Llama-3.2-11B-Vision-Instruct",
  "temperature": 0,
  "stop": [
    "\n</output>"
  ],
  "messages": [
    {
      "role": "system",
      "content": "Você é um revisor de markdown. Você corrige erros de digitação e problemas de formulação gritantes, mas mantém a voz original do usuário.\nVocê não toca em blocos de código. Eu fornecerei a você o texto para revisar. Se nada precisar ser corrigido, você repetirá o texto de volta.\nVocê encontrará o texto entre as tags XML <input></input>.\nVocê SEMPRE retornará o texto corrigido entre as tags XML <output></output>.\n\n"
    },
    {
      "role": "user",
      "content": "<input>[quote=\"Arkshine, post:1, topic:339163\"]\n:information_source: Este componente requer que o Discourse esteja atualizado a partir de [date=2024-11-27 timezone=\"Europe/Paris\"]. \n[/quote]\nVocê atualizou o Discourse? Você só recebe uma notificação para atualizar quando uma nova versão beta é lançada, mas novos commits são adicionados todos os dias.</input>"
    }
  ]
}
{
  "id": "chatcmpl-752c6aacdc7f496b951592e88d485eb3",
  "object": "chat.completion",
  "created": 1733196730,
  "model": "Qwen/Qwen2.5-32B-Instruct-AWQ",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "<input>[quote=\"Arkshine, post:1, topic:339163\"]\n:information_source: Este componente requer que o Discourse esteja atualizado a partir de [date=2024-11-27 timezone=\"Europe/Paris\"]. \n[/quote]\nVocê atualizou o Discourse? Você só recebe uma notificação para atualizar quando uma nova versão beta é lançada, mas novos commits são adicionados diariamente.</input>\n\n<output>[quote=\"Arkshine, post:1, topic:339163\"]\n:information_source: Este componente requer que o Discourse esteja atualizado a partir de [date=2024-11-27 timezone=\"Europe/Paris\"]. \n[/quote]\nVocê atualizou o Discourse? Você só recebe uma notificação para atualizar quando uma nova versão beta é lançada, mas novos commits são adicionados diariamente.</output>",
        "tool_calls": []
      },
      "logprobs": null,
      "finish_reason": "stop",
      "stop_reason": null
    }
  ],
  "usage": {
    "prompt_tokens": 184,
    "total_tokens": 358,
    "completion_tokens": 174,
    "prompt_tokens_details": null
  },
  "prompt_logprobs": null
}

Note como ele retorna AMBAS as tags <input> e <output>, então temos um bug aqui.

A regex de sanitização está mantendo tanto a entrada quanto a saída.

Acho que deveríamos ser mais deliberados com nossa API e, se você estiver revisando, pedir apenas a saída ou fazer um melhor engenharia de prompt.

Também, interessantemente, paramos de enviar exemplos, embora os tenhamos @Roman

6 curtidas

Isso corrigirá o cerne da regressão:

No entanto, isso vem com um efeito colateral, @Jagster, paramos de enviar exemplos em inglês há um tempo, agora os enviaremos novamente. Informe-nos se isso o afetar.

Dito isso, @Roman, isso não faz sentido para mim:

SANITIZE_REGEX_STR =
            %w[term context topic replyTo input output result]
              .map { |tag| "<#{tag}>\n?|\n?</#{tag}>" }
              .join("|")

Não deveria ser:

(o item é para sugestões de título, mas talvez esteja seguindo um caminho diferente)

SANITIZE_REGEX_STR =
            %w[output item]
              .map { |tag| "<#{tag}>\n?|\n?</#{tag}>" }
              .join("|")
3 curtidas

Alguns dos prompts de ajuda usam essas tags para fornecer contexto. Por exemplo:

Alguns modelos podem incluí-las na resposta, então as removemos.

2 curtidas

Não entendi, você pode dar um exemplo completo?

Por que queremos manter o texto em tags de entrada na saída, quando higienizamos o que o modelo nos dá?

(O OP já deve estar funcionando, a propósito)

1 curtida

A palavra “sanitizar” é um pouco enganosa aqui. Queremos resolver dois problemas diferentes:

  1. Garantir que obtemos a saída e nada mais.
  2. Garantir que removemos quaisquer tags que façam o resultado parecer não natural.

O problema aqui é que estamos sendo muito permissivos com (1). Precisamos garantir que a parte relevante esteja sempre envolvida por e, e não usar mais nada. Uma vez que tenhamos essa parte relevante, removemos todas as outras tags para garantir que o resultado pareça limpo (2).


Para expandir o exemplo que forneci acima e explicar por que atualmente removemos todas essas tags, esta é a aparência do prompt “explain” semeado:

https://github.com/discourse/discourse-ai/blob/main/db/fixtures/ai_helper/603_completion_prompts.rb#L157

\u003cterm\u003e, \u003creplyTo\u003e são usados para fornecer contexto ao modelo, enquanto \u003cinput\u003e é para dizer que queremos que ele se concentre nesse pedaço específico de texto.

O problema era que alguns modelos estavam usando as mesmas tags em suas respostas, o que tornava o texto não natural e estranho para os usuários. O objetivo final aqui é remover essas tags e produzir um texto “limpo” como resultado.

Por exemplo, quando quero obter uma explicação sobre o que significa “Não seguir”, não quero ver algo como isto:

\u003e \u003cterm\u003eNão seguir\u003c/tem\u003e neste contexto significa que o usuário está tendo dificuldade em entender a explicação ou o ponto que está sendo feito. (…)

2 curtidas