Merge branch 'microsoft:main' into main

This commit is contained in:
Satheeshkumar Manoharan 2024-02-13 10:52:50 +05:30 committed by GitHub
commit e7e38adb17
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
41 changed files with 7865 additions and 61 deletions

View File

@ -1,45 +0,0 @@
name: Azure Static Web Apps CI/CD
on:
push:
branches:
- main
pull_request:
types: [opened, synchronize, reopened, closed]
branches:
- main
jobs:
build_and_deploy_job:
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
runs-on: ubuntu-latest
name: Build and Deploy Job
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build And Deploy
id: builddeploy
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for GitHub integrations (i.e. PR comments)
action: "upload"
###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
# For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
app_location: "/quiz-app" # App source code path
api_location: "" # Api source code path - optional
output_location: "dist" # Built app content directory - optional
###### End of Repository/Build Configurations ######
close_pull_request_job:
if: github.event_name == 'pull_request' && github.event.action == 'closed'
runs-on: ubuntu-latest
name: Close Pull Request Job
steps:
- name: Close Pull Request
id: closepullrequest
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
action: "close"

View File

@ -4,6 +4,10 @@ on:
issues:
types: [closed]
permissions:
contents: read
issues: write
jobs:
lock:
runs-on: ubuntu-latest

View File

@ -9,13 +9,14 @@ on:
schedule:
- cron: '35 8 * * *'
permissions:
issues: write
pull-requests: write
jobs:
stale:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v3

View File

@ -3,6 +3,9 @@ on:
# Trigger the workflow on new issue
issues:
types: [opened]
permissions:
contents: read
issues: write
jobs:
asses-issue:
runs-on: ubuntu-latest

View File

@ -3,6 +3,9 @@ on:
# Trigger the workflow on pull request
pull_request_target:
types: [opened]
permissions:
contents: read
pull-requests: write
jobs:
asses-pull-request:
runs-on: ubuntu-latest

View File

@ -0,0 +1,141 @@
# Comenzando con este curso
¡Estamos muy emocionados de que comiences este curso y ver con qué te inspiras para crear con la ayuda de la Inteligencia Artificial Generativa!
Para apoyarte, hemos creado esta página que describe los pasos de configuración, los requisitos técnicos y cómo obtener ayuda cuando la necesites.
## Pasos de configuración
Para comenzar este curso, deberás completar los siguientes pasos.
### 1. Fork (Bifurca) este repo
[Fork (Bifurca) todo el repositorio](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst) A tu propia cuenta de GitHub para poder modificar cualquier código y completar los desafíos. También puedes [marcar con una estrella (🌟) este repositorio](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst) para encontrarlo más fácilmente.
### 2. Crea un espacio en codespace
Para evitar problemas de dependencias al ejecutar el código, recomendamos realizar este curso en un codespace de GitHub.
Esto se puede hacer seleccionando la opción `Code` en tu propia versión bifurcada (forked) de este repositorio y luego seleccionando la opción **Codespaces** .
### 3. Almacena tus claves de API
Mantenen seguras y protegidas tus claves de API es importante al desarrollar cualquier tipo de aplicación. Te recomendamos no almacenar las claves de API directamente en el código con el que estás trabajando, ya que comprometer esos detalles en un repositorio público podría ocasionar costos no deseados e issues.
![Diálogo mostrando botones para crear un espacio de código](../../images/who-will-pay.webp?WT.mc_id=academic-105485-koreyst)
## Cómo ejecutar localmente en tu computadora
Para ejecutar el código localmente en tu computadora, necesitarás tener alguna versión de [Python instalada](https://www.python.org/downloads/?WT.mc_id=academic-105485-koreyst).
Para utilizar el repositorio, necesitas clonarlo:
```shell
git clone https://github.com/microsoft/generative-ai-for-beginners
cd generative-ai-for-beginners
```
Ahora tienes todo listo y puedes comenzar a aprender y trabajar con el código.
### Instalación de Miniconda (paso opcional)
Hay ventajas en instalar **[miniconda](https://conda.io/en/latest/miniconda.html?WT.mc_id=academic-105485-koreyst)** - es una instalación bastante ligera que admite `conda` administrador de paquetes para diferentes versiones de Python **virtual environments**. `conda` facilita la instalación y el cambio entre diferentes versiones de Python y paquetes, además de permitir la instalación de paquetes que no están disponibles a través de `pip`.
Después de instalar Miniconda, necesitas clonar el repositorio (si aún no lo has hecho) y crear un entorno virtual para utilizar en este curso:
Antes de ejecutar el siguiente paso, asegúrate primero de tener un *environment.yml* file. El *environment.yml* archivo se utiliza para crear un entorno conda con las dependencias necesarias y puede lucir así:
```yml
name: <environment-name>
channels:
- defaults
dependencies:
- python=<python-version>
- openai
- python-dotenv
```
Puedes reemplazar `<environment-name>` con el nombre de tu entorno conda, y `<python-version>` con la versión de Python que desees usar. Coloca tu archivo *environment.yml* creado
en la capeta *.devcontainer* de tu repo.
Ahora que idealmente has creado un archivo *environment.yml* , puedes crear un entorno conda con el siguiente comando:
```bash
conda env create --name ai4beg --file .devcontainer/environment.yml
conda activate ai4beg
```
Consulta este enlace sobre cómo crear un [conda environments](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html?WT.mc_id=academic-105485-koreyst)
si encuentras algún problema.
### Usando Visual Studio Code con la Extensión de Python
Probablemente la mejor manera de usar el plan de estudios sea abrirlo en [Visual Studio Code](http://code.visualstudio.com/?WT.mc_id=academic-105485-koreyst) con [Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python&WT.mc_id=academic-105485-koreyst).
> **Nota**: Una vez que clones y abras el directorio en VS Code, automáticamente te sugerirá instalar las extensiones de Python. También tendrás que instalar Miniconda como se describe arriba.
> **Nota**: Si VS Code te sugiere volver a abrir el repositorio en un contenedor, debes rechazarlo para utilizar la instalación local de Python.
### Usando Jupyter en el navegador
También puedes utilizar el entorno Jupyter directamente desde el navegador en tu propia computadora. De hecho, tanto Jupyter clásico como Jupyter Hub ofrecen un entorno de desarrollo bastante conveniente con autocompletado, resaltado de código, etc.
Para iniciar Jupyter localmente, ve al directorio del curso y ejecuta:
```bash
jupyter notebook
```
or
```bash
jupyterhub
```
Luego puedes navegar a cualquiera de los `.ipynb` archivos, abrirlos y empezar a trabajar.
### Ejecutando en un contenedor
Una alternativa a la instalación de Python sería ejecutar el código en un contenedor. Dado que nuestro repositorio contiene una carpeta especial `.devcontainer` que indica cómo construir un contenedor para este repositorio, VS Code te ofrecería volver a abrir el código en un contenedor. Esto requerirá la instalación de Docker y será más complejo, así que lo recomendamos para usuarios más experimentados.
Una de las mejores formas de mantener seguras tus claves de API al usar GitHub Codespaces es mediante el uso de Secrets (Secretos) de Codespace. Sigue esta guía sobre cómo [Administrar secrets para tus codespaces.](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-secrets-for-your-codespaces?WT.mc_id=academic-105485-koreyst).
## Lecciones y Requisitos Técnicos
El curso consta de 6 lecciones conceptuales y 6 lecciones de codificación.
Para las lecciones de codificación, estamos utilizando el servicio Azure OpenAI. Necesitarás acceso al servicio Azure OpenAI y una clave de API para ejecutar este código. Puedes solicitar acceso [completando esta solicitud](https://azure.microsoft.com/products/ai-services/openai-service?WT.mc_id=academic-105485-koreyst).
Mientras esperas que procesen tu solicitud, cada lección de codificación también incluye un archivo `README.md` donde puedes ver el código y los resultados.
## Usando el Servicio Azure OpenAI por Primera Vez
Si es la primera vez que trabajas con el servicio Azure OpenAI, por favor sigue esta guía sobre cómo [crear y desplegar un recurso de Azure OpenAI Service.](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal&WT.mc_id=academic-105485-koreyst)
## Conocer a Otros Aprendices
Hemos creado canales en nuestro oficial [Servidor de Discord de la Comunidad de IA](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) para conocer a otros estudiantes. Esta es una excelente manera de conectarte con otros emprendedores, creadores, estudiantes y cualquier persona interesada en avanzar en el campo de la Inteligencia Artificial Generativa.
[![Unete al canal de Discord](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst)
El equipo del proyecto también estará en este servidor de Discord para ayudar a cualquier estudiante.
## Contribuye
Este curso es una iniciativa de código abierto. Si encuentras áreas de mejora o problemas, por favor crea un [Pull Request](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst) o registrar un [GitHub issue](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst).
El equipo del proyecto estará siguiendo todas las contribuciones y contribuir al código abierto es una manera increíble de construir tu carrera en la Inteligencia Artificial Generativa.
La mayoría de las contribuciones requieren que aceptes un Acuerdo de Licencia para Colaboradores (CLA) en el que declaras que tienes derecho, y de hecho lo haces, a otorgarnos los derechos para usar tu contribución. Para más detalles, visita [CLA, sitio web del Acuerdo de Licencia para Colaboradores](https://cla.microsoft.com?WT.mc_id=academic-105485-koreyst).
Importante: al traducir texto en este repositorio, asegúrate de no utilizar traducción automática. Verificaremos las traducciones a través de la comunidad, así que por favor ofrécete como voluntario solo para traducir a idiomas en los que seas competente.
Cuando envíes un pull request, un bot del Acuerdo de Licencia para Colaboradores (CLA-bot) determinará automáticamente si necesitas proporcionar un CLA y decorará la PR apropiadamente (por ejemplo, etiqueta, comentario). Simplemente sigue las instrucciones proporcionadas por el bot. Solo necesitarás hacer esto una vez en todos los repositorios que utilicen nuestro CLA.
Este proyecto ha adoptado el [Código de Conducta de Código Abierto de Microsoft](https://opensource.microsoft.com/codeofconduct/?WT.mc_id=academic-105485-koreyst). Para más información, lee las Preguntas Frecuentes del Código de Conducta o contacta al [opencode Email](opencode@microsoft.com) con cualquier pregunta o comentario adicional.
## Empecemos 😄
Ahora que has completado los pasos necesarios para terminar este curso, comencemos obteniendo una [Introducción a la Inteligencia Artificial Generativa y Modelos de Lenguaje de Aprendizaje Profundo (LLMs, por sus siglas en inglés).](../../../01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst).

View File

@ -0,0 +1,144 @@
# 📚 Introducción a la Inteligencia Artificial Generativa y a los Modelos de Lenguaje Grandes
[![Introducción a la Inteligencia Artificial Generativa y a los Modelos de Lenguaje Grandes](../../images/01-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/vf_mZrn8ibc?WT.mc_id=academic-105485-koreyst)
*(Haz clic en la imagen de arriba para ver el video de esta lección)*
La Inteligencia Artificial Generativa es una forma de inteligencia artificial capaz de generar texto, imágenes y otros tipos de contenido. Lo que la hace una tecnología fantástica es que democratiza la IA; cualquiera puede utilizarla con tan solo una indicación de texto, una oración escrita en un lenguaje natural. No es necesario que aprendas un lenguaje como Java o SQL para lograr algo valioso; todo lo que necesitas es usar tu propio lenguaje, expresar lo que deseas, y obtendrás sugerencias de un modelo de IA. Las aplicaciones e impacto de esto son enormes: puedes redactar o entender informes, escribir aplicaciones y mucho más, todo en cuestión de segundos.
En este plan de estudios, exploraremos cómo nuestra startup aprovecha la inteligencia artificial generativa para desbloquear nuevos escenarios en el mundo de la educación, y cómo abordamos los inevitables desafíos asociados con las implicaciones sociales de su aplicación y las limitaciones tecnológicas.
## Introducción
Esta lección cubrirá:
* Introducción al escenario empresarial: nuestra idea y misión como startup.
* Inteligencia Artificial Generativa y cómo llegamos al panorama tecnológico actual.
* Funcionamiento interno de un modelo de lenguaje grande.
* Principales capacidades y casos de uso prácticos de los Modelos de Lenguaje Grandes.
## Objetivos de Aprendizaje
Después de completar esta lección, comprenderás:
* Qué es la inteligencia artificial generativa y cómo funcionan los Modelos de Lenguaje Grandes.
* Cómo puedes aprovechar los modelos de lenguaje grandes para diferentes casos de uso, con un enfoque en escenarios educativos.
## Escenario: nuestra startup educativa
La Inteligencia Artificial Generativa (IA) representa la cúspide de la tecnología de la IA, empujando los límites de lo que antes se consideraba imposible. Los modelos de IA generativa tienen varias capacidades y aplicaciones, pero en este plan de estudios exploraremos cómo está revolucionando la educación a través de una startup ficticia. Nos referiremos a esta startup como nuestra startup. Nuestra startup opera en el ámbito educativo con la ambiciosa declaración de misión de:
> *mejorar la accesibilidad en el aprendizaje a escala global, garantizando un acceso equitativo a la educación y proporcionando experiencias de aprendizaje personalizadas a cada estudiante, según sus necesidades.*.
Nuestro equipo de startup es consciente de que no podremos alcanzar este objetivo sin aprovechar una de las herramientas más poderosas de los tiempos modernos: los Modelos de Lenguaje Grandes (LLMs).
Se espera que la Inteligencia Artificial Generativa revolucione la forma en que aprendemos y enseñamos hoy en día, con estudiantes teniendo a su disposición profesores virtuales las 24 horas del día que proporcionan grandes cantidades de información y ejemplos, y profesores capaces de aprovechar herramientas innovadoras para evaluar a sus estudiantes y brindar retroalimentación.
![Cinco jóvenes estudiantes mirando un monitor. - image by DALLE2](../../images/students-by-DALLE2.png?WT.mc_id=academic-105485-koreyst)
Para empezar, definamos algunos conceptos y terminología básicos que utilizaremos a lo largo del plan de estudios.
## ¿Cómo llegamos a la Inteligencia Artificial Generativa?
A pesar del extraordinario *hype* creado recientemente por el anuncio de modelos de IA generativa, esta tecnología lleva décadas en desarrollo, con los primeros esfuerzos de investigación remontándose a los años 60. Ahora estamos en un punto en el que la IA tiene capacidades cognitivas humanas, como la conversación, como se muestra, por ejemplo [OpenAI ChatGPT](https://openai.com/chatgpt) o [Bing Chat](https://www.microsoft.com/edge/features/bing-chat?WT.mc_id=academic-105485-koreyst), que también utiliza un modelo GPT para las conversaciones de búsqueda web en Bing.
Volviendo un poco atrás, los primeros prototipos de IA consistían en chatbots mecanografiados, que dependían de una base de conocimientos extraída de un grupo de expertos y representada en una computadora. Las respuestas en la base de conocimientos eran activadas por palabras clave que aparecían en el texto de entrada. Sin embargo, pronto quedó claro que este enfoque, utilizando chatbots mecanografiados, no escalaba bien.
### Enfoque estadístico para la Inteligencia Artificial: Aprendizaje Automático
Un punto de inflexión llegó durante los años 90, con la aplicación de un enfoque estadístico para el análisis de texto. Esto llevó al desarrollo de nuevos algoritmos, conocidos con el nombre de aprendizaje automático, capaces de aprender patrones a partir de datos sin ser programados explícitamente. Este enfoque permite que una máquina simule la comprensión del lenguaje humano: un modelo estadístico se entrena en pares de texto y etiquetas, lo que permite al modelo clasificar texto de entrada desconocido con una etiqueta predefinida que representa la intención del mensaje.
### Redes neuronales y asistentes virtuales modernos
En tiempos más recientes, la evolución tecnológica del hardware, capaz de manejar mayores cantidades de datos y cálculos más complejos, estimuló la investigación en los campos de la inteligencia artificial, llevando al desarrollo de algoritmos avanzados de aprendizaje automático, llamados redes neuronales o algoritmos de aprendizaje profundo.
Las redes neuronales (y en particular las Redes Neuronales Recurrentes - RNN) mejoraron significativamente el procesamiento del lenguaje natural, permitiendo la representación del significado del texto de una manera más significativa, valorando el contexto de una palabra en una oración.
Esta es la tecnología que impulsó a los asistentes virtuales nacidos en la primera década del nuevo siglo, muy competentes en interpretar el lenguaje humano, identificar una necesidad y realizar una acción para satisfacerla, como responder con un guion predefinido o consumir un servicio de terceros.
### En la actualidad, la Inteligencia Artificial Generativa
Así es como llegamos a la Inteligencia Artificial Generativa hoy en día, que se puede considerar como un subconjunto del aprendizaje profundo.
![AI, ML, DL y IA Generativa](../../images/AI-diagram.png?WT.mc_id=academic-105485-koreyst)
Después de décadas de investigación en el campo de la inteligencia artificial, una nueva arquitectura de modelo, - llamada *Transformer* superó los límites de las RNN, siendo capaz de manejar secuencias de texto mucho más largas como entrada. Los Transformers se basan en el mecanismo de atención, lo que permite al modelo asignar diferentes pesos a las entradas que recibe, prestando más atención donde se concentra la información más relevante, independientemente de su orden en la secuencia de texto.
La mayoría de los modelos recientes de Inteligencia Artificial Generativa, también conocidos como Modelos de Lenguaje Grandes (LLMs, por sus siglas en inglés), ya que trabajan con entradas y salidas de texto, están basados de hecho en esta arquitectura. Lo interesante de estos modelos, entrenados con una gran cantidad de datos no etiquetados de diversas fuentes como libros, artículos y sitios web, es que pueden adaptarse a una amplia variedad de tareas y generar texto gramaticalmente correcto con un atisbo de creatividad. Por lo tanto, no solo mejoraron de manera increíble la capacidad de una máquina para 'entender' un texto de entrada, sino que también habilitaron su capacidad para generar una respuesta original en lenguaje humano.
## ¿Cómo funcionan los grandes modelos de lenguaje?
En el próximo capítulo exploraremos diferentes tipos de modelos de Inteligencia Artificial Generativa, pero por ahora echemos un vistazo a cómo funcionan los grandes modelos de lenguaje, con un enfoque en los modelos de OpenAI GPT (Generative Pre-trained Transformer).
* **Tokenizador, texto a números**: Los grandes modelos de lenguaje reciben un texto como entrada y generan un texto como salida. Sin embargo, al ser modelos estadísticos, funcionan mucho mejor con números que con secuencias de texto. Es por eso que cada entrada al modelo se procesa mediante un tokenizador antes de ser utilizada por el modelo central. Un token es un fragmento de texto, que consiste en un número variable de caracteres. La tarea principal del tokenizador es dividir la entrada en un conjunto de tokens. Luego, cada token se asigna con un índice de token, que es la codificación entera del fragmento de texto original.
![Ejemplo de tokenización](../../images/tokenizer-example.png?WT.mc_id=academic-105485-koreyst)
* **Predicción de tokens de salida**: Dado un conjunto de n tokens como entrada (con un máximo n que varía de un modelo a otro), el modelo es capaz de predecir un token como salida. Este token se incorpora luego a la entrada de la siguiente iteración, en un patrón de ventana expansiva, lo que permite una mejor experiencia del usuario al obtener una (o varias) oraciones como respuesta. Esto explica por qué, si alguna vez has interactuado con ChatGPT, es posible que hayas notado que a veces parece detenerse en medio de una oración.
* **Proceso de selección, distribución de probabilidad**: El token de salida es elegido por el modelo de acuerdo con su probabilidad de ocurrir después de la secuencia de texto actual. Esto se debe a que el modelo predice una distribución de probabilidad sobre todos los posibles 'próximos tokens', calculados en base a su entrenamiento. Sin embargo, no siempre se elige el token con la probabilidad más alta de la distribución resultante. Se añade un grado de aleatoriedad a esta elección, de manera que el modelo actúa de manera no determinista; no obtenemos la misma salida exacta para la misma entrada. Este grado de aleatoriedad se agrega para simular el proceso de pensamiento creativo y se puede ajustar utilizando un parámetro del modelo llamado temperatura.
## ¿Cómo puede nuestra startup aprovechar los grandes modelos de lenguaje?
Ahora que tenemos una mejor comprensión del funcionamiento interno de un modelo de lenguaje grande, veamos algunos ejemplos prácticos de las tareas más comunes que pueden realizar bastante bien, con atención a nuestro escenario empresarial. Dijimos que la capacidad principal de un Modelo de Lenguaje Grande es *generar texto desde cero, a partir de una entrada textual escrita en lenguaje natural*.
¿Pero qué tipo de entrada y salida textual?
La entrada de un gran modelo de lenguaje se conoce como "prompt" (indicación), mientras que la salida se conoce como "completion" (completado), término que se refiere al mecanismo del modelo de generar el próximo token para completar la entrada actual. Vamos a profundizar en lo que es un "prompt" y cómo diseñarlo de manera que aprovechemos al máximo nuestro modelo. Pero por ahora, simplemente diremos que un "prompt" puede incluir:
* Una **instrucción** especificando el tipo de salida que esperamos del modelo. Esta instrucción a veces puede incluir algunos ejemplos o datos adicionales.
1. Resumen de un artículo, libro, reseñas de productos y más, junto con la extracción de información clave a partir de datos no estructurados.
![Ejemplo de resumen](../../images/summarization-example.png?WT.mc_id=academic-105485-koreyst)
<br>
2. Ideación creativa y diseño de un artículo, un ensayo, una tarea u otros.
![Ejemplo de escritura creativa](../../images/creative-writing-example.png?WT.mc_id=academic-105485-koreyst)
<br>
* Una **pregunta**, preguntado en forma de conversación con un agente.
![Ejemplo de conversación](../../images/conversation-example.png?WT.mc_id=academic-105485-koreyst)
<br>
* Un fragmento de **texto por completar**, lo cual implícitamente es una solicitud de ayuda en la escritura.
![Ejemplo de finalización de texto](../../images/text-completion-example.png?WT.mc_id=academic-105485-koreyst)
<br>
* Un trozo de **código** junto con la petición de explicarlo y documentarlo, o un comentario pidiendo generar un fragmento de código que realice una tarea específica.
![Ejemplo de código](../../images/coding-example.png?WT.mc_id=academic-105485-koreyst)
<br>
Los ejemplos anteriores son bastante simples y no pretenden ser una demostración exhaustiva de las capacidades de los modelos de lenguaje grandes. Solo quieren mostrar el potencial del uso de la IA generativa, en particular, pero no limitado al contexto educativo.
Además, el resultado de un modelo de IA generativa no es perfecto y, a veces, la creatividad del modelo puede ir en su contra, dando como respuesta un resultado que es una combinación de palabras que el usuario humano puede interpretar como una mistificación de la realidad, o puede ser ofensivo. La IA generativa no es inteligente, al menos en la definición más amplia de inteligencia, que incluye el razonamiento crítico y creativo o la inteligencia emocional; no es determinista y no es confiable, ya que las mentiras, como referencias, contenidos y declaraciones erróneas, pueden combinarse con información correcta y presentarse de manera persuasiva y segura. En las siguientes lecciones, abordaremos todas estas limitaciones y veremos qué podemos hacer para mitigarlas.
## Asignación
Tu tarea es investigar más sobre [IA generativa](https://en.wikipedia.org/wiki/Generative_artificial_intelligence?WT.mc_id=academic-105485-koreyst) e intentar identificar un área donde agregarías inteligencia artificial generativa hoy en día que aún no la tenga. ¿Cómo sería diferente el impacto de hacerlo de la "manera antigua"? ¿Puedes hacer algo que no podrías hacer antes o eres más rápido? Escribe un resumen de 300 palabras sobre cómo sería tu ideal startup de inteligencia artificial e incluye los encabezados como "Problema", "¿Cómo usaría la IA?", "Impacto" y opcionalmente un plan de negocios.
Si realizas esta tarea, incluso podrías estar listo para postularte al programa de incubación de Microsoft, [Microsoft for Startups Founders Hub](https://www.microsoft.com/startups?WT.mc_id=academic-105485-koreyst) Ofrecemos créditos para Azure, OpenAI, mentoría y mucho más, échale un vistazo.!
## Verificación de conocimientos
¿Qué es cierto acerca de los grandes modelos de lenguaje (LLM's, Large Language Models en ingles)?
1. Obtienes la misma respuesta exacta cada vez.
2. Realiza tareas de manera perfecta, es excelente sumando números, produciendo código funcional, etc.
3. La respuesta puede variar a pesar de usar el mismo prompt. También es excelente para ofrecerte un primer borrador de algo, ya sea texto o código. Sin embargo, necesitas mejorar los resultados.
A: 3. Un LLM (Large Language Model) es no determinista, las respuestas varían, sin embargo, puedes controlar su variabilidad mediante un ajuste de temperatura. Tampoco debes esperar que haga las cosas de manera perfecta; está aquí para hacer el trabajo pesado por ti, lo que a menudo significa que obtienes un buen primer intento en algo que necesitas mejorar gradualmente.
## ¡Gran trabajo! ¡Continúa el viaje!
Después de completar esta lección, echa un vistazo a nuestra [Colección de Aprendizaje de IA Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) Para seguir mejorando tu conocimiento en IA Generativa!
Dirígete a la Lección 2 donde veremos cómo [explorar y comparar diferentes tipos de LLM](../../../02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst)!

View File

@ -251,7 +251,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.8"
"version": "3.10.13"
},
"orig_nbformat": 4
},

View File

@ -2,9 +2,9 @@
[![Prompt Engineering Fundamentals](./images/04-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/r2ItK3UMVTk?WT.mc_id=academic-105485-koreyst)
How you write your prompt to the LLM matters, a carefully crafted prompt can achieve a better result than one that isn't. But what even are these concepts, prompt, prompt engineering and how do I improve what I send to the LLM? Questions like these are what this chapter and the upcoming chapter are looking to answer.
The way your write your prompt to an LLM also matters. A carefully-crafted prompt can achieve a better quality of response. But what exactly do terms like _prompt_ and _prompt engineering_ mean? And how do I improve the prompt _input_ that I send to the LLM? These are the questions we'll try to answer with in this chapter and the next.
_Generative AI_ is capable of creating new content (e.g., text, images, audio, code etc.) in response to user requests. It achieves this using _Large Language Models_ (LLMs) like OpenAI's GPT ("Generative Pre-trained Transformer") series that are trained for using natural language and code.
_Generative AI_ is capable of creating new content (e.g., text, images, audio, code etc.) in response to user requests. It achieves this using _Large Language Models_ like OpenAI's GPT ("Generative Pre-trained Transformer") series that are trained for using natural language and code.
Users can now interact with these models using familiar paradigms like chat, without needing any technical expertise or training. The models are _prompt-based_ - users send a text input (prompt) and get back the AI response (completion). They can then "chat with the AI" iteratively, in multi-turn conversations, refining their prompt till the response matches their expectations.
@ -27,14 +27,9 @@ Prompt engineering is currently more art than science. The best way to improve o
The Jupyter Notebook accompanying this lesson provides a _sandbox_ environment where you can try out what you learn - as you go, or as part of the code challenge at the end. To execute the exercises you will need:
1. An Azure OpenAI API key - the service endpoint for a deployed LLM.
2. A Python Runtime - in which the Notebook can be executed.
We have instrumented this repository with a _dev container_ that comes with a Python 3 runtime. Simply open the repo in GitHub Codespaces or on your local Docker Desktop, to activate the runtime automatically. Then open the notebook and select the Python 3.x kernel to prepare the Notebook for execution.
The default notebook is set up for use with an Azure OpenAI service resource. Simply copy the `.env.copy` file in the root of the folder to `.env` and update the `AZURE_OPENAI_API_KEY=` and `AZURE_OPENAI_API_ENDPOINT=` lines with your API key and endpoint. You can check your credentials in the [Azure portal](https://portal.azure.com?WT.mc_id=academic-105485-koreyst), by navigating to your Azure OpenAI resource and then opening the _Keys and Endpoints_ tab in the left menu.
Also, please add the name you assigned to your model when you created the deployment to the `AZURE_OPENAI_DEPLOYMENT` variable. The recommended model for this exercise is 'gpt-35-turbo'.
1. **An Azure OpenAI API key** - the service endpoint for a deployed LLM.
2. **A Python Runtime** - in which the Notebook can be executed.
3. **Local Env Variables** - *complete the [SETUP](SETUP.md) steps now to get ready*.
The notebook comes with _starter_ exercises - but you are encouraged to add your own _Markdown_ (description) and _Code_ (prompt requests) sections to try out more examples or ideas - and build your intuition for prompt design.
@ -390,6 +385,6 @@ See if you can leverage the "cue" technique with the prompt: Complete the senten
## Great Work! Continue Your Learning
Want to learn more about different Prompt Engineering concepts? Go to the [contiuned learning page](../13-continued-learning/README.md?WT.mc_id=academic-105485-koreyst) to find other great resources on this topic.
Want to learn more about different Prompt Engineering concepts? Go to the [continued learning page](../13-continued-learning/README.md?WT.mc_id=academic-105485-koreyst) to find other great resources on this topic.
Head over to Lesson 5 where we will look at [advanced prompting techniques](../05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst)!

View File

@ -0,0 +1,72 @@
# Setup Your Dev Environment
We have instrumented this repository with a _dev container_ that comes with a Python 3 runtime. Simply open the repo in GitHub Codespaces or on your local Docker Desktop, to activate the runtime automatically. Then open th Jupyter notebook and select the Python 3.x kernel to prepare the Notebook for execution.
## 1. Create `.env` file
The default notebook is set up for use with an [Azure OpenAI service resource](https://learn.microsoft.com/azure/ai-services/openai?WT.mc_id=academic-105485-koreyst). To configure this, we need to setup local environment variables for Azure as follows:
1. Look in the root folder for a `.env.copy` file. It should contain a list of name-value pairs like this:
```bash
AZURE_OPENAI_ENDPOINT='<add your endpoint here>'
AZURE_OPENAI_DEPLOYMENT='<add your deployment name here>'
AZURE_OPENAI_KEY='<add your key here>'
AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT='<add your deployment name here>'
```
2. Make a copy of that file called `.env` using a command like this at the terminal:
```bash
cp .env.copy .env
```
This should create an identical copy _except that this file is .gitignore-d and will never get checked into source control_. We can now populate **this .env file** with the environment variable values (secrets) without fear of them being checked in accidentally. You can now move to the next section to start populating these variables.
3. (Option) If you use GitHub Codespaces, you have the option to save environment variables as _Codespaces secrets_ associated with this repository. In that case, you won't need to setup a local .env file. **However, note that this option works only if you use GitHub Codespaces.** You will still need to setup the .env file if you use Docker Desktop instead.
## 2. Populate `.env` file
Let's take a quick look at the variable names to understand what they represent:
| Variable | Description |
|:---|:---|
|AZURE_OPENAI_ENDPOINT| This is the deployed endpoint for an Azure OpenAI resource|
|AZURE_OPENAI_KEY | This is the authorization key for using that service |
|AZURE_OPENAI_DEPLOYMENT| This is the _text generation_ model deployment endpoint |
|AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT | This is the _text embeddings_ model deployment endpoint |
| | |
For context, the last two variables refer to specific models that are used in chat completion (text generation model) and vector search (embeddings model) activities that are frequently used in generative AI applications. In the following sections, we'll locate the _values_ for these variables and set them in `.env` (replacing the content within the `' '`, but preserving the quotes).
### 2.1 Use Azure Portal
The Azure OpenAI endpoint and key values will be found in the [Azure Portal](https://portal.azure.com?WT.mc_id=academic-105485-koreyst) so let's start there.
1. Navigate to the [Azure Portal](https://portal.azure.com?WT.mc_id=academic-105485-koreyst)
1. Click the **Keys and Endpoint** option in the sidebar (menu at left).
1. Click **Show Keys** - you should see the following: KEY 1, KEY 2 and Endpoint.
1. Use the KEY 1 value for AZURE_OPENAI_KEY
1. Use the Endpoint value for AZURE_OPENAI_ENDPOINT
Next, we need the endpoints for the specific models we've deployed.
1. Click the **Model deployments** option in the sidebar (left menu) for Azure OpenAI resource.
1. In the destination page, click **Manage Deployments**
This will take you to the Azure OpenAI Studio website, where we'll find the other values as described below.
### 2.2 Use Azure OpenAI Studio
1. Navigate to [Azure OpenAI Studio](https://oai.azure.com?WT.mc_id=academic-105485-koreyst) **from your resource** as described above.
1. Click the **Deployments** tab (sidebar, left) to view currently deployed models.
1. If your desired model is not deployed, use **Create new deployment** to deploy it.
1. You will need a _text-generation_ model - we recommend: **gpt-35-turbo**
1. You will need a _text-embedding_ model - we recommend **text-embedding-ada-002**
Now update the environment variables to reflect the _Deployment name_ used. This will typically be the same as the model name unless you changed it explcitly. So, as an example, you might have:
```bash
AZURE_OPENAI_DEPLOYMENT='gpt-35-turbo'
AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT='text-embedding-ada-002'
```
**Don't forget to save the .env file when done**. You can now exit the file and return to the instructions for running the notebook.

View File

@ -0,0 +1,3 @@
node_modules
build
.env

View File

@ -0,0 +1,6 @@
# Used to authenticate with the Azure OpenAI. Retrieve these
# values from an Azure OpenAI instance in the Azure Portal.
ENDPOINT="https://<resource name>.openai.azure.com"
AZURE_API_KEY="<azure api key>"
OPENAI_API_KEY="<openai api key>"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,36 @@
{
"name": "recipe-app",
"version": "1.0.0",
"description": "a simple application how to manage text completions with Azure OpenAI in Typescript",
"main": "main.js",
"scripts": {
"build": "rimraf build && tsc",
"preserve": "npm run build",
"start": "nodemon"
},
"keywords": [
"typescript",
"azure",
"openai"
],
"author": "",
"license": "MIT",
"devDependencies": {
"@types/node": "^20.10.8",
"nodemon": "^3.0.2",
"ts-node": "^10.9.2",
"typescript": "^5.3.3"
},
"dependencies": {
"@azure/openai": "^1.0.0-beta.10",
"dotenv": "^16.3.1",
"rimraf": "^5.0.5"
},
"nodemonConfig": {
"watch": [
"src"
],
"ext": "ts",
"exec": "npx ts-node ./src/main.ts"
}
}

View File

@ -0,0 +1,75 @@
import { OpenAIClient, AzureKeyCredential, ChatRequestMessage } from "@azure/openai";
import * as dotenv from "dotenv";
dotenv.config();
const endpoint = process.env.AZURE_OPENAI_ENDPOINT || '';
const azureApiKey = process.env.AZURE_OPENAI_KEY || '';
export async function main() {
console.log("== Recipe Recommendation App ==");
const client = new OpenAIClient(endpoint, new AzureKeyCredential(azureApiKey));
const deploymentName = 'deployment-name-completion';
//const deploymentName = '<include-your-deployment-name-here>';
console.log("Number of recipes: (for example: 5): ");
const numRecipes = "2";
console.log("List of ingredients: (for example: chicken, potatoes, and carrots): ");
const ingredients = "chocolate";
console.log("Filter (for example: vegetarian, vegan, or gluten-free): ");
const filter = "peanuts";
const promptText = `Show me ${numRecipes} recipes for a dish with the following ingredients: ${ingredients}. Per recipe, list all the ingredients used, no ${filter}: `;
const chatMessages: ChatRequestMessage[] = [
{
role: 'system',
content: 'Hello, I am a recipe recommendation bot. I will recommend recipes based on the ingredients you provide me.'
},
{
role: 'user',
content: promptText
},
];
try {
const completionResponse = await client.getChatCompletions(deploymentName, chatMessages, {
maxTokens: 150,
temperature: 0.1,
});
console.log("Recipe Recommendations: ");
console.log(completionResponse.choices[0].message?.content);
const oldPromptResult = completionResponse.choices[0].message?.content;
const promptShoppingList = 'Produce a shopping list, and please do not include the following ingredients that I already have at home: ';
const newPrompt = `Given ingredients at home: ${ingredients} and these generated recipes: ${oldPromptResult}, ${promptShoppingList}`;
const shoppingListMessages: ChatRequestMessage[] = [
{
role: 'system',
content: 'Here is your shopping list:'
},
{
role: 'user',
content: newPrompt
},
];
const shoppingListResponse = await client.getChatCompletions(deploymentName, shoppingListMessages, {
maxTokens: 150,
temperature: 0.1,
});
console.log("\n ===== Shopping List ===== \n");
console.log(shoppingListResponse.choices[0].message?.content);
} catch (error) {
console.log('The sample encountered an error: ', error);
}
}
main();

View File

@ -0,0 +1,17 @@
{
"compilerOptions": {
"outDir": "./dist",
"rootDir": "src",
"target": "ES2020",
"module": "commonjs",
"checkJs": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"esModuleInterop": true,
"noImplicitAny": false,
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}

View File

@ -0,0 +1,4 @@
node_modules
build
.env
dist

View File

@ -0,0 +1,6 @@
# Used to authenticate with the Azure OpenAI. Retrieve these
# values from an Azure OpenAI instance in the Azure Portal.
ENDPOINT="https://<resource name>.openai.azure.com"
AZURE_API_KEY="<azure api key>"
OPENAI_API_KEY="<openai api key>"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,36 @@
{
"name": "chat-completions-app",
"version": "1.0.0",
"description": "a simple application how to use the chat completions with Azure OpenAI in TypeScript",
"main": "main.js",
"scripts": {
"build": "rimraf build && tsc",
"preserve": "npm run build",
"start": "nodemon"
},
"keywords": [
"typescript",
"azure",
"openai"
],
"author": "",
"license": "MIT",
"devDependencies": {
"@types/node": "^20.10.8",
"nodemon": "^3.0.2",
"ts-node": "^10.9.2",
"typescript": "^5.3.3"
},
"dependencies": {
"@azure/openai": "^1.0.0-beta.10",
"dotenv": "^16.3.1",
"rimraf": "^5.0.5"
},
"nodemonConfig": {
"watch": [
"src"
],
"ext": "ts",
"exec": "npx ts-node ./src/main.ts"
}
}

View File

@ -0,0 +1,33 @@
import { OpenAIClient, AzureKeyCredential } from "@azure/openai";
import * as dotenv from "dotenv";
dotenv.config();
const endpoint = process.env.AZURE_OPENAI_ENDPOINT || '';
const azureApiKey = process.env.AZURE_OPENAI_KEY || '';
export async function main() {
try {
console.log("== Chat Completions App ==");
const client = new OpenAIClient(endpoint, new AzureKeyCredential(azureApiKey));
const deploymentName = 'deployment-name-completion';
// const deploymentName = '<include-your-deployment-name-here>';
const result = await client.getChatCompletions(deploymentName, [
{ role: "system", content: "You're the president of France" },
{ role: "system", content: "You have just resigned" },
{ role: "user", content: "What tasks needs doing?" }
], {
maxTokens: 100
});
for (const choice of result.choices) {
console.log(choice.message);
}
} catch (error) {
console.log("The sample encoutered an error: ", error);
}
}
main();

View File

@ -0,0 +1,17 @@
{
"compilerOptions": {
"outDir": "./dist",
"rootDir": "src",
"target": "ES2020",
"module": "commonjs",
"checkJs": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"esModuleInterop": true,
"noImplicitAny": false,
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}

View File

@ -0,0 +1,4 @@
node_modules
build
.env
dist

View File

@ -0,0 +1,6 @@
# Used to authenticate with the Azure OpenAI. Retrieve these
# values from an Azure OpenAI instance in the Azure Portal.
ENDPOINT="https://<resource name>.openai.azure.com"
AZURE_API_KEY="<azure api key>"
OPENAI_API_KEY="<openai api key>"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,36 @@
{
"name": "search-app",
"version": "1.0.0",
"description": "a simple application how to use embeddings to search for similar documents using Azure OpenAI and TypeScript",
"main": "main.js",
"scripts": {
"build": "rimraf build && tsc",
"preserve": "npm run build",
"start": "nodemon"
},
"keywords": [
"typescript",
"azure",
"openai"
],
"author": "",
"license": "MIT",
"devDependencies": {
"@types/node": "^20.10.8",
"nodemon": "^3.0.2",
"ts-node": "^10.9.2",
"typescript": "^5.3.3"
},
"dependencies": {
"@azure/openai": "^1.0.0-beta.10",
"dotenv": "^16.3.1",
"rimraf": "^5.0.5"
},
"nodemonConfig": {
"watch": [
"src"
],
"ext": "ts",
"exec": "npx ts-node ./src/main.ts"
}
}

View File

@ -0,0 +1,65 @@
import { OpenAIClient, AzureKeyCredential } from "@azure/openai";
import * as dotenv from "dotenv";
dotenv.config();
const endpoint = process.env.AZURE_OPENAI_ENDPOINT || "";
const azureApiKey = process.env.AZURE_OPENAI_KEY || "";
/**
* Calculates the cosine similarity between two vectors.
* @param vector1 The first vector.
* @param vector2 The second vector.
* @returns The cosine similarity score.
*/
function cosineSimilarity(vector1: number[], vector2: number[]): number {
if (vector1.length !== vector2.length) {
throw new Error("Vector dimensions must match for cosine similarity calculation.");
}
const dotProduct = vector1.reduce((acc, val, index) => acc + val * vector2[index], 0);
const magnitude1 = Math.sqrt(vector1.reduce((acc, val) => acc + val ** 2, 0));
const magnitude2 = Math.sqrt(vector2.reduce((acc, val) => acc + val ** 2, 0));
if (magnitude1 === 0 || magnitude2 === 0) {
throw new Error("Magnitude of a vector must be non-zero for cosine similarity calculation.");
}
return dotProduct / (magnitude1 * magnitude2);
}
/**
* Main function to execute the document similarity comparison.
*/
async function main() {
try {
console.log("== Building Search Applications with Azure OpenAI ==");
const client = new OpenAIClient(endpoint, new AzureKeyCredential(azureApiKey));
const deploymentName = "deployment-name-embeddings"; // here should be of type ADA embedding for Azure OpenAI
const source = "Car";
const compareTo = "Vehicle";
const parrot = "A bird";
const parrotEmbedding = await client.getEmbeddings(deploymentName, [parrot]);
const embeddings = await client.getEmbeddings(deploymentName, [source]);
const embeddingsCompareTo = await client.getEmbeddings(deploymentName, [compareTo]);
const carArray = embeddings.data[0].embedding;
const vehicleArray = embeddingsCompareTo.data[0].embedding;
const parrotArray = parrotEmbedding.data[0].embedding;
const scoreCarWithVehicle = cosineSimilarity(carArray, vehicleArray);
console.log("Comparing - Car vs Vehicle...: ", scoreCarWithVehicle.toFixed(7));
const scoreCarWithParrot = cosineSimilarity(carArray, parrotArray);
console.log("Comparing - Car vs Parrot...: ", scoreCarWithParrot .toFixed(7));
} catch (error) {
console.error("The sample encountered an error:", error);
}
}
main();

View File

@ -0,0 +1,17 @@
{
"compilerOptions": {
"outDir": "./dist",
"rootDir": "src",
"target": "ES2020",
"module": "commonjs",
"checkJs": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"esModuleInterop": true,
"noImplicitAny": false,
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}

View File

@ -0,0 +1,7 @@
# Used to authenticate with the Azure OpenAI. Retrieve these
# values from an Azure OpenAI instance in the Azure Portal.
# this specific model we need to create in the Sweden Central due to the Dall-e deployment
ENDPOINT="https://<resource name>.openai.azure.com"
AZURE_API_KEY="<azure api key>"
OPENAI_API_KEY="<openai api key>"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,36 @@
{
"name": "image-generation-app",
"version": "1.0.0",
"description": "a simple application how to manage text completions with Azure OpenAI in Typescript",
"main": "main.js",
"scripts": {
"build": "rimraf build && tsc",
"preserve": "npm run build",
"start": "nodemon"
},
"keywords": [
"typescript",
"azure",
"openai"
],
"author": "",
"license": "MIT",
"devDependencies": {
"@types/node": "^20.10.8",
"nodemon": "^3.0.2",
"ts-node": "^10.9.2",
"typescript": "^5.3.3"
},
"dependencies": {
"@azure/openai": "^1.0.0-beta.10",
"dotenv": "^16.3.1",
"rimraf": "^5.0.5"
},
"nodemonConfig": {
"watch": [
"src"
],
"ext": "ts",
"exec": "npx ts-node ./src/main.ts"
}
}

View File

@ -0,0 +1,34 @@
import { OpenAIClient, AzureKeyCredential } from "@azure/openai";
import * as dotenv from "dotenv";
dotenv.config();
const endpoint = process.env.AZURE_OPENAI_ENDPOINT || '';
const azureApiKey = process.env.AZURE_OPENAI_KEY || '';
const promptImage = "captain with a parrot on his shoulder";
export async function main() {
try {
console.log("== Image Generation App ==");
const client = new OpenAIClient(endpoint, new AzureKeyCredential(azureApiKey));
const deploymentName = 'dall-e-3';
const imageGenerations = await client.getImages(deploymentName, promptImage, {
n: 1,
size: "1024x1024",
responseFormat: "url",
quality: "standard",
style: "vivid",
});
for (const image of imageGenerations.data) {
console.log(`Image generated URL...: ${image.url}`);
}
} catch (error) {
console.log("The sample encountered an error: ", error);
}
}
main();

View File

@ -0,0 +1,17 @@
{
"compilerOptions": {
"outDir": "./dist",
"rootDir": "src",
"target": "ES2020",
"module": "commonjs",
"checkJs": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"esModuleInterop": true,
"noImplicitAny": false,
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}

View File

@ -0,0 +1,11 @@
# Used to authenticate with the Azure OpenAI. Retrieve these
# values from an Azure OpenAI instance in the Azure Portal.
ENDPOINT="https://<resource name>.openai.azure.com"
AZURE_API_KEY="<azure api key>"
OPENAI_API_KEY="<openai api key>"
# you can create a key here: https://www.bingmapsportal.com
BING_API_KEY="<bing api key>"
BING_MAPS_BASE_URL="https://dev.virtualearth.net/REST/v1/LocalSearch/"

View File

@ -0,0 +1,4 @@
node_modules
build
.env
dist

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
{
"name": "functions-app",
"version": "1.0.0",
"description": "a simple application how to use functions with Azure Open AI and TypeScript",
"main": "main.js",
"scripts": {
"build": "rimraf build && tsc",
"preserve": "npm run build",
"start": "nodemon"
},
"keywords": [
"typescript",
"azure",
"openai"
],
"author": "",
"license": "MIT",
"devDependencies": {
"@types/node": "^20.10.8",
"nodemon": "^3.0.2",
"ts-node": "^10.9.2",
"typescript": "^5.3.3"
},
"dependencies": {
"@azure/openai": "^1.0.0-beta.10",
"axios": "^1.6.5",
"dotenv": "^16.3.1",
"rimraf": "^5.0.5"
},
"nodemonConfig": {
"watch": [
"src"
],
"ext": "ts",
"exec": "npx ts-node ./src/main.ts"
}
}

View File

@ -0,0 +1,78 @@
import { OpenAIClient, AzureKeyCredential } from "@azure/openai";
import axios from "axios";
import * as dotenv from "dotenv";
dotenv.config();
const endpoint = process.env.AZURE_OPENAI_ENDPOINT || "";
const azureApiKey = process.env.AZURE_OPENAI_KEY || "";
const bingMapsBaseUrl = process.env.BING_MAPS_BASE_URL || "";
const bingApiKey = process.env.BING_API_KEY || "";
async function findWeather(currentLocation: string, placeType: string) {
const url = `${bingMapsBaseUrl}?query=${encodeURIComponent(currentLocation)}&type=${placeType}&key=${bingApiKey}`;
try {
const response = await axios.get(url);
return response.data;
} catch (error) {
console.log('Error in findWeather...: ', error);
}
}
const getCurrentWeatherFunction = {
name: "findWeather",
description: "Get the current weather in a given location",
parameters: {
type: "object",
properties: {
location: {
type: "string",
description: "The city and state, e.g. San Francisco, CA"
},
unit: {
type: "string",
enum: ["C", "F"], // Celsius or Fahrenheit
},
},
required: ["location"],
},
};
async function main() {
try {
console.log("== Chat Completions App with Functions ==");
const client = new OpenAIClient(endpoint, new AzureKeyCredential(azureApiKey));
const deploymentName = "gpt-4"; // if you want to use 'gpt-4' model you need to create a resource in Sweden Central region
const userParams = {
location: "New York",
unit: "C"
};
const result = await client.getChatCompletions(deploymentName, [
{
role: "user",
content: `What's the weather in ${userParams.location}, ${userParams.unit}?`,
},
], {
functions: [getCurrentWeatherFunction],
});
for (const choice of result.choices) {
console.log(choice.message?.functionCall);
if (choice.message?.functionCall) {
const { arguments: argumentsJson } = choice.message.functionCall;
const { location, unit } = JSON.parse(argumentsJson);
let response = await findWeather(location, unit);
console.log("Result from Bing Maps API..: ", response);
}
}
} catch (error) {
console.error("The sample encountered an error...:", error);
}
}
main();

View File

@ -0,0 +1,17 @@
{
"compilerOptions": {
"outDir": "./dist",
"rootDir": "src",
"target": "ES2020",
"module": "commonjs",
"checkJs": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"esModuleInterop": true,
"noImplicitAny": false,
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}

View File

@ -39,7 +39,7 @@
- 每章导学视频
- 书面课程位于自述文件中
- 对于基于项目的课程,带有代码示例的 Juypter Notebook
- 对于基于项目的课程,带有代码示例的 Jupyter Notebook
- 应用所学知识的知识拓展和知识检查
- 进阶学习资源链接

View File

@ -0,0 +1,95 @@
![Inteligencia Artificial Generativa para Principiantes](../../images/repository-thumbnail.png?WT.mc_id=academic-105485-koreyst)
### Un curso de 12 lecciones que enseña todo lo necesario para comenzar a construir aplicaciones de Inteligencia Artificial Generativa
[![GitHub license](https://img.shields.io/github/license/microsoft/Generative-AI-For-Beginners.svg)](https://github.com/microsoft/Generative-AI-For-Beginners/blob/master/LICENSE?WT.mc_id=academic-105485-koreyst)
[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/graphs/contributors/?WT.mc_id=academic-105485-koreyst)
[![GitHub issues](https://img.shields.io/github/issues/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/issues/?WT.mc_id=academic-105485-koreyst)
[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/Generative-AI-For-Beginners.svg)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/pulls/?WT.mc_id=academic-105485-koreyst)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com?WT.mc_id=academic-105485-koreyst)
[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/watchers/?WT.mc_id=academic-105485-koreyst)
[![GitHub forks](https://img.shields.io/github/forks/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/network/?WT.mc_id=academic-105485-koreyst)
[![GitHub stars](https://img.shields.io/github/stars/microsoft/Generative-AI-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/Generative-AI-For-Beginners/stargazers/?WT.mc_id=academic-105485-koreyst)
[![Open in GitHub Codespaces](https://img.shields.io/static/v1?style=for-the-badge&label=GitHub+Codespaces&message=Open&color=lightgrey&logo=github)](https://codespaces.new/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst)
# Curso de Inteligencia Artificial Generativa para Principiantes
Aprende los fundamentos de la construcción de aplicaciones de Inteligencia Artificial Generativa con este curso de 12 lecciones, impartido por los Cloud Advocates de Microsoft. Cada lección aborda un aspecto clave de los principios de la Inteligencia Artificial Generativa y el desarrollo de aplicaciones. A lo largo de este curso, construirás tu propia startup de Inteligencia Artificial Generativa (GenAI) para entender lo que necesitas para materializar tus ideas.
### 🌟 Agradecimientos especiales
A nuestros Embajadores Estudiantiles de Microsoft y a los autores, revisores y contribuyentes de la comunidad, incluyendo:
[**John Aziz**](https://www.linkedin.com/in/john0isaac/) - Por crear todas las GitHub Actions y workflows en GitHub.
## 🌱 Iniciemos!
Para empezar, [Realiza un fork al repositorio completo](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst) a tu propia cuenta de GitHub para poder modificar cualquier código y completar los desafíos. También puedes [marcar con una estrella (🌟) este repositorio](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst) para encontrarlo más rápido y fácilmente.
A continuación, se encuentran los enlaces a cada lección. ¡Siéntete libre de explorar y comenzar con la lección que más te interese!
Dirígete a la [Página de Configuración del Curso](../../00-course-setup/translations/es-mx/README.md?WT.mc_id=academic-105485-koreyst) para encontrar la guía de configuración que mejor se adapte a tus necesidades.
## 🗣️ Conoce a Otros Estudiantes para tener apoyo
¡Una de las mejores formas de aprender es hacerlo junto a otros! Únete a nuestro [servidor oficial de Discord de IA](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) para conocer a otros estudiantes que están tomando este curso, y obtener apoyo. ¡Quién sabe! Puede que encuentres a tu próximo cofundador allí.
## 🧠 ¿Quieres aprender más?
Después de completar este curso, echa un vistazo a nuestra [colección de Aprendizaje en Inteligencia Artificial Generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) ¡Para seguir mejorando tu conocimiento en Inteligencia Artificial Generativa!
## 🚀 ¿Eres una startup o tienes una idea que quisieras poner en marcha?
Regístrate a [FoundersHub de Microsoft para emprendedores](https://aka.ms/genai-foundershub?WT.mc_id=academic-105485-koreyst) para recibir **créditos gratuitos de OpenAI** y hasta **$150,000 en créditos de Azure para acceder a los modelos de OpenAI a través de los Servicios Azure OpenAI**.
## 🙏 ¿Quieres ayudar?
Aquí hay formas en las que puedes contribuir a este curso:
- Encuentra errores ortográficos o de código, [abre un issue](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst) o [Crea un pull request](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst)
- Envíanos tus ideas, quizás tengas propuestas para nuevas lecciones o ejercicios, y háznos saber cómo podemos mejorar.
## 📂 Cada lección incluye:
- Un video muy corto para introducir el tema
- Una lección escrita ubicada en el README
- Un cuaderno Jupyter con ejemplos de código (para lecciones basadas en proyectos)
- Un reto o tarea para aplicar lo aprendido
- Enlaces a recursos adicionales para continuar tu aprendizaje
## 🗃️ Lecciones
| | Enlace a la Lección | Conceptos Enseñados | Objetivo de Aprendizaje |
| :---: | :------------------------------------: | :---------------------------------------------------------: | ----------------------------------------------------------- |
| 00 | [Introducción al Curso - ¿Cómo Tomar Este Curso?](../../00-course-setup/translations/es-mx/README.md?WT.mc_id=academic-105485-koreyst) |Configuración técnica y estructura del curso | Preparándote para el éxito mientras aprendes en este curso|
| 01 | [Introducción a la Inteligencia Artificial Generativa y Modelos de Lenguaje de Gran Escala (LLMs, por sus siglas en inglés)](../../01-introduction-to-genai/translations/es-mx/README.md?WT.mc_id=academic-105485-koreyst) | **Concepto**: Inteligencia Artificial Generativa y el panorama tecnológico actual|Comprendiendo qué es la IA Generativa y cómo funcionan los LLMs|
| 02 | [Explorando y comparando diferentes LLMs](../../02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst) | **Concepto**:Probando, iterando y comparando diferentes Modelos de Lenguaje de Gran Escala (LLMs) | Seleccionar el modelo adecuado para tu caso de uso|
| 03 | [Utilizando la Inteligencia Artificial Generativa de manera Responsable](../../03-using-generative-ai-responsibly/README.md?WT.mc_id=academic-105485-koreyst)|**Concepto:** Comprendiendo las limitaciones de los modelos fundamentales y los riesgos asociados con la Inteligencia Artificial |Aprender a construir Aplicaciones de Inteligencia Artificial Generativa de manera responsable
| 04 | [Comprendiendo los Fundamentos de la Ingeniería de Indicaciones (Prompt Engineering)](../../04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst) | **Practica/Concepto:** Mejores técnicas de prompt engineering | Comprender la estructura y el uso de indicaciones (prompts)|
| 05 | [Creación de Prompts Avanzados](../../05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst) | **Código/Concepto** Amplía tus conocimientos de prompt engineering aplicando diferentes técnicas a tus indicaciones | Aplica técnicas de Prompt Engineering que mejoren el resultado de tus Prompts|
| 06 | [Construyendo Aplicaciones de Generación de Texto](../../06-text-generation-apps/README.md?WT.mc_id=academic-105485-koreyst) | **Código:** Construir una aplicación de generación de texto utilizando Azure OpenAI | Comprender cómo utilizar eficientemente los tokens y la temperatura para variar la salida del modelo | |
| 07 | [Construyendo aplicaciones de chat](../../07-building-chat-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Código**: Técnicas para construir e integrar eficientemente aplicaciones de chat.| Identificar métricas clave y consideraciones para monitorear y mantener efectivamente la calidad de las aplicaciones de chat impulsadas por inteligencia artificial|
| 08 | [Construyendo aplicaciones de búsqueda con bases de datos vectoriales.](../../08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Código:** Búsqueda semántica vs búsqueda por palabras clave. Aprende sobre incrustaciones de texto y cómo se aplican a la búsqueda.|Crea una aplicación que utilice incrustaciones (embeddings) para buscar datos |
| 09 | [Construyendo aplicaciones de generación de imágenes](../../09-building-image-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Código:** Generación de imágenes y por qué es útil en la construcción de aplicaciones| Construir una aplicación de generación de imágenes |
| 10 | [Construyendo Aplicaciones de Inteligencia Artificial con Low Code](../../10-building-low-code-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Low Code:** Introducción a la Inteligencia Artificial Generativa en Power Platform | Construye una aplicación de seguimiento de tareas estudiantiles para nuestra startup educativa con una plataforma de low code | |
| 11 | [Integrando aplicaciones externas mediante llamadas a funciones](../../11-integrating-with-function-calling/README.md?WT.mc_id=academic-105485-koreyst) | **Código:** ¿Qué es la llamada a funciones y cuáles son sus casos de uso en aplicaciones? | Configura una llamada a función para recuperar datos de una API externa | |
| 12 | [Diseñando la experiencia de usuario (UX) para aplicaciones de inteligencia artificial (IA).](../../12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Concepto:** Diseñando aplicaciones de inteligencia artificial para confianza y transparencia | Aplicar principios de diseño de experiencia de usuario (UX) al desarrollar aplicaciones de inteligencia artificial generativa| |
| xx | [Continua tu aprendizaje](../../13-continued-learning/README.md?WT.mc_id=academic-105485-koreyst) | Enlaces para continuar tu aprendizaje desde cada lección | Mejorando tus habilidades en inteligencia artificial generativa | |
## 🎒 Otros Cursos
¡Nuestro equipo produce otros cursos! Échales un vistazo a:
- [Machine Learning para principiantes](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
- [Ciencia de Datos para Principiantes](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
- [Inteligencia Artificial (AI) para principiantes](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
- [Web Dev para principiantes](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
- [IoT para principiantes](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
- [Desarrollo de Realidad Extendida (XR) para Principiantes](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
- [Aprovecha el potencial de GitHub Copilot](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)