app.py
Browse filesBúsqueda en Internet:
El sistema realiza una búsqueda de Google cuando el usuario escribe algo que contiene la palabra "buscar". Utiliza requests para hacer una petición HTTP a Google y BeautifulSoup para extraer los resultados de la página de búsqueda. Luego muestra los primeros 5 resultados.
Análisis de imágenes:
Si el usuario sube una imagen, se procesa usando PIL (Pillow). Aquí he hecho un análisis básico para devolver el tamaño de la imagen, pero puedes expandirlo para hacer análisis más complejos.
Interfaz de chat:
El chat muestra el input del usuario y la respuesta generada por la API de OpenAI cuando el usuario no solicita una búsqueda. La respuesta se genera a través del modelo GPT-3.5 de OpenAI.
Cargar claves de API:
Las claves de la API de OpenAI deben ser cargadas de manera segura desde un archivo .env.
@@ -1,28 +1,69 @@
|
|
1 |
import streamlit as st
|
2 |
import openai
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
-
#
|
5 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
# Título de la aplicación
|
8 |
-
st.title("Chat IA
|
9 |
|
10 |
# Input del usuario
|
11 |
user_input = st.text_input("Hazme una pregunta:")
|
12 |
|
13 |
-
#
|
|
|
|
|
|
|
14 |
if user_input:
|
15 |
-
|
16 |
-
with st.spinner("
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import streamlit as st
|
2 |
import openai
|
3 |
+
import requests
|
4 |
+
from bs4 import BeautifulSoup
|
5 |
+
from PIL import Image
|
6 |
+
from io import BytesIO
|
7 |
+
import os
|
8 |
+
from dotenv import load_dotenv
|
9 |
|
10 |
+
# Cargar la clave de la API desde un archivo .env
|
11 |
+
load_dotenv()
|
12 |
+
openai.api_key = os.getenv("OPENAI_API_KEY")
|
13 |
+
|
14 |
+
# Función para realizar búsquedas en Internet
|
15 |
+
def search_internet(query):
|
16 |
+
search_url = f"https://www.google.com/search?q={query}"
|
17 |
+
headers = {"User-Agent": "Mozilla/5.0"}
|
18 |
+
response = requests.get(search_url, headers=headers)
|
19 |
+
|
20 |
+
if response.status_code == 200:
|
21 |
+
soup = BeautifulSoup(response.text, "html.parser")
|
22 |
+
results = soup.find_all('div', class_='BVG0Nb')
|
23 |
+
search_results = [result.get_text() for result in results]
|
24 |
+
return "\n".join(search_results[:5]) # Retornar los primeros 5 resultados
|
25 |
+
else:
|
26 |
+
return "No pude obtener resultados de la búsqueda."
|
27 |
+
|
28 |
+
# Función para analizar imágenes
|
29 |
+
def analyze_image(image_file):
|
30 |
+
image = Image.open(image_file)
|
31 |
+
# Aquí puedes agregar más análisis o usar algún modelo para analizar la imagen.
|
32 |
+
return f"Imagen cargada: {image.size[0]}x{image.size[1]} px"
|
33 |
|
34 |
# Título de la aplicación
|
35 |
+
st.title("Chat IA con búsqueda y análisis de imágenes 🤖")
|
36 |
|
37 |
# Input del usuario
|
38 |
user_input = st.text_input("Hazme una pregunta:")
|
39 |
|
40 |
+
# Subir una imagen (si se desea analizar)
|
41 |
+
uploaded_image = st.file_uploader("Sube una imagen para análisis", type=["jpg", "png"])
|
42 |
+
|
43 |
+
# Procesar la respuesta
|
44 |
if user_input:
|
45 |
+
if "buscar" in user_input.lower(): # Si el usuario pide realizar una búsqueda
|
46 |
+
with st.spinner("Buscando en Internet... 🕵️♂️"):
|
47 |
+
search_results = search_internet(user_input)
|
48 |
+
st.success("¡Resultados listos! 😊")
|
49 |
+
st.write(search_results)
|
50 |
+
else: # Si es una pregunta que el modelo debe responder
|
51 |
+
try:
|
52 |
+
with st.spinner("Pensando... 🤔"):
|
53 |
+
response = openai.Completion.create(
|
54 |
+
model="gpt-3.5-turbo",
|
55 |
+
prompt=user_input,
|
56 |
+
max_tokens=150,
|
57 |
+
temperature=0.7
|
58 |
+
)
|
59 |
+
answer = response.choices[0].text.strip()
|
60 |
+
st.success("¡Respuesta lista! 😊")
|
61 |
+
st.write(answer)
|
62 |
+
except Exception as e:
|
63 |
+
st.error(f"Hubo un error: {e}")
|
64 |
+
|
65 |
+
# Si el usuario sube una imagen
|
66 |
+
if uploaded_image:
|
67 |
+
analysis_result = analyze_image(uploaded_image)
|
68 |
+
st.success("¡Imagen analizada! 😊")
|
69 |
+
st.write(analysis_result)
|