문법 검사 기능이 텍스트를 두 번 삽입합니다

정확한 이유는 모르겠지만 모든 게시물에서 발생하는 것은 아니며, 특정 게시물에서는 재현 가능합니다. 해당 게시물에서 교정 기능을 사용할 때마다 콘텐츠가 중복됩니다.


3개의 좋아요

음, 링크해 주신 게시물에서는 재현할 수 있지만, 다른 곳에서는 아직 찾지 못했어요. 정말 이상하네요 :face_with_monocle: :thinking:

이것도 시도해 봤는데

다른 하나는 답글 텍스트를 다르게 하거나 인용문에서 날짜 필드를 빼더라도 재현할 수 있었어요. 답글 텍스트에 오타가 없으면 인용문을 수정하려고 한다는 것도 알아차렸어요.


2개의 좋아요

정말 이상하네요. :smile:

텍스트를 선택하지 않은 상태에서 인용문에 수정할 부분이 있고, 사용자가 스태프가 아닌 경우, 중복이 발생합니다. :thinking:


인용문 내용이 정상적으로 보이면 중복이 발생하지 않습니다:

2개의 좋아요

Qwen @Falco에 의해 트리거되는 버그입니다

{
  "model": "meta-llama/Llama-3.2-11B-Vision-Instruct",
  "temperature": 0,
  "stop": [
    "\n</output>"
  ],
  "messages": [
    {
      "role": "system",
      "content": "You are a markdown proofreader. You correct egregious typos and phrasing issues but keep the user's original voice.\nYou do not touch code blocks. I will provide you with text to proofread. If nothing needs fixing, then you will echo the text back.\nYou will find the text between <input></input> XML tags.\nYou will ALWAYS return the corrected text between <output></output> XML tags.\n\n"
    },
    {
      "role": "user",
      "content": "<input>[quote=\"Arkshine, post:1, topic:339163\"]\n:information_source: This component requires Discourse to be current as of [date=2024-11-27 timezone=\"Europe/Paris\"]. \n[/quote]\nDid you update Discourse? You only receive a notification to update when a new beta is released, but new commits are added every day.</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: This component requires Discourse to be current as of [date=2024-11-27 timezone=\"Europe/Paris\"]. \n[/quote]\nDid you update Discourse? You only receive a notification to update when a new beta is released, but new commits are added daily.</input>\n\n<output>[quote=\"Arkshine, post:1, topic:339163\"]\n:information_source: This component requires Discourse to be current as of [date=2024-11-27 timezone=\"Europe/Paris\"]. \n[/quote]\nDid you update Discourse? You only receive a notification to update when a new beta is released, but new commits are added daily.</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
}

<input>와 <output> 태그를 모두 반환하는 것을 주목해 주세요. 따라서 여기에는 버그가 있습니다.

정규식(Sanitize regex)이 input과 output을 모두 유지하고 있습니다.

API를 더 신중하게 다루어야 한다고 생각합니다. 교정만 요청하는 경우 output만 요청하거나 더 나은 프롬프트 엔지니어링을 수행해야 합니다.

또한 흥미롭게도, 예제가 있음에도 불구하고 더 이상 예제를 보내지 않고 있습니다 @Roman

6개의 좋아요

이 변경으로 회귀 문제(regression)의 핵심을 수정할 수 있습니다:

다만 @Jagster 님, 부수적인 효과가 있습니다. 얼마 전부터 영어 예시를 보내지 않고 있었는데, 이제 다시 보내게 됩니다. 이 변경이 귀하에게 영향을 미친다면 알려주시기 바랍니다.

그럼에도 @Roman 님, 다음 코드는 제게 이해가 되지 않습니다:

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

다음과 같이 수정되어야 하지 않을까요?

(item은 제목 제안에 사용되지만, 다른 경로를 따르는 것일 수도 있습니다)

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

일부 헬퍼 프롬프트는 컨텍스트를 제공하기 위해 이러한 태그를 사용합니다. 예를 들어:

https://github.com/discourse/discourse-ai/blob/main/app/jobs/regular/stream_post_helper.rb#L25

일부 모델은 응답에 이러한 태그를 포함할 수 있으므로, 이를 제거합니다.

2개의 좋아요

이해가 잘 안 됩니다. 전체 예시를 들어 설명해 주시겠어요?

모델이 생성한 내용을 정제(sanitize)하는 상황에서, 왜 입력 태그(input tags)의 텍스트를 출력에 그대로 유지해야 하는 건가요?

(참고로 운영자 계정은 이제 정상 작동 중입니다)

1개의 좋아요

여기서 "sanitize"라는 표현은 다소 오해의 소지가 있습니다. 우리는 두 가지 서로 다른 문제를 해결하고자 합니다:

  1. 출력만 받고 다른 것은 받지 않도록 보장합니다.
  2. 결과가 부자연스럽게 보이게 만드는 태그를 모두 제거하도록 보장합니다.

여기서의 문제는 (1)에 대해 너무 관대하다는 점입니다. 관련 부분이 항상 와 로 감싸져 있는지, 그리고 그 외의 다른 것은 사용하지 않는지 확인해야 합니다. 이 관련 부분을 확보한 후에는 결과가 깔끔해 보이도록 (2) 모든 다른 태그를 제거합니다.


위에서 제공한 예시를 확장하여, 현재 이러한 태그들을 모두 제거하는 이유를 설명하겠습니다. 시드된 “explain” 프롬프트는 다음과 같습니다:

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

<term>, <replyTo>는 모델에 맥락을 제공하기 위해 사용되며, <input>은 해당 특정 텍스트 부분에 집중하도록 지시하기 위해 사용됩니다.

문제는 일부 모델이 응답에서 동일한 태그를 사용하여 텍스트가 사용자에게 부자연스럽고 이상하게 보이게 한다는 것이었습니다. 여기서의 궁극적인 목표는 이러한 태그를 제거하여 “깔끔한” 텍스트를 결과물로 생성하는 것입니다.

예를 들어, "Not following"의 의미를 설명해 달라고 요청할 때, 다음과 같은 내용을 보고 싶지 않습니다:

<term>Not following</tem>는 이 맥락에서 사용자가 설명이나 전달하려는 내용을 이해하는 데 어려움을 겪고 있음을 의미합니다. (…)

2개의 좋아요