जेनरेटिव एआई के मेरे लगभग सभी हालिया अन्वेषणों में, मुझे एहसास हुआ है कि संकेत कितने महत्वपूर्ण हैं। जरूरी नहीं कि इससे मैं हर समय बेहतर संकेत लिख पाऊं, लेकिन समस्या के बारे में जागरूक होना इसे ठीक करने की दिशा में कम से कम एक कदम है, है ना? जिन चीज़ों के बारे में मैंने सोचा था कि वे व्यक्तिगत रूप से मेरी मदद करेंगी उनमें से एक यह होगी कि विभिन्न संकेतों की त्वरित तुलना और अंतर करने के लिए एक उपकरण हो।
जाहिर है, मैं एक ब्राउज़र में कई टैब खोल सकता था, लेकिन मैं वास्तव में अपने उद्देश्यों के लिए कुछ अधिक प्रत्यक्ष और सरलीकृत करना चाहता था। इसे ध्यान में रखते हुए, मैंने जो बनाया है उसे साझा करना चाहता हूँ।
प्रॉम्प्ट टेस्टर मेरा अविश्वसनीय रूप से कल्पनाशील रूप से नामित टूल है...उम...प्रॉम्प्ट का परीक्षण करने के लिए। इसकी शुरुआत एक संकेत से होती है:
विचार यह है कि आप अपना प्रारंभिक संकेत दर्ज करें, और फिर अधिक संकेत जोड़ने के लिए एक या अधिक बार क्लिक करें। तैयार होने पर, आप बस "परिणाम उत्पन्न करें" पर क्लिक कर सकते हैं:
कुछ उदाहरण परिणाम दिखाने से पहले, मुझे इस बारे में थोड़ी बात करनी चाहिए कि इसे कैसे बनाया गया था।
बैकएंड एक अविश्वसनीय रूप से सरल Node.js सर्वर है जो स्थिर HTML को फेंकने और फ्रंट-एंड एपीआई अनुरोधों का जवाब देने का काम करता है। एक बार फिर, मैं टॉड शार्प को अपना प्रारंभिक कोड मेरे साथ साझा करने के लिए धन्यवाद देता हूं। यहाँ उबाऊ सरल हैंडलिंग भाग है:
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');
और callGemini
भाग जो Google के जेमिनी एपीआई को संकेत भेजता है। सिद्धांत रूप में, इसे ChatGPT या किसी अन्य सेवा में बदला जा सकता है।
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 } } }
मुझे यह कहते हुए गर्व हो रहा है कि आखिरकार, मैं कुछ बुनियादी त्रुटि प्रबंधन कर रहा हूं और उपयोगकर्ता (मुझे) को यह बताने की कोशिश कर रहा हूं कि एक संकेत क्यों अवरुद्ध किया गया था।
सामने का सिरा अपेक्षाकृत सरल है. मैंने कोर सीएसएस के लिए मिलिग्राम का उपयोग किया (फिर से, टॉड को धन्यवाद) और नए संकेत जोड़ने और कॉल करने के लिए कुछ वेनिला जावास्क्रिप्ट का उपयोग किया। यहां HTML है (इनलाइन सीएसएस को घटाकर):
<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>
और फिर जावास्क्रिप्ट. ध्यान दें कि मैंने प्रॉम्प्ट लेआउट को संभालने के लिए उपरोक्त <template>
उपयोग किया है। यह पहली बार है जब मैंने उस टैग का उपयोग किया है, और यह अपेक्षाकृत आसान था।
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; }
मुझे लगता है कि यह सब बहुत ही सरल DOM हेरफेर और एपीआई कॉलिंग है, लेकिन अगर कुछ समझ में नहीं आता है तो मुझे नीचे टिप्पणी में जरूर बताएं। ध्यान दें कि मैं अपने सभी एपीआई कॉल एक ही बार में बंद कर देता हूं और Promise.all
उनके खत्म होने का इंतजार करता हूं।
साथ ही, ध्यान दें कि मैं marked
लाइब्रेरी का उपयोग करता हूं। Google के परिणामों में आमतौर पर मार्कडाउन होता है, और यह उन्हें मेरे छोटे वेब ऐप में अच्छी तरह से प्रस्तुत करने में मदद करता है।
मुझे लगता है कि यह सब बहुत दिलचस्प नहीं है, लेकिन आइए कुछ परीक्षणों पर नजर डालें। जैसा कि मैंने कहा, मुझे पता था कि संकेत की शैली महत्वपूर्ण थी। इसे एक उपकरण में सीधे मेरे सामने प्रस्तुत करने से इसे सुदृढ़ करने में बहुत मदद मिली।
आइए एक सरल विचार से शुरुआत करें - गुरुत्वाकर्षण की व्याख्या करना लेकिन विभिन्न आयु समूहों के लिए। परिणामों के बड़े आकार के कारण, मैं चीजों को व्यवस्थित रखने में मदद के लिए यहां थोड़ा सा सीएसएस का उपयोग करने जा रहा हूं।
संकेत: मुझे गंभीरता समझाएं लेकिन इसे पहली कक्षा के बच्चे के लिए उपयुक्त बनाएं
गुरुत्वाकर्षण एक महाशक्ति है जो हमारे ग्रह के पास है! यह एक अदृश्य शक्ति की तरह है जो पृथ्वी पर मौजूद हर चीज को जमीन पर टिका देती है।
कल्पना कीजिए कि आपके हाथ में एक गेंद है। जब आप इसे गिरा देते हैं, तो क्या होता है? यह नीचे गिरता है, है ना? ऐसा गुरुत्वाकर्षण के कारण है। गुरुत्वाकर्षण गेंद को पृथ्वी के केंद्र की ओर खींचता है, और इसलिए वह जमीन पर गिरती है।
गुरुत्वाकर्षण ही हमें ज़मीन पर टिकाये रखता है। यह हमारे पैरों को धरती पर मजबूती से टिकाए रखता है और हमें दूर बहने से रोकता है!
गुरुत्वाकर्षण एक बहुत ही महत्वपूर्ण शक्ति है. यह हर चीज़ को यथास्थान रखता है और चीज़ों को उनके अनुसार काम करने में मदद करता है। गुरुत्वाकर्षण के बिना, हम सभी अंतरिक्ष में तैर रहे होते, और चीज़ें बहुत अव्यवस्थित होतीं!
यहां गुरुत्वाकर्षण के बारे में सोचने का एक मजेदार तरीका है: कल्पना करें कि पृथ्वी एक विशाल चुंबक है, और पृथ्वी पर हर चीज धातु से बनी है। चुंबक धातु की वस्तुओं को अपनी ओर खींचता है और यही उन्हें जमीन पर रखता है।
गुरुत्वाकर्षण एक बहुत ही महत्वपूर्ण और दिलचस्प शक्ति है। यह उन चीज़ों में से एक है जो हमारे ग्रह को रहने के लिए एक अनोखी और विशेष जगह बनाती है!
संकेत: मुझे गंभीरता समझाएं लेकिन इसे 7वीं कक्षा के बच्चे के लिए उपयुक्त बनाएं
कल्पना कीजिए कि आप गेंद से खेल रहे हैं। आप इसे हवा में उछालते हैं और यह वापस आपके पास आ जाता है। ऐसा गुरुत्वाकर्षण के कारण है. गुरुत्वाकर्षण एक ऐसी शक्ति है जो चीज़ों को एक दूसरे की ओर खींचती है। यह वही है जो आपको ज़मीन पर रखता है और जो चीज़ों को नीचे गिरा देता है।
दो वस्तुओं के बीच गुरुत्वाकर्षण की मात्रा उनके द्रव्यमान पर निर्भर करती है। किसी वस्तु का द्रव्यमान जितना अधिक होगा, उसका गुरुत्वाकर्षण उतना ही अधिक होगा। इसीलिए ग्रहों और तारों जैसी चीज़ों में लोगों और कारों जैसी चीज़ों की तुलना में अधिक गुरुत्वाकर्षण होता है।
गुरुत्वाकर्षण भी वह है जो ग्रहों को सूर्य के चारों ओर कक्षा में रखता है। सूर्य का गुरुत्वाकर्षण पृथ्वी की तुलना में बहुत अधिक मजबूत है, इसलिए यह पृथ्वी को अपनी ओर खींचता है। इससे पृथ्वी सूर्य के चारों ओर एक वृत्त में घूमती रहती है।
हमारे ब्रह्मांड में गुरुत्वाकर्षण एक बहुत ही महत्वपूर्ण शक्ति है। यह चीज़ों को यथास्थान रखता है और चीज़ों को गतिशील बनाता है। गुरुत्वाकर्षण के बिना, ग्रह अंतरिक्ष में उड़ जायेंगे, और हम सभी दूर तैर जायेंगे।
यहां गुरुत्वाकर्षण के बारे में कुछ मजेदार तथ्य दिए गए हैं:
नीचे दिए गए संकेत में टाइपो पर ध्यान दें। जेमिनी ने इसे बहुत अच्छे से संभाला।
संकेत: मुझे गंभीरता समझाएं लेकिन इसे कॉलेज आयु वर्ग के छात्र के लिए उपयुक्त बनाएं
गुरुत्वाकर्षण: आकर्षण की शक्ति
गुरुत्वाकर्षण ब्रह्मांड में एक मूलभूत शक्ति है जो ग्रहों, चंद्रमाओं और सितारों जैसे आकाशीय पिंडों को गति में रखने के लिए जिम्मेदार है। यह हमें जमीन पर मजबूती से टिकाए रखता है और गिराए जाने पर वस्तुओं को गिरने देता है।
न्यूटन का सार्वभौमिक गुरुत्वाकर्षण का नियम:
सार्वभौमिक गुरुत्वाकर्षण का नियम कहता है कि ब्रह्मांड में प्रत्येक वस्तु अपने द्रव्यमान के उत्पाद के अनुपातिक और उनके बीच की दूरी के वर्ग के व्युत्क्रमानुपाती बल के साथ प्रत्येक अन्य वस्तु को आकर्षित करती है। गणितीय रूप से, इसे इस प्रकार व्यक्त किया जा सकता है:
एफ = Gm1m2/r^2
कहाँ:
F दो वस्तुओं के बीच लगने वाला गुरुत्वाकर्षण बल है। G गुरुत्वाकर्षण स्थिरांक (6.674 × 10^-11 N m^2/kg^2) है। m1 और m2 दो वस्तुओं के द्रव्यमान हैं। r दो वस्तुओं के केंद्रों के बीच की दूरी है।
गुरुत्वाकर्षण का महत्व:
आकाशीय पिंडों को कक्षा में रखता है: बड़े खगोलीय पिंडों का गुरुत्वाकर्षण खिंचाव छोटे पिंडों को उनके चारों ओर चक्कर लगाता रहता है। उदाहरण के लिए, पृथ्वी का गुरुत्वाकर्षण चंद्रमा को अपनी कक्षा में रखता है, जबकि सूर्य का गुरुत्वाकर्षण पृथ्वी और अन्य ग्रहों को उनकी संबंधित कक्षाओं में रखता है।
ज्वार के लिए जिम्मेदार: पृथ्वी और चंद्रमा के बीच गुरुत्वाकर्षण समुद्र में ज्वार का कारण बनता है। जैसे ही चंद्रमा पृथ्वी की परिक्रमा करता है, उसका गुरुत्वाकर्षण खिंचाव चंद्रमा के सामने वाले हिस्से में समुद्र के पानी में एक उभार पैदा करता है। जड़त्वीय बलों के कारण पृथ्वी के विपरीत दिशा में एक और उभार बनता है। जैसे-जैसे पृथ्वी घूमती है, ये उभार ग्रह की सतह पर घूमते हैं, जिसके परिणामस्वरूप उच्च और निम्न ज्वार आते हैं।
वस्तुओं को पृथ्वी पर रखता है: गुरुत्वाकर्षण वस्तुओं को पृथ्वी के केंद्र की ओर खींचता है, उन्हें दूर तैरने से रोकता है। यह घटना हमें चलने, खड़े होने और अपने पर्यावरण के साथ बातचीत करने की अनुमति देती है।
तारों और आकाशगंगाओं का निर्माण: तारों और आकाशगंगाओं के निर्माण में गुरुत्वाकर्षण महत्वपूर्ण भूमिका निभाता है। गैस और धूल के विशाल बादलों के गुरुत्वाकर्षण पतन से नए तारों का निर्माण होता है। इसी प्रकार, आकाशगंगाओं का गुरुत्वाकर्षण खिंचाव उन्हें एक साथ बांधे रखता है, और उन्हें फैलने से रोकता है।
सापेक्षता सिद्धांत: अल्बर्ट आइंस्टीन का सामान्य सापेक्षता सिद्धांत गुरुत्वाकर्षण की अधिक व्यापक समझ प्रदान करता है। यह बताता है कि गुरुत्वाकर्षण कोई बल नहीं है, बल्कि द्रव्यमान या ऊर्जा की उपस्थिति के कारण अंतरिक्ष-समय की वक्रता है। यह वक्रता वस्तुओं की गति को प्रभावित करती है, जिससे वे सीधी रेखाओं के बजाय घुमावदार पथों का अनुसरण करती हैं।
निष्कर्षतः, गुरुत्वाकर्षण एक मौलिक बल है जो आकाशीय पिंडों को गति, ज्वार-भाटा और पृथ्वी पर वस्तुओं के व्यवहार को बनाए रखने के लिए जिम्मेदार है। यह एक जटिल घटना है जिसका सदियों से बड़े पैमाने पर अध्ययन किया गया है, और यह आज भी वैज्ञानिकों और शोधकर्ताओं को आकर्षित करती है।
अपने दूसरे परीक्षण के लिए, मैंने एक बुनियादी संकेत के साथ शुरुआत की और फिर एक बेहतर संस्करण के साथ जिसमें विशिष्ट प्रकार के विवरण मांगे गए: (त्वरित संपादकीय नोट - नीचे दिया गया सारणीबद्ध डेटा थोड़ा गड़बड़ है, लेकिन मूल आउटपुट में गड़बड़ नहीं था।)
संकेत: बिल्लियाँ कुत्तों से इतनी बेहतर क्यों हैं?
बिल्लियाँ और कुत्ते दोनों लोकप्रिय पालतू जानवर हैं, और इस सवाल का कोई निश्चित उत्तर नहीं है कि कौन सा बेहतर है। बिल्लियों और कुत्तों दोनों के अपने-अपने अनूठे फायदे और नुकसान हैं, और आपके लिए सबसे अच्छा पालतू जानवर आपकी व्यक्तिगत आवश्यकताओं और प्राथमिकताओं पर निर्भर करेगा।
कुछ लोग बिल्लियाँ पसंद करते हैं क्योंकि वे आम तौर पर कुत्तों की तुलना में अधिक स्वतंत्र होती हैं। बिल्लियाँ आमतौर पर अपना मनोरंजन करने में प्रसन्न होती हैं, और उन्हें व्यायाम के लिए बाहर ले जाने या ले जाने की आवश्यकता नहीं होती है। यह उन लोगों के लिए एक बड़ा लाभ हो सकता है जो अपार्टमेंट में रहते हैं या जिनका कार्यक्रम व्यस्त है।
बिल्लियाँ साफ़ सुथरे जानवरों के लिए भी जानी जाती हैं। वे खुद को नियमित रूप से तैयार करते हैं, और वे आम तौर पर बिना किसी समस्या के कूड़े के डिब्बे का उपयोग करते हैं। यह उन लोगों के लिए एक बड़ा फायदा हो सकता है जो कुत्ते की गंदगी और गंध से निपटना नहीं चाहते हैं।
बेशक, बिल्ली पालने के कुछ नुकसान भी हैं। बिल्लियाँ कुत्तों की तुलना में अधिक महंगी हो सकती हैं, और उन्हें प्रशिक्षित करना अधिक कठिन हो सकता है। बिल्लियाँ फर्नीचर और अन्य घरेलू वस्तुओं को खरोंचने की भी अधिक संभावना रखती हैं।
अंततः, बिल्ली या कुत्ता पालने का निर्णय व्यक्तिगत है। इसका कोई सही या गलत उत्तर नहीं है, और आपके लिए सबसे अच्छा पालतू जानवर आपकी व्यक्तिगत आवश्यकताओं और प्राथमिकताओं पर निर्भर करेगा।
यहां बिल्लियों और कुत्तों के बीच मुख्य अंतरों का सारांश देने वाली एक तालिका दी गई है:
विशेषता | बिल्ली | कुत्ता |
---|---|---|
आजादी | अधिक आत्मनिर्भर | कम स्वतंत्र |
व्यायाम की आवश्यकता | चलने या बाहर ले जाने की आवश्यकता नहीं है | चलने या बाहर ले जाने की आवश्यकता है |
स्वच्छता | खुद को नियमित रूप से साफ करता है | नियमित रूप से नहाना जरूरी है |
प्रशिक्षण | प्रशिक्षित करना कठिन हो सकता है | प्रशिक्षित करना आसान |
scratching | फर्नीचर और अन्य घरेलू सामान पर खरोंच लग सकती है | आमतौर पर फर्नीचर को खरोंचता नहीं है |
लागत | अधिक महंगा | कम महंगा |
संकेत: बिल्लियाँ कुत्तों से इतनी बेहतर क्यों हैं? भावनात्मक भलाई और वित्तीय पहलुओं को कवर करने वाले कारणों की एक बुलेटेड सूची के साथ समझाएं
भावनात्मक रूप से अच्छा:
वित्तीय पहलू:
निम्नलिखित परीक्षण AWS re:Invent: AWS re:Invent 2023 - Amazon Badrock (AIM377) पर एलएलएम के लिए शीघ्र इंजीनियरिंग सर्वोत्तम प्रथाओं की एक उत्कृष्ट प्रस्तुति से आया है। मुझे इस सत्र से कई बेहतरीन सलाह मिलीं, जिनमें चेन ऑफ थॉट प्रॉम्प्टिंग का एक अच्छा अवलोकन भी शामिल है, जहां विचार यह है कि आप किसी समस्या को हल करने के लिए उपयोग किए जाने वाले चरणों के बारे में जानकारी प्रदान करते हैं ताकि जेनएआई इंजन को प्रॉम्प्ट को बेहतर ढंग से हल करने में मदद मिल सके।
अब, उस प्रस्तुति में दिया गया उदाहरण इस प्रकार है:
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?
प्रेजेंटेशन में, उपयोग में आने वाला मॉडल गलत तरीके से 27 लौटा। मेरे परीक्षण में, इसने सही ढंग से काम किया, लेकिन जब मैंने पिछले नवंबर में अपना जेनरेटिव एआई ब्लैकजैक सलाह डेमो बनाया तो मुझे गणित के साथ समस्याएं दिखाई दीं।
जैसा कि मैंने कहा, जेमिनी ने इसे ठीक से संभाला: A: The answer is 9.
लेकिन प्रॉम्प्ट टेस्टर में, मैंने सुझाए गए सीओटी प्रॉम्प्ट को आजमाया:
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?
और परिणाम में सुधार किया गया, यह दिखाते हुए कि यह उत्तर तक कैसे पहुंचा:
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.
अंतर काफी महत्वपूर्ण है.
यदि यह आपके लिए बिल्कुल उपयोगी लगता है, तो बेझिझक यहां से कोड प्राप्त करें: https://github.com/cfjedimaster/ai-testingzone/tree/main/prompt_tester । जैसा कि मैंने उल्लेख किया है, callChatGPT
या ऐसा कुछ जोड़ना और एक अलग सेवा का उपयोग करना उतना मुश्किल नहीं होना चाहिए। यदि आप करेंगे तो, मुझे बता देना!