Je n’ai qu’une seule et unique requête et elle est toujours la même : vous avez une invite pour cela, alors s’il vous plaît, ne la cachez pas dans le vide du code. Tout ce dont j’ai besoin, c’est d’ajouter une phrase : utilisez toujours le finnois. C’est tout. Et soudain, tout est utilisé à l’échelle mondiale.
Mais maintenant, c’est juste une perte de mon temps, du temps de mes utilisateurs actifs et du temps de tous les utilisateurs anonymes que j’obtiens, y compris ceux qui auraient besoin d’un tel service.
C’est un travail merveilleux. Mais à cause de cette seule fonctionnalité manquante… non. J’aimerais l’offrir à mes utilisateurs car s’ils peuvent l’utiliser, tout le monde peut l’utiliser. Mais il est absolument inutile de générer ceci, un résumé, etc. en anglais dans un forum finlandais.
Nous avons un plan pour la personnalisation des invites dans DiscourseAI, permettant à nos utilisateurs de modifier rapidement toutes les invites utilisées dans les différentes parties du plugin. Je pense que c’est quelque chose que nous pourrons aborder cette année.
En attendant, nous pouvons centraliser ces demandes dans ce sujet.
C’est une sacrée situation ! Rendre les invites personnalisables est un problème très difficile.
Examinons les détails ici, prenons :
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
Comment pouvons-nous résoudre cela et le rendre personnalisable ?
Utiliser le système de traduction, déplacer les instructions dans server.en.yml
Remplacer “Completion Prompt” par le modèle Ai Persona
Fournir un éditeur pour le modèle “Completion Prompt”
Résoudre le problème par l’ingénierie des invites
1. Utiliser le système de traduction, déplacer les instructions dans server.en.yml
Avantages
Nous publierons automatiquement avec la prise en charge de plusieurs langues
Le système existe déjà, rien de nouveau à construire
Très personnalisable via des remplacements de localisation dans l’interface d’administration
Inconvénients
De nombreux LLM ne fonctionnent pas bien avec le “non-anglais”, la traduction peut entraîner des performances bien inférieures
Si les gens traduisent les tags, tout sera complètement cassé (par exemple, <title>)
2. Centraliser sur l’IA Persona
Avantages
Nous avons déjà la plupart de l’interface utilisateur
Moyen trivial d’ajouter/supprimer des éléments à l’assistant IA
Inconvénients
Nous ne publierons pas avec les traductions
Nous devons créer une interface utilisateur pour signaler une persona à utiliser par une fonctionnalité : (est-ce pour illustrer un post ? est-ce pour l’assistant de composition ? est-ce pour le générateur de titre de bot ?) certains de ces éléments sont 1-1 et d’autres sont 1 à plusieurs
Certaines des personas n’auront pas de sens pour les conversations de bot, elles nécessitent des balises <replyTo>, <item> et <input>.
3. Fournir une interface utilisateur pour les invites de complétion
Avantages
Séparation claire des personas, confusion réduite
C’est bien de pouvoir ajouter de nouvelles invites de complétion aux utilisateurs… vous voulez quelque chose sous “traduire”, pas de problème
Facile à éditer
Inconvénients
Complexité de la gestion de la “dérive” - si un utilisateur remplace une invite et que nous corrigeons l’originale pour ajouter une balise <something_new>, comment le saura-t-il ?
4. Résoudre le problème par l’ingénierie des invites
Si nous parvenons à réaliser cette magie, avec un peu plus d’instructions personnalisées, cela pourrait être bien, par exemple ajouter “IMPORTANT : toutes les réponses doivent être en finnois”, mais y parvenir de manière cohérente sera difficile.
Avantages
Magie, ça marche tout simplement
Inconvénients
En réalité, très peu probable que cela fonctionne de manière cohérente, avoir des instructions personnalisées dans la bonne langue ancrera bien mieux le modèle.
Personnellement, je penche pour la solution (3). Surtout parce qu’elle nous donne la possibilité d’ajouter des invites personnalisées et qu’elle assure une séparation nette. Mais je comprends tout à fait la solution (2) comme échappatoire, peut-être que nous pouvons y parvenir et que cela unifie une partie du code, ce qui est très bien. Nous devons jouer avec cela et expérimenter l’idée d’abord pour décider du gagnant.
Nous (en tant qu’administrateurs utilisateurs finaux) n’avons pas besoin de créer des invites entières dans ces situations. Nous avons seulement besoin d’ajouter une demande pour utiliser une langue spécifique dans l’invite. Je ne sais rien du codage, mais d’une manière générale, ajouter une chaîne de texte à du texte est assez trivial, n’est-ce pas ? Et vous n’envoyez que du texte ici ?
Et l’invite elle-même doit être en anglais, bien sûr.
c’est spécifique au problème de langue plutôt qu’à la personnalisation générale des invites… mais si nous avions une liste déroulante de langues, pourrions-nous demander à l’IA de traduire l’invite (sauf les balises) puis de sauvegarder/envoyer cette invite ?
Traduction de l'invite en finnoisIA
Traduis ceci en finnois sauf les balises <> :
Vous êtes un tuteur expliquant un terme à un étudiant dans un contexte spécifique. Je vous fournirai tout ce dont vous avez besoin à l’intérieur des balises <input>, qui se compose du terme que je veux que vous expliquiez à l’intérieur des balises <term>, du contexte dans lequel il a été utilisé à l’intérieur des balises <context>, du titre du sujet où il a été utilisé à l’intérieur des balises <topic>, et éventuellement, du message précédent dans la conversation dans les balises <replyTo>. En utilisant toutes ces informations, écrivez un paragraphe avec une brève explication de ce que signifie le terme. Formatez la réponse en utilisant Markdown. Répondez uniquement avec l’explication et rien d’autre.
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.
Les détails techniques pourraient-ils faire partie d’une section distincte de l’invite ? alors nous avons une invite qui ressemble à ceci :
Appliquez ce comportement (les administrateurs peuvent modifier ou ajouter) :
Vous êtes un tuteur expliquant un terme à un étudiant dans un contexte spécifique.
Écrivez une paragraphephrase avec une brève explication de ce que signifie le terme.
Répondez uniquement avec l’explication et rien d’autre.
Utilisez beaucoup d’émojis
En utilisant ces détails techniques (non modifiables, où nous mettons à jour pour éviter le dérive) :
le terme que je veux que vous expliquiez est entre balises <term>
le contexte dans lequel il a été utilisé est entre balises <context>
le titre du sujet où il a été utilisé est entre balises <topic>
le message précédent dans la conversation est entre balises <replyTo> (facultatif)
Non, c’est une très mauvaise idée. Cela fera deux traductions, modifiant l’invite à chaque fois. Tout ce qui est nécessaire est la phrase “Réponds en [quelle que soit la langue]”[1]. Votre problème est de décider quelle serait cette langue et je voudrais suggérer la même que celle que ce forum utilise par défaut.
ou “utilise”… ce n’est qu’une question de formulation, mais cela doit être en anglais. Eh bien, c’est vrai avec OpenAI, les autres sont un territoire inexploré pour moi ↩︎
J’ai une preuve de concept et un exemple fonctionnel ici :
GPT-4 fonctionne assez bien dans la plupart des langues, GPT 3.5 est passable, je ne sais pas trop ce que Gemini pro raconte, il est dans un monde aléatoire.
Claude 2 produit également des résultats raisonnables.
J’ai testé avant/après, et au moins pour GPT-4-Turbo et le portugais lorsque j’utilise le relecteur, il n’y a aucun changement. Je suppose que le modèle était suffisamment intelligent pour conserver mon texte dans la langue d’origine.
Légende d’image IA
Je l’ai étendu à la légende d’image, et cela fonctionne très bien là :
Merci les gars ! Au moins, les légendes sont maintenant créées dans la langue souhaitée (et la qualité est celle attendue, mais cela vient d’OpenAI, du moins pour moi).
Les résumés… Je ne sais pas encore car je n’ai pas pu les créer depuis un moment. Mais c’est une toute autre histoire.