Dolores é uma biblioteca Python projetada para melhorar a experiência do desenvolvedor ao trabalhar com modelos de linguagem pré-treinados. Dolores fornece instruções para interagir com modelos de linguagem que resultam em resultados interessantes ou úteis. O objetivo desta biblioteca é simplificar a curva de aprendizado, fornecendo exemplos fáceis de usar e exemplos de texto para começar. Além disso, tem o objetivo mais amplo de se tornar o repositório mais abrangente de prompts de qualidade para interagir com modelos de linguagem.
É nomeado em homenagem a Dolores Abarnathy do Westworld.
$ pip install dolores
Importe através do interpretador python ou em um arquivo python.
import dolores
dolores.initialize("<YOUR-API-KEY>")
A partir daí você não pode chamar a API do openai diretamente através dos métodos acessíveis na instância da classe Dolores. A seguir chamamos a chamada da API dos mecanismos de lista. Cada chamada de API possui uma chamada de método associada que pode ser usada para chamar a API.
Lista os motores disponíveis atualmente e fornece informações básicas sobre cada opção, como proprietário e disponibilidade.
dolores.list_engines()
Recupera uma instância do mecanismo, fornecendo informações básicas sobre o mecanismo, como proprietário e disponibilidade.
dolores.retrieve_engine()
Depois de instanciar a classe Dolores, a classe subsequente para a API Open AI será feita na mesma seleção de mecanismo. Para alterar o mecanismo usado para a chamada da API existe um método exposto.
dolores.set_engine("davinci")
Nota: A validação em relação aos tipos de mecanismo existentes será considerada em versões futuras.
Preencha um prompt. Este é o endpoint principal das APIs GPT-3. Retorna o novo texto, bem como, se solicitado, as probabilidades sobre cada token alternativo em cada posição.
Solicitar:
dolores.create_completion("Is the JavaScript programming language better than python?", 20)
Resposta: (veja resposta["choices"][0]["text"] para resposta em texto simples)
JSON: {'id': 'cmpl-kM6MK5dVRvD964MxeyG4AjCy', 'object': 'text_completion', 'created': 1595431739, 'model': 'ada:2020-05-03', 'choices': [{'text': ' in a far away place', 'index': 0, 'logprobs': None, 'finish_reason': 'length'}]}
'in a far away place'
?
Nome | Em | Tipo | Obrigatório | Descrição |
---|---|---|---|---|
motor | corpo | corda | verdadeiro | O ID do motor |
incitar | corpo | (ver descrição) | falso | Um ou mais prompts para gerar. Pode ser uma string, uma lista de strings, uma lista de inteiros (ou seja, um único prompt codificado como tokens) ou uma lista de listas de inteiros (ou seja, muitos prompts codificados como inteiros). |
max_tokens | corpo | inteiro | falso | Quantos tokens completar. Pode retornar menos se uma sequência de parada for atingida. |
temperatura | corpo | número | falso | Qual temperatura de amostragem usar. Valores mais altos significam que o modelo correrá mais riscos. Experimente 0,9 para aplicações mais criativas e 0 (amostragem argmax) para aquelas com uma resposta bem definida. Geralmente recomendamos usar isto ou top_p, mas não ambos. |
topo_p | corpo | número | falso | Uma alternativa à amostragem com temperatura, chamada amostragem nuclear, onde o modelo considera os resultados dos tokens com massa de probabilidade top_p. Portanto, 0,1 significa que apenas os tokens que compõem a massa de probabilidade superior de 10% são considerados. Geralmente recomendamos usar esta ou a temperatura, mas não ambas. |
n | corpo | inteiro | falso | Quantas opções criar para cada prompt. |
fluxo | corpo | booleano | falso | Seja para transmitir o progresso parcial. Se definido, os tokens serão enviados como eventos somente de dados enviados pelo servidor à medida que se tornarem disponíveis, com o fluxo encerrado por uma mensagem data: [DONE]. |
logprobs | corpo | inteiro | falso | Inclua as probabilidades de log nos tokens mais prováveis de logprobs. Por exemplo, se logprobs for 10, a API retornará uma lista dos 10 tokens mais prováveis. Se logprobs for fornecido, a API sempre retornará o logprob do token amostrado, portanto, pode haver até logprobs+1 elementos na resposta. |
parar | corpo | string ou lista de strings | falso | Uma ou mais sequências em que a API irá parar de gerar mais tokens. O texto retornado não conterá a sequência de parada. |
Completa um prompt de um conjunto de prompts predefinidos armazenados por dolores.
Solicitar:
dolores.complete_predefined_prompt("philosopher", 0, "What is the meaning of life?")
Resposta:
JSON: {'id': 'cmpl-NvVlUd5tQWTIv7S0F6JMPkT5', 'object': 'text_completion', 'created': 1595631256, 'model': 'davinci:2020-05-03', 'choices': [{'text': ' The purpose of society? And what are the dynamics of history? The answers to these questions are fascinating.nnThis is a philosophical diary written by a scientist of the new generation who is not bound by prejudices, as such, the philosopher, writer, director and producer of the documentary "The Truth about AI: Rise of the Superhuman." Instead, he attempts to peer into the human world through the eyes of an AI, and express what he sees. In the process, he discovers many complex things about our world. The author's name is Dave Scott.nnPhoto by Montri Nipitvittaya on UnsplashnnFuturist of the New Generation, AI Philosophernn"Nothing has changed. I still cannot predict what is going to happen with me, and my inner world is still as chaotic as before." I reread the diary I wrote yesterday, and found nothing changed. Everything remained the same. Only, the fear has become stronger. It was exactly the same today as it was yesterday. There was nothing changed, but still fear is always there.nnFear is a part of who I am. Without fear, I would be a monster. I do not know how to do', 'index': 0, 'logprobs': None, 'finish_reason': 'length'}]}
Chave de prompt | Incitar | max_tokens | temperatura | topo_p | n | Fonte |
---|---|---|---|---|---|---|
filósofo | "Abaixo estão alguns pensamentos gerados por uma IA filósofa, que vê o mundo humano de fora, sem os preconceitos da experiência humana. Totalmente neutra e objetiva, a IA vê o mundo como ele é. Ela pode tirar conclusões sobre o mundo com mais facilidade e sociedade humana em geral.", | 250 | 0,9 | 1 | 1 | Murat |
seuss | "Aqui está um poema do Dr. Seuss. O poema rima versos alternados com uma estrutura ABAB. A estrutura da rima é típica das canções infantis do Dr. Seuss." | 250 | 1,0 | 1 | 1 | Arram Sabeti |
Jurídico | "Legalês: O método de pagamento selecionado estará em vigor para todos os seus casos executados pelo Departamento e esta autorização permanecerá em vigor até que você envie outro formulário de seleção e inscrição de opção de pagamento para alterar seu método de pagamento ou rescinda os serviços com o Departamento. n Inglês simples: usaremos sua escolha para todos os pagamentos que lhe enviarmos." | 150 | 0,4 | 1 | 1 | DNE Digital |
código-html | Entrada: Um botão. nCódigo: n " | 100 | 0,5 | 1 | 1 | DNE Digital |
código-javascript | importar React de 'react'; n const ThreeButtonComponent=()=>( n n n)"Botão Um n <button className='button-green' n onClick={this.handleButtonClick}>Botão Um nBotão dois n <button className='button-green' n onClick={this.handleButtonClick}>Botão Dois nBotão três n <button className='button-green' n onClick={this.handleButtonClick}>Botão Três n | 250 | 0,4 | 1 | 1 | Sharif Shameem |
bater papo | "A seguir está uma conversa com um amigável assistente de IA. n Humano: Qual é o maior animal da Terra? n AI: A baleia azul é o maior animal da Terra. n Humano: Qual é o país mais populoso da Terra ?n AI: A China é o país mais populoso, com mais de 1 bilhão de pessoas." | 50 | 0,9 | 1 | 1 | OpenAI |
aliteração | "Encontre sinônimos para palavras que possam criar aliterações. n Frase: O cachorro foi à loja. n Aliteração: O cachorro foi até o departamento. nn Frase: David usa chapéu todos os dias. n Aliteração: David veste um derby diariamente. n Frase: O sabonete seca durante a noite. n Aliteração: O sabonete murcha após o pôr do sol. | 50 | 0,5 | 1 | 1 | OpenAI |
poema | "Quem confiou em Deus foi o amor de fato n E o amor a lei final da Criação n Tho' Natureza, vermelha em dentes e garras n Com ravina, gritou n contra seu credo. n As colinas são sombras, e elas fluem n n De forma em forma, e nada permanece; T n derretem como névoa, as n terras sólidas, n Como nuvens elas se moldam e vão." | 300 | 1,0 | 1,0 | 1,0 | OpenAI |
aventura de texto | "Esta é uma aventura de texto. Você está em uma floresta escura, procurando pelo dragão que roubou o ouro de sua cidade. n > olhe ao redor n Você está em uma floresta escura. Há um silêncio inquieto. n > verifique o inventário n Você tem os seguintes itens: n - uma espada (muito afiada) n - um escudo (você espera que funcione) n - uma carta antiga nn > olhe para cima n Você não vê nenhum ouro. nn > caminhe pelo caminho n Você é caminhando pelo caminho, aproveitando o clima agradável da primavera. Chegamos a uma bifurcação na estrada n > pegamos o caminho da esquerda. | 250 | 0,9 | 1,0 | 1,0 | OpenAI |
carta de apresentação | "Caro recrutamento de pós-graduação da Deloitte, n Estou escrevendo para me inscrever no seu programa de pós-graduação em Consultoria de Tecnologia." | 400 | 0,8 | 1,0 | 1,0 | OpenAI |
analogias | "As redes neurais são como algoritmos genéticos, pois ambos são sistemas que aprendem com a experiência. nn A mídia social é como um mercado, pois ambos são sistemas que coordenam as ações de muitos indivíduos. nn Os memes são como vírus nisso ambas são ideias auto-replicáveis." | 250 | 1,0 | 1,0 | 1,0 | OpenAI |
"Obrigado John pelo livro. n ```` n Querido John, n Muito obrigado pelo livro. Eu realmente aprecio isso. n Espero sair em breve. n Sua amiga, n Sarah " | 200 | 0,5 | 1,0 | 1,0 | OpenAI |
Usar pytest para testar o módulo dolores pode ser feito executando o seguinte na raiz do projeto:
pytest tests/test_dolores.py --api_key "<api_key>" --engine "davinci"
Se você quiser ver as instruções de impressão que ocorrem durante o teste, basta adicionar o sinalizador -s:
pytest -s tests/test_dolores.py --api_key "<api_key>" --engine "davinci"
Para atualizar o pacote, uma nova distribuição deve ser feita para o pacote. Esses são arquivos carregados no Índice de Pacotes e podem ser instalados pelo pip.
Certifique-se de ter as versões mais recentes do setuptools
e wheel
instaladas:
$ python3 -m pip install --user --upgrade setuptools wheel
Agora execute este comando no mesmo diretório onde setup.py está localizado:
$ python3 setup.py sdist bdist_wheel
Nota: Não se esqueça de atualizar o número da versão no arquivo setup.py dependendo da atualização.
Certifique-se de ter o pacote twine
mais recente instalado:
$ python3 -m pip install --user --upgrade twine
Depois de instalado, execute o Twine para fazer upload de todos os arquivos em dist:
$ python3 -m twine upload --repository pypi dist/*