paint-brush
Cách sử dụng AI sáng tạo làm trợ lý nội dung của bạntừ tác giả@raymondcamden
1,428 lượt đọc
1,428 lượt đọc

Cách sử dụng AI sáng tạo làm trợ lý nội dung của bạn

từ tác giả Raymond Camden9m2024/02/19
Read on Terminal Reader

dài quá đọc không nổi

Tuần trước, tôi có vinh dự được giới thiệu một sản phẩm tại TheJam.dev. Đây là bài thuyết trình đầu tiên của tôi về Generative AI và tôi phải chia sẻ điều mà tôi nghĩ là một trường hợp sử dụng thú vị - hỗ trợ quá trình viết. Bây giờ, để rõ ràng, ý tôi không phải là sử dụng GenAI để viết bài đăng trên blog, đó sẽ là một ý tưởng tồi. (IMO!) Thay vào đó, tôi xem xét nó có thể giúp ích như thế nào trong một số quy trình. Hãy để tôi sao lưu một chút và đưa ra một số thông tin cơ bản.
featured image - Cách sử dụng AI sáng tạo làm trợ lý nội dung của bạn
Raymond Camden HackerNoon profile picture

Tuần trước, tôi có vinh dự được giới thiệu một sản phẩm tại TheJam.dev . Đây là bài thuyết trình đầu tiên của tôi về Generative AI và tôi phải chia sẻ điều mà tôi nghĩ là một trường hợp sử dụng thú vị - hỗ trợ quá trình viết.


Bây giờ, để rõ ràng, ý tôi không phải là sử dụng GenAI để viết bài đăng trên blog, đó sẽ là một ý tưởng tồi. (IMO!) Thay vào đó, tôi xem xét nó có thể giúp ích như thế nào trong một số quy trình. Hãy để tôi sao lưu một chút và cung cấp một số thông tin cơ bản.


Tôi đã là fan của John Birmingham từ nhiều năm nay. Anh ấy là một tác giả viết về thể loại quân sự/khoa học viễn tưởng/v.v. và có một số ý tưởng khá hấp dẫn. Ban đầu tôi biết đến anh ấy qua bộ ba phim "Trục thời gian" đề cập đến ý tưởng về một hạm đội hải quân quốc tế hiện đại được đưa ngược thời gian về năm 1942.


Bây giờ, điều đó thật tuyệt, tuy nhiên, tôi thích việc anh ấy không chỉ tập trung vào khía cạnh quân sự mà còn dành nhiều thời gian để nói về cuộc xung đột văn hóa giữa những người "uptimers" (những người đến từ tương lai) và những người đương thời.


Tôi cho rằng bạn có thể nói nó hơi giống Tom Clancy nhưng không chỉ tập trung vào hành động. Tôi thực sự muốn giới thiệu bất kỳ cuốn sách nào của anh ấy và nếu bạn đã đọc anh ấy rồi, hãy cho tôi biết trong phần bình luận bên dưới.


Là một người theo dõi tác phẩm của anh ấy, tôi đã đăng ký Patreon của anh ấy và điều đó thực sự thú vị. Anh ấy chia sẻ bản thảo các chương của các tác phẩm sắp ra mắt, nhưng quan trọng hơn, anh ấy cũng nói khá nhiều về quá trình của mình. Với tư cách là một nhà văn, tôi thấy điều này thực sự hấp dẫn.


Gần đây, anh ấy đã nói về việc sử dụng GenAI của riêng mình và thảo luận về cách anh ấy sử dụng nó từ góc độ 'khuôn khổ' hơn. Tức là làm thế nào để đưa động cơ của nhân vật vào đúng thời điểm và cách thiết lập các điểm cốt truyện. Đây vẫn là công việc “sáng tạo”, nhưng hơn thế nữa… tôi không biết. Quản lý công việc?


Tuy nhiên, như tôi đã nói, tôi nghĩ nó thực sự thú vị và nó khiến tôi phải suy nghĩ. Làm cách nào tôi có thể sử dụng GenAI trên blog của mình như một cách để hỗ trợ quá trình viết? Đây là những gì tôi đã nghĩ ra.


Tóm lại, mọi thứ tôi thảo luận bên dưới đều sử dụng API GeminiEleventy của Google, nhưng chắc chắn sẽ hữu ích ở những nơi khác.

Đề xuất tiêu đề

Bản demo đầu tiên tôi xây dựng liên quan đến việc giúp tôi đặt tiêu đề cho các bài đăng trên blog. Bây giờ, tôi thường không gặp khó khăn với vấn đề này, nhưng tôi tò mò liệu GenAI có thể đề xuất các lựa chọn thay thế cho những tựa game tốt hơn hay không.


Tôi bắt đầu bằng cách thử nghiệm một lời nhắc:

ngọc quý

Đặt tiêu đề sau đây cho một bài đăng trên blog, hãy chia sẻ ba đề xuất có thể cải thiện tiêu đề và thu hút lưu lượng truy cập đến bài đăng: "MỘT TIÊU ĐỀ". Trình bày câu trả lời của bạn dưới dạng JSON. Khóa cấp cao nhất của kết quả JSON phải là "gợi ý" và mỗi đề xuất phải sử dụng khóa "tiêu đề" cho tiêu đề được đề xuất và "lý do" cho lý do.


Bạn sẽ nhận thấy rằng tôi đặc biệt yêu cầu ba đề xuất và nói rằng tôi muốn giúp tăng thêm lưu lượng truy cập. Bây giờ, tôi sẽ thành thật. Điều đó có vẻ hơi thô tục và spam. Tôi không nhất thiết muốn các tiêu đề có tính chất dụ nhấp chuột. Nói như vậy, tôi muốn xem một số ý tưởng khác cho tiêu đề của mình.


Lời nhắc đó dường như hoạt động tốt với một vài thử nghiệm trong AI Studio , vì vậy tôi đã chuyển sang viết mã. Tôi lấy mã Google đã xuất và sau đó viết một chút mã vào:


  • Hãy để tôi chuyển tên tệp qua dòng lệnh.


  • Phân tích vấn đề phía trước để có được tiêu đề.


  • Sau đó gọi điểm cuối GenAI.


Đây là toàn bộ kịch bản:


 #!/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('------------------------------------------------------------------------'); }); })();


Và làm như thế nào? Bài đăng trên blog này có tiêu đề: "Sử dụng AI sáng tạo làm Trợ lý nội dung của bạn"

Đây là những gì Song Tử gợi ý:


 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.


Vâng... tôi nghĩ điều đó khá tuyệt. Tuy nhiên, không ai trong số này thực sự có cảm giác giống giọng nói của "tôi" ở đây. Tôi hoàn toàn thấy những gợi ý đó có giá trị nào đó và nó mang lại cho tôi điều gì đó để suy nghĩ, nhưng rõ ràng là tôi vẫn giữ nguyên tiêu đề ban đầu.

Viết mô tả (Tóm tắt)

Đối với bản demo tiếp theo, tôi đã xem xét một phần trong quá trình viết của mình mà tôi thực sự không thích, đó là viết giá trị description một câu được sử dụng trong phần trước của tôi. Chuỗi này cuối cùng sẽ đi vào thẻ <meta name="description"> của tôi và không được sử dụng ở bất kỳ nơi nào khác.


Tôi nghĩ đây sẽ là một cách sử dụng tuyệt vời tính năng tóm tắt của GenAI. Tôi bắt đầu với một lời nhắc như vậy:


Với bài đăng blog sau đây, hãy viết một câu tóm tắt để sử dụng làm mô tả


Và sau đó nghĩ về nội dung tôi sẽ gửi. Các bài đăng trên blog của tôi thường có rất nhiều mẫu mã và tôi nghĩ rằng điều đó sẽ gây nhiễu. Vì vậy, logic của tôi đã trở thành:


  • Hãy để tôi chuyển tên tệp qua dòng lệnh.


  • Phân tích nội dung phía trước để lấy tiêu đề (chỉ nhằm mục đích đầu ra cho tôi).


  • Lấy nội dung của bài đăng trên blog.


  • 'Dọn dẹp' nó đi.


  • Sau đó, gọi điểm cuối GenAI.


Hầu hết đây chỉ là phiên bản sửa đổi của ví dụ đầu tiên, nhưng chúng ta hãy xem xét khía cạnh dọn dẹp:


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


Điều này được chuyển qua toàn bộ nội dung của bài đăng trên blog, vì vậy tôi đã xóa nội dung phía trước và mẫu mã. Sau đó tôi cũng thay thế nhiều dòng trống. Đây là toàn bộ kịch bản:


 #!/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); })();


Và đây là những gì nó hiển thị trong một bài đăng cách đây vài ngày, "Sử dụng AI sáng tạo để cải thiện tên tệp hình ảnh" :


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


Tôi phải nói rằng, đó là một điểm khá thú vị! Và tôi không quá lo lắng về 'giọng nói' cho điều đó. Tôi đã tiếp tục và sử dụng nó cho bài đăng này (sau khi tôi hoàn thành) và nhận được (và đã sử dụng) - cái này:


Nâng cao quá trình tạo nội dung của bạn bằng cách sử dụng AI tổng quát làm trợ lý viết ảo của bạn.

Xem phim

Nếu điều này làm bạn quan tâm nhưng lại muốn thấy tôi nói lan man khi nhìn vào LEGO Death Star, bạn có thể xem phần trình bày bên dưới:


Cả hai tập lệnh được hiển thị ở trên đều nằm trong kho lưu trữ của tôi và có thể được tìm thấy trong thư mục tập lệnh tại đây: https://github.com/cfjedimaster/raymondcamden2023/tree/main/scripts

Hãy cho tôi biết bạn nghĩ gì trong phần bình luận bên dưới!