Executando verificação de segurança...
2

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.

conversa com chat da openAI

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?

Carregando publicação patrocinada...
3

Salve, @NathanFirmo!

A sua pergunta é muito boa, e ela dá pano pra manga fazem mais de 40 anos já. Você já ouviu falar do "Quarto chinês"?

A ideia dele é assim: imagina que vc está em um quarto, e que vc recebe cartas por um pequeno buraco pela porta. As cartas estão em chinês (ou em qualquer outra língua que vc não domine). No quarto, existem prateleiras com vários livros que te dão instruções exatas a seguir, dependendo dos símbolos que vc vê na carta. Daí, vc escreve novos símbolos em outro papel e envia pelo buraco na porta.

Pra uma pessoa que fala chinês do lado de fora do quarto, a impressão é que quem está dentro do quarto domina a língua. De certa forma, esse sistema até permite que quem esteja dentro do quarto passe pelo "Teste de Turing" (já viu o filme "O Jogo da Imitação"? - super recomendo!)

Este exemplo é importante para a Computação porque é exatamente isso que o processador faz: ele recebe sinais dos periféricos, checa instruções na memória, e envia sinais para os periféricos de volta. No exemplo do quarto chinês, o "programador" é aquele que escreve os livros com as instruções pra responder as cartas.

No caso das IAs, o que fazemos é criar um sisteminha que vai escrever os livros por si só, dandos milhares de "bons" e "maus" exemplos. As transformações que nos vemos hoje em dia mostram exatamente como esse conceito simples pode ser poderoso, mas alguns problemas também mostram que nós devemos ter cuidado pra não depender desses sistemas em situações de (literalmente) vida ou morte.

Depois de décadas de discussão, eu gostaria muito de dar uma resposta pra sua pergunta: "Quem define o que é um algoritmo inteligente?". Por mais potentes que os computadores sejam, eles ainda vão fazer exatamente o que está escrito nos livros, sem nenhum espírito crítico sobre as ações em si. Por outro lado, nós ainda nem sabemos como, nós, seres humanos, somos inteligentes (na maioria dos casos) e temos essa experiência consciente do mundo ao nosso redor.

O que nós podemos fazer no momento é gerar especificações do que é considerado satisfatório em cada aplicação, e classificar cada sistema baseado nessa escala de valor. Se um programa - IA ou não - atende aos nossos objetivos e melhora a vida de alguém, ele já contribui pra sociedade.

2

Muito legal!!! Não conhecia esses conceitos ainda e foram muito esclarecedores para mim. Seu comentário agregou muito valor ao post e contribui com a visão que passo a ter agora: independente do que chamemos ou não de "inteligente", nossa maior virtude enquanto humanos é nossa capacidade de pensar fora da caixa.

Ainda que haja uma discussão sobre os limites da imaginação (como a impossibilidade de imaginar uma nova cor, ou criar algo verdadeiramente novo), somos mestres em achar maneiras diferentes de usar o que temos ao nosso redor. Isso é uma das coisas mais incríveis em nós.