paint-brush
So testen Sie mehrere Variationen generativer KI-Eingabeaufforderungenvon@raymondcamden
4,006 Lesungen
4,006 Lesungen

So testen Sie mehrere Variationen generativer KI-Eingabeaufforderungen

von Raymond Camden13m2024/03/24
Read on Terminal Reader

Zu lang; Lesen

Bei fast allen meinen jüngsten Erkundungen der generativen KI ist mir klar geworden, wie wichtig Aufforderungen sind. Das hat mich nicht unbedingt dazu gebracht, immer bessere Eingabeaufforderungen zu schreiben, aber sich des Problems bewusst zu sein, ist zumindest ein Schritt zur Behebung, oder? Eines der Dinge, von denen ich dachte, dass sie mir persönlich helfen würden, wäre ein Tool, mit dem ich verschiedene Eingabeaufforderungen schnell vergleichen und gegenüberstellen kann. Natürlich könnte ich einfach mehrere Tabs in einem Browser öffnen, aber ich wollte für meine Zwecke unbedingt etwas Direkteres und Vereinfachtes. Lassen Sie mich vor diesem Hintergrund mit Ihnen teilen, was ich aufgebaut habe.
featured image - So testen Sie mehrere Variationen generativer KI-Eingabeaufforderungen
Raymond Camden HackerNoon profile picture

Bei fast allen meinen jüngsten Erkundungen der generativen KI ist mir klar geworden, wie wichtig Aufforderungen sind. Das hat mich nicht unbedingt dazu gebracht, immer bessere Eingabeaufforderungen zu schreiben, aber sich des Problems bewusst zu sein, ist zumindest ein Schritt zur Behebung, oder? Eines der Dinge, von denen ich dachte, dass sie mir persönlich helfen würden, wäre ein Tool, mit dem ich verschiedene Eingabeaufforderungen schnell vergleichen und gegenüberstellen kann.


Natürlich könnte ich einfach mehrere Tabs in einem Browser öffnen, aber ich wollte für meine Zwecke unbedingt etwas Direkteres und Vereinfachtes. Lassen Sie mich vor diesem Hintergrund mit Ihnen teilen, was ich aufgebaut habe.

Prompt-Tester

Prompt Tester ist mein unglaublich fantasievoll benanntes Tool zum... ähm... Testen von Eingabeaufforderungen. Es beginnt mit einer Aufforderung:


Prompt Tester-Web-App mit einer leeren Eingabeaufforderung


Die Idee besteht darin, dass Sie Ihre erste Eingabeaufforderung eingeben und dann ein- oder mehrmals klicken, um weitere Eingabeaufforderungen hinzuzufügen. Wenn Sie fertig sind, können Sie einfach auf „Ergebnisse generieren“ klicken:


Prompt Tester-Web-App mit zwei Eingabeaufforderungen und Ergebnissen


Bevor ich einige Beispielergebnisse zeige, möchte ich etwas über den Aufbau sprechen.

Der Code

Das Backend ist ein unglaublich einfacher Node.js-Server, der die Ausgabe des statischen HTML-Codes und die Beantwortung der Front-End-API-Anfragen übernimmt. Ich danke Todd Sharp noch einmal dafür, dass er mir seinen ersten Code mitgeteilt hat. Hier ist der langweilige Teil mit der einfachen Handhabung:


 async function handler(req, res) { console.log('Entered handler.', req.method, req.url); if(req.method === 'GET' && req.url.indexOf('favicon.ico') === -1) { res.writeHead(200, { 'Content-Type':'text/html' }); res.write(fs.readFileSync('./demo.html')); res.end(); } else if(req.method === 'POST' && req.url === '/api') { let body = ''; req.on('data', chunk => { body += chunk.toString(); }); req.on('end', async () => { body = JSON.parse(body); console.log('BODY:\n', JSON.stringify(body, null, '\t')); let result = await callGemini(body.prompt); res.writeHead(200, { 'Content-Type':'application/json' }); res.write(JSON.stringify(result)); res.end(); }); } } const server = http.createServer(handler); server.listen(3000); console.log('Listening on port 3000');


Und der callGemini Teil, der die Eingabeaufforderung lediglich an die Gemini-API von Google weiterleitet. Theoretisch könnte dies in ChatGPT oder einen anderen Dienst geändert werden.


 const MODEL_NAME = "gemini-pro"; const API_KEY = process.env.GOOGLE_AI_KEY; const genAI = new GoogleGenerativeAI(API_KEY); const model = genAI.getGenerativeModel({ model: MODEL_NAME }); async function callGemini(text) { const generationConfig = { temperature: 0.9, topK: 1, topP: 1, maxOutputTokens: 2048, }; const safetySettings = [ { category: HarmCategory.HARM_CATEGORY_HARASSMENT, threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE, }, { category: HarmCategory.HARM_CATEGORY_HATE_SPEECH, threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE, }, { category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE, }, { category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE, }, ]; const parts = [ {text}, ]; const result = await model.generateContent({ contents: [{ role: "user", parts }], generationConfig, safetySettings, }); try { if(result.response.promptFeedback && result.response.promptFeedback.blockReason) { return { error: `Blocked for ${result.response.promptFeedback.blockReason}` }; } const response = result.response.candidates[0].content.parts[0].text; return { response }; } catch(e) { // better handling return { error:e.message } } }


Ich bin stolz, sagen zu können, dass ich jetzt endlich einige grundlegende Fehlerbehandlungen durchführe und versuche, dem Benutzer (mir) darzulegen, warum eine Eingabeaufforderung blockiert wurde.

Das Frontend ist relativ einfach. Ich habe Milligram für das Kern-CSS verwendet (nochmals vielen Dank, Todd) und etwas Vanilla-JavaScript, um das Hinzufügen neuer Eingabeaufforderungen und das Durchführen der Aufrufe zu verwalten. Hier ist der HTML-Code (abzüglich des Inline-CSS):


 <h1>Prompt Tester</h1> <p> This tool helps you see the result of multiple prompts at the same time. The idea is to use similar prompts with different phrasing to see how it impacts the result. </p> <div id="prompts"> </div> <template id="promptRow"> <div class="row"> <div class="column column-33"><textarea placeholder="Enter your prompt."></textarea></div> <div class="column column-67 result"></div> </div> <hr> </template> <div class="float-right"> <button id="addPrompt">Add Prompt</button> <button id="generateResults">Generate Results</button> </div>


Und dann das JavaScript. Beachten Sie, dass ich oben <template> verwendet habe, um das Eingabeaufforderungslayout zu verwalten. Dies ist das erste Mal, dass ich dieses Tag verwende, und es war relativ einfach.


 let $template, $prompts, $addPromptsBtn, $generateResultsBtn; let promptCount = 0; document.addEventListener('DOMContentLoaded', init, false); async function init() { $addPromptsBtn = document.querySelector('#addPrompt'); $addPromptsBtn.addEventListener('click', addPrompt, false); $generateResultsBtn = document.querySelector('#generateResults') $generateResultsBtn.addEventListener('click', generateResults, false); $template = document.querySelector('#promptRow'); $prompts = document.querySelector('#prompts'); addPrompt(); } function addPrompt() { promptCount++; const newPrompt = $template.content.cloneNode(true); $prompts.append(newPrompt); } async function generateResults() { // disable add prompt and generate $addPromptsBtn.setAttribute('disabled', 'disabled'); $generateResultsBtn.setAttribute('disabled', 'disabled'); let $results = document.querySelectorAll('div.result'); // clear any previous results $results.forEach(r => r.innerHTML = ''); /* gather prompts from the inputs */ let prompts = []; let $fields = document.querySelectorAll('#prompts textarea'); for(f of $fields) prompts.push(f.value); let promises = []; for(p of prompts) promises.push(getResult(p)); let results = await Promise.all(promises); // assign results to result area for each, handle errors - later // there's a one to one correspondance between our array of results and the result div for(let i=0;i<results.length;i++) { if(results[i].response) $results[i].innerHTML = marked.parse(results[i].response); else if(results[i].error) $results[i].innerHTML = `<strong>Error with Prompt: </strong> ${results[i].error}`; } $addPromptsBtn.removeAttribute('disabled'); $generateResultsBtn.removeAttribute('disabled'); } async function getResult(p) { console.log('get result for',p); // quick return on empty prompt if(p.trim() === '') return { response:'<strong>Enter a prompt.</strong>' }; let req = await fetch('/api', { method:'POST', body: JSON.stringify({prompt:p.trim()})}); let result = await req.json(); return result; }


Ich denke , das ist alles ziemlich einfache DOM-Manipulation und API-Aufrufe, aber lassen Sie es mich auf jeden Fall unten in einem Kommentar wissen, wenn etwas keinen Sinn ergibt. Beachten Sie, dass ich alle meine API-Aufrufe auf einmal auslöse und Promise.all darauf warte, dass sie abgeschlossen sind.


Beachten Sie außerdem, dass ich die marked Bibliothek verwende. Die Ergebnisse von Google verfügen normalerweise über Markdown, was dazu beiträgt, sie in meiner kleinen Web-App gut darzustellen.

Das alles ist meiner Meinung nach nicht besonders interessant, aber schauen wir uns ein paar Tests an. Wie gesagt, ich wusste, dass der Stil der Aufforderung wichtig ist. Dass es mir direkt in einem Tool präsentiert wurde, hat dies deutlich untermauert.

Probenergebnis – Schwerkraft

Beginnen wir mit einer einfachen Idee – der Erklärung der Schwerkraft, aber für verschiedene Altersgruppen. Da die Ergebnisse sehr umfangreich sind, werde ich hier ein wenig CSS verwenden, um den Überblick zu behalten.


Aufforderung: Erklären Sie mir die Schwerkraft, aber machen Sie sie für ein Kind in der 1. Klasse angemessen

Die Schwerkraft ist eine Superkraft, die unser Planet besitzt! Es ist wie eine unsichtbare Kraft, die dafür sorgt, dass alles auf der Erde auf dem Boden bleibt.

Stellen Sie sich vor, Sie hätten einen Ball in der Hand. Was passiert, wenn Sie es fallen lassen? Es fällt herunter, oder? Das liegt an der Schwerkraft. Die Schwerkraft zieht den Ball in Richtung Erdmittelpunkt, sodass er zu Boden fällt.


Die Schwerkraft ist auch das, was uns am Boden hält. Es ist das, was unsere Füße fest auf der Erde hält und verhindert, dass wir davonschweben!

Die Schwerkraft ist eine sehr wichtige Kraft. Es hält alles an Ort und Stelle und sorgt dafür, dass alles so funktioniert, wie es funktioniert. Ohne die Schwerkraft würden wir alle im Weltraum schweben und die Dinge wären sehr chaotisch!


Hier ist eine unterhaltsame Möglichkeit, über die Schwerkraft nachzudenken: Stellen Sie sich vor, dass die Erde ein riesiger Magnet ist und alles auf der Erde aus Metall besteht. Der Magnet zieht die Metallgegenstände an sich und hält sie so am Boden.


Die Schwerkraft ist eine sehr wichtige und interessante Kraft. Es ist eines der Dinge, die unseren Planeten zu einem so einzigartigen und besonderen Lebensraum machen!


Aufforderung: Erklären Sie mir die Schwerkraft, aber machen Sie sie für ein Kind in der 7. Klasse angemessen

Stellen Sie sich vor, Sie spielen mit einem Ball. Du wirfst es in die Luft und es kommt wieder zu dir herunter. Das liegt an der Schwerkraft. Die Schwerkraft ist eine Kraft, die Dinge zueinander hinzieht. Es ist das, was einen auf dem Boden hält und das Dinge zum Scheitern bringt.


Die Stärke der Schwerkraft zwischen zwei Objekten hängt von ihrer Masse ab. Je mehr Masse ein Objekt hat, desto stärker ist seine Schwerkraft. Deshalb haben Dinge wie Planeten und Sterne eine größere Schwerkraft als Dinge wie Menschen und Autos.


Die Schwerkraft ist auch dafür verantwortlich, dass die Planeten die Sonne umkreisen. Die Schwerkraft der Sonne ist viel stärker als die der Erde und zieht die Erde daher zu sich. Dadurch bewegt sich die Erde im Kreis um die Sonne.


Die Schwerkraft ist eine sehr wichtige Kraft in unserem Universum. Es hält die Dinge an Ort und Stelle und bringt sie in Bewegung. Ohne die Schwerkraft würden die Planeten in den Weltraum fliegen und wir würden alle davonschweben.


Hier sind einige interessante Fakten über die Schwerkraft:

  • Für die Gezeiten ist die Schwerkraft verantwortlich. Die Schwerkraft des Mondes zieht die Ozeane der Erde an und lässt sie steigen und fallen.


  • Die Schwerkraft ist der Grund, warum wir eine Atmosphäre haben. Ohne die Schwerkraft würde die Luft einfach in den Weltraum schweben.


  • Die Schwerkraft ermöglicht uns das Gehen. Beim Gehen drücken unsere Füße gegen den Boden und der Boden drückt zurück. Das ist es, was uns vorantreibt.


  • Die Schwerkraft ist der Grund, warum wir nicht in den Weltraum schweben. Die Schwerkraft der Erde zieht uns zu ihrem Mittelpunkt und hält uns am Boden.


Beachten Sie den Tippfehler in der Eingabeaufforderung unten. Zwillinge haben es ganz gut gemeistert.


Aufforderung: Erklären Sie mir die Schwerkraft, aber machen Sie sie für einen Studenten im College-Alter angemessen


Schwerkraft: Die Kraft der Anziehung

Die Schwerkraft ist eine grundlegende Kraft im Universum, die dafür verantwortlich ist, Himmelskörper wie Planeten, Monde und Sterne in Bewegung zu halten. Es ist auch das, was uns fest im Boden verankert und dafür sorgt, dass Gegenstände herunterfallen, wenn sie fallen gelassen werden.


Newtons Gesetz der universellen Gravitation:

Das Gesetz der universellen Gravitation besagt, dass jedes Objekt im Universum jedes andere Objekt mit einer Kraft anzieht, die proportional zum Produkt seiner Massen und umgekehrt proportional zum Quadrat des Abstands zwischen ihnen ist. Mathematisch kann es ausgedrückt werden als:

F = Gm1m2/r^2


Wo:

F ist die Gravitationskraft zwischen zwei Objekten. G ist die Gravitationskonstante (6,674 × 10^-11 N m^2/kg^2). m1 und m2 sind die Massen der beiden Objekte. r ist der Abstand zwischen den Mittelpunkten der beiden Objekte.


Bedeutung der Schwerkraft:

  1. Hält Himmelskörper im Orbit: Die Anziehungskraft größerer Himmelskörper sorgt dafür, dass kleinere Himmelskörper um sie kreisen. Beispielsweise hält die Schwerkraft der Erde den Mond auf seiner Umlaufbahn, während die Schwerkraft der Sonne die Erde und andere Planeten auf ihren jeweiligen Umlaufbahnen hält.


  2. Verantwortlich für Gezeiten: Die Schwerkraft zwischen Erde und Mond verursacht Gezeiten im Ozean. Während der Mond die Erde umkreist, erzeugt seine Anziehungskraft eine Ausbuchtung im Wasser des Ozeans auf der dem Mond zugewandten Seite. Aufgrund der Trägheitskräfte bildet sich auf der gegenüberliegenden Seite der Erde eine weitere Ausbuchtung. Während sich die Erde dreht, bewegen sich diese Ausbuchtungen über die Oberfläche des Planeten, was zu Flut und Ebbe führt.


  3. Hält Objekte auf der Erde: Die Schwerkraft zieht Objekte zum Erdmittelpunkt und verhindert so, dass sie davonschweben. Dieses Phänomen ermöglicht es uns, zu gehen, zu stehen und mit unserer Umgebung zu interagieren.


  4. Entstehung von Sternen und Galaxien: Die Schwerkraft spielt eine entscheidende Rolle bei der Entstehung von Sternen und Galaxien. Der Gravitationskollaps massiver Gas- und Staubwolken führt zur Entstehung neuer Sterne. Ebenso hält die Anziehungskraft von Galaxien sie zusammen und verhindert so, dass sie sich auflösen.


  5. Relativitätstheorie: Albert Einsteins allgemeine Relativitätstheorie bietet ein umfassenderes Verständnis der Schwerkraft. Es erklärt, dass die Schwerkraft keine Kraft ist, sondern eine Krümmung der Raumzeit, die durch die Anwesenheit von Masse oder Energie verursacht wird. Diese Krümmung beeinflusst die Bewegung von Objekten und führt dazu, dass sie gekrümmten Pfaden und nicht geraden Linien folgen.


Zusammenfassend lässt sich sagen, dass die Schwerkraft eine grundlegende Kraft ist, die für die Bewegung der Himmelskörper, die Gezeiten und das Verhalten von Objekten auf der Erde verantwortlich ist. Es handelt sich um ein komplexes Phänomen, das im Laufe der Jahrhunderte umfassend untersucht wurde und Wissenschaftler und Forscher bis heute fasziniert.

Beispielergebnis – Haustiere

Für meinen zweiten Test begann ich mit einer einfachen Eingabeaufforderung und dann mit einer besseren Version, die nach bestimmten Arten von Details fragte: (Kurze redaktionelle Anmerkung: Die Tabellendaten unten sind etwas chaotisch, waren aber in der Originalausgabe nicht chaotisch.)


Frage: Warum sind Katzen so viel besser als Hunde?

Katzen und Hunde sind beliebte Haustiere und es gibt keine eindeutige Antwort auf die Frage, welches besser ist. Sowohl Katzen als auch Hunde haben ihre ganz eigenen Vor- und Nachteile, und welches Haustier für Sie am besten geeignet ist, hängt von Ihren individuellen Bedürfnissen und Vorlieben ab.


Manche Menschen bevorzugen Katzen, weil sie im Allgemeinen unabhängiger sind als Hunde. Katzen unterhalten sich in der Regel gerne selbst und müssen nicht zum Gassigehen oder zum Auslauf nach draußen gebracht werden. Dies kann ein großer Vorteil für Menschen sein, die in Wohnungen leben oder einen vollen Terminkalender haben.


Katzen gelten auch als saubere und ordentliche Tiere. Sie putzen sich regelmäßig und benutzen die Katzentoilette normalerweise problemlos. Dies kann ein großer Vorteil für Menschen sein, die sich nicht mit der Unordnung und dem Geruch eines Hundes auseinandersetzen möchten.


Natürlich hat der Besitz einer Katze auch einige Nachteile. Katzen können teurer sein als Hunde und schwieriger zu erziehen. Katzen zerkratzen auch häufiger Möbel und andere Haushaltsgegenstände.


Letztlich ist die Entscheidung, ob man sich eine Katze oder einen Hund anschafft, eine persönliche Entscheidung. Es gibt keine richtige oder falsche Antwort, und welches Haustier das beste für Sie ist, hängt von Ihren individuellen Bedürfnissen und Vorlieben ab.


Hier ist eine Tabelle, die die wichtigsten Unterschiede zwischen Katzen und Hunden zusammenfasst:

Charakteristisch

Katze

Hund

Unabhängigkeit

Unabhängiger

Weniger unabhängig

Übungsbedarf

Muss nicht gelaufen oder nach draußen gebracht werden

Muss gelaufen oder nach draußen gebracht werden

Sauberkeit

Reinigt sich regelmäßig selbst

Muss regelmäßig gebadet werden

Ausbildung

Kann schwierig zu trainieren sein

Leichter zu trainieren

Kratzen

Kann Möbel und andere Haushaltsgegenstände zerkratzen

Verkratzt normalerweise keine Möbel

Kosten

Teurer

Weniger teuer


Frage: Warum sind Katzen so viel besser als Hunde? Erläutern Sie dies mit einer Aufzählung von Gründen, die das emotionale Wohlbefinden und finanzielle Aspekte abdecken


Das seelische Wohl:

  • Unabhängigkeit: Katzen sind unabhängiger als Hunde, was für Menschen, die sich ein Haustier wünschen, das nicht viel Aufmerksamkeit erfordert, von Vorteil sein kann.


  • Geringer Pflegeaufwand: Katzen sind im Allgemeinen pflegeleichter als Hunde. Sie müssen nicht so oft laufen oder gepflegt werden und können für längere Zeit in Ruhe gelassen werden.


  • Leise: Katzen sind im Allgemeinen leiser als Hunde, was ideal für Menschen sein kann, die in Wohnungen leben oder geräuschempfindliche Nachbarn haben.


  • Therapeutisch: Studien haben gezeigt, dass Katzen eine beruhigende Wirkung auf Menschen haben und dabei helfen können, Stress und Ängste abzubauen.


Finanzielle Aspekte:

  • Geringere Kosten: Der Besitz von Katzen ist im Allgemeinen günstiger als der von Hunden. Sie fressen weniger Futter, brauchen weniger Tierarztbesuche und brauchen nicht so viel Pflege.


  • Einfacher zu reisen: Mit Katzen ist das Reisen einfacher als mit Hunden. Sie können in einer Tragetasche transportiert werden und müssen während Ihrer Abwesenheit nicht laufen oder trainiert werden.


  • Längere Lebenserwartung: Katzen haben im Durchschnitt eine längere Lebenserwartung als Hunde. Das bedeutet, dass Sie die Gesellschaft Ihrer Katze noch viele Jahre lang genießen können.

Beispielergebnis – Gedankenkette

Der folgende Test stammt aus einer hervorragenden Präsentation von AWS re:Invent: AWS re:Invent 2023 – Prompt Engineering Best Practices für LLMs auf Amazon Bedrock (AIM377) . Ich habe in dieser Sitzung viele tolle Ratschläge gefunden, darunter einen guten Überblick über die Eingabeaufforderung „Chain of Thought“, bei der es darum geht, Informationen über die Schritte bereitzustellen, die zur Lösung eines Problems verwendet werden, um der GenAI-Engine dabei zu helfen, eine Eingabeaufforderung besser zu lösen.


Das in dieser Präsentation gegebene Beispiel sah folgendermaßen aus:


 Q: Roger has 5 tennis balls. he buys 2 more cans of tennis balls. Each can has 3 tennis balls. How many tennis balls does he have now? A: The answer is 11. Q. The cafeteria had 23 apples. If they used 20 to make lunch and bought 6 more, how many apples do they have?


In der Präsentation gab das verwendete Modell fälschlicherweise 27 zurück. In meinem Test funktionierte es korrekt, aber als ich letzten November meine generative KI-Blackjack-Ratgeber-Demo erstellte, sah ich durchaus Probleme mit der Mathematik.


Wie gesagt, Gemini hat es gut gemeistert: A: The answer is 9. Aber im Prompt Tester habe ich die vorgeschlagene CoT-Eingabeaufforderung ausprobiert:


 Q: Roger has 5 tennis balls. he buys 2 more cans of tennis balls. Each can has 3 tennis balls. How many tennis balls does he have now? A: Roger started with 5 balls. 2 cans of 3 tennis balls each is 6 tennis balls. 5 + 6 = 11. The answer is 11. Q. The cafeteria had 23 apples. If they used 20 to make lunch and bought 6 more, how many apples do they have?


Und das Ergebnis wurde verbessert und zeigt, wie es zur Antwort kam:


 A: The cafeteria had 23 apples. They used 20 apples for lunch, which means they have 3 apples left. They then bought 6 more apples, so they now have a total of 3 + 6 = 9 apples. The answer is 9.

Der Unterschied ist ziemlich groß.

Der Code

Wenn Ihnen dies überhaupt nützlich erscheint, können Sie den Code gerne hier herunterladen: https://github.com/cfjedimaster/ai-testingzone/tree/main/prompt_tester . Wie ich bereits erwähnt habe, sollte es nicht so schwierig sein, callChatGPT oder ähnliches hinzuzufügen und einen anderen Dienst zu nutzen. Wenn ja, lassen Sie es mich wissen!