Primer commit
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"id": "5131a32a",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"import os\n",
|
||||
"\n",
|
||||
"# Añadir la carpeta padre al sys.path\n",
|
||||
"parent_dir = os.path.abspath(os.path.join(os.getcwd(), \"..\"))\n",
|
||||
"if parent_dir not in sys.path:\n",
|
||||
" sys.path.insert(0, parent_dir)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"id": "0ea2a77c",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from backend.ApiKeys.openai_apikey import OpenAICredencial\n",
|
||||
"from backend.ApiKeys.openai_apikey_mmr import OpenAICredencialRepo # Ajusta si está en otro módulo\n",
|
||||
"from backend.ConexionSql.Postgres_conexion import PostgresConexion\n",
|
||||
"\n",
|
||||
"# 1. Crear instancia de conexión (asegúrate de configurar bien tu conexión en Base_conexion)\n",
|
||||
"from entrypoint.init_db import db_credencial\n",
|
||||
"conexion_admin = PostgresConexion(db_credencial)\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"id": "b3bdf88a",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from sqlalchemy import text\n",
|
||||
"\n",
|
||||
"def crear_tabla_textos(conexion: PostgresConexion):\n",
|
||||
" sql = text(\"\"\"\n",
|
||||
" CREATE EXTENSION IF NOT EXISTS vector;\n",
|
||||
"\n",
|
||||
" CREATE TABLE IF NOT EXISTS textos (\n",
|
||||
" id SERIAL PRIMARY KEY,\n",
|
||||
" contenido TEXT NOT NULL,\n",
|
||||
" embedding VECTOR(384)\n",
|
||||
" );\n",
|
||||
" \n",
|
||||
" -- Crear índice opcional para mejorar la búsqueda por similitud\n",
|
||||
" CREATE INDEX IF NOT EXISTS idx_textos_embedding\n",
|
||||
" ON textos USING ivfflat (embedding vector_cosine_ops)\n",
|
||||
" WITH (lists = 100);\n",
|
||||
" \"\"\")\n",
|
||||
" with conexion.engine.begin() as conn:\n",
|
||||
" conn.execute(sql)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"id": "f2622707",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"e:\\Fitz_Studio\\.venv\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
|
||||
" from .autonotebook import tqdm as notebook_tqdm\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from sentence_transformers import SentenceTransformer\n",
|
||||
"\n",
|
||||
"modelo = SentenceTransformer(\"all-MiniLM-L6-v2\")\n",
|
||||
"\n",
|
||||
"def insertar_texto(conexion: PostgresConexion, texto: str):\n",
|
||||
" embedding = modelo.encode(texto).tolist()\n",
|
||||
" query = text(\"INSERT INTO textos (contenido, embedding) VALUES (:contenido, :embedding)\")\n",
|
||||
" \n",
|
||||
" with conexion.engine.begin() as conn:\n",
|
||||
" conn.execute(query, {\"contenido\": texto, \"embedding\": embedding})"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 20,
|
||||
"id": "20497f9f",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def buscar_similares(conexion: PostgresConexion, texto: str, k: int = 5):\n",
|
||||
" emb = modelo.encode(texto).tolist()\n",
|
||||
" sql = text(\"\"\"\n",
|
||||
" SELECT contenido, embedding <#> CAST(:embedding AS vector) AS distancia\n",
|
||||
" FROM textos\n",
|
||||
" ORDER BY embedding <#> CAST(:embedding AS vector)\n",
|
||||
" LIMIT :k\n",
|
||||
" \"\"\")\n",
|
||||
" with conexion.engine.connect() as conn:\n",
|
||||
" resultados = conn.execute(sql, {\"embedding\": emb, \"k\": k}).fetchall()\n",
|
||||
" for r in resultados:\n",
|
||||
" print(f\"Texto: {r.contenido} | Distancia coseno: {r.distancia:.4f}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"id": "281a9214",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"insertar_texto(conexion_admin, \"El cambio climático representa un reto urgente para la humanidad.\")\n",
|
||||
"insertar_texto(conexion_admin, \"Las criptomonedas están alterando el panorama financiero global.\")\n",
|
||||
"insertar_texto(conexion_admin, \"Los algoritmos de recomendación influyen en nuestras decisiones diarias.\")\n",
|
||||
"insertar_texto(conexion_admin, \"La automatización está reduciendo la necesidad de mano de obra humana.\")\n",
|
||||
"insertar_texto(conexion_admin, \"El aprendizaje profundo ha mejorado el reconocimiento de voz y de imágenes.\")\n",
|
||||
"insertar_texto(conexion_admin, \"La inflación está afectando el poder adquisitivo de los consumidores.\")\n",
|
||||
"insertar_texto(conexion_admin, \"Las energías renovables son clave para un futuro sostenible.\")\n",
|
||||
"insertar_texto(conexion_admin, \"Las redes sociales impactan en la salud mental de los adolescentes.\")\n",
|
||||
"insertar_texto(conexion_admin, \"El teletrabajo se ha consolidado como una nueva forma de empleo.\")\n",
|
||||
"insertar_texto(conexion_admin, \"Los coches autónomos podrían reducir drásticamente los accidentes de tráfico.\")\n",
|
||||
"insertar_texto(conexion_admin, \"La biotecnología está revolucionando el tratamiento de enfermedades genéticas.\")\n",
|
||||
"insertar_texto(conexion_admin, \"Los drones están siendo utilizados para entregas y vigilancia.\")\n",
|
||||
"insertar_texto(conexion_admin, \"Las decisiones económicas de la Reserva Federal impactan los mercados globales.\")\n",
|
||||
"insertar_texto(conexion_admin, \"El metaverso plantea nuevas oportunidades y desafíos para las empresas tecnológicas.\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 26,
|
||||
"id": "ddcf8f49",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Texto: Las criptomonedas están alterando el panorama financiero global. | Distancia coseno: -0.3589\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# # 1. Crear la tabla (solo una vez)\n",
|
||||
"# crear_tabla_textos(conexion_admin)\n",
|
||||
"\n",
|
||||
"# # 2. Insertar un texto\n",
|
||||
"# insertar_texto(conexion_admin, \"La inteligencia artificial está transformando los negocios.\")\n",
|
||||
"\n",
|
||||
"# 3. Buscar textos similares\n",
|
||||
"buscar_similares(conexion_admin, \"Dinero\", k=1)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": ".venv",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.11.11"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
Reference in New Issue
Block a user