Tamanho de fonte
Alto contraste
Altura de linha

OpenAI API: como utilizar a principal API para IA em Python

Avatar de Adriano Soares Adriano Soares
20 minutos de leitura 3 meses atrás

A OpenAI é a maior empresa do mundo no campo da inteligência artificial hoje. O modelo ChatGPT veio para revolucionar a forma como interagimos com a informação em larga escala, e o Brasil já é o 4º país do mundo que mais utiliza essa ferramenta. No entanto, muitos desconhecem que, ao utilizar apenas a interface do ChatGPT, deixam de explorar todo o potencial da OpenAI, que oferece diversos outros modelos além do GPT. Para acessar todo o poder dos modelos criados pela OpenAI diretamente, a empresa desenvolveu a OpenAI API: a API mais popular no contexto de desenvolvimento de aplicações com inteligência artificial (IA).

Neste artigo, abordaremos as principais funcionalidades da OpenAI API, incluindo geração de texto, transcrição de áudio, geração de áudio e criação de imagens. Vamos compreender como a OpenAI API funciona, explicar sua importância, mostrar por que você deve utilizá-la e apresentar os principais modelos disponíveis. Este conteúdo é bem completo e a ideia é justamente mostrar um âmbito geral da API, ressaltando suas capacidades impressionantes e como você pode integrá-las em seus projetos.

O que é a OpenAI API?

A OpenAI API é uma interface que permite aos desenvolvedores acessar os poderosos modelos de IA da OpenAI, como o ChatGPT, DALL-E, GPT-4-Vision e Whisper. Com essa API, você pode integrar funcionalidades avançadas de IA em suas aplicações sem precisar treinar algoritmos complexos. A OpenAI API democratiza o acesso a tecnologias de ponta, permitindo que mesmo desenvolvedores iniciantes criem soluções inovadoras.

A importância da OpenAI

A OpenAI é uma das maiores desenvolvedoras de ferramentas de inteligência artificial do mundo. Fundada com a missão de garantir que a IA beneficie toda a humanidade, a OpenAI tem se destacado por criar modelos de linguagem avançados que revolucionam a forma como interagimos com a tecnologia. Entre seus produtos mais conhecidos está o ChatGPT, um modelo de linguagem que simula conversas humanas de maneira impressionante.

Por que utilizar a API da OpenAI?

A OpenAI API permite que desenvolvedores integrem funcionalidades avançadas de IA em seus próprios aplicativos de maneira simples e eficiente. Com a API, você pode enviar um texto e receber uma resposta gerada pelo modelo, realizar traduções, criar imagens a partir de descrições textuais e até transcrever áudios. Tudo isso sem a necessidade de construir e treinar seus próprios modelos, o que exigiria recursos computacionais significativos e expertise especializada.

Vantagens de usar a OpenAI API:

  1. Facilidade de integração: mesmo com conhecimentos básicos de programação, você pode integrar a API em seus projetos.
  2. Economia de recursos: não é necessário investir em infraestrutura pesada para treinar modelos de IA.
  3. Acesso a modelos avançados: utilize os modelos mais avançados do mercado, como o GPT-4 e o DALL-E, sem complicações.
  4. Flexibilidade: a API pode ser usada para uma ampla gama de aplicações, desde geração de texto até criação de imagens e transcrição de áudios.

Quais modelos estão disponíveis na API da OpenAI?

A OpenAI oferece uma variedade de modelos por meio de sua API, cada um com funcionalidades específicas que podem ser aplicadas em diferentes contextos. Vamos conhecer alguns dos principais:

GPT-4

O GPT-4 é um modelo de linguagem de grande escala (LLM) multimodal, capaz de aceitar entradas de texto ou imagem e produzir texto. Ele é altamente preciso e pode resolver problemas complexos com maior eficiência do que seus predecessores.

DALL-E

O DALL-E é um sistema de IA que cria imagens e arte realistas a partir de descrições textuais. A versão DALL-E 3, por exemplo, permite gerar novas imagens em tamanhos específicos com base em sugestões fornecidas.

TTS (Text-to-Speech)

O TTS transforma texto em fala com uma sonoridade natural, ideal para aplicações que necessitam de narração automática.

Whisper

O Whisper é um modelo de reconhecimento de fala de uso geral, treinado em um vasto conjunto de dados de áudio diversificado. Ele pode realizar reconhecimento de fala em múltiplos idiomas, além de tradução de fala e identificação de idioma.

Casos de uso comerciais da OpenAI API

A OpenAI API tem sido amplamente adotada em diversos setores, proporcionando soluções inovadoras e eficientes. Aqui estão alguns exemplos de como a API pode ser utilizada comercialmente:

Atendimento ao cliente

Empresas podem utilizar o Chatbots criados com a API para automatizar o atendimento ao cliente, respondendo a perguntas frequentes e resolvendo problemas comuns de maneira rápida e eficiente.

Criação de conteúdo

Jornalistas, blogueiros e profissionais de marketing podem usar a ChatGPT API para gerar ideias de conteúdo, escrever artigos e até mesmo criar posts em redes sociais.

Educação

Plataformas educacionais podem integrar a OpenAI API para oferecer tutoriais personalizados, responder a perguntas dos alunos e fornecer feedback instantâneo.

Saúde

Aplicações na área da saúde podem usar a API para transcrever consultas médicas, gerar relatórios e até mesmo auxiliar no diagnóstico de doenças através da análise de sintomas descritos pelos pacientes.

Desenvolvimento de software

Desenvolvedores podem utilizar a OpenAI API para criar assistentes de código, que ajudam a escrever e depurar código, aumentando a produtividade e reduzindo erros.

Primeiros passos para utilização da API

Agora que você já conhece a importância e as vantagens da OpenAI API, vamos explorar como começar a utilizá-la. Desde a criação de uma conta até a inicialização da biblioteca em Python, vamos guiá-lo por cada etapa necessária para integrar a OpenAI API em seus projetos.

Como criar uma conta na plataforma da OpenAI?

O primeiro passo para utilizar a OpenAI API é criar uma conta na plataforma da OpenAI. Siga os passos abaixo:

  1. Acesse o link de login na plataforma OpenAI.
  2. Preencha os campos solicitados com suas informações pessoais ou utilize sua conta do Google para facilitar o processo.
  3. Após a criação da conta, faça login e explore a plataforma.
Plataforma OpenAI

Como adicionar saldo à conta de OpenAI API?

Adicionar saldo na API da OpenAI é essencial para acessar todo o potencial dos modelos avançados de linguagem, como o GPT-4. Embora existam opções gratuitas, elas são limitadas em termos de requisições e funcionalidades. Com um investimento mínimo de 5 dólares, você pode utilizar a API sem restrições, aproveitando a capacidade computacional dos servidores da OpenAI. Isso não só permite a execução de tarefas complexas, mas também apoia o desenvolvimento contínuo de tecnologias de inteligência artificial.

  1. Faça login na sua conta da OpenAI.
  2. Acesse a página de billing clicando em Settings.
  3. Clique em “Add Payment details” e selecione “Individual” se estiver utilizando um cartão de pessoa física.
  4. Preencha as informações do seu cartão de crédito.
  5. Após adicionar as informações do cartão, clique em “Add to credit balance” e selecione o valor desejado. O valor mínimo é de U$5, aproximadamente R$25.
  6. Clique em “Continue” para adicionar saldo à sua conta.
Adicionando saldo a conta

Como criar uma API Key na OpenAI?

Uma API key é uma chave de acesso que permite identificar e autenticar o usuário que está fazendo uma requisição a uma API. Em outras palavras, ela funciona como uma senha que autoriza o uso de serviços específicos oferecidos pela API. Siga os passos abaixo para criar sua chave OpenAI:

  1. Acesse a página de API Keys após fazer login na sua conta.
  2. Clique em “Create new secret key”.
  3. Adicione um nome para identificar a chave e clique em “Create secret key”.
  4. A chave será exibida uma única vez. Certifique-se de copiá-la e armazená-la em um local seguro.
Criando api key n aopenai

Como inicializar corretamente a biblioteca em Python da OpenAI?

Agora que você tem sua API Key, vamos inicializar a biblioteca da OpenAI em Python. Siga os passos abaixo:

Instalando a biblioteca

Primeiro, instale a biblioteca da OpenAI utilizando o pip:

pip install openai

Adicionando a API Key as variáveis de ambiente

Certifique-se de ter sua API Key em mãos. Vamos utilizar a biblioteca python-dotenv para carregar a chave de um arquivo de varáiveis de ambiente chamado .env de forma segura.

  1. Crie um arquivo .env no diretório do seu projeto e adicione a seguinte linha:
OPENAI_API_KEY=XXXXXXXXXXXXXXXXXXXXX

Substitua XXXXXXXXXXXXXXXXXXXXX pela sua API Key.

  1. Instale a biblioteca python-dotenv:
pip install python-dotenv

Inicializando o cliente

Agora, vamos inicializar o cliente da OpenAI em Python:

import openai
from dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())

client = openai.Client()

Com isso, você está pronto para começar a utilizar a OpenAI API em seus projetos Python!

Como utilizar o ChatGPT para geração de textos via API?

Agora que você já configurou sua conta e inicializou a biblioteca em Python, vamos explorar como utilizar a OpenAI API para gerar textos com o ChatGPT. Este modelo é ideal para criar respostas automáticas, gerar conteúdo e muito mais.

Como montar uma lista de mensagens?

Para começar a utilizar a OpenAI API, o primeiro passo é entender como montar uma lista de mensagens. Essa lista é essencial para a comunicação com o modelo de linguagem, pois é através dela que enviamos nossas solicitações e recebemos as respostas.

Estrutura básica de uma mensagem

Uma mensagem é composta por dois elementos principais: o conteúdo da mensagem (content) e o papel de quem está enviando a mensagem (role). O papel pode ser system, user ou assistant.

  • system: define o comportamento do assistente.
  • user: representa as solicitações ou comentários do usuário.
  • assistant: representa as respostas do assistente.

Aqui está um exemplo de como montar uma lista de mensagens:

mensagens = [
    {'role': 'system', 'content': 'Você é um assistente prestativo.'},
    {'role': 'user', 'content': 'O que é uma maçã em até 5 palavras?'}
]

Como gerar textos com a API?

Agora que você já sabe como montar uma lista de mensagens, vamos aprender a gerar textos utilizando a OpenAI API. Para isso, utilizaremos o método chat.completions do client:

resposta = client.chat.completions.create(
    model='gpt-3.5-turbo',
    messages=mensagens,
    max_tokens=50,
    temperature=0.7,
)

mensagem_resp = resposta.choices[0].message.content
print(mensagem_resp)

Saída:

Fruta redonda e saborosa.

Você pode continuar a conversa adicionando novas mensagens à lista:

mensagens += [{'role': 'assistant', 'content': mensagem_resp}]
mensagens += [{'role': 'user', 'content': 'E qual a sua cor?'}]

resposta = client.chat.completions.create(
    model='gpt-3.5-turbo',
    messages=mensagens,
    max_tokens=50,
    temperature=0.7,
)

mensagem_resp = resposta.choices[0].message.content
print(mensagem_resp)

Saída:

Vermelha ou verde.

Como gerar uma stream de textos?

Uma das funcionalidades mais interessantes da OpenAI API é a capacidade de gerar uma stream de textos, similar à experiência de usar a interface do ChatGPT, onde a resposta é construída de maneira interativa.

Gerando uma stream de textos

Para gerar uma stream de textos, você pode usar o parâmetro stream na chamada da API. Aqui está um exemplo de como fazer isso:

import openai
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

client = openai.Client()

mensagens = [
    {'role': 'user', 'content': 'Crie uma história de dois parágrafos sobre uma viagem a Marte'}
]
resposta = client.chat.completions.create(
    model='gpt-3.5-turbo',
    messages=mensagens,
    max_tokens=1000,
    temperature=0.7,
    stream=True,
)

for stream_resp in resposta:
    texto = stream_resposta.choices[0].delta.content
    if texto:
        print(texto, end='')

Armazenando a resposta completa

Se você quiser armazenar a resposta completa, pode fazer da seguinte maneira:

resposta_completa = ''
for stream_resposta in resposta:
    texto = stream_resposta.choices[0].delta.content
    if texto:
        resposta_completa += texto
        print(texto, end='')

Como utilizar o Dall-E para criação de imagens via API?

Além de gerar textos, a OpenAI API também permite a criação de imagens a partir de descrições textuais usando o Dall-E. Vamos explorar como você pode utilizar essa funcionalidade.

Criando imagens com Dall-E

A OpenAI API oferece uma maneira simples e eficiente de gerar imagens a partir de descrições textuais usando o Dall-E. Para começar, você precisará de uma chave OpenAI (openai api key), que pode ser obtida ao se registrar no site da OpenAI. Com a chave em mãos, você estará pronto para explorar as funcionalidades do Dall-E.

Passo a passo para criar imagens

  1. Instalação das bibliotecas necessárias:
    Primeiro, você precisará instalar a biblioteca Pillow para manipulação de imagens. Use o seguinte comando:
pip install openai Pillow
  1. Código para gerar imagens:
    Agora, vamos ao código para gerar uma imagem. O exemplo abaixo mostra como criar uma imagem de um campo de pastagem com uma leve elevação ao fundo:
import requests

import openai
from PIL import Image
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

client = openai.Client()

prompt = 'Crie uma imagem de um campo de pastagem, amplo com uma leve elevação ao fundo.'

resposta = client.images.generate(
    model='dall-e-3',
    prompt=prompt,
    n=1,
    size='1024x1024'
)

image_url = resposta.data[0].url
img_data = requests.get(image_url).content
with open('campo_pastagem.jpg', 'wb') as f:
    f.write(img_data)

image = Image.open('campo_pastagem.jpg')
image.show()

Parâmetros importantes

  • model: o modelo utilizado, podendo ser dall-e-3 ou dall-e-2 .
  • prompt: a descrição textual da imagem que você deseja criar.
  • n: a quantidade de imagens a serem geradas.
  • size: o tamanho da imagem (ex.: 1024×1024).

Criando variações de imagens com Dall-E

Além de criar imagens do zero, a OpenAI API permite que você crie variações de imagens existentes. Isso é especialmente útil para explorar diferentes versões de uma mesma imagem.

O exemplo abaixo mostra como criar variações de uma imagem existente:

resposta = client.images.create_variation(
    image=open('caminho/para/sua/imagem.jpg', 'rb'),
    n=1,
    size='1024x1024'
)

image_url = resposta.data[0].url
img_data = requests.get(image_url).content
with open('variacao.jpg', 'wb') as f:
    f.write(img_data)

image = Image.open('variacao.jpg')
image.show()

Parâmetros importantes

  • image: o caminho para a imagem existente que você deseja variar.
  • n: a quantidade de variações a serem geradas.
  • size: o tamanho da imagem (ex.: 1024×1024).

Como utilizar o GPT-4-Vision para analisar imagens?

Agora que você já aprendeu a utilizar a OpenAI API para geração de textos e criação de imagens, é hora de explorar outra funcionalidade poderosa: a análise de imagens com o GPT-4-Vision. Este modelo híbrido não só gera texto, mas também interpreta imagens, respondendo perguntas sobre elas. Vamos aprender como utilizá-lo para analisar imagens da web e do seu computador.

Como analisarimagens da web?

Aqui está um exemplo de como você pode criar um script para analisar uma imagem da web utilizando o mesmo método chat.completions de geração de textos. Você pode acessar o link para visualizar a imagem analisada:

import openai
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

client = openai.Client()

comando = 'Descreva a imagem fornecida'
url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg'

resposta = client.chat.completions.create(
       model='gpt-4-vision-preview',
       messages=[       {
           'role': 'user',
           'content': [
               {'type': 'text', 'text': comando},
               {'type': 'image_url', 'image_url': {'url': url}}
           ]
       }
   ]
   )

print(resposta.choices[0].message.content)

Resultado

A resposta do modelo será algo como:

A imagem mostra uma paisagem natural serena composta por um céu azul claro com algumas nuvens esparsas. No primeiro plano,  uma passarela de madeira que se estende através de um campo de grama alta e verde, sugerindo que talvez seja uma área úmida ou um parque natural protegido. A passarela parece convidativa, guiando o olhar do espectador através da cena. A grama verde vibrante de ambos os lados da passarela contrasta com o azul do céu. Ao fundo, podem ser observadas árvores e arbustos baixos, indicando a presença de um ecossistema diversificado. A composição da imagem, a luz natural e a paleta de cores vivas criam uma atmosfera de tranquilidade e beleza natural.

Como analisar imagens do meu computador?

Agora que você já sabe como analisar imagens da web, vamos aprender a analisar imagens que estão no seu computador. O processo é um pouco diferente, pois precisamos converter a imagem para um formato que a API possa entender. Esta é a imagem que vamos analisar:

Imagem de células

Aqui está um exemplo de como você pode configurar seu script para analisar uma imagem do seu computador:

import base64

import openai
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

client = openai.Client()

def encode_image(caminho_imagem):
    with open(caminho_imagem, 'rb' ) as img:
        return base64.b64encode(img.read()).decode('utf-8')

caminho = 'arquivos/vision/celulas.jpg'
base_64_img = encode_image(caminho)

resposta = client.chat.completions.create(
    model='gpt-4-vision-preview',
    messages=[{
        'role': 'user',
        'content': [
            {'type': 'text', 'text': 'Quantas células aparecem na imagem?'},
            {'type': 'image_url', 'image_url': 
             {'url': f'data:image/jpg;base64,{base_64_img}'}}
        ]
    }],
    max_tokens=1000,
)

print(resposta.choices[0].message.content)
Testar

Resultado

A resposta do modelo será algo como:

Essa imagem mostra células que foram marcadas com um corante que destaca seus núcleos. Pela imagem, parece haver um total de nove núcleos, o que sugere nove células. No entanto, é importante notar que devido à resolução e ao plano de foco da imagem, algumas células podem não estar inteiramente visíveis ou podem estar sobrepostas, o que dificulta uma contagem precisa apenas com base nesta imagem estática.

Como utilizar o modelo Whisper para transcrição de áudios?

Com as funcionalidades de geração de texto e criação de imagens já exploradas, vamos agora estudar uma outra aplicação fascinante da OpenAI API: a transcrição de áudios com o modelo Whisper. Este modelo é capaz de transformar áudios em texto de forma eficiente e precisa, sendo uma ferramenta valiosa para diversas aplicações, desde a criação de legendas até a transcrição de entrevistas. Vamos descobrir como configurar e utilizar o Whisper para transcrever áudios em seus projetos.

O que é o modelo Whisper?

O Whisper é um modelo de reconhecimento de fala de uso geral, treinado em um vasto conjunto de dados de áudio diversificado. Ele é capaz de realizar reconhecimento de fala em múltiplos idiomas, além de tradução de fala e identificação de idioma. É uma ferramenta poderosa para quem deseja transcrever áudios de forma eficiente e precisa.

Transcrevendo áudios com o modelo Whisper

Agora que temos nossa chave OpenAI e a biblioteca instalada, vamos ao código para transcrever áudios utilizando o modelo Whisper.

Passo 1: criando o cliente

Como já vimos anteriormente, é necessário antes de tudo inicializar nosso cliente:

import openai
from dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())

client = openai.Client()

Passo 2: preparando o áudio

Certifique-se de que seu arquivo de áudio está no formato correto (por exemplo, .mp3). Vamos abrir o arquivo de áudio e prepará-lo para a transcrição:

audio = open('audio_asimov.mp3', 'rb')

Passo 3: realizando a transcrição

Utilize o modelo Whisper para transcrever o áudio. Aqui está um exemplo de como fazer isso:

transcricao = client.audio.transcriptions.create(
    model='whisper-1',
    file=audio
)
print(transcricao.text)

Melhorando a precisão com prompts

Para melhorar a precisão da transcrição, especialmente com nomes próprios ou termos específicos, podemos utilizar o parâmetro prompt:

transcricao = client.audio.transcriptions.create(
    model='whisper-1',
    file=audio,
    prompt='Essa é a transcrição de uma aula da Asimov Academy.\
          O professor se chama Rodrigo Soares Tadewald.'
)
print(transcricao.text)

Gerando legendas

Também é possível gerar a transcrição no formato de legendas, modificando o response_format para “srt”:

transcricao = client.audio.transcriptions.create(
    model='whisper-1',
    file=audio,
    prompt='Essa é a transcrição de uma aula da Asimov Academy.\
          O professor se chama Rodrigo Soares Tadewald.',
    response_format='srt'
)
print(transcricao)

Como utilizar o modelo TTS para criação de áudios?

Agora vamos explorar a criação de áudios a partir de textos com o modelo TTS (Text-to-Speech). Este modelo transforma texto em fala com uma sonoridade natural, sendo ideal para aplicações como assistentes virtuais, audiobooks e sistemas de atendimento ao cliente. Vamos aprender como configurar e utilizar o TTS para dar voz aos seus projetos.

O que é o modelo TTS?

O modelo TTS (Text-to-Speech) da OpenAI transforma texto em fala com uma sonoridade natural. É ideal para aplicações que necessitam de narração automática, como assistentes virtuais, audiobooks e sistemas de atendimento ao cliente.

Gerando áudios com o modelo TTS

Agora que já temos nossa chave de API e a biblioteca instalada, vamos ao que interessa: gerar áudios a partir de textos.

Passo a passo para criar áudios

  1. Inicialize o cliente:
import openai
from dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())

client = openai.Client()
  1. Defina o texto que será transformado em áudio:
texto = '''
Python é uma linguagem de programação de alto nível, interpretada de script, imperativa, orientada a objetos, 
funcional, de tipagem dinâmica e forte. Foi lançada por Guido van Rossum em 1991. Atualmente, possui um modelo 
de desenvolvimento comunitário, aberto e gerenciado pela organização sem fins lucrativos Python Software Foundation.
'''
  1. Gere o áudio utilizando o modelo TTS:
resposta = client.audio.speech.create(
     model='tts-1',
     input=texto,
     voice='onyx'
)
  1. Salve o áudio gerado em um arquivo:
resposta.write_to_file(arquivo)

Parâmetros do método audio.create

  • model: o modelo utilizado. Exemplos: “tts-1”, “tts-1-hd”.
  • input: o texto que será transformado em fala.
  • voice: o estilo da voz que será usado. Exemplos: “alloy”, “echo”, “fable”, “onyx”, “nova”, “shimmer”.

Conclusão

Neste artigo, exploramos como utilizar a OpenAI API para integrar funcionalidades avançadas de IA em seus projetos Python. Desde a criação de uma conta na OpenAI, configuração da API Key, até a utilização de modelos como ChatGPT, Dall-E, GPT-4-Vision, Whisper e TTS, cobrimos os principais passos e exemplos práticos para você começar a usar essas poderosas ferramentas.

A OpenAI API democratiza o acesso a tecnologias de ponta, permitindo que mesmo desenvolvedores iniciantes criem soluções inovadoras e eficientes. Se você está apenas começando no mundo da IA, explorar a OpenAI API é um excelente ponto de partida para expandir suas habilidades e criar aplicações incríveis.

Esperamos que este guia tenha sido útil para você. Se você quiser se aprofundar no conteúdo de criação de sistemas com Python e inteligência artificial, sugerimos que conheçam nossa Trilha de Aplicações de IA com Python. Nela, abordamos com muito mais profundidade a API da OpenAI, em mais de 5 horas de conteúdo em vídeo. Além de explorarmos diversos conceitos fundamentais para a criação de aplicações poderosas, como utilização da plataforma Hugging Face, desenvolvimento com o framework LangChain, construção de agents autônomos e muito mais.

Agradeço a atenção e até a próxima!

Imagem de um notebook

Cursos de programação gratuitos com certificado

Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:

  • Conteúdos gratuitos
  • Projetos práticos
  • Certificados
  • +20 mil alunos e comunidade exclusiva
  • Materiais didáticos e download de código
Inicie agora

Comentários

Comentar
Faça parte da discussão Crie sua conta gratuita e compartilhe
sua opinião nos comentários
Entre para a Asimov