DiscourseAI의 프롬프트 커스터마이징 지원

제게 있는 요청은 단 하나뿐이며 항상 동일합니다. 이 기능을 위한 프롬프트가 있으니 코드 어딘가에 숨기지 말고 공개해 주세요. 제가 필요한 것은 단 하나의 문장만 추가하는 것입니다: ‘항시 핀란드어를 사용하라’. 이것뿐입니다. 그러면 갑자기 모든 곳에서 전역적으로 사용될 수 있습니다.

하지만 지금은 제 시간, 활성 사용자의 시간, 그리고 이 서비스를 필요로 할 수 있는 익명 사용자의 시간까지 모두 낭비하고 있습니다.

이것은 정말 훌륭한 작업입니다. 하지만 그 한 가지 기능이 빠져서… 아니요. 저는 이 기능을 제 사용자에게 제공하고 싶습니다. 왜냐하면 그들이 사용할 수 있다면 누구나 사용할 수 있기 때문입니다. 하지만 핀란드어 포럼에서 영어로 이 내용을 생성하고 요약하는 등의 작업은 전혀 의미가 없습니다.

6개의 좋아요

주요 언어 문제가 해결되기 전에 그렇게 되지는 않기를 바랍니다 :thinking:

DiscourseAI에서 프롬프트 커스터마이징을 위한 계획을 가지고 있으며, 이를 통해 사용자가 플러그인의 다양한 부분에서 사용되는 모든 프롬프트를 빠르게 변경할 수 있도록 할 것입니다. 올해 안에 이 작업을 진행할 수 있을 것으로 생각합니다.

그동안 이러한 요청들을 이 토픽에 집중적으로 모으겠습니다.

8개의 좋아요

정말 골치 아픈 문제네요! 프롬프트를 사용자 정의 가능하게 만드는 것은 정말 어려운 과제입니다.

구체적인 사항을 생각해 보겠습니다. 예를 들어 다음을 가져다 보겠습니다:

    CompletionPrompt.seed do |cp|
      cp.id = -306
      cp.name = "explain"
      cp.prompt_type = CompletionPrompt.prompt_types[:text]
      cp.messages = { insts: <<~TEXT }
        You are a tutor explaining a term to a student in a specific context.
        I will provide everything you need to know inside <input> tags, which consists of the term I want you
        to explain inside <term> tags, the context of where it was used inside <context> tags, the title of
        the topic where it was used inside <topic> tags, and optionally, the previous post in the conversation
        in <replyTo> tags.
        Using all this information, write a paragraph with a brief explanation
        of what the term means. Format the response using Markdown. Reply only with the explanation and
        nothing more.
      TEXT
    end

어떻게 해결하고 사용자 정의 가능하게 만들 수 있을까?

  1. 번역 시스템을 사용하고 지시문을 server.en.yml로 이동
  2. "Completion Prompt"를 폐기하고 Ai Persona 모델을 도입
  3. “Completion Prompt” 모델을 위한 에디터 제공
  4. 프롬프트 엔지니어링으로 문제를 해결

1. 번역 시스템을 사용하고 지시문을 server.en.yml로 이동

장점

  • 여러 언어에 대한 지원을 자동으로 포함하여 배포할 수 있습니다
  • 시스템이 이미 존재하므로 새로 구축할 것이 없습니다
  • 관리자 UI의 로컬라이제이션 오버라이드를 통해 매우 쉽게 사용자 정의할 수 있습니다

단점

  • 많은 LLM이 "영어 이외의 언어"에서 잘 작동하지 않으며, 번역 시 성능이 훨씬 떨어질 수 있습니다
  • 사람들이 tags를 번역하면 완전히 깨질 수 있습니다 (예: <title>)

2. AI Persona 중심으로 통합

장점

  • 대부분의 UI가 이미 존재합니다
  • AI 어시스턴트에 항목을 추가/제거하는 것이 매우 쉽습니다

단점

  • 번역과 함께 배포되지 않습니다
  • 특정 기능에 사용할 페르소나를 지정하기 위한 UI를 구축해야 합니다: (이것은 게시물 설명용인가요? 작성기 어시스턴트용인가요? 봇 제목 생성기용인가요?) 이 중 일부는 1:1 관계이고 일부는 1:N 관계입니다
  • 일부 페르소나는 봇 대화에는 의미가 없습니다. <replyTo> 태그와 <item> 태그, <input> 태그가 필요하기 때문입니다.

3. Completion Prompts를 위한 UI 제공

장점

  • 페르소나와의 명확한 분리, 혼란 감소
  • 사용자에게 새로운 completion prompt를 추가할 수 있는 것이 좋습니다 … 번역 아래에 무언가를 원한다면, 문제없습니다
  • 편집이 쉽습니다

단점

  • “drift” 처리가 복잡합니다 - 사용자가 프롬프트를 오버라이드하고 우리가 원래 프롬프트를 수정하여 <something_new> 태그를 추가한다면, 사용자가 어떻게 알 수 있을까요?

4. 프롬프트 엔지니어링으로 문제를 해결

이 마법을 성공적으로 수행할 수 있다면, 조금 더 사용자 정의 지시를 추가하면 좋을 수 있습니다. 예를 들어 "중요: 모든 답변은 핀란드어로 작성되어야 합니다"를 추가하는 것 등이 있겠죠. 하지만 일관되게 작동하도록 만드는 것은 어려울 것입니다.

장점

  • 마법처럼, 그냥 작동합니다

단점

  • 현실적으로는 일관되게 작동할 가능성이 매우 낮으며, 적절한 언어로 된 사용자 정의 지시는 모델을 훨씬 더 잘 기반(ground)하게 해줍니다

개인적으로는 실제로 (3)에 기울어 있습니다. 특히 커스텀 프롬프트를 추가할 수 있는 능력을 제공하고 강한 분리를 제공하기 때문입니다. 하지만 (2)가 해결책으로서 완전히 이해가 됩니다. 아마도 이것이 성공한다면 많은 코드를 통합할 수 있어 매우 좋습니다. 우리는 먼저 아이디어를 가지고 실험해 보고 승자를 결정해야 합니다.

6개의 좋아요

그렇지 않을 수도 있습니다. 하지만 OpenAI는 잘 작동하죠.

우리는(최종 사용자 관리자로서) 이런 상황에서 프롬프트 전체를 엔지니어링할 필요가 없습니다. 프롬프트에 특정 언어를 사용하도록 요청하는 것만 추가하면 됩니다. 저는 코딩에 대해 아무것도 알지 못하지만, 일반적으로 텍스트에 텍스트 문자열을 추가하는 것은 매우 간단한 일 아닙니까? 그리고 여기서는 단순히 텍스트만 전송하고 있는 거 아닌가요?

물론 프롬프트 자체는 영어여야 합니다.

2개의 좋아요

이것은 일반적인 프롬프트 커스터마이징보다는 언어 문제에 특화된 내용입니다… 하지만 만약 언어 드롭다운 메뉴가 있다면, 태그를 제외하고 AI에게 프롬프트를 번역하도록 요청한 후 그 프롬프트를 저장/보낼 수 있을까요?

프롬프트를 핀란드어로 번역하는 중 AI

:person_curly_hair: <> 태그를 제외하고 이것을 핀란드어로 번역해 줘:

You are a tutor explaining a term to a student in a specific context. I will provide everything you need to know inside <input> tags, which consists of the term I want you to explain inside <term> tags, the context of where it was used inside <context> tags, the title of the topic where it was used inside <topic> tags, and optionally, the previous post in the conversation in <replyTo> tags. Using all this information, write a paragraph with a brief explanation of what the term means. Format the response using Markdown. Reply only with the explanation and nothing more.

:robot: Sinä olet ohjaaja, joka selittää termin oppilaalle tietyssä kontekstissa. Minä tarjoan sinulle kaiken tarvittavan tiedon <input> tageissa, joka sisältää termin, jonka haluat minun selittävän <term> tageissa, kontekstin, jossa sitä käytettiin <context> tageissa, aiheen otsikon, jossa sitä käytettiin <topic> tageissa, ja valinnaisesti, edellisen viestin keskustelussa <replyTo> tageissa. Käyttäen kaikkea tätä tietoa, kirjoita kappale lyhyellä selityksellä siitä, mitä termi tarkoittaa. Muotoile vastaus käyttäen Markdownia. Vastaa vain selityksellä eikä millään muulla.

기술적 세부 사항을 프롬프트의 별도 부분으로 분리할 수 있을까요? 그러면 프롬프트가 다음과 같은 형태가 될 것입니다:

이 동작을 적용하세요 (관리자는 수정 또는 추가 가능):

  • 특정 컨텍스트에서 학생에게 용어를 설명하는 튜터입니다.
  • 용어의 의미를 간략히 설명하는 단락문장을 작성하세요.
  • 설명만 답변하고 다른 것은 제외하세요.
  • 이모지를 많이 사용하세요

이 기술적 세부 사항을 사용하세요 (수정 불가, 드래프트를 피하기 위해 업데이트됨):

  • 설명해 달라는 용어는 <term> 태그 안에 있습니다
  • 사용된 컨텍스트는 <context> 태그 안에 있습니다
  • 사용된 주제의 제목은 <topic> 태그 안에 있습니다
  • 대화의 이전 게시글은 <replyTo> 태그 안에 있습니다 (선택 사항)
  • 응답을 Markdown 형식으로 포맷하세요
1개의 좋아요

아니요, 정말 나쁜 아이디어입니다. 그렇게 하면 매번 프롬프트가 바뀌는 두 번의 번역이 수행됩니다. 필요한 것은 단지 "[언어]로 답하세요"라는 문구입니다[1]. 당신의 문제는 그 언어가 무엇인지 결정하는 것이며, 저는 해당 포럼의 기본 로케일과 동일한 언어를 사용하는 것을 제안합니다.


  1. 또는 “사용하세요”… 이는 단순히 표현의 문제일 뿐, 영어로 되어야 합니다. 네, OpenAI의 경우 그렇습니다. 다른 모델들은 제게 아직 미지의 영역입니다 ↩︎

1개의 좋아요

일시적인 해결책이 있습니다.

GitHub에서 discourse-ai를 포크한 후, 내용을 프랑스어로 말하도록 수정하세요.

다음과 같이요:

그런 다음 app.yml 파일을 수정하여 discourse-ai 플러그인 주소를 자신의 저장소로 변경하세요.

마지막으로 공식 저장소에서 자신의 저장소를 수동으로 동기화하세요.

죄송하지만 그러지 말아 주세요. 이 PR은 Netlify 프록시로 요청을 보내며, 오늘 간단한 수정을 시도해 보겠습니다.

2개의 좋아요

개념 증명(Proof of Concept)과 작동하는 예제가 여기에 있습니다:

GPT-4는 대부분의 언어에서 꽤 잘 작동하고, GPT 3.5는 그럭저럭 괜찮습니다. Gemini Pro는 무슨 말을 하는지 도무지 모르겠네요. 완전 엉뚱한 방향으로 나갑니다.

Claude 2도 합리적인 결과를 내놓습니다.

3개의 좋아요

문법 검사기(Proofreader)

전후를 테스트해 봤는데, 적어도 GPT-4-Turbo와 포르투갈어에서 문법 검사기를 사용할 경우 아무런 변화가 없습니다. 모델이 충분히 지능적이어서 제 텍스트를 원래 언어 그대로 유지한 것 같습니다.

AI 이미지 캡션

이미지 캡션 기능으로 확장해 봤고, 그곳에서는 매우 잘 작동합니다:

5개의 좋아요

고마워요, 여러분! 이제 자막이 원하는 언어로 생성됩니다(질량은 기대하고 있지만, 제 경우엔 OpenAI에서 나오는 거니까요).

요약은… 아직 잘 모르겠어요. 요즘은 요약을 만들어볼 기회가 없었거든요. 하지만 그건 또 다른 이야기입니다.

2개의 좋아요