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 ist mein unglaublich fantasievoll benanntes Tool zum... ähm... Testen von Eingabeaufforderungen. Es beginnt mit einer Aufforderung:
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:
Bevor ich einige Beispielergebnisse zeige, möchte ich etwas über den Aufbau sprechen.
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.
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:
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:
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.
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.
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.
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.
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.
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:
Finanzielle Aspekte:
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ß.
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!