O que caracteriza algo como Inteligência Artificial? [Parte 2]
O início
Há três meses eu publiquei um artigo aqui no tabnews falando sobre meu primeiro módulo npm, um classificador de palavras. Nesse artigo eu menciono uma dúvida que passei a ter em relação aos limites da IA e quando dizer que determinado algoritmo é uma IA. Criei essa publicação trazendo a questão à tona. Pouco tempo depois, achei ter encontrado a resposta, e comentei o seguinte:
[...] Depois de algumas pesquisas, pensei na definição de que o que caracteriza algo como IA é a capacidade de inferir conexões não previamente especificadas entre entrada e saída de dados. Pra mim é uma definição simples que pode servir tanto para coisas básicas como mais complexas.
Minha dúvida retorna
Hoje, brincando um pouco com o chat da OpenAI. Tive uma surpresa. Como essa IA entende o contexto da conversa muito bem, achei que ela fosse capaz se supor algo sobre mim, mas descobri que essa IA super inteligente não é capaz de dar palpites como uma criança faria.
A conversa
OBS.: O trecho da coversa foi copiado na íntegra e as únicas alterações feitas foram adiçoes de imagens e quebras de linha em markdown para melhorar a legibilidade no tabnews.
Eu: Crie um código em Javascript que receba uma quantidade indeterminada de objetos. Cada um deles pode ter várias propriedades, mais todos terão a propriedade id. O código deverá retornar um array com todos esses objetos ordenados com base em seu id
IA: Aqui está um exemplo de código em JavaScript que pode ser usado para receber uma quantidade indeterminada de objetos e retorná-los ordenados com base em sua propriedade id:
function ordenarPorId(...objetos) {
// Ordena os objetos pelo valor da propriedade id
objetos.sort((a, b) => a.id - b.id);
// Retorna o array de objetos ordenados
return objetos;
}
Para usar esse código, basta chamar a função ordenarPorId()
passando os objetos que deseja ordenar como argumentos. Por exemplo:
// Cria alguns objetos com propriedade id
const obj1 = {id: 3, nome: "Objeto 1"};
const obj2 = {id: 1, nome: "Objeto 2"};
const obj3 = {id: 2, nome: "Objeto 3"};
// Chama a função ordenarPorId() passando os objetos como argumentos
const objetosOrdenados = ordenarPorId(obj1, obj2, obj3);
// Imprime os objetos ordenados
console.log(objetosOrdenados);
// Output: [{id: 1, nome: "Objeto 2"}, {id: 2, nome: "Objeto 3"}, {id: 3, nome: "Objeto 1"}]
Esse código irá ordenar os objetos de acordo com o valor da propriedade id e retorná-los em um array.
Eu: Mude o nome da função criada para handleInputs
IA: Para alterar o nome da função criada anteriormente para handleInputs
, basta substituir o nome atual pela nova nomeação nas duas ocorrências na função. Aqui está como ficaria o código com a alteração:
function handleInputs(...objetos) {
// Ordena os objetos pelo valor da propriedade id
objetos.sort((a, b) => a.id - b.id);
// Retorna o array de objetos ordenados
return objetos;
}
Agora, ao chamar a função handleInputs()
passando os objetos que deseja ordenar como argumentos, o código irá retorná-los em um array ordenado com base em sua propriedade id.
Eu: Agora coloque função "handleInputs" dentro de uma rota "/handle" do framework express do javascript. O usuário deve fazer um post nessa rota e o Json enviado pelo usuário deve ser passado para a função "handleInputs". O a resposta da requisição deve ser o retorno dessa função.
IA: Para colocar a função handleInputs()
em uma rota do framework express do JavaScript, basta adicionar um manipulador de rotas ao seu código que execute a função quando uma requisição POST é feita nessa rota. Aqui está como ficaria o código completo:
const express = require("express");
const app = express();
const bodyParser = require("body-parser");
// Configura o body-parser para ler os dados da requisição
app.use(bodyParser.json());
// Função que ordena os objetos pelo valor da propriedade id
function handleInputs(...objetos) {
objetos.sort((a, b) => a.id - b.id);
return objetos;
}
// Rota para manipular as requisições POST
app.post("/handle", (req, res) => {
// Obtém os dados enviados pela requisição
const objetos = req.body;
// Chama a função handleInputs() passando os objetos
const objetosOrdenados = handleInputs(objetos);
// Envia a resposta com os objetos ordenados
res.json(objetosOrdenados);
});
// Inicia o servidor na porta 3000
app.listen(3000, () => console.log("Servidor iniciado na porta 3000"));
Nesse código, a função handleInputs()
é definida e, em seguida, é adicionado um manipulador de rotas para a rota /handle
. Quando uma requisição POST é feita nessa rota, os dados enviados pela requisição são lidos usando o body-parser
e passados como argumentos para a função handleInputs()
. Em seguida, a resposta é enviada de volta ao usuário contendo o array de objetos ordenados.
Para testar essa rota, você pode enviar uma requisição POST para http://localhost:3000/handle
com os dados que deseja ordenar no corpo da requisição. A resposta da requisição conterá o array de objetos ordenados com base em sua propriedade id.
Eu: Suponha a linguagem de programação com a qual eu trabalho
IA: Desculpe, eu sou um modelo de linguagem treinado pela OpenAI e não tenho conhecimento específico sobre as linguagens de programação que você trabalha. Como um modelo de linguagem, eu posso responder a perguntas sobre diversos tópicos, mas não tenho informações específicas sobre sua área de trabalho ou as linguagens de programação que você usa. Se você tiver alguma dúvida específica sobre uma linguagem de programação, posso tentar ajudá-lo a encontrar uma resposta, mas é possível que eu não seja capaz de fornecer informações detalhadas sobre sua área de trabalho.
Conclusão
Eu achava que IAs poderosas como essa, tivessem algum nível de imaginação, o que parece não ser verdade ainda. Ela não imaginou que minhas perguntas sobre JavaScript tivessem relação com o fato de eu trabalhar com ele. Além disso, respostas menos técnicas chegam a lembrar condicionais simples de if
e else
.
Mas isso não nega o fato dessa tecnologia ser simplesmente incrível! Depois de tudo eu ainda pedi para ela converter o código gerado para Rust e ela me respondeu tão rápido como se eu tivesse perguntado "Que horas são?" 😄.
OBS.: O trecho da coversa foi copiado na íntegra e as únicas alterações feitas foram adiçoes de imagens e quebras de linha em markdown para melhorar a legibilidade no tabnews.
Eu: Agora converta esse código para rust
IA: Aqui está como o código em JavaScript que coloca a função handleInputs() em uma rota do framework express pode ser convertido para o idioma Rust:
extern crate express;
extern crate body_parser;
extern crate serde;
#[macro_use]
extern crate serde_derive;
use express::prelude::*;
use body_parser::prelude::*;
#[derive(Deserialize)]
struct Objeto {
id: i32,
nome: String,
}
fn handle_inputs(objetos: Vec<Objeto>) -> Vec<Objeto> {
let mut objetos = objetos;
objetos.sort_by_key(|k| k.id);
objetos
}
fn main() {
let mut app = express::App::new();
app.use_middleware(bodyparser::json());
app.post("/handle", |req: Request, res: Response| {
let objetos: Vec<Objeto> = req.body().unwrap();
let objetos_ordenados = handle_inputs(objetos);
res.send(objetos_ordenados);
});
app.listen(3000, |_| println!("Servidor iniciado na porta 3000"));
}
Esse código é semelhante ao código em JavaScript, mas algumas alterações foram feitas para aproveitar as características e convenções do idioma Rust. Por exemplo, em vez de usar o operador spread para passar os objetos para a função handleInputs(), o código agora passa um vetor de objetos. Além
Fica a pergunta: Em que ponto um algoritmo passa a ser chamado de IA? Quem define o que é um algoritmo inteligente?