Skip to content

Commit b8e5b59

Browse files
committed
Change spanish README to match english
1 parent 58a1ff5 commit b8e5b59

1 file changed

Lines changed: 122 additions & 73 deletions

File tree

spanish/README.md

Lines changed: 122 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,117 +1,166 @@
11
# Demos de Python con OpenAI
22

3-
Este repositorio contiene una colección de scripts en Python que demuestran cómo usar la API de OpenAI para generar completados de chat.
3+
Este repositorio contiene una colección de scripts en Python que demuestran cómo usar la API de OpenAI (y modelos compatibles) para generar completados de chat.
44

5-
## Librería OpenAI
5+
* [Ejemplos](#ejemplos)
6+
* [Completados de chat de OpenAI](#completados-de-chat-de-openai)
7+
* [Llamadas a funciones (Function calling)](#llamadas-a-funciones-function-calling)
8+
* [Generación aumentada con recuperación (RAG)](#generación-aumentada-con-recuperación-rag)
9+
* [Salidas estructuradas](#salidas-estructuradas)
10+
* [Configuración del entorno de Python](#configuración-del-entorno-de-python)
11+
* [Configurando las variables de entorno de OpenAI](#configurando-las-variables-de-entorno-de-openai)
12+
* [Usando modelos de GitHub](#usando-modelos-de-github)
13+
* [Usando Azure OpenAI](#usando-azure-openai)
14+
* [Usando OpenAI.com](#usando-openaicom)
15+
* [Usando modelos de Ollama](#usando-modelos-de-ollama)
16+
* [Recursos](#recursos)
617

7-
Estos scripts demuestran como usar la libreria de OpenAI. En orden creciente de complejidad, los scripts son:
18+
## Ejemplos
819

9-
1. [`chat.py`](./chat.py): Un script simple que demuestra cómo usar la API de OpenAI para generar completados de chat.
10-
2. [`chat_stream.py`](./chat_stream.py): Añade `stream=True` a la llamada de API para devolver un generador que transmite el completado mientras se está generando.
11-
3. [`chat_history.py`](./chat_history.py): Añade una interfaz de chat bidireccional usando `input()` que mantiene un registro de los mensajes anteriores y los envía con cada llamada de completado de chat.
12-
4. [`chat_history_stream.py`](./chat_history_stream.py): La misma idea, pero con `stream=True` habilitado.
20+
### Completados de chat de OpenAI
1321

14-
Además de estos scripts para demostrar características adicionales:
22+
Estos scripts usan el paquete `openai` de Python para demostrar cómo utilizar la API de Chat Completions. En orden creciente de complejidad:
1523

16-
* [`chat_safety.py`](./chat_safety.py): El script simple con manejo de excepciones para errores de filtro de Seguridad de Contenido de Azure AI.
17-
* [`chat_async.py`](./chat_async.py): Utiliza los clientes asíncronos para hacer llamadas asincrónicas, incluyendo un ejemplo de envío de múltiples solicitudes a la vez usando `asyncio.gather`.
24+
1. [`chat.py`](../chat.py): Script simple que muestra cómo generar un completado de chat.
25+
2. [`chat_stream.py`](../chat_stream.py): Añade `stream=True` para recibir el completado progresivamente.
26+
3. [`chat_history.py`](../chat_history.py): Añade un chat bidireccional que conserva el historial y lo reenvía en cada llamada.
27+
4. [`chat_history_stream.py`](../chat_history_stream.py): Igual que el anterior pero además con `stream=True`.
1828

19-
## Generación Aumentada con Recuperación (RAG)
29+
Scripts adicionales de características:
2030

21-
Estos scripts demuestran cómo usar la API de OpenAI para tareas de Generación Aumentada con Recuperación (RAG), donde el modelo recupera información relevante de una fuente y la utiliza para generar una respuesta.
31+
* [`chat_safety.py`](../chat_safety.py): Manejo de excepciones para filtros de seguridad de contenido (Azure AI Content Safety).
32+
* [`chat_async.py`](../chat_async.py): Uso de clientes asíncronos y envío concurrente de múltiples solicitudes con `asyncio.gather`.
2233

23-
Primero instala las dependencias de RAG:
34+
### Llamadas a funciones (Function calling)
35+
36+
Estos scripts muestran cómo usar la característica "tools" (function calling) de la API de Chat Completions. Permite que el modelo decida si invoca funciones definidas por el desarrollador y devolver argumentos estructurados en lugar (o antes) de una respuesta en lenguaje natural.
37+
38+
En todos los ejemplos se declara una lista de funciones en el parámetro `tools`. El modelo puede responder con `message.tool_calls` que contiene una o más llamadas. Cada llamada incluye el `name` de la función y una cadena JSON con `arguments` que respetan el esquema declarado. Tu aplicación debe: (1) detectar las llamadas, (2) ejecutar la lógica local/externa correspondiente y (3) (opcionalmente) enviar el resultado de la herramienta de vuelta al modelo para una respuesta final.
39+
40+
Scripts (en orden de capacidad):
41+
42+
1. [`function_calling_basic.py`](../function_calling_basic.py): Declara una sola función `lookup_weather` y muestra la llamada (si existe) o el contenido normal.
43+
2. [`function_calling_call.py`](../function_calling_call.py): Ejecuta `lookup_weather` si el modelo la solicita, parseando los argumentos JSON.
44+
3. [`function_calling_extended.py`](../function_calling_extended.py): Hace el ciclo completo: tras ejecutar la función, añade un mensaje de rol `tool` con el resultado y vuelve a consultar al modelo para incorporar los datos reales.
45+
4. [`function_calling_multiple.py`](../function_calling_multiple.py): Expone múltiples funciones (`lookup_weather`, `lookup_movies`) para observar cómo el modelo elige y cómo podrían devolverse múltiples llamadas.
46+
47+
Debe usarse un modelo que soporte function calling (por ejemplo, `gpt-4o`, `gpt-4o-mini`, etc.). Algunos modelos locales o antiguos no soportan `tools`.
48+
49+
### Generación aumentada con recuperación (RAG)
50+
51+
Scripts que muestran cómo realizar tareas de RAG, donde el modelo recupera información relevante y la utiliza para generar la respuesta.
52+
53+
Primero instala las dependencias específicas:
2454

2555
```bash
2656
python -m pip install -r requirements-rag.txt
2757
```
2858

29-
Luego ejecuta los scripts (en orden de complejidad creciente):
59+
Luego ejecuta (en orden de complejidad):
60+
61+
* [`rag_csv.py`](../rag_csv.py): Recupera filas coincidentes de un CSV y las usa para responder.
62+
* [`rag_multiturn.py`](../rag_multiturn.py): Igual, pero con chat multi‑turno y preservación de historial.
63+
* [`rag_queryrewrite.py`](../rag_queryrewrite.py): Añade reescritura de la consulta del usuario para mejorar la recuperación.
64+
* [`rag_documents_ingestion.py`](../rag_documents_ingestion.py): Ingeste de PDFs: convierte a Markdown (pymupdf), divide en fragmentos (LangChain), genera embeddings (OpenAI) y guarda en un JSON local.
65+
* [`rag_documents_flow.py`](../rag_documents_flow.py): Flujo RAG que consulta el JSON creado anteriormente.
66+
* [`rag_documents_hybrid.py`](../rag_documents_hybrid.py): Recuperación híbrida (vector + keywords), fusión con RRF y re‑ranking semántico con un modelo cross‑encoder.
3067

31-
* [`rag_csv.py`](./rag.py): Recupera resultados coincidentes de un archivo CSV y los utiliza para responder a la pregunta del usuario.
32-
* [`rag_multiturn.py`](./rag_multiturn.py): La misma idea, pero con una interfaz de chat bidireccional usando `input()` que mantiene un registro de mensajes anteriores y los envía con cada llamada de completado de chat.them with each chat completion call.
33-
* [`rag_queryrewrite.py`](./rag_queryrewrite.py): Añade un paso de reescritura de consulta al proceso RAG, donde la pregunta del usuario se reescribe para mejorar los resultados de recuperación.
34-
* [`rag_documents_ingestion.py`](./rag_ingestion.py): Ingesta PDFs usando pymupdf para convertirlos a markdown, luego usa Langchain para dividirlos en fragmentos, después usa OpenAI para incrustar los fragmentos, y finalmente los almacena en un archivo JSON local.
35-
* [`rag_documents_flow.py`](./rag_pdfs.py): Un flujo RAG que recupera resultados coincidentes del archivo JSON local creado por `rag_documents_ingestion.py`.
36-
* [`rag_documents_hybrid.py`](./rag_documents_hybrid.py): Un flujo RAG que implementa una recuperación híbrida con búsqueda vectorial y por palabras clave, fusionando con Reciprocal Rank Fusion (RRF), y reclasificación semántica con un modelo cross-encoder.
68+
### Salidas estructuradas
3769

38-
## Salidas estructuradas con OpenAI
70+
Estos scripts muestran cómo generar respuestas estructuradas usando modelos Pydantic:
3971

40-
Estos scripts muestran cómo usar la API de OpenAI para generar respuestas estructuradas usando modelos de datos con Pydantic:
72+
* [`structured_outputs_basic.py`](../structured_outputs_basic.py): Extrae información simple de un evento.
73+
* [`structured_outputs_description.py`](../structured_outputs_description.py): Añade descripciones en campos para guiar el formato.
74+
* [`structured_outputs_enum.py`](../structured_outputs_enum.py): Usa enumeraciones para restringir valores.
75+
* [`structured_outputs_function_calling.py`](../structured_outputs_function_calling.py): Usa funciones definidas con Pydantic para llamadas automáticas.
76+
* [`structured_outputs_nested.py`](../structured_outputs_nested.py): Modelos anidados para estructuras más complejas (por ejemplo, eventos con participantes detallados).
4177

42-
* [`structured_outputs_basic.py`](./structured_outputs_basic.py): Ejemplo básico que extrae información sencilla de un evento usando un modelo Pydantic.
43-
* [`structured_outputs_description.py`](./structured_outputs_description.py): Usa descripciones adicionales en los campos del modelo Pydantic para aclararle al modelo cómo formatear la respuesta.
44-
* [`structured_outputs_enum.py`](./structured_outputs_enum.py): Usa enumeraciones (Enums) para restringir los valores posibles en la respuesta estructurada.
45-
* [`structured_outputs_function_calling.py`](./structured_outputs_function_calling.py): Muestra cómo usar funciones definidas con Pydantic para que el modelo las llame automáticamente según la consulta del usuario.
46-
* [`structured_outputs_nested.py`](./structured_outputs_nested.py): Usa modelos anidados con Pydantic para manejar respuestas estructuradas más complejas, como eventos con participantes que tienen múltiples atributos.
78+
## Configuración del entorno de Python
4779

80+
Si abres el repositorio en un Dev Container o GitHub Codespaces, todo estará ya listo. Si no, sigue:
4881

82+
1. Crea y activa un entorno virtual de Python.
83+
2. Instala dependencias base:
4984

50-
## Configuración del entorno
85+
```bash
86+
python -m pip install -r requirements.txt
87+
```
5188

52-
Si abres esto en un Dev Container o GitHub Codespaces, todo estará configurado para ti.
53-
Si no, sigue estos pasos:
89+
## Configurando las variables de entorno de OpenAI
5490

55-
1. Configura un entorno virtual de Python y actívalo.
91+
Los scripts pueden ejecutarse con Azure OpenAI, OpenAI.com, Ollama (local) o GitHub Models, según lo que configures en el archivo `.env`. Existe un `.env.sample` como plantilla.
5692

57-
2. Instala las librerías requeridas:
93+
1. Copia la plantilla:
5894

5995
```bash
60-
python -m pip install -r requirements.txt
96+
cp .env.sample .env
6197
```
6298

63-
## Configurando las variables de entorno de OpenAI
99+
Luego ajusta según el proveedor elegido.
100+
101+
### Usando modelos de GitHub
102+
103+
En GitHub Codespaces el `GITHUB_TOKEN` ya está disponible y puedes usar gratis GitHub Models.
104+
105+
Para uso local crea un [PAT de GitHub](https://github.com/settings/tokens) (sin scopes especiales) y expórtalo:
64106

65-
Estos scripts pueden ejecutarse con una cuenta de Azure OpenAI, OpenAI.com, servidor local de Ollama o modelos de GitHub, dependiendo de las variables de entorno que configures.
107+
```bash
108+
export GITHUB_TOKEN=TU_TOKEN
109+
```
110+
111+
Opcional: cambia de modelo (por defecto `gpt-4o`) definiendo `GITHUB_MODEL` (por ejemplo `gpt-4o-mini`):
66112

67-
1. Copia el archivo `.env.sample` a un nuevo archivo llamado `.env`:
113+
```bash
114+
API_HOST=github
115+
GITHUB_MODEL=gpt-4o
116+
```
117+
118+
### Usando Azure OpenAI
119+
120+
Provisiona los recursos y despliegues (por ejemplo con Azure Developer CLI) de modelos como `gpt-4o` y un modelo de embeddings.
121+
122+
```bash
123+
API_HOST=azure
124+
AZURE_OPENAI_ENDPOINT=https://TU-SERVICIO.openai.azure.com/openai/v1
125+
AZURE_OPENAI_CHAT_DEPLOYMENT=TU-DEPLOYMENT-CHAT
126+
AZURE_OPENAI_VERSION=2024-03-01-preview
127+
```
68128

69-
```bash
70-
cp .env.sample .env
71-
```
129+
Inicia sesión si no lo has hecho:
72130

73-
2. Para Azure OpenAI, crea un deployment de Azure OpenAI gpt-3.5 o gpt-4 (quizás usando [este template](https://github.com/Azure-Samples/azure-openai-keyless)), and actualiza el `.env` con tu Azure OpenAI endpoint y deployment id.
131+
```bash
132+
az login
133+
```
74134

75-
```bash
76-
API_HOST=azure
77-
AZURE_OPENAI_ENDPOINT=https://YOUR-AZURE-OPENAI-SERVICE-NAME.openai.azure.com/openai/v1
78-
AZURE_OPENAI_CHAT_DEPLOYMENT=YOUR-AZURE-DEPLOYMENT-NAME
79-
AZURE_OPENAI_VERSION=2024-03-01-preview
80-
```
135+
### Usando OpenAI.com
81136

82-
Si aún no has iniciado sesión en la cuenta de Azure asociada con ese deployment, ejecuta este comando para iniciar sesión:
137+
Configura tu clave y modelo:
83138

84-
```shell
85-
az login
86-
```
87-
3. Para OpenAI.com, actualiza el archivo `.env` con tu clave API de OpenAI y el nombre del modelo deseado.
139+
```bash
140+
API_HOST=openai
141+
OPENAI_API_KEY=TU-CLAVE-OPENAI
142+
OPENAI_MODEL=gpt-4o-mini
143+
```
88144

89-
```bash
90-
API_HOST=openai
91-
OPENAI_KEY=TU-CLAVE-API-OPENAI
92-
OPENAI_MODEL=gpt-3.5-turbo
93-
```
145+
### Usando modelos de Ollama
94146

95-
4. Para Ollama, actualiza el archivo [.env](http://_vscodecontentref_/0) con tu endpoint de Ollama y nombre del modelo (cualquier modelo que hayas descargado).
147+
Instala [Ollama](https://ollama.com/) y descarga un modelo:
96148

97-
```bash
98-
API_HOST=ollama
99-
OLLAMA_ENDPOINT=http://localhost:11434/v1
100-
OLLAMA_MODEL=llama2
101-
```
149+
```bash
150+
ollama pull llama3.1
151+
```
102152

103-
Si estás ejecutando dentro del Dev Container, reemplaza `localhost` con `host.docker.internal`.
153+
Configura tu `.env`:
104154

105-
5. Para GitHub Models, actualiza el archivo [.env](http://_vscodecontentref_/1) con el nombre de tu GitHub Model.
155+
```bash
156+
API_HOST=ollama
157+
OLLAMA_ENDPOINT=http://localhost:11434/v1
158+
OLLAMA_MODEL=llama3.1
159+
```
106160

107-
```bash
108-
API_HOST=github
109-
GITHUB_MODEL=gpt-4o
110-
```
161+
Si ejecutas dentro de un Dev Container, reemplaza `localhost` por `host.docker.internal`.
111162

112-
Necesitarás una variable de entorno `GITHUB_TOKEN` que almacene un token de acceso personal de GitHub.
113-
Si estás ejecutando esto dentro de un GitHub Codespace, el token estará disponible automáticamente.
114-
Si no, genera un nuevo [token de acceso personal](https://github.com/settings/tokens) y ejecuta este comando para establecer la variable de entorno `GITHUB_TOKEN`:
163+
## Recursos
115164

116-
```shell
117-
export GITHUB_TOKEN="<aquí-va-tu-token-de-github>"
165+
* [Próxima serie octubre 2025: Python + IA](https://aka.ms/PythonIA/serie)
166+
* [Serie de videos: Aprende Python + IA](https://techcommunity.microsoft.com/blog/EducatorDeveloperBlog/learn-python--ai-from-our-video-series/4400393)

0 commit comments

Comments
 (0)