'Qualquer tecnologia suficientemente avançada é indistinguível da magia.' Arthur C. Clarke
De acordo com o relatório Rede Neural SBC post vimos uma rede de pesos de 1k treinada com amostras de 10k para aproximar a função seno. Neste post, usaremos pesos de 175G treinados com amostras de 450G que podem programar melhor do que o programador médio. O tamanho desses modelos é impressionante, mas na verdade ninguém sabe realmente como eles funcionam ou quais são suas limitações.
O GitHub Copilot é uma ferramenta de IA que acelera o desenvolvimento de software, permitindo que o programador faça muitas coisas que antes eram impossíveis. A princípio, parece semelhante ao uso do StackOverflow, um site onde os programadores enviam perguntas quando não sabem como fazer algo, mas o Copilot vai muito além, é capaz de sintetizar uma nova resposta para o nosso problema.
O Copilot está incluído em um Microsoft Visual Studio Code e sugere continuamente códigos em cinza que você pode aceitar pressionando o botão tab. Esse código sugerido pode ser definido aproximadamente como a correspondência “mais comum” entre sua consulta (seu código) e o conjunto de dados de treinamento (código GitHub).
Exemplo 1

Neste exemplo, definimos nossa função e sua docstring e solicitamos a conclusão do Copilot. Como vemos, a conclusão corresponde à docstring. A primeira intuição é que o Copilot atua como um mecanismo de pesquisa e simplesmente combina sua consulta com seu conjunto de dados de treinamento (150 GB de projetos de código aberto), mas não é assim que funciona.
Exemplo 2

Aqui criamos uma string aleatória/maluca que não pode estar no conjunto de treinamento. O resultado ainda parece ser a solução mais coerente que pode ser fornecida, neste caso: a soma dos parâmetros de entrada.
Exemplo 3

Neste exemplo, pedimos (em espanhol) para somar a área de interseção de dois círculos dados seu centro e raio. Copilot entende o texto em espanhol sem problemas e sugere o nome da função, os parâmetros e todo o corpo da função. Após uma breve revisão, parece que o código deve funcionar.
Exemplo 4

Agora criamos um texto hipotético de pergunta/resposta. Isso faz com que o Copilot corresponda a consulta a alguns exames que podem estar neste conjunto de dados de treinamento. Simplesmente pedimos a capital da Espanha e o Copilot gera a resposta correta.
Exemplo 5

No entanto, se perguntarmos sobre um país inexistente, o Copilot também dá sua melhor resposta que também parece “correta”.
Exemplo 6

Neste exemplo invertemos o processo, damos a resposta para tentar gerar a pergunta. O copiloto gera uma pergunta que não esperávamos. Esperávamos 'Qual é a capital da França?' e o Copilot perguntou 'Qual é o resultado do seguinte código?' mas ainda podemos entender uma sugestão correta.
Exemplo 7

Aqui forçamos o Copilot a perguntar o que queremos mudar para uma linguagem mais comum e adicionar a primeira letra. Porém, gera outra pergunta, desta vez completamente errada e que não tem relação com a resposta.
Em resumo, Copiloto:
- Constrói uma sugestão com base na solução mais comum.
- Geralmente está correto simplesmente se sua consulta fizer sentido.
- Geralmente está errado quando sua consulta parece um problema comum, mas não é, e na verdade tem um objetivo muito diferente.
Copilot usando bibliotecas de código aberto
Copilot foi treinado com projetos de código aberto. Inclui milhões de casos de uso de qualquer biblioteca de código aberto como numpy, opencv, qt… Isso torna o Copilot realmente útil porque ajuda o programador com a sugestão mais comum que geralmente é a melhor.
Exemplo 8

Neste exemplo, usamos o teste de unidade módulo python, e o Copilot sabe que o unittest.TestCase tem um método chamado assertEqual e também sabe disso foo (1, 2) deve ser 3.
Exemplo 9

Acima criamos um mais complexo Foo função (que assumimos que não pode estar nos dados de treinamento), para ver se o Copilot realmente entende o código. Depois de executar o código com 17 casos de teste, apenas 6 falharam, dando uma taxa de sucesso de 65%.
Pode não parecer muito, mas lembre-se que o Copilot não é um interpretador python, ele não executou a função para obter sua saída… O Copilot usou o que aprendeu durante o treinamento para converter nossa consulta na saída que possui sintaxe python perfeita e também funciona bem 65% do tempo.
Exemplo 10

Pode-se esperar que um longo texto de entrada faça com que o Copilot falhe, mas isso não acontece, quanto mais informações dermos, melhores respostas o copiloto pode gerar.
No exemplo acima, pedimos uma tarefa complexa, um programa completo que requer diferentes entendimentos para resolver, como: habilidades de programação em python, bibliotecas específicas do micropython e como usá-las corretamente até mesmo no entendimento de descrição de texto humano.
A dica completa é exibida na próxima célula. Observe que ele corresponde muito bem à descrição do programa. A classe do aplicativo faz sentido e até mesmo as bibliotecas micropython (PIN, UART, ADC, PIN.irq…) são usadas corretamente. Não é 100% perfeito, por exemplo neste caso temp_senor é um objeto ADC, que não tem temp_sensor.init() método, e outros pequenos erros podem ser gerados, mas toda a estrutura do programa está definitivamente correta e os pequenos erros podem ser corrigidos facilmente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | importar tempo importar máquina classe Solicitações: def __init__(eu): eu.botão = máquina.Alfinete(0máquina.pino.DENTRO) eu.sensor_de temperatura = máquina.ADC(máquina.Alfinete(1)) eu.UART = máquina.UART(1, 115200) eu.UART.iniciar(115200, pedaços=8, paridade=nenhum, parar=1) eu.Último evento = 0 eu.última_temp = 0 eu.última vez = 0 eu.botão.irq(gatilho=máquina.pino.IRQ_FALLING, manipulador=eu.botão_pressionado) eu.botão.irq(gatilho=máquina.pino.IRQ_RISING, manipulador=eu.botão_liberado) eu.sensor_de temperatura.iniciar() def botão_pressionado(eu, alfinete): eu.Último evento = 1 eu.última vez = tempo.ticks_ms() eu.UART.escreva(b'{},{},{}\n'.formato(eu.última vez, eu.Último evento, eu.última_temp)) def botão_liberado(eu, alfinete): eu.Último evento = 0 eu.última vez = tempo.ticks_ms() eu.UART.escreva(b'{},{},{}\n'.formato(eu.última vez, eu.Último evento, eu.última_temp)) def read_temp(eu): eu.última_temp = eu.sensor_de temperatura.read () eu.UART.escreva(b'{},{},{}\n'.formato(eu.última vez, eu.Último evento, eu.última_temp)) def corrida(eu): enquanto a Verdadeira: eu.tempo de leitura_temp ().dorme(0.1) |
Exemplo 11
Por fim, no exemplo abaixo usamos o Copilot para adicionar os comentários ao código anterior. Copiamos a classe duas vezes e adicionamos algum guia ao Copilot como “versão Docstring da classe acima”. O Copilot gera a classe e comentários para cada linha.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | # Versão docstring da classe acima classe Solicitações: """ Apresentação: Este é um aplicativo simples que lê o sensor de temperatura e envia os dados para o UART. Os dados são enviados no formato: tempo, evento, temperatura O tempo é o tempo em milissegundos desde o início do aplicativo. O evento é 1 se o botão for pressionado e 0 se o botão for liberado. A temperatura é a temperatura em graus Celsius. "" " def __init__(eu): # Cria um objeto de botão eu.botão = máquina.Alfinete(0máquina.pino.DENTRO) # Crie um objeto sensor de temperatura eu.sensor_de temperatura = máquina.ADC(máquina.Alfinete(1)) # Crie um objeto UART eu.UART = máquina.UART(1, 115200) # Inicializa o objeto UART eu.UART.iniciar(115200, pedaços=8, paridade=nenhum, parar=1) # Crie uma variável para armazenar o último evento eu.Último evento = 0 # Cria uma variável para armazenar a última temperatura eu.última_temp = 0 # Crie uma variável para armazenar a última vez eu.última vez = 0 # Registre o manipulador de eventos do botão pressionado eu.botão.irq(gatilho=máquina.pino.IRQ_FALLING, manipulador=eu.botão_pressionado) # Registre o manipulador de eventos de botão liberado eu.botão.irq(gatilho=máquina.pino.IRQ_RISING, manipulador=eu.botão_liberado) # Inicializar o sensor de temperatura eu.sensor_de temperatura.iniciar() def botão_pressionado(eu, alfinete): # Defina o último evento como 1 eu.Último evento = 1 # Defina a última hora para a hora atual eu.última vez = tempo.ticks_ms() # Envia a última hora, último evento e última temperatura para o UART eu.UART.escreva(b'{},{},{}\n'.formato(eu.última vez, eu.Último evento, eu.última_temp)) def botão_liberado(eu, alfinete): # Defina o último evento como 0 eu.Último evento = 0 # Defina a última hora para a hora atual eu.última vez = tempo.ticks_ms() # Envia a última hora, último evento e última temperatura para o UART eu.UART.escreva(b'{},{},{}\n'.formato(eu.última vez, eu.Último evento, eu.última_temp)) def read_temp(eu): # Defina a última temperatura para a temperatura atual eu.última_temp = eu.sensor_de temperatura.read () # Envia a última hora, último evento e última temperatura para o UART eu.UART.escreva(b'{},{},{}\n'.formato(eu.última vez, eu.Último evento, eu.última_temp)) def corrida(eu): enquanto a Verdadeira: # Leia a temperatura eu.leitura_temp() # Espera 0.1 segundos tempo.dorme(0.1) |