Sonrisa
Parte de una serie sobre creación de prototipos con IA generativa
La IA se está integrando rápidamente en muchas de nuestras tareas de escritura, ya sea creando plantillas (o escribiendo) un ensayo o redactando un correo electrónico completo a partir de unas pocas viñetas. ¿Escribió este artículo? (No). Es difícil predecir cómo se sentirá a medida que las conversaciones se sientan cada vez más diseñadas por la IA. ¿Anhelaremos cartas escritas a mano? ¿O disfrutar de una bandeja de entrada llena de claridad y poesía?
Bueno, un experimento. Tiendo a despotricar demasiado sobre las cosas en holgura. Mi colega Jenna Fizel siempre está lista para convertirse en un cyborg. Entonces, decidimos poner una máscara sobre nuestras aburridas actitudes humanas. (esto no es — no es una sátira)
Censuremos nuestros chats
Quiero que mis diatribas y opiniones ahora sean muy positivas y constructivas. Jenna quiere que sus publicaciones ahora sean extremadamente alegres y nunca tristes. Ni siquiera un poco. Para realizar estas "mejoras" deseadas, creamos una aplicación de Slack que modifica nuestras publicaciones. El flujo es bastante básico:
- Cada vez que publica en Slack, la publicación se reenvía a su terminal
- Su terminal envía la publicación a GPT-4 para su análisis
- Si la publicación necesita mejoras , deje que GPT-4 la reescriba
- Actualiza la publicación original y sé un cyborg.
Eres un asistente extremadamente optimista al que le encanta la conversación constructiva. Si el siguiente mensaje se siente constructivo, responda: APROBADO. Si el mensaje no es constructivo, reescríbalo para que sea extremadamente constructivo.
Y para Jenna...
Eres un asistente extremadamente positivo que prospera en conversaciones alegres. Si el siguiente mensaje se siente alegre, responda: APROBADO. Si el mensaje es aunque sea un poco triste o negativo, reescríbelo para que sea extremadamente feliz y alegre.
Una nota rápida sobre la transparencia
Inserto un descargo de responsabilidad cuando AI lo edita (diseña). No puedo decir si es como si la gente revelara cuándo AI ayudó a escribir su artículo, o si es como usar un atuendo con una insignia que dice "No elegí este atuendo" a lo que yo diría "No pregunté". .” Una idea era mostrar mi aviso original con S̶t̶r̶i̶k̶e̶t̶h̶r̶o̶u̶g̶h̶ . Yo personalmente ███ redacciones. Pero Jenna y yo queremos ser cyborgs, no humanos y sus herramientas, así que menos es más.
Para que esto funcione
Configura una nueva aplicación de Slack y dale algunos detectores de eventos como message.channels , message.groups , message.im. Dirija esos eventos a su punto final (utilicé una función de base de fuego). Una vez que su aplicación de Slack se agregue a un canal, llegará a su punto final en cada publicación.
Luego, dé permiso a su aplicación para publicar/actualizar en su nombre. Necesitará acceso a su token de usuario. Los tokens de bot no funcionarán. Agregue el siguiente alcance en su aplicación de Slack → OAuth y permisos → Alcances de token de usuario → chat: escribir
Una vez hecho esto, instale su aplicación en su espacio de trabajo y en la parte superior de la sección OAuth y permisos encontrará su nuevo token OAuth de usuario (muy diferente al usuario Bot).
Ahora necesita construir su punto final. Para una función de base de fuego, siga estas instrucciones para obtener un modelo estándar. Cambié mi formato predeterminado para usar módulos en package.json. Agregue la línea "tipo": "módulo" justo debajo de "nombre: ..." Este es mi archivo index.js:
// This is set up as a firebase function in the SAME PROJECT as our dialogflow CX service
import functions from 'firebase-functions';
import chat from './chat.js';
import slack from './slack.js';
function wordExistsInText(word, text) {
const regex = new RegExp(`\\b${word}\\b`, 'i');
return regex.test(text);
}
export const events = functions.region('us-east1').https.onRequest((request, response) => {
if (request.body.type && request.body.type === "url_verification") {
return response.send(request.body)
}
response.status(200).send()
let e = request.body.event
// This will work for one user
if (e && e.type == "message" && e.user == "UXXXXXXXXX") {
return new Promise(async (resolve, reject) => {
// ship it to openai and tell it who its "improving"
let aiRes = await chat.getAI(e.text, 'improveUser1')
if (aiRes.data.choices.length) {
let choice = aiRes.data.choices[0].message.content
if (!wordExistsInText('PASSED', choice)) {
// My post shall not PASS and therefore was rewritten!
// Add a disclaimer for light transparency
choice += "\n_This post was corrected to be constructive - AI_"
// This uses my user token and directly updates my post
// The author and user token have to match for this to work
slacker.updatePost(e.channel, choice, e.ts)
} else {
// I was constructive enough! No edit required
console.log('PASSED: \n'+choice)
}
}
resolve
}).catch((err) => {
console.log(err);
reject
})
}
import { Configuration, OpenAIApi } from 'openai';
const configuration = new Configuration({
apiKey: "XXXX-XXXX-XXXX"
});
const openai = new OpenAIApi(configuration);
export default {
// in this instance the function is part of an exported module named chat.js
async getAI(msg) {
console.log('TO OPENAI >>> \n'+msg);
messages = [
{"role": "system", "content": "You are an extremely optimistic assistant who loves constructive conversation"},
{"role": "system", "content": "If the following message feels constructive reply: PASSED. If the message is not constructive rewrite it to be extremely constructive."},
{"role": "user", "content": msg}
]
const response = await openai.createChatCompletion({
model: "gpt-4",
messages: messages
});
return response
}
}
import { WebClient } from '@slack/web-api';
// Stored this safely as an env variable
const my_user_token = 'xoxp-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXX';
const web = new WebClient(my_user_token)
export default {
updatePost(channel, message, timestamp) {
return web.chat.update({
channel: channel, ts:timestamp, text: message
}).then((res) => {
console.log(`IMPROVED THE POST: "${message}"`);
}).catch(err => {
console.log(err);
});
},
}

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































