|
import os |
|
import pandas as pd |
|
import openai |
|
import re |
|
import json |
|
from langchain.chat_models import ChatOpenAI |
|
import regex |
|
import gradio as gr |
|
from langchain.schema import Document |
|
from langchain.text_splitter import RecursiveCharacterTextSplitter |
|
from langchain.embeddings.openai import OpenAIEmbeddings |
|
from openai.embeddings_utils import get_embedding |
|
from openai.embeddings_utils import cosine_similarity |
|
import gspread |
|
from oauth2client.service_account import ServiceAccountCredentials |
|
from datetime import datetime |
|
|
|
|
|
openai.api_key = os.getenv("OPENAI_API_KEY") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
df_Expediente = pd.read_csv( os.getenv( "Data" ) ) |
|
|
|
|
|
|
|
|
|
|
|
def get_embedding( text , model ): |
|
text = text.replace("\n", " ") |
|
return openai.Embedding.create( input = [text], model = model )['data'][0]['embedding'] |
|
|
|
|
|
|
|
def buscar( busqueda, datos, n_resultados): |
|
|
|
busqueda_embed = get_embedding( busqueda, "text-embedding-ada-002" ) |
|
|
|
datos['Similitud'] = datos['Embedding'].apply( lambda x: cosine_similarity( eval( x ) , busqueda_embed ) ) |
|
|
|
datos = datos.sort_values('Similitud', ascending = False ) |
|
|
|
return datos.iloc[:n_resultados][['Documento', 'Pagina', 'Textos', 'NumPalabras', 'Embedding', 'Similitud']] |
|
|
|
|
|
def Chat( user_message_1 ): |
|
|
|
df_final = buscar( user_message_1, df_Expediente, 20).reset_index( drop = True) |
|
|
|
Textos = df_final[ ['Documento', 'Pagina', 'Textos'] ] |
|
|
|
Textos_Concatenados = '\n\n\n'.join( Textos.apply( lambda row: ' | '.join( row ), axis = 1) ) |
|
|
|
|
|
|
|
return Textos_Concatenados |
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
|
gr.Markdown("App basada en servicios (Embeddings) de OpenAI (Chat GPT-3.5)") |
|
gr.Markdown("Este es un producto de prueba desarrollado por Games Econ") |
|
gr.Markdown("Contacto: ") |
|
gr.Markdown("Este es un information retrieval system o sistema de recuperaci贸n de informaci贸n.") |
|
gr.Markdown("Este tipo de herramientas son un proceso para obtener informaci贸n relevante \ |
|
para una necesidad de informaci贸n a partir de una colecci贸n de textos.") |
|
gr.Markdown("Las b煤squedas pueden basarse en un texto completo, una frase o una serie de conceptos.") |
|
gr.Markdown("No obstante, cuanto m谩s detallada sea la sentencia buscada, la recuperaci贸n de \ |
|
informaci贸n ser谩 m谩s precisa.") |
|
gr.Markdown("En alguna medida, los motores de b煤squeda web (como Google) son ejemplos de estos sistemas.") |
|
busqueda = gr.Textbox(label = "Escribe la pregunta, tema o enunciado.") |
|
greet_btn = gr.Button("Preguntar") |
|
|
|
output1 = gr.Textbox(label = "El Top 20 de los extractos de documentos que coinciden con la consulta son:") |
|
|
|
|
|
greet_btn.click(fn = Chat, inputs=[busqueda], outputs=[output1]) |
|
|
|
|
|
demo.launch( ) |
|
|
|
|
|
|