Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Comparador #233

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 16 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,51 +1,28 @@
# Natural ou Fake Natty? Como Vencer na Era das IAs Generativas

## 🚀 Introdução

> Woooow! Look at this 👀

Olá pessoal, Venilton da DIO aqui! Inspirado na hype _"Natty or Not"_ do fisiculturismo, este Lab da DIO te convida a conhecer o mundo das IAs Generativas, explorando o potencial dessas tendências tecnológicas incríveis!

## 🎯 Bora Pro Desafio!? Você Já Venceu 💪🤓

### Objetivos

1. **Explorar IAs Generativas**: Utilize essas tecnologias para criar conteúdos que sejam o mais realista possível. Seja criativo! Você pode produzir imagens, textos, áudios, vídeos ou combinações de tudo isso!
1. **Potfólio de Projetos**:
1. Faça o "fork" deste repositório, criando uma cópia em seu GitHub pessoal;
2. Edite seu README com os detalhes do seu projeto, siga nosso [Template](#template) (é só copiar, colar e preencher);
3. Submeta o link do seu repositório na plataforma da DIO. Pronto, você acabou de fortalecer seu portfólio de projetos nos perfis do GitHub e DIO 🚀
1. **Efeito de Rede**: Compartilhe seus resultados nas redes sociais com a hashtag **#LabDIONattyOrNot**. Não esqueça de nos marcar: [DIO](https://www.linkedin.com/school/dio-makethechange) e [falvojr](https://www.linkedin.com/in/falvojr).

### Template

```markdown
# Título do Projeto Extremamente Aesthetic ;)
# Avaliação de estabelecimentos

## 📒 Descrição
Breve descrição do seu projeto
Ferramenta que coleta as opiniões sobre um estabelecimento, e usa IA generativa para classificar e fazer um resumo geral.

## 🤖 Tecnologias Utilizadas
Liste as IAs Generativas e outras ferramentas usadas
API's Google

## 🧐 Processo de Criação
Descreva como você criou o conteúdo
API's OpenAI

## 🚀 Resultados
Apresente os resultados do seu projeto
## 🧐 Processo de Criação
Sempre que procuro avaliaçãos no maps ou ferramentas parecidas, não me agrada as opiniões que não condizem com a nota, exemplo "Ótimo lugar, adorei (nota 4)". Também acho confuso ficar lendo pontualmente as opiniões, parece que uma anula a outra, e se um lugar tem centenas de avaliações, como ler e levar em conta todas para formar minha opinião. Então pensei em usar a capacidade da IA para absorver essas informações, consolidá-las e emitir um resumo conciso.

## 💭 Reflexão (Opcional)
Comente sobre o desafio de criar algo 'natty' com IA.
```

### Exemplos e Insigths
## 🚀 Resultados
Gosto muito de pedalar, e usei o código para avaliar a bicicletaria que me atende:

- [E-BOOK](/exemplos/E-BOOK.md)
- [Podcast](/exemplos/PODCAST.md)
- [Vídeo (Avatar Virtual)](/exemplos/VIDEO.md)
Segue o resultado da IA:

## Links Interessantes
**Nome do Lugar:** XXXXXXXXX

[Base10: If You’re Not First, You’re Last: How AI Becomes Mission Critical](https://base10.vc/post/generative-ai-mission-critical/)
**Nota Média Geral:** 8.8

![Base10's Trend Map Generative AI](https://github.com/digitalinnovationone/lab-natty-or-not/assets/730492/f4df26e8-f8f7-4419-8252-c69d73ea930c)
**Resumo Geral:**
- Profissionalismo e atendimento atencioso são pontos fortes.
- Destaque para a qualidade do serviço e preços justos.
- Carlinhos é elogiado pela expertise e suporte além do esperado.
- Falta de menção a pontos negativos pode indicar uma tendência positiva geral.
265 changes: 265 additions & 0 deletions avaliador.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,265 @@
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"authorship_tag": "ABX9TyPkUBXWZvY9hyX9Id24/e5P",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/raphaelpavao/lab-natty-or-not/blob/main/avaliador.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"id": "LyCv1GHynFeG"
}
},
{
"cell_type": "markdown",
"source": [
"# IMPORTAÇÕES"
],
"metadata": {
"id": "gIt8__Z3ssvS"
}
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "cBdCtYKhmUzw"
},
"outputs": [],
"source": [
"import requests\n",
"import json\n",
"import openai"
]
},
{
"cell_type": "markdown",
"source": [
"# KEYS"
],
"metadata": {
"id": "2rMJAouRsw7f"
}
},
{
"cell_type": "code",
"source": [
"# Configurações da API Google\n",
"api_key = ''\n",
"# Configurações da API do OpenAI\n",
"openai.api_key = ''\n",
"\n"
],
"metadata": {
"id": "DmicwfIsmiFc"
},
"execution_count": 3,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"#COORDENADAS"
],
"metadata": {
"id": "xd7URju9M3g7"
}
},
{
"cell_type": "code",
"source": [
"#Coordenada geográfica, palavra chave e raio da busca\n",
"location = \"-22.87404025311588, -47.06161652833972\" # Coordenadas de exemplo (São Paulo)\n",
"keyword = \"bicicletaria\"\n",
"radius = 5000"
],
"metadata": {
"id": "IDD3fRkhM0WI"
},
"execution_count": 4,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"#CHAMADA DA API PLACE/NEARBY PARA BUSCAR OS LUGARES"
],
"metadata": {
"id": "_OfR4E-ptTSP"
}
},
{
"cell_type": "code",
"source": [
"url = f\"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location={location}&radius={radius}&keyword={keyword}&key={api_key}\"\n",
"response = requests.get(url)\n",
"\n",
"if response.status_code == 200:\n",
" data = response.json()\n",
"\n",
" if 'results' in data and len(data['results']) > 0:\n",
" opcoes = []\n",
" for i in range(min(3, len(data['results']))):\n",
" place_id = data['results'][i].get('place_id', 'N/A')\n",
" name = data['results'][i].get('name', 'N/A')\n",
" opcoes.append((place_id, name))\n",
"\n",
" opcao1 = opcoes[0] if len(opcoes) > 0 else (None, None)\n",
" opcao2 = opcoes[1] if len(opcoes) > 1 else (None, None)\n",
" opcao3 = opcoes[2] if len(opcoes) > 2 else (None, None)\n",
"\n",
" print(\"Digite o número da sua opção:\")\n",
" print(f\"Opção 1: {opcao1[1]}\")\n",
" print(f\"opção 2: {opcao2[1]}\")\n",
" print(f\"opção 3: {opcao3[1]}\")\n",
" else:\n",
" print(\"Nenhum lugar encontrado. Verifique os detalhes da pesquisa.\")\n",
"else:\n",
" print(f\"Erro na requisição: {response.status_code}\")\n"
],
"metadata": {
"id": "-3aZRX6aJUk5"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"#ESCOLHA DA OPÇÃO"
],
"metadata": {
"id": "EXmKMw_WGKyv"
}
},
{
"cell_type": "code",
"source": [
"opcao_escolhida = 2\n",
"if opcao_escolhida == 1:\n",
" opcao_selecionada = opcao1[1]\n",
" place_id = opcao1[0]\n",
" print(opcao_selecionada)\n",
" print(place_id)\n",
"\n",
"elif opcao_escolhida == 2:\n",
" opcao_selecionada = opcao2[1]\n",
" place_id = opcao2[0]\n",
" print(opcao_selecionada)\n",
" print(place_id)\n",
"\n",
"elif opcao_escolhida == 3:\n",
" opcao_selecionada = opcao3[1]\n",
" place_id = opcao3[0]\n",
" print(opcao_selecionada)\n",
" print(place_id)\n",
"\n",
"else:\n",
" print(\"Opção inválida.\")\n",
"\n",
"\n",
"\n"
],
"metadata": {
"id": "eTSxSerFRhb7"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"#BUSCA DAS AVALIAÇÕES COM A API PLACE/DETAILS"
],
"metadata": {
"id": "c7WZHaXOGNJC"
}
},
{
"cell_type": "code",
"source": [
"url = f\"https://maps.googleapis.com/maps/api/place/details/json?place_id={place_id}&fields=name,place_id,reviews&key={api_key}&language=pt\"\n",
"response = requests.get(url)\n",
"\n",
"if response.status_code == 200:\n",
" data = response.json()\n",
"\n",
" if 'result' in data and 'reviews' in data['result']:\n",
" reviews = data['result']['reviews']\n",
" print(f\"Nome do Lugar: {data['result']['name']}\")\n",
" avaliacoes=\"\"\n",
" for i, review in enumerate(reviews[:5]):\n",
" avaliacoes+= f\"*{i+1}:{review['text']}\"\n",
" print(avaliacoes)\n",
" else:\n",
" print(\"Nenhuma avaliação encontrada para este lugar.\")\n",
"else:\n",
" print(f\"Erro na requisição: {response.status_code}\")\n"
],
"metadata": {
"id": "CUkCOVYaWFSt"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"#CHAMADA DA API DA OPENAI PARA CLASSIFICAR"
],
"metadata": {
"id": "54VS7sc1G4mX"
}
},
{
"cell_type": "code",
"source": [
"\n",
"# Enviar o texto das avaliações para a API da OpenAI\n",
"response = openai.ChatCompletion.create(\n",
" model=\"gpt-3.5-turbo\",\n",
" messages=[\n",
" {\"role\": \"system\", \"content\": \"Você é um assistente que ajuda a avaliar textos de reviews de usuários.\"},\n",
" {\"role\": \"user\", \"content\": f\"Avalie as seguintes avaliações. Elas estão separadas por *. Para cada uma delas dê uma nota de 0 a 10 e forneça um resumo dos pontos positivos e negativos. Forneça a nota média e um resumo geral em bullet points.\\n\\n{avaliacoes}\"},\n",
" ],\n",
" max_tokens=500,\n",
" temperature=0.5,\n",
")\n",
"\n",
"\n",
"# Exibir a resposta da OpenAI\n",
"print(response['choices'][0]['message']['content'])\n",
"\n"
],
"metadata": {
"id": "JeCsvIwDyFQJ",
"collapsed": true
},
"execution_count": null,
"outputs": []
}
]
}
20 changes: 0 additions & 20 deletions exemplos/E-BOOK.md

This file was deleted.

20 changes: 0 additions & 20 deletions exemplos/PODCAST.md

This file was deleted.

20 changes: 0 additions & 20 deletions exemplos/VIDEO.md

This file was deleted.