paint-brush
Üretken Yapay Zekayı İçerik Asistanınız Olarak Kullanmaile@raymondcamden
1,499 okumalar
1,499 okumalar

Üretken Yapay Zekayı İçerik Asistanınız Olarak Kullanma

ile Raymond Camden9m2024/02/19
Read on Terminal Reader

Çok uzun; Okumak

Geçen hafta TheJam.dev'de bir sunum yapma şerefine eriştim. Bu, üretken yapay zekayla ilgili ilk sunumumdu ve ilginç bir kullanım örneği olduğunu düşündüğüm şeyi paylaşma fırsatı buldum - yazma sürecine yardımcı olmak. Açık olmak gerekirse, blog yazıları yazmak için GenAI'yi kullanmayı kastetmiyorum, bu berbat bir fikir olurdu. (IMO!) Bunun yerine, sürecin bazılarına nasıl yardımcı olabileceğine baktım. Biraz geriye dönüp biraz arka plan bilgisi vereyim.
featured image - Üretken Yapay Zekayı İçerik Asistanınız Olarak Kullanma
Raymond Camden HackerNoon profile picture

Geçen hafta TheJam.dev'de bir sunum yapma onuruna eriştim. Bu, üretken yapay zekayla ilgili ilk sunumumdu ve ilginç bir kullanım örneği olduğunu düşündüğüm şeyi paylaşma fırsatım oldu - yazma sürecine yardımcı olmak.


Açık olmak gerekirse, blog yazıları yazmak için GenAI'yi kullanmayı kastetmiyorum, bu berbat bir fikir olurdu. (IMO!) Bunun yerine, sürecin bazılarına nasıl yardımcı olabileceğine baktım. Biraz geriye dönüp biraz arka plan bilgisi vereyim.


Uzun yıllardır John Birmingham'ın hayranıyım. Askeri/bilimkurgu/vb. türlerinde yazan ve oldukça etkileyici fikirleri olan bir yazar. Onu ilk olarak, modern bir uluslararası deniz filosunun zamanda geriye 1942'ye gönderilmesi fikrini konu alan "Zamanın Ekseni" üçlemesi sayesinde keşfettim.


Şimdi, bu başlı başına harika, ancak onun sadece askeri yöne odaklanmamasını, aynı zamanda "uptimers" (gelecekten gelen insanlar) ile çağdaşlar arasındaki kültür çatışması hakkında konuşmaya çok zaman ayırmasını sevdim.


Sanırım biraz Tom Clancy'ye benzediğini söyleyebiliriz ama sadece aksiyona odaklanmamıştı. Kitaplarından herhangi birini kesinlikle tavsiye ederim ve eğer onu daha önce okuduysanız, aşağıda bir yorumda bana bildirin.


Çalışmalarının takipçisi olarak Patreon'una abone oldum ve gerçekten çok ilgimi çekti. Gelecek çalışmalardan bölümlerin taslaklarını paylaşıyor ama daha da önemlisi sürecinden de biraz bahsediyor. Ben de bir yazar olarak bunu gerçekten büyüleyici buluyorum.


Son zamanlarda kendi GenAI kullanımından bahsediyordu ve bunu daha çok 'çerçeve' perspektifinden nasıl kullandığını tartışıyordu. Yani, bir karakterin amacının doğru zamanda nasıl ortaya çıkarılacağı ve olay örgüsü noktalarının nasıl oluşturulacağı. Bu hala 'yaratıcı' bir çalışma ama daha fazlası... Bilmiyorum. İşin yönetimi?


Yine de söylediğim gibi, bunun gerçekten ilginç olduğunu düşündüm ve beni düşündürdü. Yazma sürecine yardımcı olacak bir yol olarak GenAI'yi blogumda nasıl kullanabilirim? İşte aklıma gelen şey bu.


Kısaca belirtmek gerekirse, aşağıda tartışacağım her şey Google'ın Gemini API'sini ve Eleventy'yi kullanıyor ancak başka yerlerde de kesinlikle faydalı olacaktır.

Başlık Önerileri

Oluşturduğum ilk demo, blog yazıları için başlık bulmama yardımcı olmayı içeriyordu. Genelde bununla pek uğraşmam ama GenAI'nin daha iyi başlıklar için alternatifler önerip öneremeyeceğini merak ediyordum.


Bir istemi test ederek başladım:

gemi

Bir blog yazısı için aşağıdaki başlık verildiğinde, başlığı geliştirebilecek ve yazıya trafik çekebilecek üç öneriyi paylaşın: "BAZI BAŞLIK". Cevabınızı JSON formunda sunun. JSON sonucunun en üst düzey anahtarı "öneriler" olmalı ve her öneride önerilen başlık için "başlık" ve gerekçe için "akıl yürütme" anahtarı kullanılmalıdır.


Özellikle üç öneri istediğimi ve daha fazla trafik çekmeye yardımcı olmak istediğimi söylediğimi fark edeceksiniz. Şimdi dürüst olacağım. Bu biraz iğrenç ve spam gibi geliyor. Mutlaka tıklama tuzağı başlıkları istemiyorum. Bununla birlikte, başlıklarım için başka fikirler de görmek istedim.


Bu istem , AI Studio'daki birkaç testte iyi sonuç verdi, ben de kodlara atladım. Google'ın dışa aktardığı kodu aldım ve ardından şuraya biraz kod yazdım:


  • Komut satırı aracılığıyla bir dosya adı ileteyim.


  • Başlığı almak için ön konuyu ayrıştırın.


  • Ardından GenAI uç noktasını arayın.


İşte betiğin tamamı:


 #!/usr/bin/env node /* Given an input MD file, grab the title, and ask Google's AI APIs to offer suggestions. */ const fs = require('fs'); const fm = require('front-matter'); require('dotenv').config({path:__dirname + '/.env'}); const { GoogleGenerativeAI, HarmCategory, HarmBlockThreshold, } = require("@google/generative-ai"); const MODEL_NAME = "gemini-pro"; const API_KEY = process.env.GOOGLE_AI_KEY; async function runGenerate(title) { const genAI = new GoogleGenerativeAI(API_KEY); const model = genAI.getGenerativeModel({ model: MODEL_NAME }); 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: `Given the following title for a blog post, share three suggestions that may improve the title and drive traffic to the post: \"${title}\". Present your answer in JSON form. The top level key of the JSON result should be "suggestions" and each suggestion should use the key "title" for the suggested title and "reasoning" for the reasoning. The returned JSON should look like the following sample: [ { title: "First suggested title", reasoning: "This is the reason for the suggestion." } ] `}, ]; const result = await model.generateContent({ contents: [{ role: "user", parts }], generationConfig, safetySettings, }); const response = result.response; // remove backticks and parse. I'm seeing ```json sometimes too // console.log('DEBUG', response.text()); return JSON.parse(response.text().replace(/```/mg, '').replace(/```json/mg,'')); } (async () => { if(process.argv.length === 2) { console.log('Usage: titlesuggestions.js <<path to md>>'); process.exit(1); } const mdPath = process.argv[2]; if(!fs.existsSync(mdPath)) { console.log(`Unable to find ${mdPath}.`); process.exit(1); } const contents = fs.readFileSync(mdPath,'utf-8'); let title = fm(contents).attributes.title; console.log(`\nGenerating suggestions for: ${title}`); console.log('------------------------------------------------------------------------'); let suggestions = (await runGenerate(title)).suggestions; //console.log(suggestions); suggestions.forEach(s => { console.log(`Suggested Title: ${s['title']}\n\nReasoning: ${s['reasoning']}\n`); console.log('------------------------------------------------------------------------'); }); })();


Peki nasıl çalışıyor? Bu blog yazısının başlığı: "Geratif Yapay Zekayı İçerik Asistanınız Olarak Kullanmak"

İşte Gemini'nin önerdiği şey:


 Suggested Title: The Power of Generative AI: Your New Content Assistant Reasoning: This title emphasizes the strength and potential of generative AI as a content creation tool, capturing the reader's attention and making them curious about the possibilities it offers. ------------------------------------------------------------------------ Suggested Title: Unlock Your Content Creation Potential with Generative AI Reasoning: This title suggests that generative AI can unlock new levels of productivity and creativity in content creation, attracting readers who are looking for ways to enhance their content strategy. ------------------------------------------------------------------------ Suggested Title: Revolutionize Your Content Creation: Meet Your Generative AI Assistant Reasoning: This title highlights the transformative potential of generative AI in content creation, appealing to readers who are eager to adopt cutting-edge technologies to streamline their workflow.


Evet... Bence bu oldukça hoş. Ancak bunların hiçbiri burada gerçekten "benim" sesim gibi gelmiyor. Önerilerde kesinlikle bir miktar değer görüyorum ve bu bana üzerinde düşünecek bir şeyler veriyor, ancak açıkçası orijinal başlığı olduğu gibi bıraktım.

Açıklamanın Yazılması (Özet)

Bir sonraki demo için, yazma sürecimin gerçekten keyif almadığım bir kısmına, ön konumda kullanılan tek cümlelik description değerini yazmaya baktım. Bu dize <meta name="description"> etiketime giriyor ve başka hiçbir yerde kullanılmıyor.


Bunun GenAI'nin özetleme özelliğinin mükemmel bir kullanımı olacağını düşündüm. Şöyle bir istekle başladım:


Aşağıdaki blog gönderisini göz önünde bulundurarak, açıklama olarak kullanılacak tek cümlelik bir özet yazın


Sonra hangi içeriği göndereceğimi düşündüm. Blog yazılarımda genellikle çok sayıda kod örneği bulunur ve bunun gürültüye yol açacağını düşündüm. Böylece mantığım şu oldu:


  • Komut satırı aracılığıyla bir dosya adı ileteyim.


  • Başlığı almak için ön konuyu ayrıştırın (yalnızca bana çıktı vermek amacıyla).


  • Blog yazısının içeriğini alın.


  • 'Temizle.


  • Ardından GenAI uç noktasını arayın.


Bunların çoğu ilk örneğin değiştirilmiş bir versiyonudur, ancak gelin temizleme yönüne bir göz atalım:


 function cleanup(str) { str = str.replace(/```(.*?)```/sg, ''); str = str.replace(/---(.*?)---/sg, ''); str = str.replace(/\n{3,}/g, '\n'); return str.trim(); }


Bu, blog yazısının tüm içeriğine aktarıldı, bu yüzden ön konuyu ve kod örneklerini kaldırdım. Daha sonra birden fazla boş satırı da değiştirdim. İşte betiğin tamamı:


 #!/usr/bin/env node /* Given an input MD file, grab the text, scrub code, and ask for a summary. */ const fs = require('fs'); const fm = require('front-matter'); require('dotenv').config({path:__dirname + '/.env'}); const { GoogleGenerativeAI, HarmCategory, HarmBlockThreshold, } = require("@google/generative-ai"); const MODEL_NAME = "gemini-pro"; const API_KEY = process.env.GOOGLE_AI_KEY; async function runGenerate(text) { const genAI = new GoogleGenerativeAI(API_KEY); const model = genAI.getGenerativeModel({ model: MODEL_NAME }); 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: `Given the following blog post, write a one sentence summary to use as the description:\n${text} `}, ]; const result = await model.generateContent({ contents: [{ role: "user", parts }], generationConfig, safetySettings, }); return result.response.candidates[0].content.parts[0].text; } /* I'm responsible for 'cleaning' up the text before sending to Google. For now, I'll just remove code blocks, but in the future I may remove images too. Also remove double blank lines. Oh, also remove FM. */ function cleanup(str) { str = str.replace(/```(.*?)```/sg, ''); str = str.replace(/---(.*?)---/sg, ''); str = str.replace(/\n{3,}/g, '\n'); return str.trim(); } (async () => { if(process.argv.length === 2) { console.log('Usage: summarysuggestions.j <<path to md>>'); process.exit(1); } const mdPath = process.argv[2]; if(!fs.existsSync(mdPath)) { console.log(`Unable to find ${mdPath}.`); process.exit(1); } let contents = fs.readFileSync(mdPath,'utf-8'); let title = fm(contents).attributes.title; // Make it nicer! contents = cleanup(contents); console.log(`\nGenerating summary suggestion for: ${title}`); console.log('------------------------------------------------------------------------'); let suggestion = (await runGenerate(title)); console.log(suggestion); })();


Birkaç gün önceki "Görüntü Dosya Adlarını İyileştirmek için Üretken Yapay Zekayı Kullanmak" başlıklı bir gönderide şunu gösteriyor:


 This post explores how Generative AI can be used to enhance image filenames, making them more descriptive, accurate, and consistent.


Şunu söylemeliyim ki, bu oldukça yerinde! Ve bunun için 'ses' konusunda o kadar endişelenmiyorum. Devam ettim ve bu yazı için kullandım (işim bittikten sonra) ve şunu aldım (ve kullandım):


Üretken yapay zekayı sanal yazma asistanınız olarak kullanarak içerik oluşturma sürecinizi geliştirin.

Filmi izle

Bu ilginizi çekiyorsa ama bir LEGO Ölüm Yıldızı'na bakarken benim saçma sapan konuşmamı görmek istiyorsanız aşağıdaki sunumu izleyebilirsiniz:


Yukarıda gösterilen komut dosyalarımın her ikisi de depomdadır ve buradaki komut dosyaları dizininde bulunabilir: https://github.com/cfjedimaster/raymondcamden2023/tree/main/scripts

Aşağıdaki yorumda ne düşündüğünüzü bana bildirin!