Contexto de la DB para el LLM #31

Open
opened 2025-05-20 17:13:24 +02:00 by srhenry32 · 8 comments
srhenry32 commented 2025-05-20 17:13:24 +02:00 (Migrated from gitlab.com)

Yo como desarrollador necesito que se le enseñe al LLM algunos datos importantes de la base de datos, como enseñarle sinónimos para las tablas y cualquier otra información que necesite.

Yo como desarrollador necesito que se le enseñe al LLM algunos datos importantes de la base de datos, como enseñarle sinónimos para las tablas y cualquier otra información que necesite.
srhenry32 commented 2025-05-20 17:13:53 +02:00 (Migrated from gitlab.com)

changed title from Yo como desarrollador necesito que se le enseñe al LLM algunos datos importantes de la base de datos, como enseñarle sinónimos para las tablas to Sinónimos de la DB para el LLM

<p>changed title from <code class="idiff"><span class="idiff left right deletion">Yo como desarrollador necesito que se le enseñe al LLM algunos datos importantes de la base de datos, como enseñarle sinónimos para las tablas</span></code> to <code class="idiff"><span class="idiff left right addition">Sinónimos de la DB para el LLM</span></code></p>
srhenry32 commented 2025-05-20 17:13:53 +02:00 (Migrated from gitlab.com)

changed the description

changed the description
srhenry32 commented 2025-05-20 17:19:12 +02:00 (Migrated from gitlab.com)

changed the description

changed the description
srhenry32 commented 2025-06-01 23:52:55 +02:00 (Migrated from gitlab.com)

changed title from Sinónimos de la DB para el LLM to Contexto de la DB para el LLM

<p>changed title from <code class="idiff"><span class="idiff left right deletion">Sinónimos</span> de la DB para el LLM</code> to <code class="idiff"><span class="idiff left right addition">Contexto</span> de la DB para el LLM</code></p>
srhenry32 commented 2025-06-01 23:55:58 +02:00 (Migrated from gitlab.com)

assigned to @srhenry32

assigned to @srhenry32
srhenry32 commented 2025-06-01 23:58:45 +02:00 (Migrated from gitlab.com)

Se agregó la librería sqlalchemy para conectarse directamente a la base de datos PostgreSQL y extraer dinámicamente los nombres de tablas y columnas mediante un método personalizado llamado get_schema_summary():

def get_schema_summary(self, limit_tables=10):
    """
    Extrae el esquema de la base de datos PostgreSQL de tablas que comienzan con 'gnuhealth_'.
    Devuelve un resumen textual como: tabla(columna1, columna2)
    """
    try:
        from sqlalchemy import create_engine, text

        # Conexión directa a la base de datos
        engine = create_engine("postgresql://admin:gnusolidario@localhost:5432/ghdemo44")
        with engine.connect() as connection:
            result = connection.execute(text("""
                SELECT table_name, column_name
                FROM information_schema.columns
                WHERE table_schema = 'public' AND table_name LIKE 'gnuhealth_%'
                ORDER BY table_name, ordinal_position
            """))

            tables = {}
            for row in result.fetchall():
                table = row[0]
                column = row[1]
                if table not in tables:
                    tables[table] = []
                tables[table].append(column)

        # Armar el texto final
        schema_lines = []
        for i, (table, columns) in enumerate(tables.items()):
            if i >= limit_tables:
                break
            schema_lines.append(f"{table}({', '.join(columns)})")

        return "\n".join(schema_lines)

    except Exception as e:
        print("Error extrayendo esquema:", e)
        return "No se pudo cargar el esquema."

Este método filtra las tablas relevantes (por ejemplo, las que comienzan con gnuhealth_) y construye un resumen textual de su estructura.

Finalmente mandamos este contexto en el prompt:

prompt = (
    f"/query {question}\n"
    "Generate ONLY the PostgreSQL SQL query in a SINGLE LINE, "
    "do NOT include markdown formatting (no triple backticks, no indentation), "
    "do NOT include any text explanation or comments, "
    "ALWAYS end the query with a semicolon (;).\n\n"
    f"Tables:\n{schema_context}"
)
Se agregó la librería **sqlalchemy** para conectarse directamente a la base de datos PostgreSQL y extraer dinámicamente los nombres de tablas y columnas mediante un método personalizado llamado get_schema_summary(): ```python def get_schema_summary(self, limit_tables=10): """ Extrae el esquema de la base de datos PostgreSQL de tablas que comienzan con 'gnuhealth_'. Devuelve un resumen textual como: tabla(columna1, columna2) """ try: from sqlalchemy import create_engine, text # Conexión directa a la base de datos engine = create_engine("postgresql://admin:gnusolidario@localhost:5432/ghdemo44") with engine.connect() as connection: result = connection.execute(text(""" SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name LIKE 'gnuhealth_%' ORDER BY table_name, ordinal_position """)) tables = {} for row in result.fetchall(): table = row[0] column = row[1] if table not in tables: tables[table] = [] tables[table].append(column) # Armar el texto final schema_lines = [] for i, (table, columns) in enumerate(tables.items()): if i >= limit_tables: break schema_lines.append(f"{table}({', '.join(columns)})") return "\n".join(schema_lines) except Exception as e: print("Error extrayendo esquema:", e) return "No se pudo cargar el esquema." ``` Este método filtra las tablas relevantes (por ejemplo, las que comienzan con **gnuhealth\_**) y construye un resumen textual de su estructura. Finalmente mandamos este contexto en el prompt: ```python prompt = ( f"/query {question}\n" "Generate ONLY the PostgreSQL SQL query in a SINGLE LINE, " "do NOT include markdown formatting (no triple backticks, no indentation), " "do NOT include any text explanation or comments, " "ALWAYS end the query with a semicolon (;).\n\n" f"Tables:\n{schema_context}" ) ```
srhenry32 commented 2025-06-09 20:59:56 +02:00 (Migrated from gitlab.com)

assigned to @DegoC-Diaz and unassigned @srhenry32

assigned to @DegoC-Diaz and unassigned @srhenry32
srhenry32 commented 2025-06-09 21:00:38 +02:00 (Migrated from gitlab.com)

La última función es un poco limitante, por lo que ahora se está creando una base de datos vectorial junto con documentación para enseñarle mejor la estructura.

La última función es un poco limitante, por lo que ahora se está creando una base de datos vectorial junto con documentación para enseñarle mejor la estructura.
Sign in to join this conversation.
No description provided.