paint-brush
Como usar IA generativa como seu assistente de conteúdopor@raymondcamden
1,428 leituras
1,428 leituras

Como usar IA generativa como seu assistente de conteúdo

por Raymond Camden9m2024/02/19
Read on Terminal Reader

Muito longo; Para ler

Na semana passada, tive a honra de apresentar um no TheJam.dev. Esta foi minha primeira apresentação sobre IA generativa e pude compartilhar o que considerei um caso de uso interessante - ajudando no processo de escrita. Agora, para ser claro, não me refiro a usar GenAI para escrever posts em blogs, seria uma ideia horrível. (IMO!) Em vez disso, observei como isso poderia ajudar em parte do processo. Deixe-me recuar um pouco e dar algumas informações básicas.
featured image - Como usar IA generativa como seu assistente de conteúdo
Raymond Camden HackerNoon profile picture

Na semana passada, tive a honra de apresentar um no TheJam.dev . Esta foi minha primeira apresentação sobre IA generativa e pude compartilhar o que considerei um caso de uso interessante - ajudando no processo de escrita.


Agora, para ser claro, não me refiro a usar GenAI para escrever posts em blogs, seria uma ideia horrível. (IMO!) Em vez disso, observei como isso poderia ajudar em parte do processo. Deixe-me recuar um pouco e dar algumas informações básicas.


Sou fã de John Birmingham há muitos anos. Ele é um autor que escreve no gênero militar/ficção científica/etc e tem algumas ideias bastante fascinantes. Eu inicialmente o descobri através de sua trilogia “Eixo do Tempo”, que tratava da ideia de uma frota naval internacional moderna sendo enviada de volta no tempo até 1942.


Agora, isso por si só é legal, porém, adorei que ele não tenha focado apenas no aspecto militar, mas tenha passado muito tempo falando sobre o choque cultural entre os “uptimers” (gente do futuro) e os contemporâneos.


Suponho que você poderia dizer que era um pouco como Tom Clancy, mas não apenas focado na ação. Eu praticamente recomendaria qualquer um de seus livros, e se você já o leu, deixe-me saber em um comentário abaixo.


Como seguidor de seu trabalho, me inscrevi em seu Patreon e tem sido muito interessante. Ele compartilha rascunhos de capítulos de trabalhos futuros, mas, mais importante, ele também fala bastante sobre seu processo. Como escritor, acho isso realmente fascinante.


Recentemente, ele falou sobre seu próprio uso do GenAI e discutiu como ele o está usando de uma perspectiva mais “estrutural”. Ou seja, como apresentar o motivo de um personagem no momento certo e como definir os pontos da trama. Este ainda é um trabalho 'criativo', mas mais... não sei. Gestão da obra?


Como eu disse, achei muito interessante e isso me fez pensar. Como eu poderia usar GenAI em meu blog como forma de ajudar no processo de escrita? Aqui está o que eu descobri.


Como um aparte rápido, tudo o que discuto abaixo faz uso da API Gemini e do Eleventy do Google, mas certamente seria útil em outro lugar.

Sugestão de títulos

A primeira demonstração que criei envolveu me ajudar a criar títulos para postagens de blog. Bem, normalmente não tenho dificuldade com isso, mas estava curioso para saber se a GenAI poderia sugerir alternativas para títulos melhores .


Comecei testando um prompt:

gemi

Dado o seguinte título para uma postagem de blog, compartilhe três sugestões que podem melhorar o título e direcionar tráfego para a postagem: “ALGUM TÍTULO”. Apresente sua resposta no formato JSON. A chave de nível superior do resultado JSON deve ser "sugestões" e cada sugestão deve usar a chave "título" para o título sugerido e "raciocínio" para o raciocínio.


Você notará que peço especificamente três sugestões e digo que quero ajudar a direcionar mais tráfego. Agora, vou ser honesto. Isso parece um pouco nojento e com spam. Não quero necessariamente títulos clickbait. Dito isto, queria ver outras ideias para meus títulos.


Esse prompt pareceu funcionar bem com alguns testes no AI Studio , então comecei a codificar. Peguei o código exportado pelo Google e escrevi um pouco de código para:


  • Deixe-me passar um nome de arquivo por meio da linha de comando.


  • Analise o assunto inicial para obter o título.


  • Em seguida, ligue para o endpoint GenAI.


Aqui está o script completo:


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


E como isso funciona? Esta postagem do blog é intitulada: "Usando IA generativa como seu assistente de conteúdo"

Aqui está o que Gêmeos sugeriu:


 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.


Sim... acho isso muito legal. No entanto, nada disso realmente parece “minha” voz aqui. Com certeza vejo algum mérito nas sugestões e isso me dá algo em que pensar, mas obviamente deixei o título original como está.

Escrevendo a descrição (resumo)

Para minha próxima demonstração, observei uma parte do meu processo de escrita que realmente não gosto, escrevendo o valor description de uma frase usado em meu texto inicial. Essa string acaba indo para minha tag <meta name="description"> e não é usada em nenhum outro lugar.


Achei que seria um excelente uso do recurso de resumo do GenAI. Comecei com um prompt assim:


Dada a postagem do blog a seguir, escreva um resumo de uma frase para usar como descrição


E então pensei em qual conteúdo eu enviaria. Minhas postagens de blog normalmente têm muitos exemplos de código, e imaginei que isso acabaria sendo um ruído. Então minha lógica se tornou:


  • Deixe-me passar um nome de arquivo por meio da linha de comando.


  • Analise o assunto inicial para obter o título (apenas para fins de saída).


  • Obtenha o conteúdo da postagem do blog.


  • 'Limpe.


  • Em seguida, ligue para o endpoint GenAI.


A maior parte disso é apenas uma versão modificada do primeiro exemplo, mas vamos dar uma olhada no aspecto da limpeza:


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


Todo o conteúdo da postagem do blog é passado, então removi o assunto inicial e os exemplos de código. Em seguida, substituí várias linhas em branco também. Aqui está o script completo:


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


E aqui está o que mostra uma postagem de alguns dias atrás, "Usando IA generativa para melhorar nomes de arquivos de imagens" :


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


Devo dizer que isso é muito preciso! E não estou tão preocupado com a ‘voz’ para isso. Fui em frente e usei-o para esta postagem (depois que terminei), e consegui (e usei) - isto:


Aprimore seu processo de criação de conteúdo utilizando IA generativa como seu assistente de redação virtual.

Assista o filme

Se isso lhe interessa, mas você adoraria me ver divagando enquanto olha para um LEGO Death Star, você pode assistir à apresentação abaixo:


Ambos os meus scripts mostrados acima estão em meu repositório e podem ser encontrados no diretório de scripts aqui: https://github.com/cfjedimaster/raymondcamden2023/tree/main/scripts

Deixe-me saber o que você pensa em um comentário abaixo!