Unterstützung für Prompt-Anpassung in DiscourseAI

Ich habe eine einzige Bitte, und sie ist immer dieselbe: Du hast eine Aufforderung dafür, also verstecke sie bitte nicht in den Weiten des Codes. Alles, was ich brauche, ist, einen Satz hinzuzufügen: Benutze immer Finnisch. Das ist alles. Und plötzlich ist alles weltweit im Einsatz.

Aber jetzt ist das nur Zeitverschwendung für mich, für meine aktiven Nutzer und für jeden anonymen Nutzer, den ich bekomme, einschließlich derer, die einen solchen Dienst benötigen würden.

Das ist wunderbare Arbeit. Aber wegen dieses einen fehlenden Features… nein. Ich würde es meinen Nutzern anbieten wollen, denn wenn sie es benutzen können, kann es jeder benutzen. Aber es hat absolut keinen Sinn, dies, Zusammenfassungen usw. auf Finnisch in einem finnischen Forum auf Englisch zu generieren.

6 „Gefällt mir“

Hoffentlich nicht, bevor das Hauptproblem mit der Sprache gelöst ist :thinking:

Wir haben einen Plan für die Anpassung von Prompts in DiscourseAI, der es unseren Benutzern ermöglicht, alle in den verschiedenen Teilen des Plugins verwendeten Prompts schnell zu ändern. Ich glaube, dass wir dies im Laufe dieses Jahres angehen können.

In der Zwischenzeit können wir solche Anfragen in diesem Thema zentralisieren.

8 „Gefällt mir“

Das ist eine knifflige Angelegenheit! Das Anpassen von Prompts ist ein so schwieriges Problem.

Wenn wir uns die Details ansehen, nehmen wir:

    CompletionPrompt.seed do |cp|
      cp.id = -306
      cp.name = "explain"
      cp.prompt_type = CompletionPrompt.prompt_types[:text]
      cp.messages = { insts: <<~TEXT }
        Du bist ein Tutor, der einem Schüler einen Begriff in einem bestimmten Kontext erklärt.
        Ich werde dir alles geben, was du wissen musst, in <input></input>-Tags, die den Begriff, den ich
        erklären möchte, in <term></term>-Tags, den Kontext, in dem er verwendet wurde, in <context></context>-Tags, den Titel des
        Themas, in dem er verwendet wurde, in <topic></topic>-Tags und optional den vorherigen Beitrag in der Konversation
        in <replyTo></replyTo>-Tags enthalten.
        Verwende all diese Informationen, um einen Absatz mit einer kurzen Erklärung
        zu schreiben, was der Begriff bedeutet. Formatiere die Antwort mit Markdown. Antworte nur mit der Erklärung und
        nichts weiter.
      TEXT
    end

Wie können wir das lösen und anpassbar machen?

  1. Das Übersetzungssystem verwenden, die Anweisungen in server.en.yml verschieben
  2. “Completion Prompt” zugunsten des Ai Persona-Modells aufgeben
  3. Einen Editor für das “Completion Prompt”-Modell bereitstellen
  4. Uns mit Prompt-Engineering aus der Affäre ziehen

1. Das Übersetzungssystem verwenden, die Anweisungen in server.en.yml verschieben

Vorteile

  • Wir werden automatisch mit Unterstützung für mehrere Sprachen ausgeliefert
  • Das System existiert bereits, es muss nichts Neues gebaut werden
  • Sehr anpassbar durch Lokalisierungs-Overrides in der Admin-Oberfläche

Nachteile

  • Viele LLMs funktionieren nicht gut mit “nicht Englisch”, die Übersetzung kann zu einer weitaus schlechteren Leistung führen
  • Wenn Leute Tags übersetzen, wird es komplett kaputt gehen (z. B. <title>)

2. Zentralisierung auf AI Persona

Vorteile

  • Wir haben bereits den Großteil der Benutzeroberfläche
  • Triviale Möglichkeit, Dinge zum KI-Assistenten hinzuzufügen/zu entfernen

Nachteile

  • Wir werden nicht mit Übersetzungen ausgeliefert
  • Wir müssen eine Benutzeroberfläche erstellen, um eine Persona für die Verwendung durch eine Funktion zu kennzeichnen: (ist sie für illustrierte Beiträge? ist sie für den Composer-Helfer? ist sie für den Bot-Titelgenerator?) Einige davon sind 1-zu-1 und einige sind 1-zu-viele
  • Einige der Personas ergeben für Bot-Konversationen keinen Sinn, sie erfordern <replyTo>-Tags und <item>-Tags und <input>-Tags.

3. Eine Benutzeroberfläche für Completion Prompts bereitstellen

Vorteile

  • Klare Trennung von Personas, reduzierte Verwirrung
  • Schön, neue Completion Prompts für Benutzer hinzufügen zu können … wollen Sie etwas unterhalb von “übersetzen”, kein Problem
  • Einfach zu bearbeiten

Nachteile

  • Komplexer Umgang mit “Drift” - wenn ein Benutzer einen Prompt überschreibt und wir das Original korrigieren, um einen <something_new>-Tag hinzuzufügen, woher soll er das wissen?

4. Uns mit Prompt-Engineering aus der Affäre ziehen

Wenn wir diese Magie schaffen, könnte es mit ein paar zusätzlichen benutzerdefinierten Anweisungen schön sein, z. B. “WICHTIG: Alle Antworten müssen auf Finnisch erfolgen”, aber es wird schwierig sein, dies konsistent zum Laufen zu bringen.

Vorteile

  • Magie, es funktioniert einfach

Nachteile

  • In der Realität sehr unwahrscheinlich, dass es konsistent funktioniert, benutzerdefinierte Anweisungen in der richtigen Sprache werden das Modell weitaus besser verankern

Persönlich tendiere ich zu (3). Insbesondere, da es uns die Möglichkeit gibt, benutzerdefinierte Prompts hinzuzufügen und eine starke Trennung zu gewährleisten. Aber ich verstehe (2) als Ausweg vollkommen, vielleicht schaffen wir es und es vereinheitlicht eine Menge Code, was sehr schön ist. Wir müssen damit experimentieren und die Idee zuerst testen, um einen Gewinner zu ermitteln.

6 „Gefällt mir“

Vielleicht nicht. Aber OpenAI funktioniert.

Wir (als Endbenutzer-Administratoren) müssen in diesen Situationen keine ganzen Prompts entwickeln. Wir müssen nur die Aufforderung hinzufügen, eine bestimmte Sprache im Prompt zu verwenden. Ich weiß nichts über das Programmieren, aber generell ist das Hinzufügen einer Textzeichenfolge zu einem Text ziemlich trivial, nicht wahr? Und Sie senden hier nur Text?

Und der Prompt selbst muss natürlich auf Englisch sein.

2 „Gefällt mir“

es geht um die spezifische Sprachausgabe und nicht um die allgemeine Prompt-Anpassung… aber wenn wir ein Sprachauswahlmenü hätten, könnten wir die KI bitten, den Prompt (außer den Tags) zu übersetzen und dann diesen Prompt zu speichern/senden?

Prompt ins Finnische übersetzen AI

:person_curly_hair: Übersetze dies ins Finnische, außer den <>-Tags:

Du bist ein Tutor, der einem Schüler einen Begriff in einem bestimmten Kontext erklärt. Ich werde dir alles zur Verfügung stellen, was du wissen musst, in <input> Tags, die den Begriff, den ich dich erklären lassen möchte, in <term> Tags, den Kontext, in dem er verwendet wurde, in <context> Tags, den Titel des Themas, in dem er verwendet wurde, in <topic> Tags und optional den vorherigen Beitrag in der Konversation in <replyTo> Tags enthalten. Nutze all diese Informationen, um einen Absatz mit einer kurzen Erklärung des Begriffs zu schreiben. Formatiere die Antwort mit Markdown. Antworte nur mit der Erklärung und nichts anderem.

: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.

Könnten die technischen Details ein separater Teil des Prompts sein? Dann hätten wir einen Prompt, der etwa so aussieht:

Wende dieses Verhalten an (Admins können bearbeiten oder anhängen):

  • Du bist ein Tutor, der einem Schüler einen Begriff in einem bestimmten Kontext erklärt.
  • Schreibe einen AbsatzSatz mit einer kurzen Erklärung, was der Begriff bedeutet.
  • Antworte nur mit der Erklärung und nichts anderem.
  • Benutze viele Emojis

Mit diesen technischen Details (unveränderlich, wir aktualisieren, um Drift zu vermeiden):

  • Der Begriff, den ich dich erklären lassen möchte, befindet sich in <term> Tags
  • Der Kontext, in dem er verwendet wurde, befindet sich in <context> Tags
  • Der Titel des Themas, in dem er verwendet wurde, befindet sich in <topic> Tags
  • Der vorherige Beitrag in der Konversation befindet sich in <replyTo> Tags (optional)
  • Formatiere die Antwort mit Markdown
1 „Gefällt mir“

Nein, das ist eine wirklich schlechte Idee. Es werden zwei Übersetzungen vorgenommen, die die Aufforderung jedes Mal ändern. Alles, was benötigt wird, ist die Formulierung „Antworte in [beliebige Sprache]“[1]. Dein Problem ist zu entscheiden, welche Sprache das sein soll, und ich möchte dieselbe vorschlagen, die dieses Forum als Standard-Locale verwendet.


  1. oder „benutze“… das ist nur eine Frage der Formulierung, aber es muss auf Englisch sein. Nun, das stimmt für OpenAI, andere sind für mich unbekanntes Gebiet ↩︎

1 „Gefällt mir“

Ich habe eine temporäre Lösung.

Forken Sie discourse-ai von GitHub und ändern Sie den Inhalt, damit er Französisch spricht.

so:

Ändern Sie dann die Datei app.yml und ändern Sie die Adresse des discourse-ai-Plugins zu Ihrem eigenen Repository.

Synchronisieren Sie schließlich Ihr Repository manuell mit dem offiziellen Repository.

Entschuldigung, aber bitte nicht, diese PR sendet Anfragen an einen Netlify-Proxy. Ich werde heute einige einfache Korrekturen versuchen.

2 „Gefällt mir“

Ich habe hier einen Proof of Concept und ein funktionierendes Beispiel:

GPT-4 funktioniert in den meisten Sprachen recht gut, GPT 3.5 ist okay, ich weiß nicht, was Gemini Pro redet, es ist in einem zufälligen Land.

Claude 2 liefert ebenfalls vernünftige Ergebnisse.

3 „Gefällt mir“

Korrekturleser

Ich habe Vorher/Nachher getestet, und zumindest für GPT-4-Turbo und Portugiesisch gibt es bei der Verwendung des Korrekturlesers überhaupt keine Änderung. Ich schätze, das Modell war schlau genug, meinen Text in der Originalsprache zu belassen.

KI-Bildunterschrift

Ich habe es auf Bildunterschriften erweitert, und dort funktioniert es sehr gut:

5 „Gefällt mir“

Danke Leute! Zumindest werden jetzt Untertitel in der gewünschten Sprache erstellt (und die Qualität ist wie erwartet, aber das kommt von OpenAI, zumindest für mich).\n\nZusammenfassungen… Ich weiß es noch nicht, da ich die schon seit einer Weile nicht mehr erstellen konnte. Aber das ist eine ganz andere Geschichte.

2 „Gefällt mir“