Üretken yapay zeka ile ilgili son araştırmalarımın neredeyse tamamında, yönlendirmelerin ne kadar önemli olduğunu fark ettim. Bu beni her zaman daha iyi yönlendirmeler yazmaya yöneltmedi, ancak sorunun farkında olmak onu düzeltmeye yönelik en azından bir adımdır, değil mi? Kişisel olarak bana yardımcı olacağını düşündüğüm şeylerden biri, farklı istemleri hızla karşılaştırıp karşılaştıracak bir araca sahip olmaktı.
Açıkçası, bir tarayıcıda birden fazla sekme açabiliyordum, ancak amaçlarım açısından gerçekten daha doğrudan ve basitleştirilmiş bir şey istedim. Bunu aklımda tutarak, yaptıklarımı paylaşayım.
Prompt Tester, istemleri test etmek için inanılmaz derecede yaratıcı bir şekilde adlandırılmış aracımdır. Bir istemle başlar:
Buradaki fikir, ilk isteminizi girmeniz ve ardından daha fazla bilgi istemi eklemek için bir veya daha fazla tıklamanızdır. Hazır olduğunuzda "Sonuçları Oluştur"a tıklamanız yeterlidir:
Bazı örnek sonuçları göstermeden önce, nasıl oluşturulduğundan biraz bahsedeyim.
Arka uç, statik HTML'yi oluşturmayı ve ön uç API isteklerine yanıt vermeyi yöneten inanılmaz derecede basit bir Node.js sunucusudur. İlk kodunu benimle paylaştığı için Todd Sharp'a bir kez daha teşekkür ederim. İşte sıkıcı, basit kullanım kısmı:
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');
Ve istemi Google'ın Gemini API'sine ileten callGemini
kısmı. Teorik olarak bu, ChatGPT veya başka bir hizmetle değiştirilebilir.
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 } } }
Şu anda nihayet bazı temel hata işlemeleri yaptığımı ve kullanıcıya (bana) bir istemin neden engellendiğini açıklamaya çalıştığımı söylemekten gurur duyuyorum.
Ön uç nispeten basittir. Temel CSS için Milligram'ı (yine teşekkür ederim Todd) ve yeni komut istemleri ekleme ve aramaları yapmak için biraz vanilya JavaScript kullandım. İşte HTML (satır içi CSS hariç):
<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>
Ve sonra JavaScript. Bilgi istemi düzenini işlemek için yukarıdaki <template>
kullandığıma dikkat edin. Bu etiketi ilk kez kullanıyorum ve nispeten kolaydı.
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; }
Bunların oldukça basit DOM manipülasyonu ve API çağrısı olduğunu düşünüyorum , ancak bir şey mantıklı gelmiyorsa kesinlikle aşağıdaki yorumda bana bildirin. Dikkat edin tüm API çağrılarımı aynı anda sonlandırıyorum ve Promise.all
onların bitmesini bekliyor.
Ayrıca, marked
kütüphaneyi kullandığımı unutmayın. Google'dan gelen sonuçlarda genellikle Markdown bulunur ve bu, bunların küçük web uygulamamda güzel bir şekilde oluşturulmasına yardımcı olur.
Bence bunların hepsi pek de ilginç değil, ama hadi bazı testlere bakalım. Söylediğim gibi, yönlendirme tarzının önemli olduğunu biliyordum . Bunu doğrudan bana bir araçla sunmak, bunu güçlendirmek için çok uzun bir yol kat etti.
Basit bir fikirle başlayalım; yerçekimini farklı yaş grupları için açıklayalım. Sonuçların büyük boyutundan dolayı, işleri aklı başında tutmaya yardımcı olmak için burada biraz CSS kullanacağım.
Öneri: Bana yer çekimini açıkla ama bunu 1. sınıftaki bir çocuğa uygun hale getir
Yerçekimi gezegenimizin sahip olduğu bir süper güçtür! Sanki Dünya'daki her şeyin yerde kalmasını sağlayan görünmez bir güç gibi.
Elinizde bir top olduğunu hayal edin. Bıraktığınızda ne olur? Düşüyor, değil mi? Bunun nedeni yer çekimidir. Yerçekimi topu dünyanın merkezine doğru çeker ve böylece yere düşer.
Yer çekimi aynı zamanda bizi yerde tutan şeydir. Ayaklarımızın Dünya'ya sağlam basmasını sağlayan ve uçup gitmemizi engelleyen şey budur!
Yer çekimi çok önemli bir kuvvettir. Her şeyi yerinde tutar ve işlerin olduğu gibi yürümesine yardımcı olur. Yerçekimi olmasaydı hepimiz uzayda yüzüyor olurduk ve her şey çok kaotik olurdu!
İşte yerçekimi hakkında düşünmenin eğlenceli bir yolu: Dünyanın dev bir mıknatıs olduğunu ve Dünya üzerindeki her şeyin metalden yapıldığını hayal edin. Mıknatıs metal nesneleri kendisine doğru çeker ve onları yerde tutan da budur.
Yerçekimi çok önemli ve ilginç bir kuvvettir. Gezegenimizi yaşanacak bu kadar eşsiz ve özel bir yer yapan şeylerden biri de bu!
Öneri: Bana yer çekimini açıkla ama bunu 7. sınıftaki bir çocuğa uygun hale getir
Bir topla oynadığınızı hayal edin. Onu havaya fırlatırsın, o da sana geri döner. Bunun nedeni yer çekimidir. Yer çekimi cisimleri birbirine doğru çeken bir kuvvettir. Seni yerde tutan ve her şeyin yıkılmasına neden olan şey budur.
İki nesne arasındaki yer çekimi miktarı kütlelerine bağlıdır. Bir nesnenin kütlesi ne kadar fazlaysa, yerçekimi de o kadar güçlü olur. Bu nedenle gezegenler ve yıldızlar gibi şeyler, insanlar ve arabalar gibi şeylerden daha fazla yer çekimine sahiptir.
Yerçekimi aynı zamanda gezegenleri güneşin etrafında yörüngede tutan şeydir. Güneş'in yerçekimi Dünya'nınkinden çok daha güçlü olduğundan Dünya'yı kendine doğru çeker. Bu, Dünya'nın Güneş etrafında bir daire içinde hareket etmesini sağlar.
Yerçekimi evrenimizde çok önemli bir kuvvettir. Nesneleri yerinde tutar ve hareket etmesini sağlar. Yerçekimi olmasaydı gezegenler uzaya uçardı ve hepimiz uçup giderdik.
İşte yer çekimiyle ilgili bazı eğlenceli gerçekler:
Aşağıdaki istemdeki yazım hatasına dikkat edin. İkizler bunu gayet iyi halletti.
Öneri: Bana yer çekimini açıkla ama bunu üniversite çağındaki bir öğrenciye uygun hale getir
Yerçekimi: Çekim Gücü
Yerçekimi, evrende gezegenler, aylar ve yıldızlar gibi gök cisimlerini hareket halinde tutmaktan sorumlu olan temel bir kuvvettir. Aynı zamanda bizi yere sıkı sıkıya bağlayan ve nesnelerin düşürüldüğünde düşmesine olanak sağlayan şeydir.
Newton'un Evrensel Çekim Yasası:
Evrensel çekim yasası, evrendeki her nesnenin diğer tüm nesneleri, kütlelerinin çarpımı ile orantılı, aralarındaki mesafenin karesiyle ters orantılı bir kuvvetle çektiğini belirtir. Matematiksel olarak şu şekilde ifade edilebilir:
F = Gm1m2/r^2
Nerede:
F, iki nesne arasındaki çekim kuvvetidir. G yer çekimi sabitidir (6,674 × 10^-11 N m^2/kg^2). m1 ve m2 iki cismin kütleleridir. r, iki nesnenin merkezleri arasındaki mesafedir.
Yerçekiminin Önemi:
Gök Cisimlerini Yörüngede Tutar: Daha büyük gök cisimlerinin çekim kuvveti, daha küçük gök cisimlerinin etraflarında dönmesini sağlar. Örneğin, Dünya'nın yerçekimi Ay'ı yörüngede tutarken, Güneş'in yerçekimi Dünya'yı ve diğer gezegenleri kendi yörüngelerinde tutar.
Gelgitlerden Sorumlu: Dünya ile ay arasındaki yer çekimi okyanus gelgitlerine neden olur. Ay, Dünya'nın yörüngesinde dönerken, yerçekimi kuvveti, okyanusun aya bakan tarafındaki suyunda bir şişkinlik yaratır. Atalet kuvvetleri nedeniyle Dünya'nın karşı tarafında başka bir çıkıntı oluşur. Dünya döndükçe, bu çıkıntılar gezegenin yüzeyinde hareket ederek gelgitlerin yükselmesine ve alçalmasına neden olur.
Nesneleri Dünya'da Tutar: Yerçekimi, nesneleri Dünya'nın merkezine doğru çekerek onların uçup gitmesini engeller. Bu fenomen yürümemize, ayakta durmamıza ve çevremizle etkileşime girmemize olanak sağlar.
Yıldızların ve Galaksilerin Oluşumu: Yerçekimi, yıldızların ve galaksilerin oluşumunda çok önemli bir rol oynar. Devasa gaz ve toz bulutlarının yerçekimsel çöküşü yeni yıldızların oluşmasına yol açar. Benzer şekilde, galaksilerin çekim kuvveti onları birbirine bağlı tutarak dağılmalarını engeller.
Görelilik Teorisi: Albert Einstein'ın genel görelilik teorisi, yerçekiminin daha kapsamlı anlaşılmasını sağlar. Kütleçekiminin bir kuvvet olmadığını, daha ziyade kütle veya enerjinin varlığından kaynaklanan uzay-zamanın bir eğriliği olduğunu açıklıyor. Bu eğrilik nesnelerin hareketini etkileyerek düz çizgiler yerine kavisli yollar izlemelerine neden olur.
Sonuç olarak yerçekimi, gök cisimlerini hareket halinde tutmaktan, gelgitlerden ve Dünya üzerindeki nesnelerin davranışlarından sorumlu olan temel bir kuvvettir. Bu, yüzyıllar boyunca kapsamlı bir şekilde incelenen karmaşık bir olgudur ve bugüne kadar bilim adamlarını ve araştırmacıları büyülemeye devam etmektedir.
İkinci testime, temel bir bilgi istemiyle ve ardından belirli türde ayrıntıların istendiği daha iyi bir sürümle başladım: (Hızlı editör notu - aşağıdaki tablo verileri biraz karışık, ancak orijinal çıktıda karışık değildi .)
İpucu: neden kediler köpeklerden çok daha iyi?
Kediler ve köpekler popüler evcil hayvanlardır ve hangisinin daha iyi olduğu sorusunun kesin bir cevabı yoktur. Hem kedilerin hem de köpeklerin kendilerine özgü avantaj ve dezavantajları vardır ve sizin için en iyi evcil hayvan, bireysel ihtiyaçlarınıza ve tercihlerinize bağlı olacaktır.
Bazı insanlar genellikle köpeklerden daha bağımsız oldukları için kedileri tercih ederler. Kediler genellikle kendilerini eğlendirmekten mutludurlar ve yürüyüşe çıkarılmaları veya egzersiz için dışarı çıkarılmaları gerekmez. Bu, apartman dairesinde yaşayan veya yoğun programları olan kişiler için büyük bir avantaj olabilir.
Kediler aynı zamanda temiz ve düzenli hayvanlar olarak da bilinir. Kendilerini düzenli olarak temizlerler ve genellikle çöp kutusunu herhangi bir sorun yaşamadan kullanırlar. Bu, köpeğin pisliği ve kokusuyla uğraşmak istemeyen kişiler için büyük bir avantaj olabilir.
Elbette kedi sahibi olmanın bazı dezavantajları da var. Kediler köpeklerden daha pahalı olabilir ve eğitilmeleri daha zor olabilir. Kedilerin ayrıca mobilyaları ve diğer ev eşyalarını çizme olasılığı daha yüksektir.
Sonuçta kedi mi yoksa köpek mi alacağınız kişisel bir karardır. Doğru ya da yanlış cevap yoktur ve sizin için en iyi evcil hayvan, bireysel ihtiyaçlarınıza ve tercihlerinize bağlı olacaktır.
Kediler ve köpekler arasındaki temel farkları özetleyen bir tablo:
karakteristik | Kedi | Köpek |
---|---|---|
Bağımsızlık | Daha bağımsız | Daha az bağımsız |
Egzersiz ihtiyaçları | Yürütülmesine veya dışarıya çıkarılmasına gerek yoktur | Yürütülmesi veya dışarıya çıkarılması gerekiyor |
Temizlik | Kendini düzenli olarak temizler | Düzenli olarak banyo yapılması gerekiyor |
Eğitim | Eğitilmesi zor olabilir | Eğitilmesi daha kolay |
kaşıma | Mobilyaları ve diğer ev eşyalarını çizebilir | Genellikle mobilyaları çizmez |
Maliyet | Daha pahalı | Daha az pahalı |
İpucu: neden kediler köpeklerden çok daha iyi? Duygusal refahı ve finansal yönleri kapsayan nedenleri madde işaretli bir listeyle açıklayın
Duygusal esenlik:
Mali yönler:
Aşağıdaki test, AWS re:Invent'in mükemmel bir sunumundan geldi: AWS re:Invent 2023 - Amazon Bedrock'ta Yüksek Lisans (LLM'ler) için hızlı mühendislik en iyi uygulamaları (AIM377) . Bu oturumda, GenAI motorunun bir istemi daha iyi çözmesine yardımcı olmak için bir sorunu çözmek için kullanılan adımlar hakkında bilgi vermenizin amaçlandığı Düşünce Zinciri yönlendirmesine iyi bir genel bakış da dahil olmak üzere pek çok harika tavsiye buldum.
Şimdi o sunumda verilen örnek şu şekildeydi:
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?
Sunumda, kullanılan model hatalı bir şekilde 27 değerini döndürdü. Testimde doğru çalıştı, ancak geçen Kasım ayında üretken AI blackjack tavsiye demomu oluşturduğumda kesinlikle matematikle ilgili sorunlar gördüm.
Söylediğim gibi Gemini bunu gayet iyi halletti: A: The answer is 9.
Ancak Prompt Tester'da önerilen CoT istemini denedim:
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?
Ve sonuç iyileştirildi ve cevaba nasıl ulaşıldığını gösterdi:
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.
Fark oldukça önemli.
Bu sizin için yararlı görünüyorsa kodu buradan almaktan çekinmeyin: https://github.com/cfjedimaster/ai-testingzone/tree/main/prompt_tester . Bahsettiğim gibi callChatGPT
veya buna benzer bir şey ekleyip farklı bir servis kullanmak bu kadar zor olmasa gerek. Eğer yaparsan haberim olsun!