पिछले सप्ताह, मुझे TheJam.dev पर एक प्रस्तुत करने का सम्मान प्राप्त हुआ था। जेनेरेटिव एआई पर यह मेरी पहली प्रस्तुति थी, और मुझे वह साझा करने का मौका मिला जो मैंने सोचा था कि यह एक दिलचस्प उपयोग का मामला था - लेखन प्रक्रिया में मदद करना।
अब, स्पष्ट होने के लिए, मेरा मतलब ब्लॉग पोस्ट लिखने के लिए GenAI का उपयोग करना नहीं है, यह एक भयानक विचार होगा। (आईएमओ!) इसके बजाय, मैंने देखा कि यह कुछ प्रक्रिया में कैसे मदद कर सकता है। मुझे थोड़ा पीछे जाने और कुछ पृष्ठभूमि बताने दीजिए।
मैं कई वर्षों से जॉन बर्मिंघम का प्रशंसक रहा हूं। वह एक लेखक हैं जो सैन्य/विज्ञान-कथा/आदि शैली में लिखते हैं और उनके पास कुछ बहुत ही आकर्षक विचार हैं। मैंने शुरुआत में उन्हें उनकी "एक्सिस ऑफ टाइम" त्रयी के माध्यम से खोजा था, जो 1942 के समय में एक आधुनिक अंतरराष्ट्रीय नौसैनिक बेड़े को वापस भेजने के विचार से संबंधित था।
अब, यह अपने आप में अच्छा है, हालाँकि, मुझे अच्छा लगा कि उन्होंने केवल सैन्य पहलू पर ध्यान केंद्रित नहीं किया, बल्कि "अपटाइमर्स" (भविष्य के लोग) और समकालीन लोगों के बीच सांस्कृतिक टकराव के बारे में बात करने में बहुत समय बिताया।
मुझे लगता है कि आप कह सकते हैं कि यह कुछ-कुछ टॉम क्लैन्सी जैसा था लेकिन सिर्फ एक्शन पर केंद्रित नहीं था। मैं उनकी किसी भी पुस्तक की अनुशंसा करूंगा, और यदि आपने उसे पहले ही पढ़ लिया है, तो मुझे नीचे टिप्पणी में बताएं।
उनके काम के अनुयायी के रूप में, मैंने उनके पैट्रियन की सदस्यता ली, और यह वास्तव में दिलचस्प रहा है। वह आगामी कार्यों के अध्यायों के ड्राफ्ट साझा करते हैं, लेकिन इससे भी महत्वपूर्ण बात यह है कि वह अपनी प्रक्रिया के बारे में भी काफी बात करते हैं। एक लेखक के रूप में, मुझे यह सचमुच आकर्षक लगता है।
हाल ही में, वह GenAI के अपने उपयोग के बारे में बात कर रहे थे और चर्चा की कि वह इसे 'फ्रेमवर्क' परिप्रेक्ष्य से कैसे उपयोग कर रहे हैं। यानी, किसी पात्र का मकसद सही समय पर कैसे लाया जाए, और कथानक बिंदु कैसे स्थापित किए जाएं। यह अभी भी 'रचनात्मक' कार्य है, लेकिन इससे अधिक... मैं नहीं जानता। कार्य का प्रबंधन?
जैसा कि मैंने कहा, मुझे लगा कि यह वास्तव में दिलचस्प था, और इसने मुझे सोचने पर मजबूर कर दिया। लेखन प्रक्रिया में सहायता के लिए मैं अपने ब्लॉग पर GenAI का उपयोग कैसे कर सकता हूँ? मैं यही लेकर आया हूं।
संक्षेप में, मैं नीचे जो कुछ भी चर्चा कर रहा हूं वह Google के जेमिनी एपीआई और एलेवेंटी का उपयोग करता है, लेकिन निश्चित रूप से अन्यत्र उपयोगी होगा।
मेरे द्वारा बनाए गए पहले डेमो में ब्लॉग पोस्ट के लिए शीर्षक तैयार करने में मेरी मदद करना शामिल था। अब, मैं आम तौर पर इसके साथ संघर्ष नहीं करता, लेकिन मैं उत्सुक था कि क्या GenAI शायद बेहतर शीर्षकों के लिए विकल्प सुझा सकता है।
मैंने एक संकेत का परीक्षण करके शुरुआत की:
जेमी
किसी ब्लॉग पोस्ट के लिए निम्नलिखित शीर्षक को देखते हुए, तीन सुझाव साझा करें जो शीर्षक में सुधार कर सकते हैं और पोस्ट पर ट्रैफ़िक बढ़ा सकते हैं: "कुछ शीर्षक"। अपना उत्तर JSON फॉर्म में प्रस्तुत करें। JSON परिणाम की शीर्ष स्तर की कुंजी "सुझाव" होनी चाहिए और प्रत्येक सुझाव को सुझाए गए शीर्षक के लिए "शीर्षक" और तर्क के लिए "तर्क" कुंजी का उपयोग करना चाहिए।
आप देखेंगे कि मैं विशेष रूप से तीन सुझाव मांगता हूं और कहता हूं कि मैं अधिक ट्रैफ़िक लाने में मदद करना चाहता हूं। अब, मैं ईमानदार रहूँगा। यह थोड़ा स्थूल और अनचाहा लगता है। मुझे आवश्यक रूप से क्लिकबेट शीर्षक नहीं चाहिए। जैसा कि कहा जा रहा है, मैं अपने शीर्षकों के लिए कुछ अन्य विचार देखना चाहता था।
एआई स्टूडियो में कुछ परीक्षणों के साथ वह संकेत अच्छा काम करता प्रतीत हुआ, इसलिए मैं कोड में कूद गया। मैंने Google द्वारा निर्यात किया गया कोड लिया, और फिर इसमें थोड़ा सा कोड लिखा:
यहाँ पूरी स्क्रिप्ट है:
#!/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('------------------------------------------------------------------------'); }); })();
और यह कैसे काम करता है? इस ब्लॉग पोस्ट का शीर्षक है: "जेनरेटिव एआई को अपने कंटेंट असिस्टेंट के रूप में उपयोग करना"
यहाँ मिथुन ने क्या सुझाव दिया है:
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.
हाँ... मुझे लगता है कि यह बहुत अच्छा है। हालाँकि, इनमें से कोई भी यहाँ वास्तव में "मेरी" आवाज़ जैसा नहीं लगता। मैं निश्चित रूप से सुझावों में कुछ योग्यता देखता हूं, और यह मुझे सोचने के लिए कुछ देता है, लेकिन जाहिर है, मैंने मूल शीर्षक को वैसे ही छोड़ दिया है।
अपने अगले डेमो के लिए, मैंने अपनी लेखन प्रक्रिया के एक हिस्से को देखा जो मुझे वास्तव में पसंद नहीं आया, मेरे फ्रंट मैटर में उपयोग किए गए एक-वाक्य description
मूल्य को लिखना। यह स्ट्रिंग मेरे <meta name="description">
टैग में जाकर समाप्त होती है और इसका कहीं और उपयोग नहीं किया जाता है।
मैंने सोचा कि यह GenAI की सारांशीकरण सुविधा का उत्कृष्ट उपयोग होगा। मैंने इस तरह एक संकेत के साथ शुरुआत की:
निम्नलिखित ब्लॉग पोस्ट को देखते हुए, विवरण के रूप में उपयोग करने के लिए एक वाक्य सारांश लिखें
और फिर सोचा कि मैं कौन सी सामग्री भेजूंगा। मेरे ब्लॉग पोस्ट में आम तौर पर बहुत सारे कोड नमूने होते हैं, और मुझे लगा कि अंततः शोर हो जाएगा। तो मेरा तर्क बन गया:
इनमें से अधिकांश पहले उदाहरण का एक संशोधित संस्करण है, लेकिन आइए सफ़ाई पहलू पर एक नज़र डालें:
function cleanup(str) { str = str.replace(/```(.*?)```/sg, ''); str = str.replace(/---(.*?)---/sg, ''); str = str.replace(/\n{3,}/g, '\n'); return str.trim(); }
इसमें ब्लॉग पोस्ट की संपूर्ण सामग्री शामिल है, इसलिए मैंने फ्रंट मैटर और कोड नमूने हटा दिए। फिर मैंने कई रिक्त पंक्तियाँ भी बदल दीं। यहाँ पूरी स्क्रिप्ट है:
#!/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); })();
और यहां कुछ दिन पहले की एक पोस्ट के लिए यह दिखाया गया है, "छवि फ़ाइल नामों को बेहतर बनाने के लिए जेनरेटिव एआई का उपयोग करना" :
This post explores how Generative AI can be used to enhance image filenames, making them more descriptive, accurate, and consistent.
मुझे कहना होगा, यह बिल्कुल सही है! और मैं उसके लिए 'आवाज़' को लेकर इतना चिंतित नहीं हूं। मैं आगे बढ़ा और इसे इस पोस्ट के लिए उपयोग किया (मेरा काम पूरा होने के बाद), और मुझे यह मिला (और उपयोग किया गया):
अपने आभासी लेखन सहायक के रूप में जेनरेटिव एआई का उपयोग करके अपनी सामग्री निर्माण प्रक्रिया को बढ़ाएं।
यदि इसमें आपकी रुचि है, लेकिन आप मुझे लेगो डेथ स्टार को देखते हुए इधर-उधर घूमते हुए देखना पसंद करेंगे, तो आप नीचे दी गई प्रस्तुति देख सकते हैं:
ऊपर दिखाई गई मेरी दोनों स्क्रिप्ट मेरे रेपो में हैं और यहां स्क्रिप्ट निर्देशिका में पाई जा सकती हैं: https://github.com/cfjedimaster/raymondcamden2023/tree/main/scripts
मुझे बताएं कि आप क्या सोचते हैं नीचे टिप्पणी में!