Trong gần như tất cả những khám phá gần đây của tôi về Generative AI, tôi đã nhận ra rằng những lời nhắc quan trọng như thế nào. Điều đó không nhất thiết giúp tôi luôn viết ra những lời nhắc tốt hơn, nhưng nhận thức được vấn đề ít nhất là một bước để khắc phục nó, phải không? Một trong những điều mà tôi nghĩ sẽ giúp ích cho cá nhân tôi là có một công cụ để nhanh chóng so sánh và đối chiếu các lời nhắc khác nhau.
Rõ ràng, tôi chỉ có thể mở nhiều tab trong trình duyệt, nhưng tôi thực sự muốn thứ gì đó trực tiếp và đơn giản hơn cho mục đích của mình. Với ý nghĩ đó, hãy để tôi chia sẻ những gì tôi đã xây dựng.
Nhắc thử nghiệm là công cụ được đặt tên cực kỳ giàu trí tưởng tượng của tôi để... ừm... kiểm tra lời nhắc. Nó bắt đầu bằng một lời nhắc:
Ý tưởng là bạn nhập lời nhắc ban đầu, sau đó nhấp vào một hoặc nhiều lần để thêm lời nhắc khác. Khi đã sẵn sàng, bạn có thể chỉ cần nhấp vào "Tạo kết quả":
Trước khi hiển thị một số kết quả ví dụ, hãy để tôi nói một chút về cách nó được xây dựng.
Phần phụ trợ là một máy chủ Node.js cực kỳ đơn giản, xử lý việc đưa ra HTML tĩnh và phản hồi các yêu cầu API giao diện người dùng. Một lần nữa, tôi cảm ơn Todd Sharp vì đã chia sẻ mã ban đầu của anh ấy với tôi. Đây là phần xử lý đơn giản nhàm chán:
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');
Và phần callGemini
sẽ chuyển lời nhắc tới API Gemini của Google. Về lý thuyết, điều này có thể được thay đổi thành ChatGPT hoặc bất kỳ dịch vụ nào khác.
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 } } }
Tôi tự hào nói rằng cuối cùng thì tôi cũng đang thực hiện một số thao tác xử lý lỗi cơ bản và cố gắng giải thích cho người dùng (tôi) lý do tại sao lời nhắc lại bị chặn.
Mặt trước tương đối đơn giản. Tôi đã sử dụng Milligram cho CSS cốt lõi (một lần nữa, cảm ơn Todd) và một số JavaScript cơ bản để xử lý việc thêm lời nhắc mới và thực hiện lệnh gọi. Đây là HTML (trừ CSS nội tuyến):
<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>
Và sau đó là JavaScript. Lưu ý rằng tôi đã sử dụng <template>
ở trên để xử lý bố cục lời nhắc. Đây là lần đầu tiên tôi sử dụng thẻ đó và nó tương đối dễ dàng.
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; }
Tôi nghĩ đó là tất cả các thao tác DOM và gọi API khá đơn giản, nhưng hãy chắc chắn cho tôi biết trong phần nhận xét bên dưới nếu có điều gì đó không hợp lý. Lưu ý rằng tôi thực hiện tất cả lệnh gọi API của mình cùng một lúc và Promise.all
đợi chúng kết thúc.
Ngoài ra, lưu ý tôi sử dụng thư viện marked
. Các kết quả từ Google thường có Markdown và điều này giúp hiển thị chúng một cách độc đáo trong ứng dụng web nhỏ của tôi.
Tôi nghĩ tất cả những điều này không thú vị lắm, nhưng chúng ta hãy xem xét một số thử nghiệm. Như tôi đã nói, tôi biết phong cách nhắc nhở là quan trọng. Việc trình bày nó trực tiếp cho tôi bằng một công cụ đã phải mất một chặng đường dài để củng cố điều đó.
Hãy bắt đầu với một ý tưởng đơn giản - giải thích về trọng lực nhưng dành cho các nhóm tuổi khác nhau. Do kích thước lớn của kết quả, tôi sẽ sử dụng một chút CSS ở đây để giúp mọi thứ trở nên hợp lý.
Gợi ý: giải thích cho tôi về trọng lực nhưng làm sao cho phù hợp với trẻ lớp 1
Trọng lực là một siêu năng lực mà hành tinh của chúng ta có! Nó giống như một sức mạnh vô hình khiến mọi thứ trên Trái đất đều nằm yên trên mặt đất.
Hãy tưởng tượng bạn có một quả bóng trong tay. Khi bạn đánh rơi nó, điều gì xảy ra? Nó rơi xuống phải không? Đó là do trọng lực. Trọng lực kéo quả bóng về phía tâm Trái đất và do đó nó rơi xuống đất.
Trọng lực cũng là thứ giữ chúng ta ở trên mặt đất. Đó là thứ giữ cho đôi chân của chúng ta đứng vững trên Trái đất và ngăn chúng ta trôi đi!
Trọng lực là một lực rất quan trọng. Nó giữ mọi thứ ở đúng vị trí và giúp mọi thứ hoạt động như bình thường. Nếu không có trọng lực, tất cả chúng ta sẽ trôi nổi trong không gian và mọi thứ sẽ rất hỗn loạn!
Đây là một cách thú vị để nghĩ về lực hấp dẫn: hãy tưởng tượng Trái đất là một nam châm khổng lồ và mọi thứ trên Trái đất đều được làm bằng kim loại. Nam châm kéo các vật kim loại về phía nó và đó là thứ giữ chúng ở trên mặt đất.
Trọng lực là một lực rất quan trọng và thú vị. Đó là một trong những điều khiến hành tinh của chúng ta trở thành một nơi độc đáo và đặc biệt để sinh sống!
Gợi ý: giải thích cho tôi về trọng lực nhưng làm sao cho phù hợp với trẻ lớp 7
Hãy tưởng tượng bạn đang chơi với một quả bóng. Bạn ném nó lên không trung và nó sẽ rơi trở lại bạn. Điều này là do trọng lực. Trọng lực là lực kéo các vật về phía nhau. Nó là thứ giữ bạn trên mặt đất và khiến mọi thứ rơi xuống.
Lực hấp dẫn giữa hai vật phụ thuộc vào khối lượng của chúng. Vật có khối lượng càng lớn thì lực hấp dẫn của nó càng mạnh. Đó là lý do tại sao những thứ như hành tinh và các ngôi sao có lực hấp dẫn lớn hơn những thứ như con người và ô tô.
Trọng lực cũng là thứ giữ cho các hành tinh chuyển động trên quỹ đạo quanh mặt trời. Lực hấp dẫn của Mặt trời mạnh hơn Trái đất rất nhiều nên nó kéo Trái đất về phía nó. Điều này giữ cho Trái đất chuyển động theo một vòng tròn quanh mặt trời.
Trọng lực là một lực rất quan trọng trong vũ trụ của chúng ta. Nó giữ mọi thứ ở đúng vị trí và làm cho mọi thứ chuyển động. Không có lực hấp dẫn, các hành tinh sẽ bay vào không gian và tất cả chúng ta sẽ trôi đi.
Dưới đây là một số sự thật thú vị về trọng lực:
Lưu ý lỗi đánh máy trong lời nhắc bên dưới. Song Tử đã xử lý nó rất tốt.
Gợi ý: giải thích về trọng lực cho tôi nhưng làm cho nó phù hợp với sinh viên đại học
Trọng lực: Lực hấp dẫn
Trọng lực là một lực cơ bản trong vũ trụ chịu trách nhiệm giữ cho các thiên thể, chẳng hạn như các hành tinh, mặt trăng và các ngôi sao, chuyển động. Nó cũng là thứ giúp chúng ta bám chắc vào mặt đất và cho phép các đồ vật rơi xuống khi rơi.
Định luật vạn vật hấp dẫn của Newton:
Định luật vạn vật hấp dẫn phát biểu rằng mọi vật trong vũ trụ đều hút mọi vật khác với một lực tỷ lệ thuận với tích khối lượng của chúng và tỷ lệ nghịch với bình phương khoảng cách giữa chúng. Về mặt toán học, nó có thể được biểu diễn dưới dạng:
F = Gm1m2/r^2
Ở đâu:
F là lực hấp dẫn giữa hai vật. G là hằng số hấp dẫn (6,674 × 10^-11 N m^2/kg^2). m1 và m2 là khối lượng của hai vật. r là khoảng cách giữa tâm của hai vật.
Ý nghĩa của trọng lực:
Giữ các thiên thể trong quỹ đạo: Lực hấp dẫn của các thiên thể lớn hơn giữ cho các thiên thể nhỏ hơn quay quanh chúng. Ví dụ, lực hấp dẫn của Trái đất giữ cho mặt trăng ở trên quỹ đạo, trong khi lực hấp dẫn của Mặt trời giữ Trái đất và các hành tinh khác ở quỹ đạo tương ứng của chúng.
Chịu trách nhiệm về thủy triều: Trọng lực giữa Trái đất và mặt trăng gây ra thủy triều. Khi mặt trăng quay quanh Trái đất, lực hấp dẫn của nó tạo ra một chỗ phình ra trong nước đại dương ở phía đối diện với mặt trăng. Một chỗ phình khác hình thành ở phía đối diện Trái đất do lực quán tính. Khi Trái đất quay, những chỗ phình này di chuyển trên bề mặt hành tinh, dẫn đến thủy triều lên và xuống.
Giữ các vật thể trên Trái đất: Trọng lực kéo các vật thể về phía tâm Trái đất, ngăn chúng trôi đi. Hiện tượng này cho phép chúng ta đi, đứng và tương tác với môi trường.
Sự hình thành của các ngôi sao và thiên hà: Trọng lực đóng một vai trò quan trọng trong sự hình thành các ngôi sao và thiên hà. Sự suy sụp hấp dẫn của các đám mây khí và bụi khổng lồ dẫn đến việc tạo ra các ngôi sao mới. Tương tự, lực hấp dẫn của các thiên hà giữ chúng liên kết với nhau, ngăn chúng phân tán.
Thuyết tương đối: Thuyết tương đối rộng của Albert Einstein cung cấp sự hiểu biết toàn diện hơn về lực hấp dẫn. Nó giải thích rằng lực hấp dẫn không phải là một lực mà là độ cong của không thời gian gây ra bởi sự hiện diện của khối lượng hoặc năng lượng. Độ cong này ảnh hưởng đến chuyển động của vật thể, khiến chúng đi theo đường cong thay vì đường thẳng.
Tóm lại, lực hấp dẫn là lực cơ bản chịu trách nhiệm giữ cho các thiên thể chuyển động, thủy triều và hoạt động của các vật thể trên Trái đất. Đó là một hiện tượng phức tạp đã được nghiên cứu rộng rãi qua nhiều thế kỷ và nó vẫn tiếp tục mê hoặc các nhà khoa học và nhà nghiên cứu cho đến ngày nay.
Đối với thử nghiệm thứ hai, tôi bắt đầu với lời nhắc cơ bản và sau đó là phiên bản tốt hơn yêu cầu các loại chi tiết cụ thể: (Ghi chú biên tập nhanh - dữ liệu dạng bảng bên dưới hơi lộn xộn, nhưng không lộn xộn ở đầu ra ban đầu.)
Lời nhắc: tại sao mèo lại tốt hơn chó rất nhiều?
Mèo và chó đều là những vật nuôi phổ biến và không có câu trả lời chắc chắn cho câu hỏi con nào tốt hơn. Cả mèo và chó đều có những ưu điểm và nhược điểm riêng, và con vật cưng tốt nhất dành cho bạn sẽ tùy thuộc vào nhu cầu và sở thích cá nhân của bạn.
Một số người thích mèo hơn vì chúng thường độc lập hơn chó. Mèo thường vui vẻ giải trí và chúng không cần phải dắt đi dạo hoặc đưa ra ngoài tập thể dục. Đây có thể là một lợi thế lớn cho những người sống trong căn hộ hoặc những người có lịch trình bận rộn.
Mèo cũng được biết đến là loài động vật sạch sẽ và ngăn nắp. Chúng tự chải chuốt thường xuyên và thường sử dụng hộp vệ sinh mà không gặp vấn đề gì. Đây có thể là một lợi thế lớn cho những người không muốn đối mặt với sự bừa bộn và mùi hôi của chó.
Tất nhiên, việc nuôi mèo cũng có một số bất lợi. Mèo có thể đắt hơn chó và chúng có thể khó huấn luyện hơn. Mèo cũng có nhiều khả năng làm trầy xước đồ nội thất và các đồ gia dụng khác.
Cuối cùng, quyết định nuôi mèo hay nuôi chó là quyết định cá nhân. Không có câu trả lời đúng hay sai, và con vật cưng tốt nhất dành cho bạn sẽ phụ thuộc vào nhu cầu và sở thích cá nhân của bạn.
Dưới đây là bảng tóm tắt những khác biệt chính giữa mèo và chó:
đặc trưng | Con mèo | Chó |
---|---|---|
Sự độc lập | Độc lập hơn | Ít độc lập hơn |
Nhu cầu tập thể dục | Không cần phải đi bộ hoặc đưa ra ngoài | Cần phải đi bộ hoặc đưa ra ngoài |
Sạch sẽ | Tự làm sạch thường xuyên | Cần tắm thường xuyên |
Đào tạo | Có thể khó đào tạo | Dễ dàng hơn để đào tạo |
gãi | Có thể làm trầy xước đồ nội thất và các đồ gia dụng khác | Thường không làm trầy xước đồ nội thất |
Trị giá | Đắt hơn | Ít tốn kém hơn |
Lời nhắc: tại sao mèo lại tốt hơn chó rất nhiều? giải thích bằng một danh sách có dấu đầu dòng các lý do bao gồm các khía cạnh tài chính và sức khỏe tinh thần
Hạnh phúc về mặt cảm xúc:
Các khía cạnh tài chính:
Thử nghiệm sau đây là kết quả từ bài trình bày xuất sắc của AWS re:Invent: AWS re:Invent 2023 - Các biện pháp thực hành tốt nhất về kỹ thuật nhanh chóng dành cho LLM trên Amazon Bedrock (AIM377) . Tôi đã tìm thấy rất nhiều lời khuyên hữu ích từ phiên này, bao gồm cả phần tổng quan hay về lời nhắc Chuỗi tư duy, trong đó ý tưởng là bạn cung cấp thông tin về các bước được sử dụng để giải quyết vấn đề nhằm giúp công cụ GenAI giải quyết lời nhắc tốt hơn.
Bây giờ, ví dụ được đưa ra trong bài trình bày đó như sau:
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?
Trong bản trình bày, mô hình được sử dụng trả về không chính xác 27. Trong thử nghiệm của tôi, nó hoạt động chính xác, nhưng tôi hoàn toàn nhận thấy các vấn đề về toán học khi tôi xây dựng bản demo lời khuyên blackjack AI tổng quát của mình vào tháng 11 năm ngoái.
Như tôi đã nói, Gemini đã xử lý nó rất tốt: A: The answer is 9.
Nhưng trong Trình kiểm tra nhanh, tôi đã thử lời nhắc CoT được đề xuất:
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?
Và kết quả đã được cải thiện, cho thấy nó đi đến câu trả lời như thế nào:
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.
Sự khác biệt là khá đáng kể.
Nếu điều này có vẻ hữu ích với bạn, vui lòng lấy mã từ đây: https://github.com/cfjedimaster/ai-testingzone/tree/main/Prompt_tester . Như tôi đã đề cập, không khó để thêm callChatGPT
hoặc một số dịch vụ tương tự và sử dụng một dịch vụ khác. Nếu bạn làm thế, cho tôi biết!