diff --git a/01-introduction-to-genai/translations/cn/README.md b/01-introduction-to-genai/translations/cn/README.md index eda2b5191..fd8ed1f6b 100644 --- a/01-introduction-to-genai/translations/cn/README.md +++ b/01-introduction-to-genai/translations/cn/README.md @@ -1,8 +1,8 @@ # 第一章 : 生成式人工智能和 LLMs 介绍 -[![Introduction to Generative AI and Large Language Models](../../images/01-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/vf_mZrn8ibc?WT.mc_id=academic-105485-koreyst) +[![Introduction to Generative AI and Large Language Models](../../images/01-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=36c6795a-e63c-46dd-8d69-df8bbe6e7bc9?WT.mc_id=academic-105485-koreyst) -*(点击该图片看本章导学视频)* +_(点击该图片看本章导学视频)_ 生成式人工智能是能够生成文本、图像和其他类型内容的人工智能。 它之所以成为一项出色的技术,是因为它使人工智能更通用化,任何人都可以使用它,只需简单文本提示,使用自然语言编写的提示词。 你不需要学习 Java 或 SQL 这样的语言来完成一些有价值的事情,你只需要使用你的日常语言,描述需要的东西,然后 LLMs 就会给出相关建议。 其应用场景和影响是巨大的,您可以在几秒钟内完成写作或理解报告、编写应用程序等。 @@ -12,23 +12,23 @@ 本课程将包含以下内容: -* 业务场景介绍:我们的创业理念和使命。 -* 生成式人工智能以及我们如何适应当前的技术格局。 -* LLMs 的内部工作原理。 -* LLMs 的主要功能和实际用例。 +- 业务场景介绍:我们的创业理念和使命。 +- 生成式人工智能以及我们如何适应当前的技术格局。 +- LLMs 的内部工作原理。 +- LLMs 的主要功能和实际用例。 ## 学习目标 学习完本课程后,您将会了解到: -* 什么是生成式人工智能以及 LLMs 如何工作。 -* 如何针对不同的使用 LLMs 的例子(这里我们重点关注教育场景)。 +- 什么是生成式人工智能以及 LLMs 如何工作。 +- 如何针对不同的使用 LLMs 的例子(这里我们重点关注教育场景)。 -## 场景: our educational startup +## 场景: our educational startup 生成人工智能 (AI) 代表了人工智能技术的巅峰,突破了曾经被认为不可能的界限。 生成式人工智能模型具有多模态的功能,在本课程中,我们将会讲述一间虚构的初创公司利用生成式人工智能改变传统教育方式的故事。 我们将这家初创公司称为“Our startup”。 Our startup 致力于教育领域,其雄心勃勃的使命宣言是 -> *在全球范围内提高学习的可及性,确保公平的受教育机会,并根据每个学习者的需求为他们提供个性化的学习体验*。 +> _在全球范围内提高学习的可及性,确保公平的受教育机会,并根据每个学习者的需求为他们提供个性化的学习体验_。 我们的初创团队意识到,如果不利用现代最强大的工具之—— LLM,我们将无法实现这一目标。 @@ -63,7 +63,7 @@ ![AI、ML、DL 和生成式 AI](../../images/AI-diagram.png?WT.mc_id=academic-105485-koreyst) -经过人工智能领域数十年的研究,一种名为 *Transformer* 的新模型架构克服了 RNN 的限制,能够获得更长的文本序列作为输入。 Transformer 基于注意力机制,使模型能够为其接收到的输入赋予不同的权重,“更加专注于”关联信息集中的地方,不管它们在文本序列中的顺序如何。 +经过人工智能领域数十年的研究,一种名为 _Transformer_ 的新模型架构克服了 RNN 的限制,能够获得更长的文本序列作为输入。 Transformer 基于注意力机制,使模型能够为其接收到的输入赋予不同的权重,“更加专注于”关联信息集中的地方,不管它们在文本序列中的顺序如何。 生成式人工智能模也称为 LLM,因为它们使用文本输入和输出的架构。 这些模型的有趣之处在于,它们经过来自书籍、文章和网站等不同来源的大量未标记数据的训练,可以适应各种各样的任务,并以创造性的方式生成语法正确的文本。 因此,它们不仅极大地增强了机器“理解”输入文本的能力,而且使机器能够以人类语言生成原始响应。 @@ -71,50 +71,48 @@ 在下一章中,我们将探索不同类型的生成式 AI 模型,但现在让我们看看大型语言模型是如何工作的,重点是 OpenAI GPT(生成式预训练 Transformer)模型。 -* **分词器,文本到数字**:大型语言模型接收文本作为输入并生成文本作为输出。 然而,作为统计模型,它们对数字的处理效果对比起文本序列的处理效果要好得多。 这就是为什么模型的每个输入在被核心模型使用之前都由分词器处理。 标记是一段文本——由可变数量的字符组成,因此标记器的主要任务是将输入分割成标记数组。 然后,每个令牌都映射有一个令牌索引,该索引是原始文本块的整数编码。 +- **分词器,文本到数字**:大型语言模型接收文本作为输入并生成文本作为输出。 然而,作为统计模型,它们对数字的处理效果对比起文本序列的处理效果要好得多。 这就是为什么模型的每个输入在被核心模型使用之前都由分词器处理。 标记是一段文本——由可变数量的字符组成,因此标记器的主要任务是将输入分割成标记数组。 然后,每个令牌都映射有一个令牌索引,该索引是原始文本块的整数编码。 ![Example of tokenization](../../images/tokenizer-example.png?WT.mc_id=academic-105485-koreyst) -* **预测输出标记**:给定 n 个标记作为输入(最大 n 因模型而异),模型能够预测一个标记作为输出。 然后,该标记会以扩展窗口模式合并到下一次迭代的输入中,从而获得一个(或多个)句子作为答案,生成结果有更好的用户体验。 这解释了为什么如果您曾经使用过 ChatGPT,您可能会注意到有时它在生成结果时在句子中间出现停顿。 +- **预测输出标记**:给定 n 个标记作为输入(最大 n 因模型而异),模型能够预测一个标记作为输出。 然后,该标记会以扩展窗口模式合并到下一次迭代的输入中,从而获得一个(或多个)句子作为答案,生成结果有更好的用户体验。 这解释了为什么如果您曾经使用过 ChatGPT,您可能会注意到有时它在生成结果时在句子中间出现停顿。 -* **选择过程,概率分布**:模型根据其在当前文本序列之后出现的概率来选择输出标记。 这是因为该模型预测了根据其训练计算出的所有可能的“下一个标记”的概率分布。 然而,并不总是从结果分布中选择概率最高的标记。 这种选择增加了一定程度的随机性,模型以非确定性方式运行——对于相同的输入,我们不会得到完全相同的输出。 添加这种程度的随机性是为了模拟人类创造性思维的过程,您可以使用称为温度的模型参数进行调整。 +- **选择过程,概率分布**:模型根据其在当前文本序列之后出现的概率来选择输出标记。 这是因为该模型预测了根据其训练计算出的所有可能的“下一个标记”的概率分布。 然而,并不总是从结果分布中选择概率最高的标记。 这种选择增加了一定程度的随机性,模型以非确定性方式运行——对于相同的输入,我们不会得到完全相同的输出。 添加这种程度的随机性是为了模拟人类创造性思维的过程,您可以使用称为温度的模型参数进行调整。 ## “Our startup” 如何利用 LLMs ? -现在我们对 LLMs 的内部工作有了更好的了解,让我们看看它们可以很好地执行的最常见任务的一些实际示例,并着眼于我们的业务场景。 -我们说过, LLMs 的主要功能是*从头开始生成文本,从文本输入开始,用自然语言编写*。 +现在我们对 LLMs 的内部工作有了更好的了解,让我们看看它们可以很好地执行的最常见任务的一些实际示例,并着眼于我们的业务场景。 +我们说过, LLMs 的主要功能是*从头开始生成文本,从文本输入开始,用自然语言编写*。 但是是什么样的文本输入和输出呢? 大型语言模型的输入称为提示,而输出称为补全,术语指的是生成下一个标记来完成当前输入的模型机制。 我们将深入探讨什么是提示以及如何设计它以充分和我们的模型进行交流。 但现在,我们假设提示可能包括: -* 通过一条**指令**,指定我们期望模型输出的类型。 该指令有时可能会嵌入一些示例或一些附加数据。 +- 通过一条**指令**,指定我们期望模型输出的类型。 该指令有时可能会嵌入一些示例或一些附加数据。 - 1. 文章、书籍、产品评论等的总结,以及从非结构化数据中提取见解。 + 1. 文章、书籍、产品评论等的总结,以及从非结构化数据中提取见解。 - ![摘要示例](../../images/summarization-example.png?WT.mc_id=academic-105485-koreyst) + ![摘要示例](../../images/summarization-example.png?WT.mc_id=academic-105485-koreyst) + 2. 文章、论文、作业等的创意构思和设计。 - 2. 文章、论文、作业等的创意构思和设计。 + ![创意写作示例](../../images/creative-writing-example.png?WT.mc_id=academic-105485-koreyst) - ![创意写作示例](../../images/creative-writing-example.png?WT.mc_id=academic-105485-koreyst) +- **问题**,以与代理对话的形式提出。 -* **问题**,以与代理对话的形式提出。 + ![对话示例](../../images/conversation-example.png?WT.mc_id=academic-105485-koreyst) - ![对话示例](../../images/conversation-example.png?WT.mc_id=academic-105485-koreyst) +- **文本补全**,这隐含着对写作帮助的请求。 -* **文本补全**,这隐含着对写作帮助的请求。 + ![文本完成示例](../../images/text-completion-example.png?WT.mc_id=academic-105485-koreyst) - ![文本完成示例](../../images/text-completion-example.png?WT.mc_id=academic-105485-koreyst) +- **代码**解释和记录需求,或者要求生成执行特定任务的一段代码的注释。 -* **代码**解释和记录需求,或者要求生成执行特定任务的一段代码的注释。 - - ![编码示例](../../images/coding-example.png?WT.mc_id=academic-105485-koreyst) + ![编码示例](../../images/coding-example.png?WT.mc_id=academic-105485-koreyst) 以上的例子非常简单,并不是对生成式人工智能功能的详尽演示。 只是想展示使用生成式人工智能的潜力,并不局限于教育领域。 此外,生成式人工智能模型的输出并不完美,有时模型的创造力可能会对其产生不利影响,导致输出是人类用户可以将其解释为现实神秘化的单词组合,或者具有攻击性。 生成式人工智能并不智能——至少在更全面的智能定义中是这样,包括批判性和创造性推理或情商; 它不是确定性的,也不值得信赖,因为错误的引用、内容和陈述等幻觉可能会与正确的信息结合起来,并以有说服力和自信的方式呈现。 在接下来的课程中,我们将处理所有这些限制,并了解可以采取哪些措施来降低影响。 - ## 任务 你的任务是阅读更多关于生成式人工智能(https://en.wikipedia.org/wiki/Generative_artificial_intelligence)的内容,并尝试找出一个你现在可以添加生成式人工智能但目前还没有的领域。 与用“旧式方法”做有什么不同,你能做一些你以前做不到的事情吗,或者生成的时候速度更快吗? 写一篇 300 字的摘要,描述您梦想的人工智能初创公司的样子,包括“问题”、“我将如何使用人工智能”、“影响”等标题,还可以选择做一份商业计划。 diff --git a/01-introduction-to-genai/translations/es-mx/README.md b/01-introduction-to-genai/translations/es-mx/README.md index 2bb6efd30..1e53ee579 100644 --- a/01-introduction-to-genai/translations/es-mx/README.md +++ b/01-introduction-to-genai/translations/es-mx/README.md @@ -1,8 +1,8 @@ # 📚 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) +[![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://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=36c6795a-e63c-46dd-8d69-df8bbe6e7bc9?WT.mc_id=academic-105485-koreyst) -*(Haz clic en la imagen de arriba para ver el video de esta lección)* +_(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. @@ -12,23 +12,23 @@ En este plan de estudios, exploraremos cómo nuestra startup aprovecha la inteli 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. +- 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. +- 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 +## 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.*. +> _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). @@ -40,7 +40,7 @@ Para empezar, definamos algunos conceptos y terminología básicos que utilizare ## ¿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. +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. @@ -62,7 +62,7 @@ Así es como llegamos a la Inteligencia Artificial Generativa hoy en día, que s ![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. +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. @@ -70,26 +70,26 @@ La mayoría de los modelos recientes de Inteligencia Artificial Generativa, tamb 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. +- **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. +- **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. +- **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*. +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. +- 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) + 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)
@@ -98,21 +98,22 @@ La entrada de un gran modelo de lenguaje se conoce como "prompt" (indicación), ![Ejemplo de escritura creativa](../../images/creative-writing-example.png?WT.mc_id=academic-105485-koreyst)
- -* Una **pregunta**, preguntado en forma de conversación con un agente. - + + +- 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)
-* Un fragmento de **texto por completar**, lo cual implícitamente es una solicitud de ayuda en la escritura. - +- 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)
-* 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. - +- 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)
@@ -134,7 +135,7 @@ Si realizas esta tarea, incluso podrías estar listo para postularte al programa 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! diff --git a/01-introduction-to-genai/translations/ja-jp/README.md b/01-introduction-to-genai/translations/ja-jp/README.md index e95506168..435add0aa 100644 --- a/01-introduction-to-genai/translations/ja-jp/README.md +++ b/01-introduction-to-genai/translations/ja-jp/README.md @@ -1,8 +1,8 @@ # 生成 AI と大規模言語モデルの紹介 -[![Introduction to Generative AI and Large Language Models](../../images/01-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://youtu.be/vf_mZrn8ibc?WT.mc_id=academic-105485-yoterada) +[![Introduction to Generative AI and Large Language Models](../../images/01-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=36c6795a-e63c-46dd-8d69-df8bbe6e7bc9?WT.mc_id=academic-105485-yoterada) -> *(上記の画像をクリックすると、レッスン・ビデオを表示します)* +> _(上記の画像をクリックすると、レッスン・ビデオを表示します)_ 生成 AI は、テキストや画像などのコンテンツを生成する人工知能 (Artificial Intelligence) です。この技術が素晴らしいのは、AI を誰でも使えるようにしている所で、自然言語で書いた文章やテキスト・プロンプトだけで利用できます。 皆様にとって価値のある何らかの成果を生み出すために、Java や SQL のような言語を学ぶ必要はありません。普段使っている自分の言葉で要望を伝えるだけで、AI モデルから提案が返ってきます。この技術を使えば、報告書を書いたり、その内容を理解するためのアプリケーションが、わずか数秒でできるようになります。その可能性と影響力は計り知れません。 @@ -13,17 +13,17 @@ このレッスンでは、下記の内容について説明します。 -* ビジネスシナリオの紹介: スタートアップのアイデアとミッション -* 生成 AI と、技術的な歴史背景 -* 大規模言語モデルの内部動作 -* 大規模言語モデルの主な機能と実用的なユースケース +- ビジネスシナリオの紹介: スタートアップのアイデアとミッション +- 生成 AI と、技術的な歴史背景 +- 大規模言語モデルの内部動作 +- 大規模言語モデルの主な機能と実用的なユースケース ## 学習目標 このレッスンを修了すると、下記を理解できます: -* 生成 AI とは何か、そして大規模言語モデルの仕組みを理解する -* 教育シナリオに重点を置き、さまざまなユース・ケースで大規模言語モデルを活用する方法を理解する +- 生成 AI とは何か、そして大規模言語モデルの仕組みを理解する +- 教育シナリオに重点を置き、さまざまなユース・ケースで大規模言語モデルを活用する方法を理解する ## シナリオ: 教育関連事業をターゲットにするスタートアップ企業 @@ -31,7 +31,7 @@ 生成 AI モデルは様々な機能と用途で利用可能ですが、このカリキュラムでは、架空のスタートアップ企業を通じて教育分野でどのように革新していくのかを学んでいきます。この新興企業を「スタートアップ」と呼びます。 スタートアップは、教育の領域において下記の野心的な目標を持って事業を行っています。 -> *世界規模で学習の利便性を高め、教育に対する平等な機会を実現し、学習者一人ひとりの要望に応える個別学習体験を提供します。* +> _世界規模で学習の利便性を高め、教育に対する平等な機会を実現し、学習者一人ひとりの要望に応える個別学習体験を提供します。_ スタートアップチームは、大規模言語モデル(LLM)という現在最も強力なツールを使わなければ、上記の目標を達成するのが難しいと考えています。 @@ -45,16 +45,16 @@ 最近発表された、生成 AI モデルは大きな注目を集めていますが、この技術は過去数十年にわたる開発の歴史があり、初期の研究は 1960 年代までさかのぼります。そして今、AI 技術は [OpenAI の ChatGPT](https://openai.com/chatgpt) や [Bing Chat](https://www.microsoft.com/edge/features/bing-chat?WT.mc_id=academic-105485-yoterada) のように会話能力を有するなど、人間の認知能力を持つレベルにまで達しています。また、これらのチャットシステムは、Bing の Web 検索における対話でも GPT モデルを採用しています。 -AI の歴史を振り返ると、初期の AI のプロトタイプは、テキストの手入力した内容(打ち込んだ文字情報)に基づいて回答するチャットボットで、専門家集団から抽出した知識をベースに、それをコンピューターに表現していました。知識ベースによる回答は、入力テキスト内に出現するキーワードがトリガーになっていました。しかし、人間による手入力形式のチャットボットは、スケール・アウトが難しいのに気づきました。 +AI の歴史を振り返ると、初期の AI のプロトタイプは、テキストの手入力した内容(打ち込んだ文字情報)に基づいて回答するチャットボットで、専門家集団から抽出した知識をベースに、それをコンピューターに表現していました。知識ベースによる回答は、入力テキスト内に出現するキーワードがトリガーになっていました。しかし、人間による手入力形式のチャットボットは、スケール・アウトが難しいのに気づきました。 ### 統計学的手法を基にした AI 技術: 機械学習 -1990年代に入り、テキスト解析に統計学的手法を応用し、転換点が訪れました。 +1990 年代に入り、テキスト解析に統計学的手法を応用し、転換点が訪れました。 これにより、データからパターンを学習する新しいアルゴリズムが開発されました。これは「機械学習」として知られ、学習にプログラミングを必要としませんでした。この手法により、機械は人間の言語理解を再現できるようになります。テキストとラベルの組み合わせで訓練された統計モデルが、メッセージの意図を示す定義済みのラベルで、未知の入力テキストを分類できるようになります。 ### ニューラルネットワーク(神経回路網)と最新の仮想アシスタント -最近では、より大量のデータと、複雑な計算を処理できるハードウェアの進化が、AI 分野の研究をさらに促進し、ニューラル・ネットワークやディープラーニング・アルゴリズムと呼ばれる高度な機械学習アルゴリズムの開発につながりました。 +最近では、より大量のデータと、複雑な計算を処理できるハードウェアの進化が、AI 分野の研究をさらに促進し、ニューラル・ネットワークやディープラーニング・アルゴリズムと呼ばれる高度な機械学習アルゴリズムの開発につながりました。 ニューラルネットワーク(特に再帰型ニューラルネットワーク - RNN と呼ばれる)は、自然言語処理を飛躍的に進化させ、文章中に含まれる単語の意味を、文脈を考慮して評価し、より有益な方法でテキストの意図を表現できるようになりました。 @@ -62,25 +62,25 @@ AI の歴史を振り返ると、初期の AI のプロトタイプは、テキ ### 現在の生成 AI -このような経緯を経て、今日における生成 AI が誕生しました。これはディープラーニングのサブセットとして考えられます。 +このような経緯を経て、今日における生成 AI が誕生しました。これはディープラーニングのサブセットとして考えられます。 ![AI, ML, DL and Generative AI](../../images/AI-diagram.png?WT.mc_id=academic-105485-yoterada) -長年の AI 研究を経て、*トランスフォーマー* と呼ばれる新しいモデルのアーキテクチャが登場し、RNN の限界を越え、より長文テキストのシーケンスを入力として受け取れるようになりました。トランスフォーマーは、アテンションメカニズム(注意機構)を採用しており、モデルが、受け取った入力に対して異なる重み付けを行います。これにより、テキスト内の単語の並ぶ順番に関わらず、最も関連性の高い情報が集中している部分に「より多くの注意を払う」ようになります。 +長年の AI 研究を経て、_トランスフォーマー_ と呼ばれる新しいモデルのアーキテクチャが登場し、RNN の限界を越え、より長文テキストのシーケンスを入力として受け取れるようになりました。トランスフォーマーは、アテンションメカニズム(注意機構)を採用しており、モデルが、受け取った入力に対して異なる重み付けを行います。これにより、テキスト内の単語の並ぶ順番に関わらず、最も関連性の高い情報が集中している部分に「より多くの注意を払う」ようになります。 -最近の生成 AI モデルの多くは、文章の入出力を行う「大規模言語モデル(LLM)」とも呼ばれており、実際にこのアーキテクチャに基づいています。これらのモデルが注目される理由は、書籍、記事、ウェブサイトなど様々な情報源から、膨大なラベルなしデータとして訓練されているにも関わらず、創造性を備え文法も正しい文章を作り出すのが特筆すべき点です。したがって、これらのモデルは、機械が入力されたテキストを「理解」する能力を飛躍的に向上させただけでなく、人間の言葉で独自の回答を作り出す能力も実現しました。 +最近の生成 AI モデルの多くは、文章の入出力を行う「大規模言語モデル(LLM)」とも呼ばれており、実際にこのアーキテクチャに基づいています。これらのモデルが注目される理由は、書籍、記事、ウェブサイトなど様々な情報源から、膨大なラベルなしデータとして訓練されているにも関わらず、創造性を備え文法も正しい文章を作り出すのが特筆すべき点です。したがって、これらのモデルは、機械が入力されたテキストを「理解」する能力を飛躍的に向上させただけでなく、人間の言葉で独自の回答を作り出す能力も実現しました。 ## 大規模言語モデルの仕組みを教えてください -次の章では、さまざまな種類の生成 AI モデルについて詳しく説明しますが、その前に、OpenAI の GPT(Generative Pre-trained Transformer)モデルを中心に、大規模言語モデルがどのように機能するのかを確認しましょう。 +次の章では、さまざまな種類の生成 AI モデルについて詳しく説明しますが、その前に、OpenAI の GPT(Generative Pre-trained Transformer)モデルを中心に、大規模言語モデルがどのように機能するのかを確認しましょう。 -* **トークナイザー、テキストから数値へ**: 大規模言語モデルは、テキストを入力として受け取り、テキストを出力として生成します。ただし、統計モデルのため、テキスト・シーケンスよりも数値の方が、とてもうまく機能します。そこでモデルに対するすべての入力は、コア・モデルが使用する前に、トークナイザーで処理されます。トークンは文字の塊で、可変数の文字から構成されています。トークナイザーは、入力された文字列をトークン毎に分割し、トークン配列に格納する処理を行います。その後、各トークンはトークン・インデックスと結びつけられます。トークン・インデックスは元のテキストのチャンク(断片)を整数で符号化したものになります。 +- **トークナイザー、テキストから数値へ**: 大規模言語モデルは、テキストを入力として受け取り、テキストを出力として生成します。ただし、統計モデルのため、テキスト・シーケンスよりも数値の方が、とてもうまく機能します。そこでモデルに対するすべての入力は、コア・モデルが使用する前に、トークナイザーで処理されます。トークンは文字の塊で、可変数の文字から構成されています。トークナイザーは、入力された文字列をトークン毎に分割し、トークン配列に格納する処理を行います。その後、各トークンはトークン・インデックスと結びつけられます。トークン・インデックスは元のテキストのチャンク(断片)を整数で符号化したものになります。 ![トークン化の例](../../images/tokenizer-example.png?WT.mc_id=academic-105485-yoterada) -* **出力トークンの予測**: 入力として n 個のトークンを受け取ると(モデルによって n の最大値は異なります)、モデルは出力として 1 個のトークンを予測する力を持っています。この予測されたトークンは次の反復処理の入力に追加され、拡張ウィンドウ・パターンにより、利用者が 1 つ以上の文を回答として得られるようになります。これは、ChatGPT を試した時に、文の途中で時々処理が停止するような動きにつながる理由です。 +- **出力トークンの予測**: 入力として n 個のトークンを受け取ると(モデルによって n の最大値は異なります)、モデルは出力として 1 個のトークンを予測する力を持っています。この予測されたトークンは次の反復処理の入力に追加され、拡張ウィンドウ・パターンにより、利用者が 1 つ以上の文を回答として得られるようになります。これは、ChatGPT を試した時に、文の途中で時々処理が停止するような動きにつながる理由です。 -* **選考過程、確率分布**: モデルは、現在のテキストの順番の後ろに続く文字を、確率的に可能性の高い結果に基づいて出力トークンを選びます。これは、モデルが過去の訓練に基づいて、「次に出現するトークン」の各選択肢についてどれだけ確率が高いかを計算し、その全体の確率分布を推論しているからです。ただし、得られた分布から最も確率の高いトークンが必ず選ばれるとは限りません。この選択には、ある程度のランダム性が導入されており、モデルが決定的に振る舞わないようにしています。つまり同じ入力に対して必ずしも同じ出力結果が得られるわけではありません。このランダム性は、創造的な思考過程を模倣するために導入され、温度 (temperature) というパラメータで調整できます。 +- **選考過程、確率分布**: モデルは、現在のテキストの順番の後ろに続く文字を、確率的に可能性の高い結果に基づいて出力トークンを選びます。これは、モデルが過去の訓練に基づいて、「次に出現するトークン」の各選択肢についてどれだけ確率が高いかを計算し、その全体の確率分布を推論しているからです。ただし、得られた分布から最も確率の高いトークンが必ず選ばれるとは限りません。この選択には、ある程度のランダム性が導入されており、モデルが決定的に振る舞わないようにしています。つまり同じ入力に対して必ずしも同じ出力結果が得られるわけではありません。このランダム性は、創造的な思考過程を模倣するために導入され、温度 (temperature) というパラメータで調整できます。 ## スタートアップは、大規模言語モデルをどのように活用できるでしょうか? @@ -91,52 +91,57 @@ AI の歴史を振り返ると、初期の AI のプロトタイプは、テキ しかし、具体的にどのようなテキストの入力と出力を想定しているのでしょうか? 大規模言語モデルの入力は「プロンプト」と呼ばれ、出力は「コンプリーション」と呼ばれています。これは、モデルが現在の入力に続く次のトークンを生成する仕組みを表しています。これからプロンプトの意味や、モデルを最大限に活用するための設計方法について詳しく確認していきますが、とりあえず現時点では、プロンプトは以下のような要素が含まれるとお考えください: -* **プロンプト(指示)**:モデルに対して、期待する出力結果や、出力フォーマットの種類を指定する。この指示には、場合によっては具体例やその他のデータを追加で埋め込めます。 +- **プロンプト(指示)**:モデルに対して、期待する出力結果や、出力フォーマットの種類を指定する。この指示には、場合によっては具体例やその他のデータを追加で埋め込めます。 + + 1. 記事、書籍、製品レビューなどの要約と、非構造化データから知見(インサイト)の抽出 + + 訳者追記: + + - Can you please summarize the following text for me ? + - 以下のテキストの内容を要約していただけますか? + + ![Example of summarization](../../images/summarization-example.png?WT.mc_id=academic-105485-yoterada) - 1. 記事、書籍、製品レビューなどの要約と、非構造化データから知見(インサイト)の抽出 - - 訳者追記: - - Can you please summarize the following text for me ? - - 以下のテキストの内容を要約していただけますか? - - ![Example of summarization](../../images/summarization-example.png?WT.mc_id=academic-105485-yoterada) -
1. 記事、エッセイ、課題などのアイデアとデザインの作成 - 訳者追記: - - Please write an assignment for high school students including four open-ended questions about Louis XIV and his court. - - 高校生用の課題を作成します。ルイ14世と彼の宮廷について、自由に回答できる 4 つの質問を作成してください。 - - ![Example of creative writing](../../images/creative-writing-example.png?WT.mc_id=academic-105485-yoterada) - + 訳者追記: + + - Please write an assignment for high school students including four open-ended questions about Louis XIV and his court. + - 高校生用の課題を作成します。ルイ 14 世と彼の宮廷について、自由に回答できる 4 つの質問を作成してください。 + + ![Example of creative writing](../../images/creative-writing-example.png?WT.mc_id=academic-105485-yoterada) +
-* **質問**:エージェントに対して会話形式で質問を尋ねる +- **質問**:エージェントに対して会話形式で質問を尋ねる - 訳者追記: - - Who is Louis XIV and why he is an important historical character? - - ルイ14世はどういう人で、なぜ彼は歴史的に重要な人物なのですか? -![Example of conversation](../../images/conversation-example.png?WT.mc_id=academic-105485-yoterada) + 訳者追記: + - Who is Louis XIV and why he is an important historical character? + - ルイ14世はどういう人で、なぜ彼は歴史的に重要な人物なのですか? + + ![Example of conversation](../../images/conversation-example.png?WT.mc_id=academic-105485-yoterada)
-* **テキストの補完** : 続きを書く。文章を完成させるための執筆依頼をしています +- **テキストの補完** : 続きを書く。文章を完成させるための執筆依頼をしています + + 訳者追記: - 訳者追記: - - Louis XIV is an important historical character because - - ルイ14世が歴史的に重要な人物である理由は + - Louis XIV is an important historical character because + - ルイ 14 世が歴史的に重要な人物である理由は ![Example of text completion](../../images/text-completion-example.png?WT.mc_id=academic-105485-yoterada)
-* **プログラムコード**: プログラムに関する説明や、コード記述を求める依頼。または特定の作業を行うコード生成を依頼します。 +- **プログラムコード**: プログラムに関する説明や、コード記述を求める依頼。または特定の作業を行うコード生成を依頼します。 + + 訳者追記: - 訳者追記: - - A Python function to sum two numbers a and b - - 二つの数値 a と b を合計する Python の関数 + - A Python function to sum two numbers a and b + - 二つの数値 a と b を合計する Python の関数 ![Coding example](../../images/coding-example.png?WT.mc_id=academic-105485-yoterada) @@ -150,7 +155,7 @@ AI の歴史を振り返ると、初期の AI のプロトタイプは、テキ この課題では、「生成 AI」に関する知識を深め、まだ生成 AI が導入されていない領域を特定し、そこにどう取り込めるかを検討してください。 -従来の方法と比べて、どのような違いがあるでしょうか?これまでにできなかった処理が、実現可能になるか、作業の速度が上がるかをご検討ください。「問題点」「AIの活用方法」「導入による効果」といった見出しを用いて、皆様がこれから創業する理想の AI スタートアップを 300 文字でまとめてください。可能であれば、ビジネスプランも記述してください。 +従来の方法と比べて、どのような違いがあるでしょうか?これまでにできなかった処理が、実現可能になるか、作業の速度が上がるかをご検討ください。「問題点」「AI の活用方法」「導入による効果」といった見出しを用いて、皆様がこれから創業する理想の AI スタートアップを 300 文字でまとめてください。可能であれば、ビジネスプランも記述してください。 この課題を達成すれば、マイクロソフトのスタートアップ用インキュベータープログラム、[Microsoft for Startups Founders Hub](https://www.microsoft.com/startups?WT.mc_id=academic-105485-yoterada) への応募資格が得られるかもしれません。Azure や OpenAI の使用クレジット、メンタリング、その他多くの支援を提供していますので、詳細はウェブサイトをご覧ください。 diff --git a/01-introduction-to-genai/translations/pt-br/README.md b/01-introduction-to-genai/translations/pt-br/README.md index eff60d7af..18c02b3f8 100644 --- a/01-introduction-to-genai/translations/pt-br/README.md +++ b/01-introduction-to-genai/translations/pt-br/README.md @@ -1,8 +1,8 @@ # Introdução à Inteligência Artificial Generativa e Grandes Modelos de Linguagem -[![Introduction to Generative AI and Large Language Models](../../images/01-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/vf_mZrn8ibc?WT.mc_id=academic-105485-koreyst) +[![Introduction to Generative AI and Large Language Models](../../images/01-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=36c6795a-e63c-46dd-8d69-df8bbe6e7bc9?WT.mc_id=academic-105485-koreyst) -*(Clique na imagem acima para assistir ao vídeo desta lição)* +_(Clique na imagem acima para assistir ao vídeo desta lição)_ A Inteligência Artificial Generativa é uma forma de inteligência artificial capaz de gerar texto, imagens e outros tipos de conteúdo. O que a faz uma tecnologia fantástica é que ela democratiza a IA. Além disso, qualquer pessoa pode usá-la com apenas uma pequena frase, uma sentença escrita em uma linguagem natural. Não é necessário aprender uma linguagem como Java ou SQL para realizar algo significativo. Tudo o que você precisa fazer é usar sua própria linguagem, declarar o que deseja e uma sugestão de um modelo de IA será gerada. As aplicações e o impacto disso são enormes: você pode escrever ou compreender relatórios, criar aplicações e muito mais, tudo em questão de segundos. @@ -12,23 +12,23 @@ Neste currículo, exploraremos como nossa startup aproveita a IA generativa para Esta lição abordará: -* Introdução ao cenário de negócios: nossa ideia de startup e missão. -* Inteligência Artificial Generativa e como chegamos ao cenário tecnológico atual. -* Funcionamento interno de um grande modelo de linguagem. -* Principais capacidades e casos de uso práticos de Grandes Modelos de Linguagem. +- Introdução ao cenário de negócios: nossa ideia de startup e missão. +- Inteligência Artificial Generativa e como chegamos ao cenário tecnológico atual. +- Funcionamento interno de um grande modelo de linguagem. +- Principais capacidades e casos de uso práticos de Grandes Modelos de Linguagem. ## Objetivos de Aprendizado Após completar esta lição, você entenderá: -* O que é a Inteligência Artificial Generativa e como os Grandes Modelos de Linguagem funcionam. -* Como você pode aproveitar os Grandes Modelos de Linguagem para diferentes casos de uso, com foco em cenários de educação. +- O que é a Inteligência Artificial Generativa e como os Grandes Modelos de Linguagem funcionam. +- Como você pode aproveitar os Grandes Modelos de Linguagem para diferentes casos de uso, com foco em cenários de educação. ## Cenário: nossa startup educacional -A Inteligência Artificial Generativa (IA) representa o auge da tecnologia de IA, ultrapassando os limites do que antes era considerado impossível. Modelos de IA generativa têm várias capacidades e aplicações. Porém, neste currículo, exploraremos como ela está revolucionando a educação por meio de uma startup fictícia. Nos referiremos a essa startup como *nossa startup*. `Nossa startup` atua no domínio da educação com a ambiciosa declaração de missão: +A Inteligência Artificial Generativa (IA) representa o auge da tecnologia de IA, ultrapassando os limites do que antes era considerado impossível. Modelos de IA generativa têm várias capacidades e aplicações. Porém, neste currículo, exploraremos como ela está revolucionando a educação por meio de uma startup fictícia. Nos referiremos a essa startup como _nossa startup_. `Nossa startup` atua no domínio da educação com a ambiciosa declaração de missão: -> *Melhorar a acessibilidade na aprendizagem, em escala global, garantindo acesso equitativo à educação e proporcionando experiências de aprendizagem personalizadas a cada aluno(a), de acordo com suas necessidades*. +> _Melhorar a acessibilidade na aprendizagem, em escala global, garantindo acesso equitativo à educação e proporcionando experiências de aprendizagem personalizadas a cada aluno(a), de acordo com suas necessidades_. A equipe de nossa startup está ciente de que não será capaz de alcançar esse objetivo sem aproveitar uma das ferramentas mais poderosas dos tempos modernos - Grandes Modelos de Linguagem (LLMs). @@ -40,7 +40,7 @@ Para começar, vamos definir alguns conceitos e terminologia básica que usaremo ## Como surgiu a IA Generativa? -Apesar da extraordinária *hype* criada recentemente com o anúncio de modelos de IA generativa, essa tecnologia está em desenvolvimento há décadas, com os primeiros esforços de pesquisa datando dos anos 60. Agora estamos em um ponto em que a IA possui capacidades cognitivas humanas como conversação, como mostrado por exemplo, no [OpenAI ChatGPT](https://openai.com/chatgpt?WT.mc_id=academic-105485-koreyst) ou no [Bing Chat](https://www.microsoft.com/edge/features/bing-chat?WT.mc_id=academic-105485-koreyst), que também utiliza um modelo GPT para a pesquisa na web e conversas do Bing. +Apesar da extraordinária _hype_ criada recentemente com o anúncio de modelos de IA generativa, essa tecnologia está em desenvolvimento há décadas, com os primeiros esforços de pesquisa datando dos anos 60. Agora estamos em um ponto em que a IA possui capacidades cognitivas humanas como conversação, como mostrado por exemplo, no [OpenAI ChatGPT](https://openai.com/chatgpt?WT.mc_id=academic-105485-koreyst) ou no [Bing Chat](https://www.microsoft.com/edge/features/bing-chat?WT.mc_id=academic-105485-koreyst), que também utiliza um modelo GPT para a pesquisa na web e conversas do Bing. Voltando um pouco, os primeiros protótipos de IA consistiam em chatbots datilografados, baseando-se em uma base de conhecimento extraída de um grupo de especialistas e representada em um computador. As respostas na base de conhecimento eram acionadas por palavras-chave que apareciam no texto de entrada. No entanto, logo ficou claro que tal abordagem, usando chatbots datilografados, não se escalava bem. @@ -63,46 +63,46 @@ Foi assim que chegamos à IA Generativa de hoje, que pode ser vista como um subc ![IA, ML, AP e IA Generativa](../../images/AI-diagram.png?WT.mc_id=academic-105485-koreyst) -Depois de décadas de pesquisa no campo da IA, uma nova arquitetura de modelo - chamada *Transformer* - superou os limites das `RNNs`. Sendo capaz de receber sequências de texto muito mais longas como entrada. Os `Transformers` são baseados no mecanismo de atenção, permitindo que o modelo dê pesos diferentes às entradas que recebe, *prestando mais atenção* onde as informações mais relevantes estão concentradas, independentemente de sua ordem na sequência de texto. +Depois de décadas de pesquisa no campo da IA, uma nova arquitetura de modelo - chamada _Transformer_ - superou os limites das `RNNs`. Sendo capaz de receber sequências de texto muito mais longas como entrada. Os `Transformers` são baseados no mecanismo de atenção, permitindo que o modelo dê pesos diferentes às entradas que recebe, _prestando mais atenção_ onde as informações mais relevantes estão concentradas, independentemente de sua ordem na sequência de texto. -A maioria dos modelos recentes da IA generativa - também conhecidos como Grandes Modelos de Linguagem (LLMs), trabalham com entradas e saídas textuais e que, são de fato, baseados nessa arquitetura. O que é interessante sobre esses modelos - treinados em uma enorme quantidade de dados não rotulados de diversas fontes, como: livros, artigos e sites - é que eles podem ser adaptados para uma ampla variedade de tarefas e gerar texto gramaticalmente correto com uma semelhança de criatividade. Portanto, não apenas aumentaram incrivelmente a capacidade de uma máquina *entender* um texto de entrada. Mas também habilitaram sua capacidade de gerar uma resposta original em linguagem humana. +A maioria dos modelos recentes da IA generativa - também conhecidos como Grandes Modelos de Linguagem (LLMs), trabalham com entradas e saídas textuais e que, são de fato, baseados nessa arquitetura. O que é interessante sobre esses modelos - treinados em uma enorme quantidade de dados não rotulados de diversas fontes, como: livros, artigos e sites - é que eles podem ser adaptados para uma ampla variedade de tarefas e gerar texto gramaticalmente correto com uma semelhança de criatividade. Portanto, não apenas aumentaram incrivelmente a capacidade de uma máquina _entender_ um texto de entrada. Mas também habilitaram sua capacidade de gerar uma resposta original em linguagem humana. ## Como os Grandes Modelos de Linguagem funcionam? No próximo capítulo, vamos explorar diferentes tipos de modelos de IA generativa. Por enquanto, vamos dar uma olhada em como os grandes modelos de linguagem funcionam, com foco nos modelos do OpenAI GPT (`Generative Pre-trained Transformer`). -* **Tokenizador, texto para números**: Grandes Modelos de Linguagem, recebem um texto como entrada e geram um texto como saída. No entanto, sendo modelos estatísticos, eles funcionam muito melhor com números do que sequências de texto. É por isso que cada entrada no modelo é processada por um `tokenizador` antes de ser usada pelo modelo principal. Um `token` é um pedaço de texto - consistindo em um número variável de caracteres, portanto, a principal tarefa do tokenizador é dividir a entrada em uma matriz de tokens. Em seguida, cada token é mapeado com um índice de token, que é a codificação inteira do trecho de texto original. +- **Tokenizador, texto para números**: Grandes Modelos de Linguagem, recebem um texto como entrada e geram um texto como saída. No entanto, sendo modelos estatísticos, eles funcionam muito melhor com números do que sequências de texto. É por isso que cada entrada no modelo é processada por um `tokenizador` antes de ser usada pelo modelo principal. Um `token` é um pedaço de texto - consistindo em um número variável de caracteres, portanto, a principal tarefa do tokenizador é dividir a entrada em uma matriz de tokens. Em seguida, cada token é mapeado com um índice de token, que é a codificação inteira do trecho de texto original. ![Example of tokenization](../../images/tokenizer-example.png?WT.mc_id=academic-105485-koreyst) -* **Previsão de tokens de saída**: Dados `n` tokens como entrada (com o máximo `n` variando de um modelo para outro), o modelo é capaz de prever um token como saída. Esse token é então incorporado à entrada da próxima iteração em um padrão de janela expansiva. Possibilitando assim, uma melhor experiência do usuário em obter uma (ou várias) sentenças como resposta. Isso explica por que, se você já brincou com o ChatGPT, pode ter notado que às vezes parece que ele para no meio de uma frase. +- **Previsão de tokens de saída**: Dados `n` tokens como entrada (com o máximo `n` variando de um modelo para outro), o modelo é capaz de prever um token como saída. Esse token é então incorporado à entrada da próxima iteração em um padrão de janela expansiva. Possibilitando assim, uma melhor experiência do usuário em obter uma (ou várias) sentenças como resposta. Isso explica por que, se você já brincou com o ChatGPT, pode ter notado que às vezes parece que ele para no meio de uma frase. -* **Processo de seleção, distribuição de probabilidade**: O token de saída é escolhido pelo modelo de acordo com a probabilidade de ocorrer após a sequência de texto atual. Isso ocorre porque o modelo prevê uma distribuição de probabilidade sobre todos os possíveis *próximos tokens* calculados com base em seu treinamento. No entanto, nem sempre o token com a maior probabilidade é escolhido na distribuição resultante. Um grau de aleatoriedade é adicionado a essa escolha, de forma que o modelo age de maneira não determinística - não obtemos a mesma saída exata para a mesma entrada. Esse grau de aleatoriedade é adicionado para simular o processo de pensamento criativo e pode ser ajustado usando um parâmetro do modelo chamado temperatura. +- **Processo de seleção, distribuição de probabilidade**: O token de saída é escolhido pelo modelo de acordo com a probabilidade de ocorrer após a sequência de texto atual. Isso ocorre porque o modelo prevê uma distribuição de probabilidade sobre todos os possíveis _próximos tokens_ calculados com base em seu treinamento. No entanto, nem sempre o token com a maior probabilidade é escolhido na distribuição resultante. Um grau de aleatoriedade é adicionado a essa escolha, de forma que o modelo age de maneira não determinística - não obtemos a mesma saída exata para a mesma entrada. Esse grau de aleatoriedade é adicionado para simular o processo de pensamento criativo e pode ser ajustado usando um parâmetro do modelo chamado temperatura. ## Como nossa startup pode aproveitar os Grandes Modelos de Linguagem? Agora que temos uma melhor compreensão de como os grandes modelos de linguagem funcionam, vamos ver alguns exemplos práticos das tarefas mais comuns que eles podem realizar muito bem, com foco em nosso cenário de negócios. -Dissemos que a principal capacidade de um Grande Modelo de Linguagem é: *gerar um texto do zero, a partir de uma entrada textual, escrita em linguagem natural*. +Dissemos que a principal capacidade de um Grande Modelo de Linguagem é: _gerar um texto do zero, a partir de uma entrada textual, escrita em linguagem natural_. Mas que tipo de entrada e saída textual? A entrada de um grande modelo de linguagem é conhecida como `prompt`. Enquanto a saída é conhecida como `completion`, termo que se refere ao mecanismo do modelo de gerar o próximo token para completar a entrada atual. Vamos nos aprofundar no que é um prompt e como projetá-lo de maneira a obter o máximo de nosso modelo. Agora, vamos apenas dizer que um prompt pode incluir: -* Uma **instrução** especificando o tipo de saída que esperamos do modelo. Essa instrução às vezes pode incorporar alguns exemplos ou alguns dados adicionais. +- Uma **instrução** especificando o tipo de saída que esperamos do modelo. Essa instrução às vezes pode incorporar alguns exemplos ou alguns dados adicionais. - 1. Resumo de um artigo, livro, análises de produtos e muito mais. Juntamente com a extração de insights de dados não estruturados. - ![Exemplo de resumo](../../images/summarization-example.png?WT.mc_id=academic-105485-koreyst) + 1. Resumo de um artigo, livro, análises de produtos e muito mais. Juntamente com a extração de insights de dados não estruturados. + ![Exemplo de resumo](../../images/summarization-example.png?WT.mc_id=academic-105485-koreyst) - 2. Ideação criativa e design de um artigo, uma redação, uma tarefa ou mais. - ![Exemplo de escrita criativa](../../images/creative-writing-example.png?WT.mc_id=academic-105485-koreyst) + 2. Ideação criativa e design de um artigo, uma redação, uma tarefa ou mais. + ![Exemplo de escrita criativa](../../images/creative-writing-example.png?WT.mc_id=academic-105485-koreyst) -* Uma **pergunta** feita na forma de uma conversa com um agente. - ![Exemplo de conversa](../../images/conversation-example.png?WT.mc_id=academic-105485-koreyst) +- Uma **pergunta** feita na forma de uma conversa com um agente. + ![Exemplo de conversa](../../images/conversation-example.png?WT.mc_id=academic-105485-koreyst) -* Um trecho de **texto a ser completado** que implicitamente é um pedido de assistência na escrita. - ![Exemplo de conclusão de texto](../../images/text-completion-example.png?WT.mc_id=academic-105485-koreyst) +- Um trecho de **texto a ser completado** que implicitamente é um pedido de assistência na escrita. + ![Exemplo de conclusão de texto](../../images/text-completion-example.png?WT.mc_id=academic-105485-koreyst) -* Um trecho de **código** juntamente com a solicitação de explicá-lo e documentá-lo ou um comentário pedindo para gerar um trecho de código que execute uma tarefa específica. - ![Exemplo de programação](../../images/coding-example.png?WT.mc_id=academic-105485-koreyst) +- Um trecho de **código** juntamente com a solicitação de explicá-lo e documentá-lo ou um comentário pedindo para gerar um trecho de código que execute uma tarefa específica. + ![Exemplo de programação](../../images/coding-example.png?WT.mc_id=academic-105485-koreyst) Os exemplos acima são bastante simples e não pretendem ser uma demonstração exaustiva das capacidades dos Grandes Modelos de Linguagem. Eles apenas querem mostrar o potencial de uso da IA generativa, em particular, mas não limitado ao contexto educacional. @@ -112,9 +112,9 @@ Além disso, a saída de um modelo de IA generativa não é perfeita e, às veze Sua tarefa é estudar mais sobre [IA Generativa](https://en.wikipedia.org/wiki/Generative_artificial_intelligence?WT.mc_id=academic-105485-koreyst) e tentar identificar uma área onde você adicionaria IA Generativa hoje mas que ainda não a possui. Como o impacto seria diferente de fazer as coisas do "jeito antigo"? Você pode fazer algo que não era possível antes ou que seria mais rápido? Escreva um resumo de 300 palavras sobre como sua startup da IA dos sonhos seria e inclua cabeçalhos como: -- "Problema" -- "Como eu usaria a IA" -- "Impacto" +- "Problema" +- "Como eu usaria a IA" +- "Impacto" - E, como opção, um plano de negócios. Se você fizer essa tarefa, poderá até estar pronto para se inscrever no [Microsoft's Incubator](https://www.microsoft.com/startups?WT.mc_id=academic-105485-koreyst) para fundadores de startups. Eles oferecem créditos para Azure, OpenAI, mentoria e muito mais. Confira agora mesmo! @@ -127,7 +127,7 @@ O que é verdade sobre Grandes Modelos de Linguagem? 2. Eles fazem as coisas perfeitamente. São ótimos em somar números, produzir código funcional etc. 3. A resposta pode variar, mesmo ao usar o mesmo prompt. Além disso, eles são ótimos em fornecer um primeiro rascunho de algo, seja texto ou código. Mas você precisa melhorar os resultados. -**Resposta:** 3, um `LLM` é *não-determinístico*. A resposta varia, em você controlar sua variação por meio de uma configuração de `temperatura`. Além disso, você não deve esperar que ele faça as coisas perfeitamente. Ele está aqui para fazer o trabalho pesado para você, o que muitas vezes significa que você obtém uma boa primeira tentativa de algo que precisa melhorar gradualmente. +**Resposta:** 3, um `LLM` é _não-determinístico_. A resposta varia, em você controlar sua variação por meio de uma configuração de `temperatura`. Além disso, você não deve esperar que ele faça as coisas perfeitamente. Ele está aqui para fazer o trabalho pesado para você, o que muitas vezes significa que você obtém uma boa primeira tentativa de algo que precisa melhorar gradualmente. ## Ótimo trabalho! A Jornada Continua diff --git a/02-exploring-and-comparing-different-llms/translations/cn/README.md b/02-exploring-and-comparing-different-llms/translations/cn/README.md index 2e02761cd..9d29a50d2 100644 --- a/02-exploring-and-comparing-different-llms/translations/cn/README.md +++ b/02-exploring-and-comparing-different-llms/translations/cn/README.md @@ -1,8 +1,8 @@ # 第二章 : 探索和比较不同的 LLMs -[![Exploring and comparing different LLMs](../../images/02-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/J1mWzw0P74c?WT.mc_id=academic-105485-koreyst) +[![Exploring and comparing different LLMs](../../images/02-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=39aa0f98-826a-4f71-a24d-e888a8e80246?WT.mc_id=academic-105485-koreyst) -> *点击该图片看本章导学视频* +> _点击该图片看本章导学视频_ 在上一章中,我们了解了生成式人工智能如何改变技术格局、LLMs 工作原理,以及企业(例如“Our startup”)如何将它们应用到自己的应用场景中并得到发展! 在本章中,我们将比较和对比不同类型的大型语言模型以了解它们的优缺点。 @@ -80,7 +80,7 @@ LLMs 还可以根据其产生的输出进行分类。 文本或代码生成模型主要是生成文本或代码。 这些模型通常用于文本摘要、翻译和问答。 文本生成模型通常在大型文本数据集上进行训练,例如 [BookCorpus](https://www.cv-foundation.org/openaccess/content_iccv_2015/html/Zhu_Aligning_Books_and_ICCV_2015_paper.html),并且可用于生成新文本或回答问题。 代码生成模型,例如 [CodeParrot](https://huggingface.co/codeparrot?WT.mc_id=academic-105485-koreyst),通常在大型代码数据集(如 GitHub)上进行训练,可用于生成新代码或修复现有代码中的错误。 - ![Text and code generation](../../images/Text.png?WT.mc_id=academic-105485-koreyst) +![Text and code generation](../../images/Text.png?WT.mc_id=academic-105485-koreyst) ### 了解编码-解码器与独立解码器 @@ -92,13 +92,13 @@ LLMs 还可以根据其产生的输出进行分类。 审阅者就像一个独立编码器的模型,他们查看编写的课程和答案,注意它们之间的关系并通过上下文进行理解,但他们不擅于生成内容。独立编码器模型的一个例子是 BERT。 -想象一下,我们也可以有人可以创建和审查测验,这是一个编码器-解码器模型如 BART 和 T5 +想象一下,我们也可以有人可以创建和审查测验,这是一个编码器-解码器模型如 BART 和 T5 ### 理解服务与模型 现在,我们来谈谈服务和模型之间的区别。 服务是云服务提供商提供的产品,通常是模型、数据和其他组件的结合。 模型是服务的核心组件,通常是基础模型,例如各种 LLM。 -服务通常针对生产环境进行了优化,并且通常比模型让用户通过图形界面使用。 但服务并不总是免费提供的,可能需要订阅或付费才能使用,以换取服务所有者的设备和相关资源,优化费用并轻松扩展。 服务的一个例子是 [Azure OpenAI 服务](https://learn.microsoft.com/azure/ai-services/openai/overview?WT.mc_id=academic-105485-koreyst),它提供按需付费计划,意味着用户根据服务用量付费。此外,Azure OpenAI Service 在模型功能上还提供企业级安全性和负责任的 AI 框架。 +服务通常针对生产环境进行了优化,并且通常比模型让用户通过图形界面使用。 但服务并不总是免费提供的,可能需要订阅或付费才能使用,以换取服务所有者的设备和相关资源,优化费用并轻松扩展。 服务的一个例子是 [Azure OpenAI 服务](https://learn.microsoft.com/azure/ai-services/openai/overview?WT.mc_id=academic-105485-koreyst),它提供按需付费计划,意味着用户根据服务用量付费。此外,Azure OpenAI Service 在模型功能上还提供企业级安全性和负责任的 AI 框架。 模型是带有参数、权重等的神经网络。 允许公司在本地运营需要购买设备、构建并购买许可证或使用开源模型。 像 LLaMA 这样的模型使用就需要额外的算力运行 @@ -144,7 +144,7 @@ LLMs 还可以根据其产生的输出进行分类。 ![LLMs deployment](../../images/Deploy.png?WT.mc_id=academic-105485-koreyst) -图片来源: [企业部署LLM的四种方式| Fiddler AI 博客](https://www.fiddler.ai/blog/four-ways-that-enterprises-deploy-llms?WT.mc_id=academic-105485-koreyst) +图片来源: [企业部署 LLM 的四种方式| Fiddler AI 博客](https://www.fiddler.ai/blog/four-ways-that-enterprises-deploy-llms?WT.mc_id=academic-105485-koreyst) ### 通过上下文的提示工程 @@ -177,8 +177,6 @@ LLMs 有一个限制,即他们只能使用训练期间使用过的数据来生 从头开始培训 LLMs 无疑是最困难、最复杂的方法,需要大量数据、熟练资源和适当的计算能力。 仅在企业具有特定领域的用例和大量以特定领域为中心的数据的情况下才应考虑此选项。 - - ## 知识检查 提升 LLMs 输出效率最好的方法是什么? diff --git a/02-exploring-and-comparing-different-llms/translations/ja-jp/README.md b/02-exploring-and-comparing-different-llms/translations/ja-jp/README.md index d704da6f2..1e18ebf06 100644 --- a/02-exploring-and-comparing-different-llms/translations/ja-jp/README.md +++ b/02-exploring-and-comparing-different-llms/translations/ja-jp/README.md @@ -1,8 +1,8 @@ # さまざまな LLM の調査と比較 -[![Exploring and comparing different LLMs](../../images/02-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://youtu.be/J1mWzw0P74c?WT.mc_id=academic-105485-yoterada) +[![Exploring and comparing different LLMs](../../images/02-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=36c6795a-e63c-46dd-8d69-df8bbe6e7bc9?WT.mc_id=academic-105485-yoterada) -> *(上記の画像をクリックすると、レッスン・ビデオを表示します)* +> _(上記の画像をクリックすると、レッスン・ビデオを表示します)_ 前回のレッスンで、生成 AI がどのようにして進化し、大規模言語モデル(LLM)がどのように機能するのか、そしてスタートアップがそれらを自分たちの目的に対して、どのように適用し成長できるかを見てきました。この章では、様々な大規模言語モデル(LLM)を比較し、それぞれの利点と欠点を理解していきます。 @@ -26,15 +26,15 @@ ## 大規模言語モデル(LLM)の様々な種類の理解 -大規模言語モデル(LLM)は、そのアーキテクチャ、トレーニングデータ、用途に応じて、様々なカテゴリに分類できます。こうした各モデルの把握は、スタートアップがシナリオに応じて最適なモデルを選択し、パフォーマンスのテストを行い、反復しながら改善するのに役立ちます。 +大規模言語モデル(LLM)は、そのアーキテクチャ、トレーニングデータ、用途に応じて、様々なカテゴリに分類できます。こうした各モデルの把握は、スタートアップがシナリオに応じて最適なモデルを選択し、パフォーマンスのテストを行い、反復しながら改善するのに役立ちます。 -LLM モデルには、さまざまな種類があり、どのモデルを選択するかは、それらを使用する目的、扱うデータ、ご利用可能な金額などによって異なります。 +LLM モデルには、さまざまな種類があり、どのモデルを選択するかは、それらを使用する目的、扱うデータ、ご利用可能な金額などによって異なります。 選択するモデルは、テキスト、オーディオ、ビデオ、画像の生成など、各用途に応じてそれぞれ異なる種類のモデルを選択します。 - **オーディオおよび音声認識**:この用途には、音声認識として汎用性のある Whisper というモデルが最適です。このモデルは、様々なオーディオ・データでトレーニングされており、多言語にも対応した音声認識ができます。[Whisper のモデルについての詳細はこちら](https://platform.openai.com/docs/models/whisper?WT.mc_id=academic-105485-yoterada). -- **画像生成**:画像生成の選択肢としては、DALL-E と Midjourney が非常に有名です。Azure OpenAI 上で DALL-E のモデルが利用可能です。[DALL-Eについての詳細はこちら](https://platform.openai.com/docs/models/dall-e?WT.mc_id=academic-105485-yoterada)をご覧ください。このカリキュラムの第 9 章でも解説します。 +- **画像生成**:画像生成の選択肢としては、DALL-E と Midjourney が非常に有名です。Azure OpenAI 上で DALL-E のモデルが利用可能です。[DALL-E についての詳細はこちら](https://platform.openai.com/docs/models/dall-e?WT.mc_id=academic-105485-yoterada)をご覧ください。このカリキュラムの第 9 章でも解説します。 - **テキスト生成**:多くのモデルがテキスト生成用にトレーニングされており、GPT-3.5 から GPT-4 に至るまで、多種多様な選択肢があります。それぞれ利用する際のコストは異なり、GPT-4 が最も高価です。機能とコストの観点から、ニーズに最も適したモデルを選択するために、[Azure OpenAI プレイグラウンド](https://oai.azure.com/portal/playground?WT.mc_id=academic-105485-yoterada)をご確認ください。 @@ -50,7 +50,7 @@ LLM モデルには、さまざまな種類があり、どのモデルを選択 ![ファウンデーション・モデルと LLM](../../images/FoundationModel.png?WT.mc_id=academic-105485-yoterada) -画像出展: [基盤モデルと大規模言語モデルの効果的なガイド | Babar M Bhatti著 | Medium](https://thebabar.medium.com/essential-guide-to-foundation-models-and-large-language-models-27dab58f7404) +画像出展: [基盤モデルと大規模言語モデルの効果的なガイド | Babar M Bhatti 著 | Medium](https://thebabar.medium.com/essential-guide-to-foundation-models-and-large-language-models-27dab58f7404) この違いをさらに明確にするために、ChatGPT を例に挙げてみましょう。ChatGPT の最初のバージョンを作る際 GPT-3.5 というモデルをファウンデーション・モデルとして使いました。つまり、OpenAI は、チャットボットのような会話シナリオで高いパフォーマンスを発揮するよう、チャットに特化したデータを用いて GPT-3.5 のチューニング版を作成したのです。 @@ -58,17 +58,17 @@ LLM モデルには、さまざまな種類があり、どのモデルを選択 画像出展: [2108.07258.pdf (arxiv.org)](https://arxiv.org/pdf/2108.07258.pdf?WT.mc_id=academic-105485-yoterada) -### オープンソース・モデルとプロプライエタリ・モデル +### オープンソース・モデルとプロプライエタリ・モデル -大規模言語モデル(LLM)を分類する別の方法として、それがオープンソースなのか、もしくはプロプライエタリな物なのか、という観点もあります。 +大規模言語モデル(LLM)を分類する別の方法として、それがオープンソースなのか、もしくはプロプライエタリな物なのか、という観点もあります。 オープンソース・モデルは、一般に公開され、誰でも利用できるモデルです。これらは多くの場合、そのモデルを開発した企業や研究コミュニティによって提供されます。これらのモデルは、LLM の様々な用途に合わせて検証、変更、カスタマイズの許可がされています。しかし、常に本番環境での利用に最適化されているわけではなく、プロプライエタリモデルほど高いパフォーマンスを発揮しない場合もあります。さらに、オープンソース・モデルの資金調達は限られており、長期的に継続できない可能性や、最新の研究に基づいて更新されていない可能性もあります。[Alpaca](https://crfm.stanford.edu/2023/03/13/alpaca.html?WT.mc_id=academic-105485-yoterada)、[Bloom](https://sapling.ai/llm/bloom?WT.mc_id=academic-105485-yoterada)、[LLaMA](https://sapling.ai/llm/llama?WT.mc_id=academic-105485-yoterada) などが人気のオープンソース・モデルの例です。 プロプライエタリ・モデルは、企業が所有し一般には公開されていないモデルです。これらのモデルは、通常本番環境での利用に最適化されています。しかし異なるユースケースに対して、検証、変更、カスタマイズは許可されていません。また、常に無料で利用できるわけではなく、利用するためには、サブスクリプション等による支払いが必要な場合もあります。さらに、利用者はモデルをトレーニングする際に使用するデータをコントロールできず、データのプライバシーや、責任ある AI の原則に基づく使用をモデル・プロバイダが保証しているのを信用しなければなりません。[OpenAI のモデル](https://platform.openai.com/docs/models/overview?WT.mc_id=academic-105485-yoterada)、[Google Bard](https://sapling.ai/llm/bard?WT.mc_id=academic-105485-yoterada)、[Claude 2](https://www.anthropic.com/index/claude-2?WT.mc_id=academic-105485-yoterada) などが人気のプロプライエタリ・モデルです。 -### 埋め込み (Embedding) と画像生成とテキスト・コード生成 +### 埋め込み (Embedding) と画像生成とテキスト・コード生成 -大規模言語モデル(LLM) は出力の種類によっても分類できます。 +大規模言語モデル(LLM) は出力の種類によっても分類できます。 埋め込み (Embedding) は、テキストを、「埋め込みと」呼ぶ数値形式に変換する AI モデルです。言い換えるならば、埋め込みは入力されたテキストに対する数値表現です。埋め込みによって、機械が単語や文の関係を理解しやすくなり、分類モデルや、数値データでパフォーマンスが向上するクラスタリング・モデルなど、他のモデルの入力として利用できます。埋め込みモデルは、たくさんのデータがある代理タスク用にモデルが作成され、モデルの重み(埋め込み)を、他の下流タスクで再利用する転移学習によく使用されます。このカテゴリーの例としては、[OpenAI Embeddings](https://platform.openai.com/docs/models/embeddings?WT.mc_id=academic-105485-yoterada) モデルがあります。 @@ -79,33 +79,33 @@ LLM モデルには、さまざまな種類があり、どのモデルを選択 ![Image generation](../../images/Image.png?WT.mc_id=academic-105485-yoterada) テキスト生成モデルとコード生成モデルは、テキストやコードを生成するためのモデルです。これらのモデルは、テキストの要約、翻訳、質疑応答などによく利用されます。テキスト生成モデルは、[BookCorpus](https://www.cv-foundation.org/openaccess/content_iccv_2015/html/Zhu_Aligning_Books_and_ICCV_2015_paper.html?WT.mc_id=academic-105485-yoterada) などの大規模なテキストデータセットでトレーニングされ、新しいテキストを生成したり、質問に答えたりするのに使われます。[CodeParrot](https://huggingface.co/codeparrot?WT.mc_id=academic-105485-yoterada) のようなコード生成モデルは、GitHub など大量のソースコード・データでトレーニングされ、新しいコードを生成したり、既存コードのバグ修正などで使われます。 - ![Text and code generation](../../images/Text.png?WT.mc_id=academic-105485-yoterada) +![Text and code generation](../../images/Text.png?WT.mc_id=academic-105485-yoterada) ### 「エンコーダー・デコーダー」 と 「デコーダーのみ」 のモデル -大規模言語モデル (LLM) のアーキテクチャの種類の違いについて解説するため、下記の例え話しを使います。 +大規模言語モデル (LLM) のアーキテクチャの種類の違いについて解説するため、下記の例え話しを使います。 -上司から、学生用のクイズを作成する仕事を任されたのを想像してください。あなたには 2 人の同僚がいて、1 人はコンテンツの作成を担当し、もう 1 人はそれをレビューする役割を担います。 +上司から、学生用のクイズを作成する仕事を任されたのを想像してください。あなたには 2 人の同僚がいて、1 人はコンテンツの作成を担当し、もう 1 人はそれをレビューする役割を担います。 -コンテンツを作成する人は「デコーダーのみ」のモデルに似ています。コンテンツ作成者は、トピックを見て、既に書いた内容を参考に、それに基づいてコンテンツを作成します。コンテンツ作成者は、魅力的で情報豊かなコンテンツを作成するのが得意ですが、トピックや学習目標を理解するのは得意ではありません。「デコーダーのみ」のモデルの例には、GPT-3 などの GPT ファミリーのモデルがあります。 +コンテンツを作成する人は「デコーダーのみ」のモデルに似ています。コンテンツ作成者は、トピックを見て、既に書いた内容を参考に、それに基づいてコンテンツを作成します。コンテンツ作成者は、魅力的で情報豊かなコンテンツを作成するのが得意ですが、トピックや学習目標を理解するのは得意ではありません。「デコーダーのみ」のモデルの例には、GPT-3 などの GPT ファミリーのモデルがあります。 -一方で、レビュー担当者は「エンコーダーのみ」のモデルに似ています。レビュー担当者は書かれた内容と回答を見て、それらの関係を把握し、文脈を理解しますが、コンテンツを作成するのは得意ではありません。「エンコーダーのみ」のモデルの例には、BERT があります。 +一方で、レビュー担当者は「エンコーダーのみ」のモデルに似ています。レビュー担当者は書かれた内容と回答を見て、それらの関係を把握し、文脈を理解しますが、コンテンツを作成するのは得意ではありません。「エンコーダーのみ」のモデルの例には、BERT があります。 -クイズを作成し、それをレビューする同一人物がいるのを想像してみてください。これが「エンコーダー・デコーダー」モデルです。BARTやT5などが例として挙げられます。 +クイズを作成し、それをレビューする同一人物がいるのを想像してみてください。これが「エンコーダー・デコーダー」モデルです。BART や T5 などが例として挙げられます。 ### サービスとモデル -サービスとモデルの違いについて説明します。サービスはクラウド・サービス・プロバイダーが提供する製品で、モデル、データ、その他のコンポーネントを組み合わせたものです。モデルはサービスの核となる部分で、大規模言語モデル (LLM) のようなファウンデーション・モデルが一般的です。 +サービスとモデルの違いについて説明します。サービスはクラウド・サービス・プロバイダーが提供する製品で、モデル、データ、その他のコンポーネントを組み合わせたものです。モデルはサービスの核となる部分で、大規模言語モデル (LLM) のようなファウンデーション・モデルが一般的です。 -サービスは、本番環境での利用に最適化されており、グラフィカル・ユーザー・インターフェースを通じて、直接モデルを操作するのに比べ扱いやすくなっています。しかしサービスは、常に無料で利用できるわけではなく、サービス提供者の機器やリソースを活用する代わりに、サブスクリプション等による支払いが必要な場合があります。これにより、費用を最適化し、簡単にスケールアップできます。サービスの例としては、使用量に応じて料金が発生する [Azure OpenAI Service](https://learn.microsoft.com/azure/ai-services/openai/overview?WT.mc_id=academic-105485-yoterada) があります。また、Azure OpenAI サービスは、モデルの能力に加え、エンタープライズグレードのセキュリティと責任ある AI のフレームワークも提供しています。 +サービスは、本番環境での利用に最適化されており、グラフィカル・ユーザー・インターフェースを通じて、直接モデルを操作するのに比べ扱いやすくなっています。しかしサービスは、常に無料で利用できるわけではなく、サービス提供者の機器やリソースを活用する代わりに、サブスクリプション等による支払いが必要な場合があります。これにより、費用を最適化し、簡単にスケールアップできます。サービスの例としては、使用量に応じて料金が発生する [Azure OpenAI Service](https://learn.microsoft.com/azure/ai-services/openai/overview?WT.mc_id=academic-105485-yoterada) があります。また、Azure OpenAI サービスは、モデルの能力に加え、エンタープライズグレードのセキュリティと責任ある AI のフレームワークも提供しています。 モデルは、パラメーターや重みなどを含むニューラルネットワークそのものです。企業はローカルでの運用も可能ですが、そのためには機器の購入、スケールアップのための環境構築、ライセンスの購入、またはオープンソース・モデルの使用が必要になります。LLaMA のようなモデルは利用可能ですが、モデルを実行するためには計算資源が必要です。 -## Azure でパフォーマンスを理解するために異なるモデルでテストと反復処理を行う方法 +## Azure でパフォーマンスを理解するために異なるモデルでテストと反復処理を行う方法 -現在の LLM の状況を調査し、シナリオに適したモデルの候補を見つけたら、次に企業の実データと負荷試験でそれらをテストする必要があります。これは実験と検証を通じて行われる反復的なプロセスです。前の段落で触れたモデル(OpenAIモデル、Llama2のようなオープンソースモデル、Hugging Faceのトランスフォーマー)のほとんどは、[Azure Machine Learning Studio](https://ml.azure.com/?WT.mc_id=academic-105485-yoterada) の[ファウンデーション・モデル・カタログ](https://learn.microsoft.com/azure/machine-learning/concept-foundation-models?WT.mc_id=academic-105485-yoterada)で利用可能です。 +現在の LLM の状況を調査し、シナリオに適したモデルの候補を見つけたら、次に企業の実データと負荷試験でそれらをテストする必要があります。これは実験と検証を通じて行われる反復的なプロセスです。前の段落で触れたモデル(OpenAI モデル、Llama2 のようなオープンソースモデル、Hugging Face のトランスフォーマー)のほとんどは、[Azure Machine Learning Studio](https://ml.azure.com/?WT.mc_id=academic-105485-yoterada) の[ファウンデーション・モデル・カタログ](https://learn.microsoft.com/azure/machine-learning/concept-foundation-models?WT.mc_id=academic-105485-yoterada)で利用可能です。 -[Azure Machine Learning](https://azure.microsoft.com/products/machine-learning/?WT.mc_id=academic-105485-yoterada) は、データ・サイエンティストと機械学習エンジニアが ML ライフサイクル全体(トレーニング、テスト、デプロイ、MLOpsの管理)を一つのプラットフォームで管理するために設計されたクラウド・サービスです。Machine Learning Studio はグラフィカル・ユーザー・インターフェースを提供し、利用者は下記の操作を行えます: +[Azure Machine Learning](https://azure.microsoft.com/products/machine-learning/?WT.mc_id=academic-105485-yoterada) は、データ・サイエンティストと機械学習エンジニアが ML ライフサイクル全体(トレーニング、テスト、デプロイ、MLOps の管理)を一つのプラットフォームで管理するために設計されたクラウド・サービスです。Machine Learning Studio はグラフィカル・ユーザー・インターフェースを提供し、利用者は下記の操作を行えます: - カタログから興味のあるファウンデーション・モデルを探し、タスク、ライセンス、名前でフィルタリングできます。カタログにまだ含まれていない新しいモデルもインポートできます。 - モデル・カードを確認して、詳細な説明とコードサンプルを見て、サンプル推論ウィジェットを使ってテストします。これは、サンプルのプロンプトを入力して回答結果を試すために利用します。 @@ -126,17 +126,17 @@ LLM モデルには、さまざまな種類があり、どのモデルを選択 ## 大規模言語モデル (LLM) の出力結果を改善する -スタートアップ・チームは、さまざまな種類の大規模言語モデル (LLM) とクラウド・プラットフォームのサービス(Azure Machine Learning)を理解し、異なるモデルを比較し、テストデータで評価し、パフォーマンスを向上させ、推論エンドポイントにデプロイする方法を検討しました。 +スタートアップ・チームは、さまざまな種類の大規模言語モデル (LLM) とクラウド・プラットフォームのサービス(Azure Machine Learning)を理解し、異なるモデルを比較し、テストデータで評価し、パフォーマンスを向上させ、推論エンドポイントにデプロイする方法を検討しました。 -しかし、事前トレーニングされたモデルを使用するのではなく、モデルをファイン・チューニングするのを検討すべきタイミングはいつでしょうか?特定の負荷試験でモデルのパフォーマンスを向上させる他のアプローチはあるのでしょうか? +しかし、事前トレーニングされたモデルを使用するのではなく、モデルをファイン・チューニングするのを検討すべきタイミングはいつでしょうか?特定の負荷試験でモデルのパフォーマンスを向上させる他のアプローチはあるのでしょうか? 企業が大規模言語モデル(LLM)を利用して、期待する結果を得るためには、トレーニング・レベルの異なる様々な手法からも選択できます。 -異なる実装方法(容易→困難)、コスト(低額→高額)、品質(低→高) から実装方法を検討し、LLM を本番環境にデプロイできます。以下に、いくつかの異なるアプローチを紹介します。 +異なる実装方法(容易 → 困難)、コスト(低額 → 高額)、品質(低 → 高) から実装方法を検討し、LLM を本番環境にデプロイできます。以下に、いくつかの異なるアプローチを紹介します。 - **コンテキストを用いたプロンプトエンジニアリング**:プロンプトを記述する際に十分なコンテキストを提供し、必要な回答を得るのが狙いです。 -- **Retrieval Augmented Generation(RAG)**:例えば、データがデータ・ベースや Web 上に存在する場合、関連データを取得し、プロンプトの記述時に、それらデータの一部をプロンプトに含めます。 +- **Retrieval Augmented Generation(RAG)**:例えば、データがデータ・ベースや Web 上に存在する場合、関連データを取得し、プロンプトの記述時に、それらデータの一部をプロンプトに含めます。 - **ファイン・チューニングしたモデル**:自分のデータを利用してモデルをさらにトレーニングし、モデルをより正確に、そしてニーズに応じた形にします。ただし、コストがかかる可能性があります。 @@ -144,7 +144,7 @@ LLM モデルには、さまざまな種類があり、どのモデルを選択 画像出展:: [Four Ways that Enterprises Deploy LLMs | Fiddler AI Blog](https://www.fiddler.ai/blog/four-ways-that-enterprises-deploy-llms?WT.mc_id=academic-105485-yoterada) -### コンテキストを用いたプロンプトエンジニアリング +### コンテキストを用いたプロンプトエンジニアリング 事前学習済みの大規模言語モデル(LLM)は、一般的な自然言語タスクとして、例えば、文の作成や質問などの処理をリクエストする際、短いプロンプトの呼び出しだけで、とても良い結果を出力します。これを「ゼロショット」学習と呼びます。 @@ -160,27 +160,27 @@ RAG は Vector データベース([Azure AI Search](https://learn.microsoft.co この技術は、LLM のファイン・チューニングが困難(十分なデータ、時間、リソースがない)な企業にとって非常に有用です。 そして特定の負荷試験におけるパフォーマンスを向上させたい場合や、回答の捏造リスク、つまり現実の歪曲や、有害なコンテンツのリスクを減らしたい場合に非常に有効です。 -### ファイン・チューニングしたモデルの利用 +### ファイン・チューニングしたモデルの利用 ファイン・チューニングは、転移学習を活用してモデルを下流タスクに「適応」させたり、特定の問題を解決するプロセスです。上記のフュー・ショット学習や、RAG とは異なり、更新した重みとバイアスを持つ新しいモデルを生成します。これには、入力(プロンプト)とそれに関連する出力(Completion)から構成する大量のトレーニング・データが必要です。このアプローチは、下記のような場合に有効です: -- **ファイン・チューニングしたモデルを使用する場合**:企業が高性能なモデルではなく、ファイン・チューニングした能力の低いモデル(埋め込みモデルなど)を使用し、よりコスト効率を高く、迅速なソリューション提供したいと考えている場合 +- **ファイン・チューニングしたモデルを使用する場合**:企業が高性能なモデルではなく、ファイン・チューニングした能力の低いモデル(埋め込みモデルなど)を使用し、よりコスト効率を高く、迅速なソリューション提供したいと考えている場合 -- **レイテンシーを考慮する場合**:特定の用途でレイテンシーが重要で、とても長いプロンプトを使用できない、またはモデルから学習するサンプル数がプロンプトの長さ制限に合わないような場合 +- **レイテンシーを考慮する場合**:特定の用途でレイテンシーが重要で、とても長いプロンプトを使用できない、またはモデルから学習するサンプル数がプロンプトの長さ制限に合わないような場合 - **最新の状態を維持する場合**:企業が高品質のデータと正確なラベルを多く持ち、これらのデータを時間をかけて最新の状態に保つためのリソースを持っている場合 -### トレーニング済みモデル +### トレーニング済みモデル LLM をゼロからトレーニングするのは、間違いなく最も困難で最も複雑なアプローチです。膨大なデータ、熟練したリソース、適切な計算能力が必要です。このオプションは、ビジネスがドメイン固有のユースケースと大量のドメイン中心のデータを持っている場合にのみ検討すべきです。 -## 知識チェック +## 知識チェック -LLM からの出力結果を改善するための良いアプローチは何でしょうか? +LLM からの出力結果を改善するための良いアプローチは何でしょうか? -1. コンテキストを用いたプロンプトエンジニアリング -2. RAG -3. ファイン・チューニングしたモデル +1. コンテキストを用いたプロンプトエンジニアリング +2. RAG +3. ファイン・チューニングしたモデル A: 3、時間とリソース、高品質のデータがある場合 ファイン・チューニングは最新の状態を維持するためのより良い選択肢です。しかし、改善を行うために時間がない場合は、まず RAG をご検討ください。 @@ -190,10 +190,10 @@ A: 3、時間とリソース、高品質のデータがある場合 ファイン ## 🚀 Challenge -ビジネスで RAG を活用する方法についてもっと学びたい方は、[こちら](https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview?WT.mc_id=academic-105485-yoterada)をご覧ください。 +ビジネスで RAG を活用する方法についてもっと学びたい方は、[こちら](https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview?WT.mc_id=academic-105485-yoterada)をご覧ください。 ## お疲れ様でした! 次のレッスンを続ける -このレッスン終了後、[生成 AI 学習コレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-yoterada)をチェックして、生成 AI の知識をさらに深めましょう。 +このレッスン終了後、[生成 AI 学習コレクション](https://aka.ms/genai-collection?WT.mc_id=academic-105485-yoterada)をチェックして、生成 AI の知識をさらに深めましょう。 次のレッスン 3 では、[責任ある生成 AI の利用](../../../03-using-generative-ai-responsibly/translations/ja-jp/README.md?WT.mc_id=academic-105485-yoterada)について学びます! diff --git a/02-exploring-and-comparing-different-llms/translations/pt-br/README.md b/02-exploring-and-comparing-different-llms/translations/pt-br/README.md index 731a3298a..3de992254 100644 --- a/02-exploring-and-comparing-different-llms/translations/pt-br/README.md +++ b/02-exploring-and-comparing-different-llms/translations/pt-br/README.md @@ -1,8 +1,8 @@ # Explorando e comparando diferentes LLMs -[![Exploring and comparing different LLMs](../../images/02-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/J1mWzw0P74c?WT.mc_id=academic-105485-koreyst) +[![Exploring and comparing different LLMs](../../images/02-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=36c6795a-e63c-46dd-8d69-df8bbe6e7bc9?WT.mc_id=academic-105485-koreyst) -> *Clique na imagem acima para ver o vídeo desta lição* +> _Clique na imagem acima para ver o vídeo desta lição_ Na lição anterior, vimos como a IA generativa está mudando o cenário tecnológico, como os Grandes Modelos de Linguagens (LLMs) funcionam e como uma empresa - como nossa startup - pode aplicá-los aos seus casos de uso e crescer! Neste capítulo, estamos procurando comparar e contrastar diferentes tipos de modelos de linguagem grandes, LLMs para entender seus prós e contras. @@ -197,4 +197,3 @@ Saiba mais sobre como você pode [usar o RAG](https://learn.microsoft.com/azure/ Deseja aprender mais sobre diferentes conceitos de IA Generativa? Acesse a [página de aprendizado contínuo](../../../13-continued-learning/translations/pt-br/README.md?WT.mc_id=academic-105485-koreyst) para encontrar outros ótimos recursos sobre este tópico. Vamos para a Lição 3, onde veremos como podemos [Criar IA Generativa de forma Responsável](../../../03-using-generative-ai-responsibly/translations/pt-br/README.md?WT.mc_id=academic-105485-koreyst)! - diff --git a/04-prompt-engineering-fundamentals/README.md b/04-prompt-engineering-fundamentals/README.md index 329786fce..5021956dc 100644 --- a/04-prompt-engineering-fundamentals/README.md +++ b/04-prompt-engineering-fundamentals/README.md @@ -1,6 +1,6 @@ # Prompt Engineering Fundamentals -[![Prompt Engineering Fundamentals](./images/04-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/r2ItK3UMVTk?WT.mc_id=academic-105485-koreyst) +[![Prompt Engineering Fundamentals](./images/04-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=d54c0c69-b183-4a6c-80ed-8b1a8f299cff?WT.mc_id=academic-105485-koreyst) 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. @@ -29,7 +29,7 @@ The Jupyter Notebook accompanying this lesson provides a _sandbox_ environment w 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*. +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. diff --git a/04-prompt-engineering-fundamentals/translations/cn/README.md b/04-prompt-engineering-fundamentals/translations/cn/README.md index 6cffc0be3..2fcb5ab01 100644 --- a/04-prompt-engineering-fundamentals/translations/cn/README.md +++ b/04-prompt-engineering-fundamentals/translations/cn/README.md @@ -1,15 +1,14 @@ # 第四章:提示工程基础 -[![Prompt Engineering Fundamentals](../../images/04-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/r2ItK3UMVTk?WT.mc_id=academic-105485-koreyst) - +[![Prompt Engineering Fundamentals](../../images/04-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=d54c0c69-b183-4a6c-80ed-8b1a8f299cff?WT.mc_id=academic-105485-koreyst) 如何撰写 LLM 的提示很重要,精心设计的提示可以比不精心设计的提示取得更好的结果。 但这些概念到底是什么,提示、提示工程以及我如何改进我发送给 LLMs 的内容? 诸如此类的问题正是本章和下一章想要解答的。 -_生成式人工智能_能够根据用户请求创建新内容(例如文本、图像、音频、代码等)。 它使用 LLMs 来实现这一目标,例如 OpenAI 的 GPT 模型系列,这些模型通过使用自然语言和代码进行训练。 +*生成式人工智能*能够根据用户请求创建新内容(例如文本、图像、音频、代码等)。 它使用 LLMs 来实现这一目标,例如 OpenAI 的 GPT 模型系列,这些模型通过使用自然语言和代码进行训练。 用户现在可以使用熟悉的语言(如聊天)与这些模型进行交互,而无需任何技术专业知识或培训。 这些模型是基于提示的——用户发送文本输入(提示)并获取人工智能响应(完成)。 然后,他们可以在多轮对话中迭代地“与人工智能聊天”,完善他们的提示,直到响应符合他们的预期。 -“提示”现在成为生成式人工智能应用程序的主要_编程界面_,告诉模型要做什么并影响返回响应的质量。 “提示工程”是一个快速发展的研究领域,专注于提示的“设计和优化”,以大规模提供一致且高质量的响应。 +“提示”现在成为生成式人工智能应用程序的主要*编程界面*,告诉模型要做什么并影响返回响应的质量。 “提示工程”是一个快速发展的研究领域,专注于提示的“设计和优化”,以大规模提供一致且高质量的响应。 ## 学习目标 @@ -26,26 +25,24 @@ _生成式人工智能_能够根据用户请求创建新内容(例如文本、 目前,提示工程更多的是玄学而不是科学。 提高我们直觉的最佳方法是“更多练习”并采用试错方法,将应用程序领域的专业知识与推荐的技术和特定于模型的优化相结合。 -本课程附带的 Jupyter Notebook 提供了一个_沙盒_环境,您可以在其中尝试所学内容 - 边学边做,或者作为最后代码挑战的一部分。 要完成练习,您需要: +本课程附带的 Jupyter Notebook 提供了一个*沙盒*环境,您可以在其中尝试所学内容 - 边学边做,或者作为最后代码挑战的一部分。 要完成练习,您需要: 1. 设置 OpenAI API 密钥 - 已部署的 LLM 的服务端点。 2. Python 运行时 - 可以让 Notebook 运行。 -我们使用一个带有 Python 3 运行时的开发容器来检测这个存储库。 只需在 GitHub Codespaces 或本地 Docker 桌面上打开 Repo,即可自动激活运行时。 然后打开笔记本并选择Python 3.x 内核以准备 Notebook。 +我们使用一个带有 Python 3 运行时的开发容器来检测这个存储库。 只需在 GitHub Codespaces 或本地 Docker 桌面上打开 Repo,即可自动激活运行时。 然后打开笔记本并选择 Python 3.x 内核以准备 Notebook。 默认 Notebook 设置为与 OpenAI API 密钥一起使用。 只需将文件夹根目录中的“.env.copy”文件复制到“.env”,并使用您的 API 密钥更新“OPENAI_API_KEY=”行 - 一切就完成了。 -该 Notebook 附带入门练习 - 但我们鼓励您添加自己的Markdown(描述)和代码(提示请求)部分来尝试更多示例或想法 - 并建立您对提示工程设计的感觉。 - +该 Notebook 附带入门练习 - 但我们鼓励您添加自己的 Markdown(描述)和代码(提示请求)部分来尝试更多示例或想法 - 并建立您对提示工程设计的感觉。 ## Our Startup 的使命 - 现在,让我们来谈谈这个主题与 Our Startup 的使命[将人工智能创新带入教育](https://educationblog.microsoft.com/2023/06/collaborating-to-bring-ai-innovation-to-education?WT.mc_id=academic-105485-koreyst)有何关系 。 我们希望构建由人工智能驱动的个性化学习应用程序 - 所以让我们考虑一下我们应用程序的针对不同用户如何“设计”提示: -- **管理员**可能会要求人工智能分析课程数据以识别覆盖范围的差距_。 人工智能可以总结结果或用代码将其可视化。 -- **教育者**可能会要求人工智能为目标受众和主题生成教学计划。 AI可以按照指定的格式构建个性化计划。 +- **管理员**可能会要求人工智能分析课程数据以识别覆盖范围的差距\_。 人工智能可以总结结果或用代码将其可视化。 +- **教育者**可能会要求人工智能为目标受众和主题生成教学计划。 AI 可以按照指定的格式构建个性化计划。 - **学生**可能会要求人工智能辅导他们学习困难的科目。 人工智能现在可以通过适合学生水平的课程、结合提示和示例来指导学生。 这只是冰山一角。 查看 [教育中的提示工程](https://github.com/microsoft/prompts-for-edu/tree/main?WT.mc_id=academic-105485-koreyst) - 一个由教育专家设计的开源提示库 ! 尝试在沙箱中运行其中一些提示或使用 OpenAI Playground 看看会产生什么结果! @@ -91,7 +88,7 @@ LLM 将提示视为标记序列,其中不同的模型(或模型的版本) ![Base LLM Chat Completion](../../images/04-playground-chat-base.png?WT.mc_id=academic-105485-koreyst) -### 概念: LLMs 中的指令调整 +### 概念: LLMs 中的指令调整 [ LLMs 中的指令调整](https://blog.gopenai.com/an-introduction-to-base-and-instruction-tuned-large-language-models-8de102c785a6?WT.mc_id=academic-105485-koreyst) 从基础模型开始,并使用以下参数对其进行微调 可以包含明确指令的示例或输入/输出对(例如多轮“消息”),以及人工智能尝试遵循该指令的响应。 @@ -183,9 +180,8 @@ Illustrated with examples. 让我们从基础提示开始:发送到模型的文本输入,没有其他上下文。 这是一个例子 - 当我们将美国国歌的前几个单词发送到 OpenAI [Completion API](https://platform.openai.com/docs/api-reference/completions?WT.mc_id=academic-105485-koreyst) 时,它会立即完成下一个单词的响应 几行,说明了基本的预测行为。 - -| Prompt (Input) | Completion (Output) | -|:---|:---| +| Prompt (Input) | Completion (Output) | +| :----------------- | :----------------------------------------------------------------------------------------------------------------------------------------- | | Oh say can you see | It sounds like you're starting the lyrics to "The Star-Spangled Banner," the national anthem of the United States. The full lyrics are ... | ### 复杂的提示 @@ -197,7 +193,6 @@ Illustrated with examples. 该请求现在采用以下形式,其中标记化有效地从上下文和对话中捕获相关信息。 现在,更改系统上下文对补全质量的影响并与提供的用户输入一样。 - ```python response = openai.ChatCompletion.create( model="gpt-3.5-turbo", @@ -214,11 +209,11 @@ response = openai.ChatCompletion.create( 在上面的示例中,用户提示是一个简单的文本查询,可以解释为信息请求。 通过指令提示,我们可以使用该文本更详细地指定任务,从而为人工智能提供更好的指导。 这是一个例子: -| Prompt (Input) | Completion (Output) | Instruction Type | -|:---|:---|:---| -| Write a description of the Civil War | _returned a simple paragraph_ | Simple| -|Write a description of the Civil War. Provide key dates and events and describe their significance | _returned a paragraph followed by a list of key event dates with descriptions_| Complex | -|Write a description of the Civil War in 1 paragraph. Provide 3 bullet points with key dates and their significance. Provide 3 more bullet points with key historical figures and their contributions. Return the output as a JSON file | _returns more extensive details in a text box, formatted as JSON that you can copy-paste to a file and validate as needed_| Complex. Formatted. | +| Prompt (Input) | Completion (Output) | Instruction Type | +| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------- | :------------------ | +| Write a description of the Civil War | _returned a simple paragraph_ | Simple | +| Write a description of the Civil War. Provide key dates and events and describe their significance | _returned a paragraph followed by a list of key event dates with descriptions_ | Complex | +| Write a description of the Civil War in 1 paragraph. Provide 3 bullet points with key dates and their significance. Provide 3 more bullet points with key historical figures and their contributions. Return the output as a JSON file | _returns more extensive details in a text box, formatted as JSON that you can copy-paste to a file and validate as needed_ | Complex. Formatted. | ## 主要内容 @@ -229,8 +224,8 @@ response = openai.ChatCompletion.create( 下面是一个示例,其中的指令是“用 2 句话总结这一点”。 -| Prompt (Input) | Completion (Output) | -|:---|:---| +| Prompt (Input) | Completion (Output) | +| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history. It is named after the Roman god Jupiter.[19] When viewed from Earth, Jupiter can be bright enough for its reflected light to cast visible shadows,[20] and is on average the third-brightest natural object in the night sky after the Moon and Venus.
**Summarize this in 2 short sentences** | Jupiter, the fifth planet from the Sun, is the largest in the Solar System and is known for being one of the brightest objects in the night sky. Named after the Roman god Jupiter, it's a gas giant whose mass is two-and-a-half times that of all other planets in the Solar System combined. | 主要内容片段可以通过多种方式使用来驱动更有效的指令: @@ -239,7 +234,6 @@ response = openai.ChatCompletion.create( - **暗示** - 遵循带有“暗示”的说明,引导完成,引导模型做出更相关的响应。 - **模板** - 这些是带有占位符(变量)提示的可重复“配方”,可以使用特定用例的数据进行自定义。 - ### 用例方式 这种方法中,您使用主要内容来“向模型提供”给定指令所需输出的一些示例,并让它推断所需输出的模式。 根据提供的示例数量,我们可以有零样本提示、单样本提示、少样本提示等。 @@ -250,14 +244,12 @@ response = openai.ChatCompletion.create( - 所需输出的一些示例 - 新示例的开始(成为隐式任务描述) - -| Learning Type | Prompt (Input) | Completion (Output) | -|:---|:---|:---| -| Zero-shot | "The Sun is Shining". Translate to Spanish | "El Sol está brillando".| -| One-shot | "The Sun is Shining" => ""El Sol está brillando".
"It's a Cold and Windy Day" => | "Es un día frío y ventoso". | -| Few-shot | The player ran the bases => Baseball
The player hit an ace => Tennis
The player hit a six => Cricket
The player made a slam-dunk => | Basketball | -| | | | - +| Learning Type | Prompt (Input) | Completion (Output) | +| :------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------- | +| Zero-shot | "The Sun is Shining". Translate to Spanish | "El Sol está brillando". | +| One-shot | "The Sun is Shining" => ""El Sol está brillando".
"It's a Cold and Windy Day" => | "Es un día frío y ventoso". | +| Few-shot | The player ran the bases => Baseball
The player hit an ace => Tennis
The player hit a six => Cricket
The player made a slam-dunk => | Basketball | +| | | | 请注意,我们如何必须在零样本提示中提供明确的指令(“翻译为西班牙语”),但它是在一次提示示例中推断出来的。 这个少样本示例展示了如何添加更多示例来让模型在不添加指令的情况下做出更准确的推理。 @@ -265,26 +257,24 @@ response = openai.ChatCompletion.create( 使用主要内容的另一种技术是提供暗示而不是示例。 在这种情况下,我们通过使用反映所需响应格式的片段启动来让模型朝正确的方向进行推理。 然后,模型“接受提示”,继续按照这种思路进行。 - -| Number of Cues | Prompt (Input) | Completion (Output) | -|:---|:---|:---| -| 0 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This** | Jupiter is the largest planet in our Solar System and the fifth one from the Sun. It is a gas giant with a mass 1/1000th of the Sun's, but it is heavier than all the other planets combined. Ancient civilizations have known about Jupiter for a long time, and it is easily visible in the night sky..| -| 1 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This**
What we learned is that Jupiter | is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets combined. It is easily visible to the naked eye and has been known since ancient times. | -| 2 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This**
Top 3 Facts We Learned: | 1. Jupiter is the fifth planet from the Sun and the largest in the Solar System.
2. It is a gas giant with a mass one-thousandth that of the Sun...
3. Jupiter has been visible to the naked eye since ancient times ... | -| | | | - +| Number of Cues | Prompt (Input) | Completion (Output) | +| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This** | Jupiter is the largest planet in our Solar System and the fifth one from the Sun. It is a gas giant with a mass 1/1000th of the Sun's, but it is heavier than all the other planets combined. Ancient civilizations have known about Jupiter for a long time, and it is easily visible in the night sky.. | +| 1 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This**
What we learned is that Jupiter | is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets combined. It is easily visible to the naked eye and has been known since ancient times. | +| 2 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This**
Top 3 Facts We Learned: | 1. Jupiter is the fifth planet from the Sun and the largest in the Solar System.
2. It is a gas giant with a mass one-thousandth that of the Sun...
3. Jupiter has been visible to the naked eye since ancient times ... | +| | | | ### 提示模版 -提示模板是预定义的提示配方,可以根据需要进行存储和重用,以大规模推动更一致的用户体验。 最简单的形式是,它只是一组提示示例的集合,例如 [OpenAI 中的这个例子](https://platform.openai.com/examples?WT.mc_id=academic-105485-koreyst),它提供了交互式提示组件(用户和系统消息)和 AP驱动请求格式来支持重用。 +提示模板是预定义的提示配方,可以根据需要进行存储和重用,以大规模推动更一致的用户体验。 最简单的形式是,它只是一组提示示例的集合,例如 [OpenAI 中的这个例子](https://platform.openai.com/examples?WT.mc_id=academic-105485-koreyst),它提供了交互式提示组件(用户和系统消息)和 AP 驱动请求格式来支持重用。 -在它更复杂的形式中,比如[LangChain的这个例子](https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/?WT.mc_id=academic-105485-koreyst),它包含占位符,可以替换为来自各种来源的数据(用户 输入、系统上下文、外部数据源等)来动态生成提示。 这使我们能够创建一个可重用的提示库,可用于大规模地**以编程方式**驱动一致的用户体验。 +在它更复杂的形式中,比如[LangChain 的这个例子](https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/?WT.mc_id=academic-105485-koreyst),它包含占位符,可以替换为来自各种来源的数据(用户 输入、系统上下文、外部数据源等)来动态生成提示。 这使我们能够创建一个可重用的提示库,可用于大规模地**以编程方式**驱动一致的用户体验。 最后,模板的真正价值在于能够为垂直应用程序领域创建和发布提示库 - 其中提示模板现在已优化以反映特定于应用程序的上下文或示例,使响应对于目标用户受众更加相关和准确 。 [Prompts For Edu](https://github.com/microsoft/prompts-for-edu?WT.mc_id=academic-105485-koreyst) repo 是这种方法的一个很好的例子,它为教育领域策划了一个提示库,重点关注课程计划等关键目标, 课程设计、学生辅导等 ## 支持内容 -如果我们将提示构建视为具有指令(任务) 和目标(主要内容),那么次要内容_像我们提供的附加上下文**以某种方式影响输出**。 它可以是调整参数、格式化指令、主题分类法等,可以帮助模型定制其响应以适应所需的用户目标或期望。 +如果我们将提示构建视为具有指令(任务) 和目标(主要内容),那么次要内容\_像我们提供的附加上下文**以某种方式影响输出**。 它可以是调整参数、格式化指令、主题分类法等,可以帮助模型定制其响应以适应所需的用户目标或期望。 例如:给定一个包含课程表中所有可用课程的广泛元数据(名称、描述、级别、元数据标签、讲师等)的课程目录: @@ -294,7 +284,6 @@ response = openai.ChatCompletion.create( 现在,该模型可以按照几个示例所示的格式提供摘要 - 但如果结果具有多个标签,它可以优先考虑辅助内容中标识的 5 个标签。 - --- - ## 知识检查 以下哪项是遵循一些合理的最佳实践的最佳提示? 1. Show me an image of red car 2. Show me an image of red car of make Volvo and model XC90 parked by a cliff with the sun setting -3. Show me an image of red car of make Volvo and model XC90 +3. Show me an image of red car of make Volvo and model XC90 答:2,这是最好的提示,因为它提供了有关“内容”的详细信息并详细说明(不仅仅是任何汽车,而是特定的品牌和型号),并且还描述了整体设置。 3 是次佳的,因为它也包含很多描述。 diff --git a/04-prompt-engineering-fundamentals/translations/ja-jp/README.md b/04-prompt-engineering-fundamentals/translations/ja-jp/README.md index 76c700ce8..7b996559a 100644 --- a/04-prompt-engineering-fundamentals/translations/ja-jp/README.md +++ b/04-prompt-engineering-fundamentals/translations/ja-jp/README.md @@ -1,8 +1,8 @@ # プロンプト・エンジニアリングの基礎 -[![Prompt Engineering Fundamentals](../../images/04-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://youtu.be/r2ItK3UMVTk?WT.mc_id=academic-105485-yoterada) +[![Prompt Engineering Fundamentals](../../images/04-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=d54c0c69-b183-4a6c-80ed-8b1a8f299cff?WT.mc_id=academic-105485-yoterada) -大規模言語モデル (LLM) では、プロンプトの書き方がとても重要で、慎重に作成したプロンプトは、そうでないものに比べ良い結果をもたらします。しかし、プロンプトやプロンプト・エンジニアリングとは一体どういう物なのでしょうか?また、LLM に送信する内容をどのようにして改善すればいいのでしょうか?この章と次の章では、そうした疑問に答えたいと思います。 +大規模言語モデル (LLM) では、プロンプトの書き方がとても重要で、慎重に作成したプロンプトは、そうでないものに比べ良い結果をもたらします。しかし、プロンプトやプロンプト・エンジニアリングとは一体どういう物なのでしょうか?また、LLM に送信する内容をどのようにして改善すればいいのでしょうか?この章と次の章では、そうした疑問に答えたいと思います。 「_生成 AI_」は、利用者からのリクエストに対して、テキスト、画像、オーディオ、コード等の新しいコンテンツを生成する能力を持っています。これを実現するために、OpenAI の GPT(Generative Pre-trained Transformer)シリーズのような、自然言語とコードの使用目的でトレーニングされた「_大規模言語モデル(LLM)_」を利用できます。 @@ -38,13 +38,13 @@ ## スタートアップ -それでは、_このトピック_ がスタートアップのミッションである「[教育へ AI 革新をもたらす](https://educationblog.microsoft.com/2023/06/collaborating-to-bring-ai-innovation-to-education?WT.mc_id=academic-105485-yoterada)」とどのように結びついているのかについて見て行きましょう。私たちは「_個別学習_」を実現する AI アプリケーションの開発を目指しています。そこで、私たちのアプリケーションを利用する様々な利用者がプロンプトをどのように「デザイン」するのかを考えてみましょう。 +それでは、_このトピック_ がスタートアップのミッションである「[教育へ AI 革新をもたらす](https://educationblog.microsoft.com/2023/06/collaborating-to-bring-ai-innovation-to-education?WT.mc_id=academic-105485-yoterada)」とどのように結びついているのかについて見て行きましょう。私たちは「_個別学習_」を実現する AI アプリケーションの開発を目指しています。そこで、私たちのアプリケーションを利用する様々な利用者がプロンプトをどのように「デザイン」するのかを考えてみましょう。 - **管理者**: AI に「_カリキュラムのデータを分析し、カバーしてない領域を特定してください_」と指示する可能性があります。AI はその結果をまとめたり、コードを用いて可視化できます。 - **教員**: AI に「_特定の生徒と授業科目に応じた授業計画を作成してください_ 」と指示する可能性があります。AI は指定されたフォーマットに従って個別に計画を作成できます。 - **生徒**: AI に「_苦手な科目に対して個別指導をしてください_」と指示する可能性があります。AI は生徒のレベルに合わせたレッスン、ヒント、例を提供して指導できます。 -これらは、ほんの一例です。教育専門家から厳選された、オープンソースのプロンプト・ライブラリ「[Prompts For Education](https://github.com/microsoft/prompts-for-edu/tree/main?WT.mc_id=academic-105485-yoterada)」を確認し、さらに広い視野で可能性を探ってみてください! _サンドボックスでそれらのプロンプトを試しに実行したり、OpenAI Playground で試してどのような結果が得られるかを試してください!_ +これらは、ほんの一例です。教育専門家から厳選された、オープンソースのプロンプト・ライブラリ「[Prompts For Education](https://github.com/microsoft/prompts-for-edu/tree/main?WT.mc_id=academic-105485-yoterada)」を確認し、さらに広い視野で可能性を探ってみてください! _サンドボックスでそれらのプロンプトを試しに実行したり、OpenAI Playground で試してどのような結果が得られるかを試してください!_ -## 課題 +## 課題 おめでとうございます!レッスンの最後までたどり着きました!これから、実際の例を使って、いくつかの概念や技術を試す時が来ました! 課題では、対話式で取り組める演習問題がセットされた Jupyter Notebook を使用します。また、ご自身でアイデアや技術を検証するために、独自の Markdown やコードセルを Notebook に追加できます。 -### 作業を開始するには、リポジトリをフォークしてください - -- (推奨) GitHub Codespacesを起動 +### 作業を開始するには、リポジトリをフォークしてください + +- (推奨) GitHub Codespaces を起動 - (代替案 1) リポジトリをローカル・デバイスにクローンして、ローカルの Docker Desktop で実行 -- (代替案 2) 好みのノートブック実行環境でノートブックを開く +- (代替案 2) 好みのノートブック実行環境でノートブックを開く ### 次に、環境変数を設定してください - リポジトリのルートにある `.env.copy` ファイルを `.env` にコピーし、`OPENAI_API_KEY` の値を入力してください。API キーは [OpenAI Dashboard](https://beta.openai.com/account/api-keys?WT.mc_id=academic-105485-yoterada) から取得できます。 -### 次に、Jupyter Notebookを開いてください +### 次に、Jupyter Notebook を開いてください - 使用する実行環境のカーネルを選択してください。オプション 1 や 2 をご利用される場合は、.devcontainer で提供するコンテナ・イメージの、Python 3.10.x カーネルを選んでください。 @@ -400,10 +400,10 @@ LESSON TEMPLATE: 以下のプロンプトの中で、適切なベストプラクティスに沿ったものはどれですか? 1. 赤い車の写真を画像を表示してください -2. 夕日が沈む崖のそばに駐車した、赤いボルボの XC90 モデルの画像を表示してください +2. 夕日が沈む崖のそばに駐車した、赤いボルボの XC90 モデルの画像を表示してください 3. 赤いボルボの XC90 モデルの画像を表示してください -A: 2番が最良のプロンプトです。それは「何を」求めているのかの詳細を提供し、具体的な情報(任意の車ではなく、特定のメーカーとモデル)を含んでいる上、周囲の環境についても描写しています。次に良いのは3番で、これも詳細な記述が含まれています。 +A: 2 番が最良のプロンプトです。それは「何を」求めているのかの詳細を提供し、具体的な情報(任意の車ではなく、特定のメーカーとモデル)を含んでいる上、周囲の環境についても描写しています。次に良いのは 3 番で、これも詳細な記述が含まれています。 ## 🚀 チャレンジ @@ -414,4 +414,4 @@ A: 2番が最良のプロンプトです。それは「何を」求めている プロンプト・エンジニアリングに関して、さらに概念をもっと深く学びたい方は、この話題に関する他の素晴らしい情報を見つけるために[継続的学習のページ](../../../13-continued-learning/README.md?WT.mc_id=academic-105485-yoterada)をご参照ください。 -それでは、レッスン5に移り、[高度なプロンプト技術](../../../05-advanced-prompts/translations/ja-jp/README.md?WT.mc_id=academic-105485-yoterada)を見ていきましょう! +それでは、レッスン 5 に移り、[高度なプロンプト技術](../../../05-advanced-prompts/translations/ja-jp/README.md?WT.mc_id=academic-105485-yoterada)を見ていきましょう! diff --git a/04-prompt-engineering-fundamentals/translations/pt-br/README.md b/04-prompt-engineering-fundamentals/translations/pt-br/README.md index 0839b86bc..65518f68e 100644 --- a/04-prompt-engineering-fundamentals/translations/pt-br/README.md +++ b/04-prompt-engineering-fundamentals/translations/pt-br/README.md @@ -1,6 +1,6 @@ # Fundamentos de Engenharia de Prompt -[![Prompt Engineering Fundamentals](../../images/04-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/r2ItK3UMVTk?WT.mc_id=academic-105485-koreyst) +[![Prompt Engineering Fundamentals](../../images/04-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=d54c0c69-b183-4a6c-80ed-8b1a8f299cff?WT.mc_id=academic-105485-koreyst) A forma como você escreve seu prompt para o LLM importa. Um prompt cuidadosamente elaborado pode alcançar um resultado melhor do que um que não é. Mas o que são esses conceitos, prompt, Engenharia de Prompt e como posso melhorar o que envio para o LLM? Perguntas como essas são o que este capítulo e o próximo estão procurando responder. @@ -80,7 +80,7 @@ Para ter uma intuição de como a tokenização funciona, experimente ferramenta ### Conceito: Modelos Fundamentais -Uma vez que um prompt é tokenizado, a função principal do ["Base LLM"](https://blog.gopenai.com/an-introduction-to-base-and-instruction-tuned-large-language-models-8de102c785a6?WT.mc_id=academic-105485-koreyst) (ou modelo fundamental) é prever o token nessa sequência. Como os LLMs são treinados em conjuntos massivos de dados de texto, eles têm uma boa compreensão das relações estatísticas entre tokens e podem fazer essa previsão com alguma confiança. +Uma vez que um prompt é tokenizado, a função principal do ["Base LLM"](https://blog.gopenai.com/an-introduction-to-base-and-instruction-tuned-large-language-models-8de102c785a6?WT.mc_id=academic-105485-koreyst) (ou modelo fundamental) é prever o token nessa sequência. Como os LLMs são treinados em conjuntos massivos de dados de texto, eles têm uma boa compreensão das relações estatísticas entre tokens e podem fazer essa previsão com alguma confiança. > Observação: eles não compreendem o _significado_ das palavras no prompt ou token; eles apenas veem um padrão que podem "completar" com sua próxima previsão. Eles podem continuar prevendo a sequência até serem interrompidos pela intervenção do usuário ou alguma condição preestabelecida. @@ -122,6 +122,7 @@ Vamos ver isso em ação no OpenAI ou Azure OpenAI Playground: ### Exemplo de Alucinações Quer ter uma ideia de como as alucinações funcionam? Pense em um prompt que instrua a IA a gerar conteúdo para um tópico inexistente (para garantir que não seja encontrado no conjunto de dados de treinamento). Por exemplo - eu tentei este prompt: + > **Prompt:** generate a lesson plan on the Martian War of 2076. Uma busca na web mostrou que havia relatos fictícios (por exemplo, séries de televisão ou livros) sobre guerras marcianas - mas nenhuma em 2076. O bom senso também nos diz que 2076 está _no futuro_ e, portanto, não pode ser associado a um evento real. @@ -181,8 +182,8 @@ Vimos por que a Engenharia de Prompt é importante - agora vamos entender como o Vamos começar com o prompt básico: uma entrada de texto enviada ao modelo sem nenhum outro contexto. Aqui está um exemplo - quando enviamos as primeiras palavras do hino nacional dos EUA para a [API de Completions da OpenAI](https://platform.openai.com/docs/api-reference/completions?WT.mc_id=academic-105485-koreyst), ela instantaneamente _completa_ a resposta com as próximas linhas, ilustrando o comportamento básico de previsão. -| Prompt (Input) | Completion (Output) | -|:---|:---| +| Prompt (Input) | Completion (Output) | +| :----------------- | :----------------------------------------------------------------------------------------------------------------------------------------- | | Oh say can you see | It sounds like you're starting the lyrics to "The Star-Spangled Banner," the national anthem of the United States. The full lyrics are ... | ### Prompt Complexo @@ -210,11 +211,11 @@ response = openai.ChatCompletion.create( Nos exemplos acima, o prompt do usuário era uma simples consulta de texto que pode ser interpretada como uma solicitação de informações. Com prompts de _instrução_, podemos usar esse texto para especificar uma tarefa de maneira mais detalhada, fornecendo orientações melhores para a IA. Aqui está um exemplo: -| Prompt (Input) | Completion (Output) | Instruction Type | -|:---|:---|:---| -| Write a description of the Civil War | _returned a simple paragraph_ | Simple| -|Write a description of the Civil War. Provide key dates and events and describe their significance | _returned a paragraph followed by a list of key event dates with descriptions_| Complex | -|Write a description of the Civil War in 1 paragraph. Provide 3 bullet points with key dates and their significance. Provide 3 more bullet points with key historical figures and their contributions. Return the output as a JSON file | _returns more extensive details in a text box, formatted as JSON that you can copy-paste to a file and validate as needed_| Complex. Formatted. | +| Prompt (Input) | Completion (Output) | Instruction Type | +| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------- | :------------------ | +| Write a description of the Civil War | _returned a simple paragraph_ | Simple | +| Write a description of the Civil War. Provide key dates and events and describe their significance | _returned a paragraph followed by a list of key event dates with descriptions_ | Complex | +| Write a description of the Civil War in 1 paragraph. Provide 3 bullet points with key dates and their significance. Provide 3 more bullet points with key historical figures and their contributions. Return the output as a JSON file | _returns more extensive details in a text box, formatted as JSON that you can copy-paste to a file and validate as needed_ | Complex. Formatted. | ## Conteúdo Primário @@ -225,9 +226,8 @@ Nos exemplos acima, o prompt ainda era bastante aberto, permitindo que o LLM dec Aqui está um exemplo em que a instrução é: "resuma isso em 2 frases". - -| Prompt (Input) | Completion (Output) | -|:---|:---| +| Prompt (Input) | Completion (Output) | +| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history. It is named after the Roman god Jupiter.[19] When viewed from Earth, Jupiter can be bright enough for its reflected light to cast visible shadows,[20] and is on average the third-brightest natural object in the night sky after the Moon and Venus.
**Summarize this in 2 short sentences** | Jupiter, the fifth planet from the Sun, is the largest in the Solar System and is known for being one of the brightest objects in the night sky. Named after the Roman god Jupiter, it's a gas giant whose mass is two-and-a-half times that of all other planets in the Solar System combined. | O segmento de conteúdo primário pode ser usado de várias maneiras para impulsionar instruções mais eficazes: @@ -248,14 +248,12 @@ O prompt agora consiste em três componentes: - Alguns exemplos da saída desejada - O início de um novo exemplo (que se torna uma descrição implícita da tarefa) - - | Learning Type | Prompt (Input) | Completion (Output) | - |:---|:---|:---| - | Zero-shot | "The Sun is Shining". Translate to Spanish | "El Sol está brillando".| - | One-shot | "The Sun is Shining" => ""El Sol está brillando".
"It's a Cold and Windy Day" => | "Es un día frío y ventoso". | - | Few-shot | The player ran the bases => Baseball
The player hit an ace => Tennis
The player hit a six => Cricket
The player made a slam-dunk => | Basketball | - | | | | - + | Learning Type | Prompt (Input) | Completion (Output) | + | :------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------- | + | Zero-shot | "The Sun is Shining". Translate to Spanish | "El Sol está brillando". | + | One-shot | "The Sun is Shining" => ""El Sol está brillando".
"It's a Cold and Windy Day" => | "Es un día frío y ventoso". | + | Few-shot | The player ran the bases => Baseball
The player hit an ace => Tennis
The player hit a six => Cricket
The player made a slam-dunk => | Basketball | + | | | | Observe como tivemos que fornecer instruções explícitas ("Traduza para o espanhol") no prompting de `zero-shot`, mas isso é inferido no exemplo de `one-shot`. O exemplo `few-shot` mostra como adicionar mais exemplos permite que os modelos façam inferências mais precisas sem instruções adicionais. @@ -263,13 +261,12 @@ Observe como tivemos que fornecer instruções explícitas ("Traduza para o espa Outra técnica para usar conteúdo primário é fornecer _dicas_ em vez de exemplos. Neste caso, estamos dando ao modelo um empurrão na direção certa ao _iniciá-lo_ com um trecho que reflete o formato da resposta desejada. O modelo então "pega a dica" para continuar nessa linha. - -| Number of Cues | Prompt (Input) | Completion (Output) | -|:---|:---|:---| -| 0 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This** | Jupiter is the largest planet in our Solar System and the fifth one from the Sun. It is a gas giant with a mass 1/1000th of the Sun's, but it is heavier than all the other planets combined. Ancient civilizations have known about Jupiter for a long time, and it is easily visible in the night sky..| -| 1 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This**
What we learned is that Jupiter | is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets combined. It is easily visible to the naked eye and has been known since ancient times. | -| 2 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This**
Top 3 Facts We Learned: | 1. Jupiter is the fifth planet from the Sun and the largest in the Solar System.
2. It is a gas giant with a mass one-thousandth that of the Sun...
3. Jupiter has been visible to the naked eye since ancient times ... | -| | | | +| Number of Cues | Prompt (Input) | Completion (Output) | +| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This** | Jupiter is the largest planet in our Solar System and the fifth one from the Sun. It is a gas giant with a mass 1/1000th of the Sun's, but it is heavier than all the other planets combined. Ancient civilizations have known about Jupiter for a long time, and it is easily visible in the night sky.. | +| 1 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This**
What we learned is that Jupiter | is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets combined. It is easily visible to the naked eye and has been known since ancient times. | +| 2 | Jupiter is the fifth planet from the Sun and the largest in the Solar System. It is a gas giant with a mass one-thousandth that of the Sun, but two-and-a-half times that of all the other planets in the Solar System combined. Jupiter is one of the brightest objects visible to the naked eye in the night sky, and has been known to ancient civilizations since before recorded history.
**Summarize This**
Top 3 Facts We Learned: | 1. Jupiter is the fifth planet from the Sun and the largest in the Solar System.
2. It is a gas giant with a mass one-thousandth that of the Sun...
3. Jupiter has been visible to the naked eye since ancient times ... | +| | | | Observe como tivemos que fornecer uma instrução explícita ("Resuma Isso") no exemplo de zero dicas, mas isso é inferido no exemplo de uma dica. O exemplo de duas dicas mostra como adicionar mais dicas permite que os modelos façam inferências mais precisas sem instruções adicionais. @@ -326,18 +323,17 @@ A Engenharia de Prompt é um processo de tentativa e erro, então tenha em mente Agora, vamos dar uma olhada nas práticas recomendadas comuns pela [Open AI](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api?WT.mc_id=academic-105485-koreyst) e pelos praticantes da [Azure OpenAI](https://learn.microsoft.com/azure/ai-services/openai/concepts/prompt-engineering#best-practices?WT.mc_id=academic-105485-koreyst). - -| What | Why | -|:---|:---| -| Evaluate the latest models. | New model generations are likely to have improved features and quality - but may also incur higher costs. Evaluate them for impact, then make migration decisions. | -| Separate instructions & context | Check if your model/provider defines _delimiters_ to distinguish instructions, primary and secondary content more clearly. This can help models assign weights more accurately to tokens. | -|Be specific and clear | Give more details about the desired context, outcome, length, format, style etc. This will improve both the quality and consistency of responses. Capture recipes in reusable templates. | -|Be descriptive, use examples |Models may respond better to a "show and tell" approach. Start with a `zero-shot` approach where you give it an instruction (but no examples) then try `few-shot` as a refinement, providing a few examples of the desired output. Use analogies.| -| Use cues to jumpstart completions | Nudge it towards a desired outcome by giving it some leading words or phrases that it can use as a starting point for the response.| -|Double Down | Sometimes you may need to repeat yourself to the model. Give instructions before and after your primary content, use an instruction and a cue, etc. Iterate & validate to see what works.| -| Order Matters | The order in which you present information to the model may impact the output, even in the learning examples, thanks to recency bias. Try different options to see what works best.| -|Give the model an “out” | Give the model a _fallback_ completion response it can provide if it cannot complete the task for any reason. This can reduce chances of models generating false or hallucinatory responses. | -| | | +| What | Why | +| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Evaluate the latest models. | New model generations are likely to have improved features and quality - but may also incur higher costs. Evaluate them for impact, then make migration decisions. | +| Separate instructions & context | Check if your model/provider defines _delimiters_ to distinguish instructions, primary and secondary content more clearly. This can help models assign weights more accurately to tokens. | +| Be specific and clear | Give more details about the desired context, outcome, length, format, style etc. This will improve both the quality and consistency of responses. Capture recipes in reusable templates. | +| Be descriptive, use examples | Models may respond better to a "show and tell" approach. Start with a `zero-shot` approach where you give it an instruction (but no examples) then try `few-shot` as a refinement, providing a few examples of the desired output. Use analogies. | +| Use cues to jumpstart completions | Nudge it towards a desired outcome by giving it some leading words or phrases that it can use as a starting point for the response. | +| Double Down | Sometimes you may need to repeat yourself to the model. Give instructions before and after your primary content, use an instruction and a cue, etc. Iterate & validate to see what works. | +| Order Matters | The order in which you present information to the model may impact the output, even in the learning examples, thanks to recency bias. Try different options to see what works best. | +| Give the model an “out” | Give the model a _fallback_ completion response it can provide if it cannot complete the task for any reason. This can reduce chances of models generating false or hallucinatory responses. | +| | | Como em qualquer prática recomendada, lembre-se de que _seus resultados podem variar_ com base no modelo, na tarefa e no domínio. Use essas práticas como ponto de partida e itere para encontrar o que funciona melhor para você. Reavalie constantemente seu processo de engenharia de prompt à medida que novos modelos e ferramentas se tornam disponíveis, com foco na escalabilidade do processo e na qualidade das respostas. diff --git a/05-advanced-prompts/README.md b/05-advanced-prompts/README.md index 418c1e669..86c7dfa85 100644 --- a/05-advanced-prompts/README.md +++ b/05-advanced-prompts/README.md @@ -1,6 +1,6 @@ # Creating Advanced prompts -[![Creating Advanced Prompts](./images/05-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/32GBH6BTWZQ?WT.mc_id=academic-105485-koreyst) +[![Creating Advanced Prompts](./images/05-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=f3615e46-dbca-477c-832d-21eef95cd9f3?WT.mc_id=academic-105485-koreyst) Let's recap some learnings from the previous chapter: @@ -8,7 +8,7 @@ Let's recap some learnings from the previous chapter: There are also two steps to writing prompts, constructing the prompt, by providing relevant context and the second part is _optimization_, how to gradually improve the prompt. -At this point, we have some basic understanding of how to write prompts, but we need to go deeper. In this chapter, you will go from trying out various prompts to understanding why one prompt is better than another. You will learn how to construct prompts following some basic techniques that can be applied to any LLM. +At this point, we have some basic understanding of how to write prompts, but we need to go deeper. In this chapter, you will go from trying out various prompts to understanding why one prompt is better than another. You will learn how to construct prompts following some basic techniques that can be applied to any LLM. ## Introduction @@ -112,7 +112,7 @@ Here's how: Alice has 5 apples, throws 3 apples, gives 2 to Bob and Bob gives one back, how many apples does Alice have?" Answer: 1 -Note how we write substantially longer prompts with another example, a calculation and then the original prompt and we arrive at the correct answer 1. +Note how we write substantially longer prompts with another example, a calculation and then the original prompt and we arrive at the correct answer 1. As you can see chain-of-thought is a very powerful technique. @@ -124,7 +124,7 @@ As an example, this is what your prompt then can look like if you're in the insu ```text {{company}}: {{company_name}} - {{products}}: + {{products}}: {{products_list}} Please suggest an insurance given the following budget and requirements: Budget: {{budget}} @@ -137,13 +137,13 @@ Here's an example of how the prompt could look like once the variables have been ```text Insurance company: ACME Insurance - Insurance products (cost per month): + Insurance products (cost per month): - Car, cheap, 500 USD - - Car, expensive, 1100 USD + - Car, expensive, 1100 USD - Home, cheap, 600 USD - Home, expensive, 1200 USD - Life, cheap, 100 USD - + Please suggest an insurance given the following budget and requirements: Budget: $1000 Requirements: Car, Home @@ -153,11 +153,11 @@ Running this prompt through an LLM will produce a response like this: ```output , and Life insurance - - Given the budget and requirements, we suggest the following insurance package from ACME Insurance: - - Car, cheap, 500 USD - - Home, cheap, 600 USD - - Life, cheap, 100 USD + + Given the budget and requirements, we suggest the following insurance package from ACME Insurance: + - Car, cheap, 500 USD + - Home, cheap, 600 USD + - Life, cheap, 100 USD Total cost: $1,200 USD ``` @@ -165,13 +165,13 @@ As you can see, it also suggests the Life insurance, which it shouldn't. This re ```text Insurance company: ACME Insurance - Insurance products (cost per month): + Insurance products (cost per month): - type: Car, cheap, cost: 500 USD - - type: Car, expensive, cost: 1100 USD + - type: Car, expensive, cost: 1100 USD - type: Home, cheap, cost: 600 USD - type: Home, expensive, cost: 1200 USD - type: Life, cheap, cost: 100 USD - + Please suggest an insurance given the following budget and requirements: Budget: $1000 restrict choice to types: Car, Home ``` @@ -222,11 +222,11 @@ AI Answer: ```python import flask app = Flask(__name__) - + @app.route('/products') def products(): return 'Products' - + @app.route('/customers') def customers(): return 'Customers' @@ -238,27 +238,27 @@ AI Answer: ```text Sure, here are three suggestions to improve the code: - + Import the correct module: The first line should import Flask instead of flask. The correct import statement should be from flask import Flask. - + Add a main function: Add a if __name__ == '__main__': block to the end of the file to run the application when the file is executed. - + Use f-strings: Use f-strings to format the return statements in the route functions. For example, return 'Products' can be changed to return f'This is the {request.path} page'. ``` ```python from flask import Flask, request - + app = Flask(__name__) - + @app.route('/products') def products(): return f'This is the {request.path} page' - + @app.route('/customers') def customers(): return f'This is the {request.path} page' - + if __name__ == '__main__': app.run() ``` @@ -278,7 +278,7 @@ Repeat 2 and 3 until you've gone through all the parts and you're satisfied with Here's an example prompt: > prompt: How can I create a crisis plan to mitigate a pandemic in 5 steps? -LLM answer: +> LLM answer: ```text 1. Identify the risks @@ -294,7 +294,7 @@ It's identified 5 steps, but can we determine if this is correct? Let's ask the ```text The risks are the following: - + - Loss of life - Loss of business - Loss of reputation @@ -328,34 +328,34 @@ LLMs are nondeterministic by nature, meaning that you will get different results # Import necessary modules import flask from flask import request, jsonify - + # Create a Flask app app = flask.Flask(__name__) - + # Create a route for the API @app.route('/api', methods=['GET']) def api(): # Get the data from the request data = request.args - + # Process the data result = process_data(data) - + # Return the result as JSON return jsonify(result) - + # Function to process the data def process_data(data): # Do something with the data result = data + 1 - + # Return the result return result - + # Run the app if __name__ == '__main__': app.run() - + ``` Running the same prompt again generates a slightly different response: @@ -364,11 +364,11 @@ Running the same prompt again generates a slightly different response: #import necessary packages import flask from flask import request, jsonify - + #create the Flask application app = flask.Flask(__name__) app.config["DEBUG"] = True - + #create a list of books books = [ {'id': 0, @@ -387,18 +387,18 @@ Running the same prompt again generates a slightly different response: 'first_sentence': 'to wound the autumnal city.', 'published': '1975'} ] - + #create an endpoint for the API @app.route('/', methods=['GET']) def home(): return '''

Books API

A prototype API for retrieving books.

''' - + #create an endpoint to return all books @app.route('/api/v1/resources/books/all', methods=['GET']) def api_all(): return jsonify(books) - + #create an endpoint to return a single book @app.route('/api/v1/resources/books', methods=['GET']) def api_id(): @@ -409,20 +409,20 @@ Running the same prompt again generates a slightly different response: id = int(request.args['id']) else: return "Error: No id field provided. Please specify an id." - + #create an empty list for our results results = [] - + #loop through the data and match results that fit the requested ID #IDs are unique, but other fields might return many results for book in books: if book['id'] == id: results.append(book) - + #use the jsonify function from Flask to convert our list of #Python dictionaries to the JSON format return jsonify(results) - + app.run() ``` @@ -442,34 +442,34 @@ Temperature is a value between 0 and 1, where 0 is the most deterministic and 1 #import necessary libraries import flask from flask import request, jsonify - + #create an instance of the Flask class app = flask.Flask(__name__) - + #create an endpoint for the API @app.route('/api/v1/endpoint', methods=['GET']) def api_endpoint(): #get the request data data = request.get_json() - + #process the data result = process_data(data) - + #return the result return jsonify(result) - + #function to process the data def process_data(data): #process the data result = {'result': 'success'} - + #return the result return result - + #run the Flask app if __name__ == '__main__': app.run() - + ``` Running the prompt again gives us this outcome: @@ -478,70 +478,70 @@ Running the prompt again gives us this outcome: #import necessary libraries import flask from flask import request, jsonify - + #create a Flask app app = flask.Flask(__name__) - + #create a route for the API @app.route('/api', methods=['GET']) def api_call(): #get the data from the request data = request.get_json() - + #process the data result = process_data(data) - + #return the result return jsonify(result) - + #define the process_data function def process_data(data): #do something with the data result = data + 1 - + #return the result return result - + #run the app if __name__ == '__main__': app.run() - + ``` -There's only a tiny difference between these two outputs. Let's do the opposite this time, let's set the temperature to 0.9: +There's only a tiny difference between these two outputs. Let's do the opposite this time, let's set the temperature to 0.9: ```python # Import necessary libraries import flask from flask import request, jsonify - + # Create a Flask app app = flask.Flask(__name__) - + # Create a route for the API @app.route('/api', methods=['GET']) def api_call(): # Get the data from the request data = request.args - + # Process the data result = process_data(data) - + # Return the result return jsonify(result) - + # Function to process the data def process_data(data): # Do something with the data result = data + 1 - + # Return the result return result - + # Run the app if __name__ == '__main__': app.run() - + ``` and the second attempt at 0.9 as temperature value: @@ -549,34 +549,34 @@ and the second attempt at 0.9 as temperature value: ```python import flask from flask import request, jsonify - + # create the Flask app app = flask.Flask(__name__) app.config['DEBUG'] = True - + # create some test data books = [ {'id': 0, 'title': 'A Fire Upon The Deep', 'author': 'Vernor Vinge', 'first_sentence': 'The coldsleep itself was dreamless.', 'year_published': '1992'}, {'id': 1, 'title': 'The Ones Who Walk Away From Omelas', 'author': 'Ursula K. Le Guin', 'first_sentence': 'With a clamor of bells that set the swallows soaring, the Festival of Summer came to the city Omelas, bright-towered by the sea.', 'published': '1973'}, {'id': 2, 'title': 'Dhalgren', 'author': 'Samuel R. Delany', 'first_sentence': 'to wound the autumnal city.', 'published': '1975'} ] - + # create an endpoint @app.route('/', methods=['GET']) def home(): return '''

Welcome to our book API!

''' - + @app.route('/api/v1/resources/books - + ``` As you can see, the results couldn't be more varied. -> Note, that there are more parameters you can change to vary the output, like top-k, top-p, repetition penalty, length penalty and diversity penalty but these are outside the scope of this curriculum. +> Note, that there are more parameters you can change to vary the output, like top-k, top-p, repetition penalty, length penalty and diversity penalty but these are outside the scope of this curriculum. ## Good practices -There are many practices you can apply to try to get what you want. You will find your own style as you use prompting more and more. +There are many practices you can apply to try to get what you want. You will find your own style as you use prompting more and more. Additionally to the techniques we've covered, there are some good practices to consider when prompting an LLM. @@ -586,7 +586,7 @@ Here are some good practices to consider: - Limit the output. If you want a specific number of items or a specific length, specify it. - **Specify both what and how**. Remember to mention both what you want and how you want it, for example "Create a Python Web API with routes products and customers, divide it into 3 files". - **Use templates**. Often, you will want to enrich your prompts with data from your company. Use templates to do this. Templates can have variables that you replace with actual data. -- **Spell correctly**. LLMs might provide you with a correct response, but if you spell correctly, you will get a better response. +- **Spell correctly**. LLMs might provide you with a correct response, but if you spell correctly, you will get a better response. ## Assignment @@ -594,14 +594,14 @@ Here's code in Python showing how to build a simple API using Flask: ```python from flask import Flask, request - + app = Flask(__name__) - + @app.route('/') def hello(): name = request.args.get('name', 'World') return f'Hello, {name}!' - + if __name__ == '__main__': app.run() ``` @@ -629,7 +629,7 @@ A: 1, because chain-of-thought is about showing the LLM how to solve a problem b ## 🚀 Challenge -You just used the self-refine technique in the assignment. Take any program you built and consider what improvements you would want to apply to it. Now use the self-refine technique to apply the proposed changes. What did you think the result, better or worse? +You just used the self-refine technique in the assignment. Take any program you built and consider what improvements you would want to apply to it. Now use the self-refine technique to apply the proposed changes. What did you think the result, better or worse? ## Great Work! Continue Your Learning diff --git a/05-advanced-prompts/translations/cn/README.md b/05-advanced-prompts/translations/cn/README.md index 624831984..ef3ef862a 100644 --- a/05-advanced-prompts/translations/cn/README.md +++ b/05-advanced-prompts/translations/cn/README.md @@ -1,6 +1,6 @@ # 第五章:创建高级的提示工程技巧 -[![Creating Advanced Prompts](../../images/05-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/32GBH6BTWZQ?WT.mc_id=academic-105485-koreyst) +[![Creating Advanced Prompts](../../images/05-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=f3615e46-dbca-477c-832d-21eef95cd9f3?WT.mc_id=academic-105485-koreyst) 让我们回顾一下上一章的一些知识: @@ -81,11 +81,11 @@ LLM 给出的答案为 5,这是不正确的。 根据计算结果 (5 -3 -2 + 1 = 1),正确答案是 1 个苹果。 -那么我们怎样才能教LLM正确地做到这一点呢? +那么我们怎样才能教 LLM 正确地做到这一点呢? 让我们尝试一下思维链。 应用思维链意味着: -1. 给LLM一个类似的例子。 +1. 给 LLM 一个类似的例子。 2. 展示计算结果,以及如何正确计算。 3. 提供原始提示。 @@ -108,7 +108,7 @@ LLM 给出的答案为 5,这是不正确的。 根据计算结果 (5 -3 -2 + 1 ```text {{company}}: {{company_name}} - {{products}}: + {{products}}: {{products_list}} Please suggest an insurance given the following budget and requirements: Budget: {{budget}} @@ -121,13 +121,13 @@ LLM 给出的答案为 5,这是不正确的。 根据计算结果 (5 -3 -2 + 1 ```text Insurance company: ACME Insurance - Insurance products (cost per month): + Insurance products (cost per month): - Car, cheap, 500 USD - - Car, expensive, 1100 USD + - Car, expensive, 1100 USD - Home, cheap, 600 USD - Home, expensive, 1200 USD - Life, cheap, 100 USD - + Please suggest an insurance given the following budget and requirements: Budget: $1000 Requirements: Car, Home @@ -137,11 +137,11 @@ LLM 给出的答案为 5,这是不正确的。 根据计算结果 (5 -3 -2 + 1 ```output , and Life insurance - - Given the budget and requirements, we suggest the following insurance package from ACME Insurance: - - Car, cheap, 500 USD - - Home, cheap, 600 USD - - Life, cheap, 100 USD + + Given the budget and requirements, we suggest the following insurance package from ACME Insurance: + - Car, cheap, 500 USD + - Home, cheap, 600 USD + - Life, cheap, 100 USD Total cost: $1,200 USD ``` @@ -149,13 +149,13 @@ LLM 给出的答案为 5,这是不正确的。 根据计算结果 (5 -3 -2 + 1 ```text Insurance company: ACME Insurance - Insurance products (cost per month): + Insurance products (cost per month): - type: Car, cheap, cost: 500 USD - - type: Car, expensive, cost: 1100 USD + - type: Car, expensive, cost: 1100 USD - type: Home, cheap, cost: 600 USD - type: Home, expensive, cost: 1200 USD - type: Life, cheap, cost: 100 USD - + Please suggest an insurance given the following budget and requirements: Budget: $1000 restrict choice to types: Car, Home ``` @@ -168,7 +168,7 @@ LLM 给出的答案为 5,这是不正确的。 根据计算结果 (5 -3 -2 + 1 Given the budget and requirements, we suggest the Car, Cheap insurance product which costs 500 USD per month. ``` -这个例子的目的是表明,即使我们使用像_生成知识_这样的基本技术,我们仍然需要在大多数情况下优化提示以获得所需的结果。 +这个例子的目的是表明,即使我们使用像*生成知识*这样的基本技术,我们仍然需要在大多数情况下优化提示以获得所需的结果。 ### 从少到多 @@ -186,12 +186,12 @@ LLM 给出的答案为 5,这是不正确的。 根据计算结果 (5 -3 -2 + 1 ### 自我完善,质疑结果 -对于生成式人工智能和 LLMs,你不能相信其输出。 你需要验证一下。 毕竟, LLMs只是向您展示下一个最有可能说的话,而不是正确的内容。 因此,一个好主意是要求 LLMs 自我批评,这引导我们自我完善技术。 +对于生成式人工智能和 LLMs,你不能相信其输出。 你需要验证一下。 毕竟, LLMs 只是向您展示下一个最有可能说的话,而不是正确的内容。 因此,一个好主意是要求 LLMs 自我批评,这引导我们自我完善技术。 其工作原理是按照以下步骤操作: -1. 要求LLM解决问题的初始提示 -2. LLM产生答案 +1. 要求 LLM 解决问题的初始提示 +2. LLM 产生答案 3. 质疑答案并要求人工智能改进 4. LLM 再次回答,这次考虑了质疑并提出了解决方案 @@ -206,11 +206,11 @@ AI Answer: ```python import flask app = Flask(__name__) - + @app.route('/products') def products(): return 'Products' - + @app.route('/customers') def customers(): return 'Customers' @@ -222,27 +222,27 @@ AI Answer: ```text Sure, here are three suggestions to improve the code: - + Import the correct module: The first line should import Flask instead of flask. The correct import statement should be from flask import Flask. - + Add a main function: Add a if __name__ == '__main__': block to the end of the file to run the application when the file is executed. - + Use f-strings: Use f-strings to format the return statements in the route functions. For example, return 'Products' can be changed to return f'This is the {request.path} page'. ``` ```python from flask import Flask, request - + app = Flask(__name__) - + @app.route('/products') def products(): return f'This is the {request.path} page' - + @app.route('/customers') def customers(): return f'This is the {request.path} page' - + if __name__ == '__main__': app.run() ``` @@ -254,13 +254,13 @@ AI Answer: 多维度的提示是一种类似于自我完善的技术,但它更多的是要求 LLMs 解释自己。 目标是减少 LLMs 输出不一致,以确保得出正确的答案。 要遵循的工作流程是: 1. 请 LLM 回答问题 -2. 对于答案的每一部分,请LLM更深入地解释。 +2. 对于答案的每一部分,请 LLM 更深入地解释。 3. 如果存在不一致,则丢弃不一致的部分。 重复 2 和 3,直到您完成所有部分并对答案感到满意为止。 > prompt: How can I create a crisis plan to mitigate for a pandemic in 5 steps? -LLM answer: +> LLM answer: ```text 1. Identify the risks @@ -270,13 +270,13 @@ LLM answer: 1. Identify the communication channels ``` -它确定了 5 个步骤,但是我们可以确定这是否正确吗? 让我们请LLM解释一下每一步: +它确定了 5 个步骤,但是我们可以确定这是否正确吗? 让我们请 LLM 解释一下每一步: > prompt: Explain the first step in more detail, what are the risks in detail with a pandemic? ```text The risks are the following: - + - Loss of life - Loss of business - Loss of reputation @@ -310,34 +310,34 @@ LLM 本质上是不确定的,这意味着每次运行相同的提示时都会 # Import necessary modules import flask from flask import request, jsonify - + # Create a Flask app app = flask.Flask(__name__) - + # Create a route for the API @app.route('/api', methods=['GET']) def api(): # Get the data from the request data = request.args - + # Process the data result = process_data(data) - + # Return the result as JSON return jsonify(result) - + # Function to process the data def process_data(data): # Do something with the data result = data + 1 - + # Return the result return result - + # Run the app if __name__ == '__main__': app.run() - + ``` 再次运行相同的提示会生成略有不同的响应: @@ -346,11 +346,11 @@ LLM 本质上是不确定的,这意味着每次运行相同的提示时都会 #import necessary packages import flask from flask import request, jsonify - + #create the Flask application app = flask.Flask(__name__) app.config["DEBUG"] = True - + #create a list of books books = [ {'id': 0, @@ -369,18 +369,18 @@ LLM 本质上是不确定的,这意味着每次运行相同的提示时都会 'first_sentence': 'to wound the autumnal city.', 'published': '1975'} ] - + #create an endpoint for the API @app.route('/', methods=['GET']) def home(): return '''

Books API

A prototype API for retrieving books.

''' - + #create an endpoint to return all books @app.route('/api/v1/resources/books/all', methods=['GET']) def api_all(): return jsonify(books) - + #create an endpoint to return a single book @app.route('/api/v1/resources/books', methods=['GET']) def api_id(): @@ -391,20 +391,20 @@ LLM 本质上是不确定的,这意味着每次运行相同的提示时都会 id = int(request.args['id']) else: return "Error: No id field provided. Please specify an id." - + #create an empty list for our results results = [] - + #loop through the data and match results that fit the requested ID #IDs are unique, but other fields might return many results for book in books: if book['id'] == id: results.append(book) - + #use the jsonify function from Flask to convert our list of #Python dictionaries to the JSON format return jsonify(results) - + app.run() ``` @@ -424,34 +424,34 @@ LLM 本质上是不确定的,这意味着每次运行相同的提示时都会 #import necessary libraries import flask from flask import request, jsonify - + #create an instance of the Flask class app = flask.Flask(__name__) - + #create an endpoint for the API @app.route('/api/v1/endpoint', methods=['GET']) def api_endpoint(): #get the request data data = request.get_json() - + #process the data result = process_data(data) - + #return the result return jsonify(result) - + #function to process the data def process_data(data): #process the data result = {'result': 'success'} - + #return the result return result - + #run the Flask app if __name__ == '__main__': app.run() - + ``` 再次运行提示符会给我们这样的结果: @@ -460,34 +460,34 @@ LLM 本质上是不确定的,这意味着每次运行相同的提示时都会 #import necessary libraries import flask from flask import request, jsonify - + #create a Flask app app = flask.Flask(__name__) - + #create a route for the API @app.route('/api', methods=['GET']) def api_call(): #get the data from the request data = request.get_json() - + #process the data result = process_data(data) - + #return the result return jsonify(result) - + #define the process_data function def process_data(data): #do something with the data result = data + 1 - + #return the result return result - + #run the app if __name__ == '__main__': app.run() - + ``` 这两个输出之间只有很小的差异。 这次我们反其道而行之,将温度设置为 0.9: @@ -496,34 +496,34 @@ LLM 本质上是不确定的,这意味着每次运行相同的提示时都会 # Import necessary libraries import flask from flask import request, jsonify - + # Create a Flask app app = flask.Flask(__name__) - + # Create a route for the API @app.route('/api', methods=['GET']) def api_call(): # Get the data from the request data = request.args - + # Process the data result = process_data(data) - + # Return the result return jsonify(result) - + # Function to process the data def process_data(data): # Do something with the data result = data + 1 - + # Return the result return result - + # Run the app if __name__ == '__main__': app.run() - + ``` 第二次尝试使用 0.9 作为温度值: @@ -531,30 +531,30 @@ LLM 本质上是不确定的,这意味着每次运行相同的提示时都会 ```python import flask from flask import request, jsonify - + # create the Flask app app = flask.Flask(__name__) app.config['DEBUG'] = True - + # create some test data books = [ {'id': 0, 'title': 'A Fire Upon The Deep', 'author': 'Vernor Vinge', 'first_sentence': 'The coldsleep itself was dreamless.', 'year_published': '1992'}, {'id': 1, 'title': 'The Ones Who Walk Away From Omelas', 'author': 'Ursula K. Le Guin', 'first_sentence': 'With a clamor of bells that set the swallows soaring, the Festival of Summer came to the city Omelas, bright-towered by the sea.', 'published': '1973'}, {'id': 2, 'title': 'Dhalgren', 'author': 'Samuel R. Delany', 'first_sentence': 'to wound the autumnal city.', 'published': '1975'} ] - + # create an endpoint @app.route('/', methods=['GET']) def home(): return '''

Welcome to our book API!

''' - + @app.route('/api/v1/resources/books - + ``` 正如您所看到的,结果各式各样。 -> 请注意,您可以更改更多参数来改变输出,例如 top-k, top-p, repetition penalty, length penalty and diversity penalty ,但这些不属于本课程的范围。 +> 请注意,您可以更改更多参数来改变输出,例如 top-k, top-p, repetition penalty, length penalty and diversity penalty ,但这些不属于本课程的范围。 ## 最佳实践 @@ -576,14 +576,14 @@ LLM 本质上是不确定的,这意味着每次运行相同的提示时都会 ```python from flask import Flask, request - + app = Flask(__name__) - + @app.route('/') def hello(): name = request.args.get('name', 'World') return f'Hello, {name}!' - + if __name__ == '__main__': app.run() ``` @@ -617,4 +617,4 @@ LLM 本质上是不确定的,这意味着每次运行相同的提示时都会 想要了解有关创建高级提示的更多信息? 转至[进阶学习的页面](../../../13-continued-learning/translations/cn/README.md?WT.mc_id=academic-105485-koreyst) 查找有关此主章节的其他学习资源。 -前往第六章,我们将应用提示工程知识[构建文本生成应用程序](../../../06-text-generation-apps/translations/cn/README.md?WT.mc_id=academic-105485-koreyst) +前往第六章,我们将应用提示工程知识[构建文本生成应用程序](../../../06-text-generation-apps/translations/cn/README.md?WT.mc_id=academic-105485-koreyst) diff --git a/05-advanced-prompts/translations/ja-jp/README.md b/05-advanced-prompts/translations/ja-jp/README.md index 9f1c3659f..3da392471 100644 --- a/05-advanced-prompts/translations/ja-jp/README.md +++ b/05-advanced-prompts/translations/ja-jp/README.md @@ -1,6 +1,6 @@ # 高度なプロンプトの作成 -[![高度なプロンプトの作成](../../images/05-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://youtu.be/32GBH6BTWZQ?WT.mc_id=academic-105485-yoterada) +[![高度なプロンプトの作成](../../images/05-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=f3615e46-dbca-477c-832d-21eef95cd9f3?WT.mc_id=academic-105485-yoterada) 前章までの学習内容をいくつかおさらいしましょう。 @@ -71,7 +71,7 @@ LLM のプロンプトで利用可能な、基本的なテクニックがいく このプロンプトはとても簡単で、一つのプロンプトといくつかの例から構成します。 この手法は、LLM について学び始めたときに最初に使用すると良い手法です。次に例を示します。 -- プロンプト: 「代数とは何ですか?」 +- プロンプト: 「代数とは何ですか?」 - 回答: 「数学の一分野で、数の代わりに文字を用いて方程式の解法などを研究する学問です。」 > [!NOTE] @@ -82,22 +82,22 @@ LLM のプロンプトで利用可能な、基本的なテクニックがいく Chain-of-thought (思考の連鎖) は、非常に興味深い手法で、一つの問題をいくつか複数の段階に分けて、LLM の回答を誘導する手法です。LLM が、何をどうやって処理を行うべきか理解できるように指示する手法です。次の例を考えてみてください。Chain-of-thought を用いた場合と用いない場合の両方の例をご覧ください。まずは、Chain-of-thought を用いない例を見てみましょう。 - - プロンプト: 「アリスはリンゴを 5 個持っていて、3 個を捨て、2 個をボブに渡し、ボブは 1 個を返します。アリスはリンゴを何個持っていますか?」 - - 回答: 5 + - プロンプト: 「アリスはリンゴを 5 個持っていて、3 個を捨て、2 個をボブに渡し、ボブは 1 個を返します。アリスはリンゴを何個持っていますか?」 + - 回答: 5 -LLM は 5 と答えますが、これは不正解です。正しい答えはリンゴ 1 個で、計算式は (5 -3 -2 + 1 = 1) になります。 +LLM は 5 と答えますが、これは不正解です。正しい答えはリンゴ 1 個で、計算式は (5 -3 -2 + 1 = 1) になります。 -では、どうやって LLM がこれを正しく計算できるように伝えられるのでしょうか? +では、どうやって LLM がこれを正しく計算できるように伝えられるのでしょうか? -次に、Chain-of-thought を試してみましょう。Chain-of-thought を適用するためには: +次に、Chain-of-thought を試してみましょう。Chain-of-thought を適用するためには: -1. LLM に類似の例を示す。 -2. 計算式と、それを正しく計算する方法を示す。 -3. 元のプロンプトを提供する。 +1. LLM に類似の例を示す。 +2. 計算式と、それを正しく計算する方法を示す。 +3. 元のプロンプトを提供する。 -という手順を踏みます。以下にその方法を示します。 +という手順を踏みます。以下にその方法を示します。 - - プロンプト: 「リサはリンゴを7個持っていて、1個を捨て、4個をバートに渡し、バートは1個を返します。計算は次の通り: + - プロンプト: 「リサはリンゴを7個持っていて、1個を捨て、4個をバートに渡し、バートは1個を返します。計算は次の通り: 7 - 1 = 6 6 - 4 = 2 2 + 1 = 3 @@ -119,81 +119,81 @@ LLM は 5 と答えますが、これは不正解です。正しい答えはリ 例えば、保険業界であれば、プロンプトは以下のようになります。 ```text -{{company}}: {{company_name}} -{{products}}: -{{products_list}} -以下の予算と要件を考慮し、保険を提案してください: -予算: {{budget}} -要件: {{requirements}} +{{company}}: {{company_name}} +{{products}}: +{{products_list}} +以下の予算と要件を考慮し、保険を提案してください: +予算: {{budget}} +要件: {{requirements}} ``` -上記は、テンプレートを使用してプロンプトをどのように作成するかを示しています。テンプレートには、`{{variable}}`という形式で表現する変数がいくつかあり、これらは会社の API から取得した実際の値に置き換えます。 +上記は、テンプレートを使用してプロンプトをどのように作成するかを示しています。テンプレートには、`{{variable}}`という形式で表現する変数がいくつかあり、これらは会社の API から取得した実際の値に置き換えます。 -以下は、変数を自社の情報に置き換えた後のプロンプト例です。 +以下は、変数を自社の情報に置き換えた後のプロンプト例です。 ```text -保険会社: ACME保険 -保険商品(月額料金): -- 自動車保険, 安価, 500ドル -- 自動車保険, 高価, 1100ドル -- 家財保険, 安価, 600ドル -- 家財保険, 高価, 1200ドル -- 生命保険, 安価, 100ドル - -以下の予算と要件を考慮した上で、保険を提案してください: -予算: $1000 -要件: 自動車保険, 家財保険 +保険会社: ACME保険 +保険商品(月額料金): +- 自動車保険, 安価, 500ドル +- 自動車保険, 高価, 1100ドル +- 家財保険, 安価, 600ドル +- 家財保険, 高価, 1200ドル +- 生命保険, 安価, 100ドル + +以下の予算と要件を考慮した上で、保険を提案してください: +予算: $1000 +要件: 自動車保険, 家財保険 ``` このプロンプトを LLM(Large Language Model)を実行すると、以下のような回答が得られます。 ```output -生命保険も含めて - -予算と要件を考慮した上で、ACME保険から以下の保険パッケージを提案します: -- 自動車保険, 安価, 500ドル -- 家財保険, 安価, 600ドル -- 生命保険, 安価, 100ドル -合計費用: $1,200ドル +生命保険も含めて + +予算と要件を考慮した上で、ACME保険から以下の保険パッケージを提案します: +- 自動車保険, 安価, 500ドル +- 家財保険, 安価, 600ドル +- 生命保険, 安価, 100ドル +合計費用: $1,200ドル ``` 結果は、生命保険も提案されましたが、これは本来求めていない結果です。そして、プロンプトの最適化が必要だというのを示しています。プロンプトで何を許可するのかを、より明確にする必要があります。試行錯誤を繰り返した結果、以下のようなプロンプトにたどり着きました。 ```text -保険会社: ACME保険 -保険商品(月額料金): -- 種類: 自動車保険, 安価, 費用: 500ドル -- 種類: 自動車保険, 高価, 費用: 1100ドル -- 種類: 家財保険, 安価, 費用: 600ドル -- 種類: 家財保険, 高価, 費用: 1200ドル -- 種類: 生命保険, 安価, 費用: 100ドル - -以下の予算と要件を考慮した上で、保険を提案してください: -予算: $1000 選択を以下の種類に限定: 自動車保険, 家財保険 -``` +保険会社: ACME保険 +保険商品(月額料金): +- 種類: 自動車保険, 安価, 費用: 500ドル +- 種類: 自動車保険, 高価, 費用: 1100ドル +- 種類: 家財保険, 安価, 費用: 600ドル +- 種類: 家財保険, 高価, 費用: 1200ドル +- 種類: 生命保険, 安価, 費用: 100ドル + +以下の予算と要件を考慮した上で、保険を提案してください: +予算: $1000 選択を以下の種類に限定: 自動車保険, 家財保険 +``` 「種類」と「費用」を追加し、「限定」というキーワードを使用し、LLM が何を求めているかを理解するのに役立ちます。 これにより、以下のような回答が得られました。 ```output -予算と要件を考慮した上で、月額500ドルの自動車保険(安価)を提案します。 +予算と要件を考慮した上で、月額500ドルの自動車保険(安価)を提案します。 ``` この例から、Generated knowledge という手法を使用しても、期待する結果を得るためには、多くの場合でプロンプトの最適化が必要だとわかります。 ### Least-to-most -「Least-to-most (最小から最大) プロンプト」は、大きな問題を小さな問題に分割する手法です。これにより、LLM(Language Model)が大きな問題をどのように「解決」するかをガイドするのに役立ちます。良い例としては、データサイエンスがあります。LLM に以下のように問題を分割するように依頼できます。 +「Least-to-most (最小から最大) プロンプト」は、大きな問題を小さな問題に分割する手法です。これにより、LLM(Language Model)が大きな問題をどのように「解決」するかをガイドするのに役立ちます。良い例としては、データサイエンスがあります。LLM に以下のように問題を分割するように依頼できます。 -> プロンプト: 5つのステップで、データサイエンスを実行する方法は何ですか? +> プロンプト: 5 つのステップで、データサイエンスを実行する方法は何ですか? -AI アシスタントは以下のように回答します。 +AI アシスタントは以下のように回答します。 -1. データを収集する -2. データをクリーニングする -3. データを分析する -4. データをプロットする +1. データを収集する +2. データをクリーニングする +3. データを分析する +4. データをプロットする 5. データを提示する > [!TIP] @@ -202,35 +202,35 @@ AI アシスタントは以下のように回答します。 > Chain of thought の場合は、問題の解き方をプロンプト内で具体的に指示するために、仮に解き方で記載した手順よりも難しい問題が与えられた場合は、時間を要するかもしくは回答できません。 > 一方で、Least-to-most は、複雑な問題をより簡単なサブ問題に分解し、それらを順番に解いていきます。サブ問題を解く際には、前に解いたサブ問題の答えを利用します。 > たとえば、難しい問題を解くために、最初にこの問題の解き方を教えてくださいという、最小の簡単な質問をします。その結果、AI はまず、その問題の解き方を考えて教えてくれます。この問題の解き方の情報を会話履歴に含めたままで、次に、オリジナルの問題をもう一度問い合わせします。すると、会話履歴に含まれる、解き方の情報を使って、オリジナルの問題を解き回答できます。そのため、Chain of thought よりも、より難しい問題を解けるようになります。 -> 解き方 +>  解き方 > -> 1. 複雑な問題を一連の単純なサブ問題に分解する +> 1. 複雑な問題を一連の単純なサブ問題に分解する > 2. サブ質問のそれぞれを、前の回答を元に解く -> 参考情報: [1. Least to Most Prompting](https://cobusgreyling.medium.com/least-to-most-prompting-b37ed2e19859?WT.mc_id=academic-105485-yoterada), [2. LEAST-TO-MOST PROMPTING ENABLES COMPLEX REASONING IN LARGE LANGUAGE MODELS (Original Paper)](https://arxiv.org/pdf/2205.10625.pdf?WT.mc_id=academic-105485-yoterada) +> 参考情報: [1. Least to Most Prompting](https://cobusgreyling.medium.com/least-to-most-prompting-b37ed2e19859?WT.mc_id=academic-105485-yoterada), [2. LEAST-TO-MOST PROMPTING ENABLES COMPLEX REASONING IN LARGE LANGUAGE MODELS (Original Paper)](https://arxiv.org/pdf/2205.10625.pdf?WT.mc_id=academic-105485-yoterada) ### Self-refine, critique the results 生成 AI や LLM を使用する際、その出力をそのまま信じてはいけません。必ず確認が必要です。なぜなら、LLM は何が正しいかではなく、次に出てくる可能性が最も高いものを提示しているだけだからです。そのため、LLM に自己評価を求め、それによって自己改善するという手法が有効です。 -この手法は以下の手順で行います: +この手法は以下の手順で行います: -1. 最初に LLM に問題解決を求める -2. LLM が回答する -3. その回答を評価し、AI に改善を求める -4. LLM が再度回答し、今度は評価を考慮して自身が考えた解決策を提案する +1. 最初に LLM に問題解決を求める +2. LLM が回答する +3. その回答を評価し、AI に改善を求める +4. LLM が再度回答し、今度は評価を考慮して自身が考えた解決策を提案する このプロセスは何度でも繰り返しができます。 以下にこの手法を使用した例を示します: -> プロンプト: "製品と顧客を持つ Python Web API を作成してください" +> プロンプト: "製品と顧客を持つ  Python Web API  を作成してください" -AIの回答: +AI の回答: ```python import flask app = Flask(__name__) - + @app.route('/products') def products(): return 'Products' @@ -240,9 +240,9 @@ def customers(): return 'Customers' ``` -> プロンプト: "上記のコードの改善点を3つ提案してください" +> プロンプト: "上記のコードの改善点を 3 つ提案してください" -AIの回答: +AI の回答: ```text もちろんです、コードを改善するための3つの提案をします: @@ -254,12 +254,11 @@ AIの回答: f-strings を使用する:ルート関数の return 文をフォーマットするために f-strings を使用します。例えば、'Products' を返す代わりに、f'This is the {request.path} page' を返すように変更できます。 ``` - ```python from flask import Flask, request - + app = Flask(__name__) - + @app.route('/products') def products(): return f'This is the {request.path} page' @@ -276,19 +275,19 @@ if __name__ == '__main__': ### Maieutic prompting -Maieutic プロンプトは、self-refine (自己改善) と似た手法ですが、こちらは LLM に自身で説明を求めるものです。LLM の出力における不整合を減らし、正確な回答を取得するのを目指します。そのための手順は以下のようになります。 +Maieutic プロンプトは、self-refine (自己改善) と似た手法ですが、こちらは LLM に自身で説明を求めるものです。LLM の出力における不整合を減らし、正確な回答を取得するのを目指します。そのための手順は以下のようになります。 1. LLM に質問に答えるよう求める 2. 答えの各部分について、LLM に詳しく説明させる -3. 不整合がある場合、その部分は排除する +3. 不整合がある場合、その部分は排除する これら全ての内容を検討し、回答に満足するまで 2 と 3 の手順を繰り返します。 以下に、例を示します。 -> プロンプト: パンデミックを緩和するための危機対策を5つの段階でどのように作成すればよいか教えてください。 +> プロンプト: パンデミックを緩和するための危機対策を 5 つの段階でどのように作成すればよいか教えてください。 -LLMの回答: +LLM の回答: ```text 1. リスクを特定する @@ -302,31 +301,31 @@ LLMの回答: > プロンプト: 最初のステップを詳しく説明してください。具体的には、パンデミックにおけるリスクは何ですか? -```text -リスクは以下の通りです: +```text +リスクは以下の通りです: - 生命の喪失 - ビジネスの喪失 - 評判の喪失 - 顧客の喪失 - 従業員の喪失 -``` +``` ここで、LLM が正しいかどうかを確認するため、最初のリスクについて詳しく説明させ、それが上記の答えと一致するか確認します。 > プロンプト: パンデミックにおいて、最も大きなリスクは何でしょうか?また、その理由は何ですか? -```text -最も大きなリスクは生命の喪失で、それは最も重要な守るべきものです。 +```text +最も大きなリスクは生命の喪失で、それは最も重要な守るべきものです。 ``` -> パンデミックにおけるリスクの中で、最も大きな2つのリスクは何だと思いますか? +> パンデミックにおけるリスクの中で、最も大きな 2 つのリスクは何だと思いますか? ```text 最も大きな2つのリスクは、生命の喪失とビジネスの喪失です。 ``` -ここで、LLM は一貫性を保ち、「生命」と「ビジネス」を最大の2つのリスクとして挙げています。これにより、次のステップに進み、かなりの自信を持てます。ただし、LLM を盲目的に信頼するのではなく、常にその出力を検証するのが重要です。 +ここで、LLM  は一貫性を保ち、「生命」と「ビジネス」を最大の 2 つのリスクとして挙げています。これにより、次のステップに進み、かなりの自信を持てます。ただし、LLM  を盲目的に信頼するのではなく、常にその出力を検証するのが重要です。 ## Vary your output @@ -334,8 +333,8 @@ LLM は本質的に非確実な性質を持っているため、同じプロン > "Python Web API のコードを生成してください" -```python -# 必要なモジュールをインポートする +```python +# 必要なモジュールをインポートする import flask from flask import request, jsonify @@ -479,7 +478,7 @@ if __name__ == '__main__': app.run() ``` -プロンプトを再度実行すると、次の結果が得られます。 +プロンプトを再度実行すると、次の結果が得られます。 ```python #import necessary libraries @@ -514,7 +513,7 @@ if __name__ == '__main__': app.run() ``` -これら 2 つの出力結果はわずかな違いしかありません。今度は逆に、温度を0.9に設定してみましょう。 +これら 2 つの出力結果はわずかな違いしかありません。今度は逆に、温度を 0.9 に設定してみましょう。 ```python # Import necessary libraries @@ -586,7 +585,7 @@ def home(): 以下に、そのおすすめの方法をいくつか紹介します。 -- **コンテキストを明確にする**:コンテキスト(文脈)は重要で、ドメインやトピックなど、具体的に指定するほど良い結果が得られます。 +- **コンテキストを明確にする**:コンテキスト(文脈)は重要で、ドメインやトピックなど、具体的に指定するほど良い結果が得られます。 - **出力を制限する**:特定の項目数や特定の長さが必要な場合は、それを明示的に指定しましょう。 - **「何を」、「どうするか」を明確にする**:例えば、「Python の Web API を作成し、商品と顧客を設定し、それを 3 つのファイルに分けてください」といった、具体的な指示を出すようにしてください - **テンプレートを活用する**:自社データをプロンプトに反映させたい場合も多いと思います。その際に、テンプレートを活用しましょう。テンプレートには、実際のデータに置き換えられる変数を設定できます。 diff --git a/05-advanced-prompts/translations/pt-br/README.md b/05-advanced-prompts/translations/pt-br/README.md index 711d574ab..e8b5b5a58 100644 --- a/05-advanced-prompts/translations/pt-br/README.md +++ b/05-advanced-prompts/translations/pt-br/README.md @@ -1,6 +1,6 @@ # Criando prompts avançados -[![Creating Advanced Prompts](../../images/05-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/32GBH6BTWZQ?WT.mc_id=academic-105485-koreyst) +[![Creating Advanced Prompts](../../images/05-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=f3615e46-dbca-477c-832d-21eef95cd9f3?WT.mc_id=academic-105485-koreyst) Vamos recapitular algumas aprendizagens do capítulo anterior: @@ -110,7 +110,7 @@ Como exemplo, é assim que sua solicitação pode parecer se você estiver no ra ```text {{company}}: {{company_name}} - {{products}}: + {{products}}: {{products_list}} Please suggest an insurance given the following budget and requirements: Budget: {{budget}} @@ -123,13 +123,13 @@ Aqui está um exemplo de como a solicitação pode parecer depois que as variáv ```text Insurance company: ACME Insurance - Insurance products (cost per month): + Insurance products (cost per month): - Car, cheap, 500 USD - - Car, expensive, 1100 USD + - Car, expensive, 1100 USD - Home, cheap, 600 USD - Home, expensive, 1200 USD - Life, cheap, 100 USD - + Please suggest an insurance given the following budget and requirements: Budget: $1000 Requirements: Car, Home @@ -139,11 +139,11 @@ Executando esta solicitação em um Modelo de Linguagem com Aprendizado Profundo ```output , and Life insurance - - Given the budget and requirements, we suggest the following insurance package from ACME Insurance: - - Car, cheap, 500 USD - - Home, cheap, 600 USD - - Life, cheap, 100 USD + + Given the budget and requirements, we suggest the following insurance package from ACME Insurance: + - Car, cheap, 500 USD + - Home, cheap, 600 USD + - Life, cheap, 100 USD Total cost: $1,200 USD ``` @@ -151,13 +151,13 @@ Como você pode ver, também sugere o seguro de vida, o que não deveria acontec ```text Insurance company: ACME Insurance - Insurance products (cost per month): + Insurance products (cost per month): - type: Car, cheap, cost: 500 USD - - type: Car, expensive, cost: 1100 USD + - type: Car, expensive, cost: 1100 USD - type: Home, cheap, cost: 600 USD - type: Home, expensive, cost: 1200 USD - type: Life, cheap, cost: 100 USD - + Please suggest an insurance given the following budget and requirements: Budget: $1000 restrict choice to types: Car, Home ``` @@ -237,11 +237,11 @@ Resposta da IA: ```python import flask app = Flask(__name__) - + @app.route('/products') def products(): return 'Products' - + @app.route('/customers') def customers(): return 'Customers' @@ -253,27 +253,27 @@ Resposta da IA: ```text Sure, here are three suggestions to improve the code: - + Import the correct module: The first line should import Flask instead of flask. The correct import statement should be from flask import Flask. - + Add a main function: Add a if __name__ == '__main__': block to the end of the file to run the application when the file is executed. - + Use f-strings: Use f-strings to format the return statements in the route functions. For example, return 'Products' can be changed to return f'This is the {request.path} page'. ``` ```python from flask import Flask, request - + app = Flask(__name__) - + @app.route('/products') def products(): return f'This is the {request.path} page' - + @app.route('/customers') def customers(): return f'This is the {request.path} page' - + if __name__ == '__main__': app.run() ``` @@ -305,7 +305,7 @@ Repita os passos 2 e 3 até passar por todas as partes e ficar satisfeito com a Aqui está um exemplo de um prompt: > prompt: How can I create a crisis plan to mitigate a pandemic in 5 steps? -LLM answer: +> LLM answer: ```text 1. Identify the risks @@ -321,7 +321,7 @@ São identificadas 5 etapas, mas podemos determinar se isso está correto? Vamos ```text The risks are the following: - + - Loss of life - Loss of business - Loss of reputation @@ -355,30 +355,30 @@ Os LLMs são, por natureza, não-determinísticos, o que significa que você obt # Import necessary modules import flask from flask import request, jsonify - + # Create a Flask app app = flask.Flask(__name__) - + # Create a route for the API @app.route('/api', methods=['GET']) def api(): # Get the data from the request data = request.args - + # Process the data result = process_data(data) - + # Return the result as JSON return jsonify(result) - + # Function to process the data def process_data(data): # Do something with the data result = data + 1 - + # Return the result return result - + # Run the app if __name__ == '__main__': app.run() @@ -390,11 +390,11 @@ Execute o mesmo prompt novamente e você observará que vai gerar uma resposta l #import necessary packages import flask from flask import request, jsonify - + #create the Flask application app = flask.Flask(__name__) app.config["DEBUG"] = True - + #create a list of books books = [ {'id': 0, @@ -413,18 +413,18 @@ Execute o mesmo prompt novamente e você observará que vai gerar uma resposta l 'first_sentence': 'to wound the autumnal city.', 'published': '1975'} ] - + #create an endpoint for the API @app.route('/', methods=['GET']) def home(): return '''

Books API

A prototype API for retrieving books.

''' - + #create an endpoint to return all books @app.route('/api/v1/resources/books/all', methods=['GET']) def api_all(): return jsonify(books) - + #create an endpoint to return a single book @app.route('/api/v1/resources/books', methods=['GET']) def api_id(): @@ -435,20 +435,20 @@ Execute o mesmo prompt novamente e você observará que vai gerar uma resposta l id = int(request.args['id']) else: return "Error: No id field provided. Please specify an id." - + #create an empty list for our results results = [] - + #loop through the data and match results that fit the requested ID #IDs are unique, but other fields might return many results for book in books: if book['id'] == id: results.append(book) - + #use the jsonify function from Flask to convert our list of #Python dictionaries to the JSON format return jsonify(results) - + app.run() ``` @@ -468,34 +468,34 @@ Temperatura é um valor entre 0 e 1, onde 0 é o mais determinístico e 1 é o m #import necessary libraries import flask from flask import request, jsonify - + #create an instance of the Flask class app = flask.Flask(__name__) - + #create an endpoint for the API @app.route('/api/v1/endpoint', methods=['GET']) def api_endpoint(): #get the request data data = request.get_json() - + #process the data result = process_data(data) - + #return the result return jsonify(result) - + #function to process the data def process_data(data): #process the data result = {'result': 'success'} - + #return the result return result - + #run the Flask app if __name__ == '__main__': app.run() - + ``` Execute o prompt novamente e você verá este resultado: @@ -504,34 +504,34 @@ Execute o prompt novamente e você verá este resultado: #import necessary libraries import flask from flask import request, jsonify - + #create a Flask app app = flask.Flask(__name__) - + #create a route for the API @app.route('/api', methods=['GET']) def api_call(): #get the data from the request data = request.get_json() - + #process the data result = process_data(data) - + #return the result return jsonify(result) - + #define the process_data function def process_data(data): #do something with the data result = data + 1 - + #return the result return result - + #run the app if __name__ == '__main__': app.run() - + ``` Há apenas uma pequena diferença entre essas duas saídas. Vamos fazer o contrário desta vez, vamos definir a temperatura para 0.9: @@ -540,34 +540,34 @@ Há apenas uma pequena diferença entre essas duas saídas. Vamos fazer o contr # Import necessary libraries import flask from flask import request, jsonify - + # Create a Flask app app = flask.Flask(__name__) - + # Create a route for the API @app.route('/api', methods=['GET']) def api_call(): # Get the data from the request data = request.args - + # Process the data result = process_data(data) - + # Return the result return jsonify(result) - + # Function to process the data def process_data(data): # Do something with the data result = data + 1 - + # Return the result return result - + # Run the app if __name__ == '__main__': app.run() - + ``` e a segunda tentativa em 0,9 como valor de temperatura: @@ -575,25 +575,25 @@ e a segunda tentativa em 0,9 como valor de temperatura: ```python import flask from flask import request, jsonify - + # create the Flask app app = flask.Flask(__name__) app.config['DEBUG'] = True - + # create some test data books = [ {'id': 0, 'title': 'A Fire Upon The Deep', 'author': 'Vernor Vinge', 'first_sentence': 'The coldsleep itself was dreamless.', 'year_published': '1992'}, {'id': 1, 'title': 'The Ones Who Walk Away From Omelas', 'author': 'Ursula K. Le Guin', 'first_sentence': 'With a clamor of bells that set the swallows soaring, the Festival of Summer came to the city Omelas, bright-towered by the sea.', 'published': '1973'}, {'id': 2, 'title': 'Dhalgren', 'author': 'Samuel R. Delany', 'first_sentence': 'to wound the autumnal city.', 'published': '1975'} ] - + # create an endpoint @app.route('/', methods=['GET']) def home(): return '''

Welcome to our book API!

''' - + @app.route('/api/v1/resources/books - + ``` Como você pode ver, os resultados não poderiam ser mais variados. @@ -620,14 +620,14 @@ Aqui está o código em Python que mostra como criar uma API simples usando o Fl ```python from flask import Flask, request - + app = Flask(__name__) - + @app.route('/') def hello(): name = request.args.get('name', 'World') return f'Hello, {name}!' - + if __name__ == '__main__': app.run() ``` @@ -661,4 +661,4 @@ Você acabou de usar a técnica de auto-aperfeiçoamento na atribuição. Pegue Após concluir esta lição, confira nossa [coleção de aprendizado de IA generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para continuar a aprimorar seus conhecimentos sobre IA generativa! -Agora, vamos para a Lição 6, onde aplicaremos nosso conhecimento de Engenharia de Prompt, [construindo aplicativos de geração de texto](../../../06-text-generation-apps/translations/pt-br/README.md?WT.mc_id=academic-105485-koreyst) \ No newline at end of file +Agora, vamos para a Lição 6, onde aplicaremos nosso conhecimento de Engenharia de Prompt, [construindo aplicativos de geração de texto](../../../06-text-generation-apps/translations/pt-br/README.md?WT.mc_id=academic-105485-koreyst) diff --git a/06-text-generation-apps/README.md b/06-text-generation-apps/README.md index c3ab20f78..56b46401f 100644 --- a/06-text-generation-apps/README.md +++ b/06-text-generation-apps/README.md @@ -1,8 +1,8 @@ # Building Text Generation Applications -[![Building Text Generation Applications](./images/06-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/5jKHzY6-4s8?WT.mc_id=academic-105485-koreyst) +[![Building Text Generation Applications](./images/06-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=bf3f3528-9871-4628-8616-b4b03cb23dcd?WT.mc_id=academic-105485-koreyst) -> *(Click the image above to view video of this lesson)* +> _(Click the image above to view video of this lesson)_ You've seen so far through this curriculum that there are core concepts like prompts and even a whole discipline called "prompt engineering". Many tools you can interact with like ChatGPT, Office 365, Microsoft Power Platform and more, support you using prompts to accomplish something. @@ -76,7 +76,7 @@ Let's see how we can build our first app, what libraries we need, how much is re ### Install openai -There are many libraries out there for interacting with OpenAI or Azure OpenAI. It's possible to use numerous programming languages as well like C#, Python, JavaScript, Java and more. We've chosen to use the `openai` Python library, so we'll use `pip` to install it. +There are many libraries out there for interacting with OpenAI or Azure OpenAI. It's possible to use numerous programming languages as well like C#, Python, JavaScript, Java and more. We've chosen to use the `openai` Python library, so we'll use `pip` to install it. ```bash pip install openai @@ -107,7 +107,7 @@ Now that you have this information copied, let's instruct the libraries to use i > It's worth separating your API key from your code. You can do so by using environment variables. > > - Set the environment variable `OPENAI_API_KEY` to your API key. -> `export OPENAI_API_KEY='sk-...'` +> `export OPENAI_API_KEY='sk-...'` ### Setup configuration Azure @@ -125,10 +125,9 @@ Above we're setting the following: - `api_type` to `azure`. This tells the library to use Azure Open AI and not OpenAI. - `api_key`, this is your API key found in the Azure Portal. - `api_version`, this is the version of the API you want to use. At the time of writing, the latest version is `2023-05-15`. -- `api_base`, this is the endpoint of the API. You can find it in the Azure Portal next to your API key. +- `api_base`, this is the endpoint of the API. You can find it in the Azure Portal next to your API key. -> [!NOTE] -> `os.getenv` is a function that reads environment variables. You can use it to read environment variables like `OPENAI_API_KEY` and `API_BASE`. Set these environment variables in your terminal or by using a library like `dotenv`. +> [!NOTE] > `os.getenv` is a function that reads environment variables. You can use it to read environment variables like `OPENAI_API_KEY` and `API_BASE`. Set these environment variables in your terminal or by using a library like `dotenv`. ## Generate text @@ -164,51 +163,51 @@ Now that we learned how to set up and configure openai, it's time to build your 1. Create a virtual environment and install openai: - ```bash - python -m venv venv - source venv/bin/activate - pip install openai - ``` + ```bash + python -m venv venv + source venv/bin/activate + pip install openai + ``` + + > [!NOTE] + > If you're using Windows type `venv\Scripts\activate` instead of `source venv/bin/activate`. - > [!NOTE] - > If you're using Windows type `venv\Scripts\activate` instead of `source venv/bin/activate`. + > [!NOTE] + > Locate your Azure Open AI key by going to [https://portal.azure.com/](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst) and search for `Open AI` and select the `Open AI resource` and then select `Keys and Endpoint` and copy the `Key 1` value. - > [!NOTE] - > Locate your Azure Open AI key by going to [https://portal.azure.com/](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst) and search for `Open AI` and select the `Open AI resource` and then select `Keys and Endpoint` and copy the `Key 1` value. +1. Create an _app.py_ file and give it the following code: -1. Create an *app.py* file and give it the following code: + ```python + import openai - ```python - import openai + openai.api_key = "" - openai.api_key = "" + openai.api_type = 'azure' + openai.api_version = '2023-05-15' + openai.api_base = "" + deployment_name = "" - openai.api_type = 'azure' - openai.api_version = '2023-05-15' - openai.api_base = "" - deployment_name = "" + # add your completion code + prompt = "Complete the following: Once upon a time there was a" + messages = [{"role": "user", "content": prompt}] - # add your completion code - prompt = "Complete the following: Once upon a time there was a" - messages = [{"role": "user", "content": prompt}] + # make completion + completion = client.chat.completions.create(model=deployment, messages=messages) - # make completion - completion = client.chat.completions.create(model=deployment, messages=messages) - - # print response - print(completion.choices[0].message.content) - ``` + # print response + print(completion.choices[0].message.content) + ``` - > [!NOTE] - > If you're using Azure Open AI, you need to set the `api_type` to `azure` and set the `api_key` to your Azure Open AI key. + > [!NOTE] + > If you're using Azure Open AI, you need to set the `api_type` to `azure` and set the `api_key` to your Azure Open AI key. - You should see an output like the following: + You should see an output like the following: - ```output - very unhappy _____. + ```output + very unhappy _____. - Once upon a time there was a very unhappy mermaid. - ``` + Once upon a time there was a very unhappy mermaid. + ``` ## Different types of prompts, for different things @@ -231,8 +230,8 @@ You could write a prompt like so: Given the above prompt, you might get a response similar to: ```output -1. Roasted Chicken and Vegetables: -Ingredients: +1. Roasted Chicken and Vegetables: +Ingredients: - 4 chicken thighs - 2 potatoes, cut into cubes - 2 carrots, cut into cubes @@ -242,8 +241,8 @@ Ingredients: - 1 teaspoon dried oregano - Salt and pepper, to taste -2. Chicken and Potato Stew: -Ingredients: +2. Chicken and Potato Stew: +Ingredients: - 2 tablespoons olive oil - 1 onion, diced - 2 cloves garlic, minced @@ -255,8 +254,8 @@ Ingredients: - 1 cup chicken broth - Salt and pepper, to taste -3. Chicken and Potato Bake: -Ingredients: +3. Chicken and Potato Bake: +Ingredients: - 2 tablespoons olive oil - 2 chicken breasts, cut into cubes - 2 potatoes, cut into cubes @@ -268,8 +267,8 @@ Ingredients: - 1 cup chicken broth - Salt and pepper, to taste -4. Chicken and Potato Soup: -Ingredients: +4. Chicken and Potato Soup: +Ingredients: - 2 tablespoons olive oil - 1 onion, diced - 2 cloves garlic, minced @@ -281,8 +280,8 @@ Ingredients: - 4 cups chicken broth - Salt and pepper, to taste -5. Chicken and Potato Hash: -Ingredients: +5. Chicken and Potato Hash: +Ingredients: - 2 tablespoons olive oil - 2 chicken breasts, cut into cubes - 2 potatoes, cut into cubes @@ -304,8 +303,8 @@ For the above cases, let's add an additional prompt: Now you have a new result, namely: ```output -1. Roasted Chicken and Vegetables: -Ingredients: +1. Roasted Chicken and Vegetables: +Ingredients: - 4 chicken thighs - 2 potatoes, cut into cubes - 2 carrots, cut into cubes @@ -314,8 +313,8 @@ Ingredients: - 1 teaspoon dried oregano - Salt and pepper, to taste -2. Chicken and Potato Stew: -Ingredients: +2. Chicken and Potato Stew: +Ingredients: - 2 tablespoons olive oil - 1 onion, diced - 2 chicken breasts, cut into cubes @@ -326,8 +325,8 @@ Ingredients: - 1 cup chicken broth - Salt and pepper, to taste -3. Chicken and Potato Bake: -Ingredients: +3. Chicken and Potato Bake: +Ingredients: - 2 tablespoons olive oil - 2 chicken breasts, cut into cubes - 2 potatoes, cut into cubes @@ -338,8 +337,8 @@ Ingredients: - 1 cup chicken broth - Salt and pepper, to taste -4. Chicken and Potato Soup: -Ingredients: +4. Chicken and Potato Soup: +Ingredients: - 2 tablespoons olive oil - 1 onion, diced - 2 chicken breasts, cut into cubes @@ -350,8 +349,8 @@ Ingredients: - 4 cups chicken broth - Salt and pepper, to taste -5. Chicken and Potato Hash: -Ingredients: +5. Chicken and Potato Hash: +Ingredients: - 2 tablespoons olive oil - 2 chicken breasts, cut into cubes - 2 potatoes, cut into cubes @@ -359,7 +358,7 @@ Ingredients: - 1 onion, diced - 1 teaspoon dried oregano -Shopping List: +Shopping List: - Olive oil - Onion - Thyme @@ -374,50 +373,50 @@ That's your five recipes, with no garlic mentioned and you also have a shopping Now that we have played out a scenario, let's write code to match the demonstrated scenario. To do so, follow these steps: -1. Use the existing *app.py* file as a starting point +1. Use the existing _app.py_ file as a starting point 1. Locate the `prompt` variable and change its code to the following: - ```python - prompt = "Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used" - ``` + ```python + prompt = "Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used" + ``` + + If you now run the code, you should see an output similar to: + + ```output + -Chicken Stew with Potatoes and Carrots: 3 tablespoons oil, 1 onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 1/2 cups chicken broth, 1/2 cup dry white wine, 2 tablespoons chopped fresh parsley, 2 tablespoons unsalted butter, 1 1/2 pounds boneless, skinless chicken thighs, cut into 1-inch pieces + -Oven-Roasted Chicken with Potatoes and Carrots: 3 tablespoons extra-virgin olive oil, 1 tablespoon Dijon mustard, 1 tablespoon chopped fresh rosemary, 1 tablespoon chopped fresh thyme, 4 cloves garlic, minced, 1 1/2 pounds small red potatoes, quartered, 1 1/2 pounds carrots, quartered lengthwise, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 (4-pound) whole chicken + -Chicken, Potato, and Carrot Casserole: cooking spray, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and shredded, 1 potato, peeled and shredded, 1/2 teaspoon dried thyme leaves, 1/4 teaspoon salt, 1/4 teaspoon black pepper, 2 cups fat-free, low-sodium chicken broth, 1 cup frozen peas, 1/4 cup all-purpose flour, 1 cup 2% reduced-fat milk, 1/4 cup grated Parmesan cheese - If you now run the code, you should see an output similar to: + -One Pot Chicken and Potato Dinner: 2 tablespoons olive oil, 1 pound boneless, skinless chicken thighs, cut into 1-inch pieces, 1 large onion, chopped, 3 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 2 cups chicken broth, 1/2 cup dry white wine - ```output - -Chicken Stew with Potatoes and Carrots: 3 tablespoons oil, 1 onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 1/2 cups chicken broth, 1/2 cup dry white wine, 2 tablespoons chopped fresh parsley, 2 tablespoons unsalted butter, 1 1/2 pounds boneless, skinless chicken thighs, cut into 1-inch pieces - -Oven-Roasted Chicken with Potatoes and Carrots: 3 tablespoons extra-virgin olive oil, 1 tablespoon Dijon mustard, 1 tablespoon chopped fresh rosemary, 1 tablespoon chopped fresh thyme, 4 cloves garlic, minced, 1 1/2 pounds small red potatoes, quartered, 1 1/2 pounds carrots, quartered lengthwise, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 (4-pound) whole chicken - -Chicken, Potato, and Carrot Casserole: cooking spray, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and shredded, 1 potato, peeled and shredded, 1/2 teaspoon dried thyme leaves, 1/4 teaspoon salt, 1/4 teaspoon black pepper, 2 cups fat-free, low-sodium chicken broth, 1 cup frozen peas, 1/4 cup all-purpose flour, 1 cup 2% reduced-fat milk, 1/4 cup grated Parmesan cheese - - -One Pot Chicken and Potato Dinner: 2 tablespoons olive oil, 1 pound boneless, skinless chicken thighs, cut into 1-inch pieces, 1 large onion, chopped, 3 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 2 cups chicken broth, 1/2 cup dry white wine - - -Chicken, Potato, and Carrot Curry: 1 tablespoon vegetable oil, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 teaspoon ground coriander, 1 teaspoon ground cumin, 1/2 teaspoon ground turmeric, 1/2 teaspoon ground ginger, 1/4 teaspoon cayenne pepper, 2 cups chicken broth, 1/2 cup dry white wine, 1 (15-ounce) can chickpeas, drained and rinsed, 1/2 cup raisins, 1/2 cup chopped fresh cilantro - ``` + -Chicken, Potato, and Carrot Curry: 1 tablespoon vegetable oil, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 teaspoon ground coriander, 1 teaspoon ground cumin, 1/2 teaspoon ground turmeric, 1/2 teaspoon ground ginger, 1/4 teaspoon cayenne pepper, 2 cups chicken broth, 1/2 cup dry white wine, 1 (15-ounce) can chickpeas, drained and rinsed, 1/2 cup raisins, 1/2 cup chopped fresh cilantro + ``` - > NOTE, your LLM is nondeterministic, so you might get different results every time you run the program. + > NOTE, your LLM is nondeterministic, so you might get different results every time you run the program. - Great, let's see how we can improve things. To improve things, we want to make sure the code is flexible, so ingredients and number of recipes can be improved and changed. + Great, let's see how we can improve things. To improve things, we want to make sure the code is flexible, so ingredients and number of recipes can be improved and changed. 1. Let's change the code in the following way: - ```python - no_recipes = input("No of recipes (for example, 5: ") + ```python + no_recipes = input("No of recipes (for example, 5: ") - ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots: ") - - # interpolate the number of recipes into the prompt an ingredients - prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used" - ``` + ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots: ") - Taking the code for a test run, could look like this: + # interpolate the number of recipes into the prompt an ingredients + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used" + ``` - ```output - No of recipes (for example, 5: 3 - List of ingredients (for example, chicken, potatoes, and carrots: milk,strawberries + Taking the code for a test run, could look like this: - -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes - -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream - -Strawberry milk: milk, strawberries, sugar, vanilla extract - ``` + ```output + No of recipes (for example, 5: 3 + List of ingredients (for example, chicken, potatoes, and carrots: milk,strawberries + + -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes + -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream + -Strawberry milk: milk, strawberries, sugar, vanilla extract + ``` ### Improve by adding filter and shopping list @@ -427,130 +426,129 @@ To further improve it, we want to add the following: - **Filter out ingredients**. We want to be able to filter out ingredients we don't like or are allergic to. To accomplish this change, we can edit our existing prompt and add a filter condition to the end of it like so: - ```python - filter = input("Filter (for example, vegetarian, vegan, or gluten-free: ") - - prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}" - ``` - - Above, we add `{filter}` to the end of the prompt and we also capture the filter value from the user. - - An example input of running the program can now look like so: - - ```output - No of recipes (for example, 5: 3 - List of ingredients (for example, chicken, potatoes, and carrots: onion,milk - Filter (for example, vegetarian, vegan, or gluten-free: no milk - - 1. French Onion Soup - - Ingredients: - - -1 large onion, sliced - -3 cups beef broth - -1 cup milk - -6 slices french bread - -1/4 cup shredded Parmesan cheese - -1 tablespoon butter - -1 teaspoon dried thyme - -1/4 teaspoon salt - -1/4 teaspoon black pepper - - Instructions: - - 1. In a large pot, sauté onions in butter until golden brown. - 2. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil. - 3. Reduce heat and simmer for 10 minutes. - 4. Place french bread slices on soup bowls. - 5. Ladle soup over bread. - 6. Sprinkle with Parmesan cheese. - - 2. Onion and Potato Soup - - Ingredients: - - -1 large onion, chopped - -2 cups potatoes, diced - -3 cups vegetable broth - -1 cup milk - -1/4 teaspoon black pepper - - Instructions: - - 1. In a large pot, sauté onions in butter until golden brown. - 2. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil. - 3. Reduce heat and simmer for 10 minutes. - 4. Serve hot. - - 3. Creamy Onion Soup - - Ingredients: - - -1 large onion, chopped - -3 cups vegetable broth - -1 cup milk - -1/4 teaspoon black pepper - -1/4 cup all-purpose flour - -1/2 cup shredded Parmesan cheese - - Instructions: - - 1. In a large pot, sauté onions in butter until golden brown. - 2. Add vegetable broth, milk, and pepper. Bring to a boil. - 3. Reduce heat and simmer for 10 minutes. - 4. In a small bowl, whisk together flour and Parmesan cheese until smooth. - 5. Add to soup and simmer for an additional 5 minutes, or until soup has thickened. - ``` - - As you can see, any recipes with milk in it has been filtered out. But, if you're lactose intolerant, you might want to filter out recipes with cheese in them as well, so there's a need to be clear. + ```python + filter = input("Filter (for example, vegetarian, vegan, or gluten-free: ") + + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}" + ``` + + Above, we add `{filter}` to the end of the prompt and we also capture the filter value from the user. + + An example input of running the program can now look like so: + + ```output + No of recipes (for example, 5: 3 + List of ingredients (for example, chicken, potatoes, and carrots: onion,milk + Filter (for example, vegetarian, vegan, or gluten-free: no milk + + 1. French Onion Soup + + Ingredients: + + -1 large onion, sliced + -3 cups beef broth + -1 cup milk + -6 slices french bread + -1/4 cup shredded Parmesan cheese + -1 tablespoon butter + -1 teaspoon dried thyme + -1/4 teaspoon salt + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Place french bread slices on soup bowls. + 5. Ladle soup over bread. + 6. Sprinkle with Parmesan cheese. + 2. Onion and Potato Soup + + Ingredients: + + -1 large onion, chopped + -2 cups potatoes, diced + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Serve hot. + + 3. Creamy Onion Soup + + Ingredients: + + -1 large onion, chopped + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + -1/4 cup all-purpose flour + -1/2 cup shredded Parmesan cheese + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. In a small bowl, whisk together flour and Parmesan cheese until smooth. + 5. Add to soup and simmer for an additional 5 minutes, or until soup has thickened. + ``` + + As you can see, any recipes with milk in it has been filtered out. But, if you're lactose intolerant, you might want to filter out recipes with cheese in them as well, so there's a need to be clear. - **Produce a shopping list**. We want to produce a shopping list, considering what we already have at home. - For this functionality, we could either try to solve everything in one prompt or we could split it up into two prompts. Let's try the latter approach. Here we're suggesting adding an additional prompt, but for that to work, we need to add the result of the former prompt as context to the latter prompt. + For this functionality, we could either try to solve everything in one prompt or we could split it up into two prompts. Let's try the latter approach. Here we're suggesting adding an additional prompt, but for that to work, we need to add the result of the former prompt as context to the latter prompt. + + Locate the part in the code that prints out the result from the first prompt and add the following code below: - Locate the part in the code that prints out the result from the first prompt and add the following code below: + ```python + old_prompt_result = completion.choices[0].message.content + prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have." - ```python - old_prompt_result = completion.choices[0].message.content - prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have." - - new_prompt = f"{old_prompt_result} {prompt}" - messages = [{"role": "user", "content": new_prompt}] - completion = openai.Completion.create(engine=deployment_name, messages=messages, max_tokens=1200) - - # print response - print("Shopping list:") - print(completion.choices[0].message.content) - ``` + new_prompt = f"{old_prompt_result} {prompt}" + messages = [{"role": "user", "content": new_prompt}] + completion = openai.Completion.create(engine=deployment_name, messages=messages, max_tokens=1200) - Note the following: + # print response + print("Shopping list:") + print(completion.choices[0].message.content) + ``` - 1. We're constructing a new prompt by adding the result from the first prompt to the new prompt: + Note the following: - ```python - new_prompt = f"{old_prompt_result} {prompt}" - ``` + 1. We're constructing a new prompt by adding the result from the first prompt to the new prompt: - 1. We make a new request, but also considering the number of tokens we asked for in the first prompt, so this time we say `max_tokens` is 1200. + ```python + new_prompt = f"{old_prompt_result} {prompt}" + ``` - ```python - completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) - ``` + 1. We make a new request, but also considering the number of tokens we asked for in the first prompt, so this time we say `max_tokens` is 1200. - Taking this code for a spin, we now arrive at the following output: + ```python + completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) + ``` - ```output - No of recipes (for example, 5: 2 - List of ingredients (for example, chicken, potatoes, and carrots: apple,flour - Filter (for example, vegetarian, vegan, or gluten-free: sugar + Taking this code for a spin, we now arrive at the following output: - - -Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated - -Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples - Shopping list: - -Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice - ``` + ```output + No of recipes (for example, 5: 2 + List of ingredients (for example, chicken, potatoes, and carrots: apple,flour + Filter (for example, vegetarian, vegan, or gluten-free: sugar + + + -Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated + -Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples + Shopping list: + -Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice + ``` ## Improve your setup @@ -558,47 +556,47 @@ What we have so far is code that works, but there are some tweaks we should be d - **Separate secrets from code**, like the API key. Secrets do not belong in code and should be stored in a secure location. To separate secrets from code, we can use environment variables and libraries like `python-dotenv` to load them from a file. Here's how that would look like in code: - 1. Create a `.env` file with the following content: + 1. Create a `.env` file with the following content: - ```bash - OPENAI_API_KEY=sk-... - ``` + ```bash + OPENAI_API_KEY=sk-... + ``` - > Note, for Azure, you need to set the following environment variables: + > Note, for Azure, you need to set the following environment variables: - ```bash - OPENAI_API_TYPE=azure - OPENAI_API_VERSION=2023-05-15 - OPENAI_API_BASE= - ``` + ```bash + OPENAI_API_TYPE=azure + OPENAI_API_VERSION=2023-05-15 + OPENAI_API_BASE= + ``` - In code, you would load the environment variables like so: + In code, you would load the environment variables like so: - ```python - from dotenv import load_dotenv + ```python + from dotenv import load_dotenv - load_dotenv() + load_dotenv() - openai.api_key = os.environ["OPENAI_API_KEY"] - ``` + openai.api_key = os.environ["OPENAI_API_KEY"] + ``` - **A word on token length**. We should consider how many tokens we need to generate the text we want. Tokens cost money, so where possible, we should try to be economical with the number of tokens we use. For example, can we phrase the prompt so that we can use less tokens? - To change the tokens used, you can use the `max_tokens` parameter. For example, if you want to use 100 tokens, you would do: + To change the tokens used, you can use the `max_tokens` parameter. For example, if you want to use 100 tokens, you would do: - ```python - completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=100) - ``` + ```python + completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=100) + ``` - **Experimenting with temperature**. Temperature is something we haven't mentioned so far but is an important context for how our program performs. The higher the temperature value the more random the output will be. Conversely the lower the temperature value the more predictable the output will be. Consider whether you want variation in your output or not. - To alter the temperature, you can use the `temperature` parameter. For example, if you want to use a temperature of 0.5, you would do: + To alter the temperature, you can use the `temperature` parameter. For example, if you want to use a temperature of 0.5, you would do: - ```python - completion = client.chat.completions.create(model=deployment, messages=messages, temperature=0.5) - ``` + ```python + completion = client.chat.completions.create(model=deployment, messages=messages, temperature=0.5) + ``` - > Note, the closer to 1.0, the more varied the output. + > Note, the closer to 1.0, the more varied the output. ## Assignment @@ -646,7 +644,6 @@ What does the concept temperature do? 1. It controls how big the response is. 1. It controls how many tokens are used. - ## 🚀 Challenge When working on the assignment, try to vary the temperature, try set it to 0, 0.5, and 1. Remember that 0 is the least varied and 1 is the most, what value works best for your app? diff --git a/06-text-generation-apps/translations/cn/README.md b/06-text-generation-apps/translations/cn/README.md index d162d9035..1b79515d9 100644 --- a/06-text-generation-apps/translations/cn/README.md +++ b/06-text-generation-apps/translations/cn/README.md @@ -1,8 +1,8 @@ # 第六章:创建文本生成应用 -[![Building Text Generation Applications](../../images/06-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/5jKHzY6-4s8?WT.mc_id=academic-105485-koreyst) +[![Building Text Generation Applications](../../images/06-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=bf3f3528-9871-4628-8616-b4b03cb23dcd?WT.mc_id=academic-105485-koreyst) -> *(点击该图片看本章导学视频)* +> _(点击该图片看本章导学视频)_ 到目前为止,您已经通过本系列课程看到了如提示之类的核心概念,甚至是称为“提示工程”的整个学科。 您可以与通过使用如 ChatGPT、Office 365、Microsoft Power Platform 等工具结合提示来完成某些工作任务。 @@ -24,7 +24,6 @@ - 使用 openai 构建文本生成应用程序。 - 配置您的应用程序以使用更多或更少的 tokens,并更改 temperature,以获得不同的输出。 - ## 什么是文本生成应用 一般来说当您构建应用程序时,它具有某种界面,如下所示: @@ -53,7 +52,6 @@ - **协同助手** LLMs 擅长总结文本、从文本中获取见解、生成简历等文本等。 - **代码助手** 根据您使用的编程语言模型,您可以构建一个代码助手来帮助您编写代码。 例如,您可以使用 GitHub Copilot 和 ChatGPT 等产品来帮助您编写代码。 - ## 如何入门? 您需要找到一种与 LLMs 结合的方法,通常使用以下两种方法: @@ -76,11 +74,11 @@ Let's see how we can build our first app, what libraries we need, how much is required and so on. -让我们看看如何构建人生中第一个 openai 应用,我们需要哪些libraries,需要多少技能等等。 +让我们看看如何构建人生中第一个 openai 应用,我们需要哪些 libraries,需要多少技能等等。 ### 安装 openai -There are many libraries out there for interacting with OpenAI or Azure OpenAI. It's possible to use numerous programming languages as well like C#, Python, JavaScript, Java and more. We've chosen to use the `openai` Python library, so we'll use `pip` to install it. +There are many libraries out there for interacting with OpenAI or Azure OpenAI. It's possible to use numerous programming languages as well like C#, Python, JavaScript, Java and more. We've chosen to use the `openai` Python library, so we'll use `pip` to install it. 有许多 libraries 可用于与 OpenAI 或 Azure OpenAI 交互。 还可以使用不同的编程语言,如 C#、Python、JavaScript、Java 等。 我们选择使用 `openai` Python 库,通过 `pip` 来安装它。 @@ -112,8 +110,8 @@ pip install openai > [!注意] > 通过设置环境变量将 API Key 与代码分开是很重要的 > -> - 为您的 API key 中设置 `OPENAI_API_KEY` -> - `export OPENAI_API_KEY='sk-...'` +> - 为您的 API key 中设置 `OPENAI_API_KEY` +> - `export OPENAI_API_KEY='sk-...'` ### 配置 Azure 环境 @@ -134,7 +132,7 @@ openai.api_base = os.getenv("API_BASE") - `api_base`, 这是 API 的 endpoint 。 您可以在 Azure Portal 中 API Key 下方找到它。 > [注意] -> `os.getenv` 是一个读取环境变量的函数。 您可以使用它来读取“OPENAI_API_KEY”和“API_BASE”等环境变量。 在终端中或使用“dotenv”等库设置这些环境变量。 +> `os.getenv` 是一个读取环境变量的函数。 您可以使用它来读取“OPENAI_API_KEY”和“API_BASE”等环境变量。 在终端中或使用“dotenv”等库设置这些环境变量。 ## 文字生成 @@ -168,52 +166,52 @@ print(completion.choices[0].message.content) 现在我们已经了解了如何设置和配置 openai,是时候构建您的第一个文本生成应用程序了。 请按照下列步骤操作: -1. 创建虚拟环境并安装openai: +1. 创建虚拟环境并安装 openai: - ```bash - python -m venv venv - source venv/bin/activate - pip install openai - ``` + ```bash + python -m venv venv + source venv/bin/activate + pip install openai + ``` - > [!注意] - > 如果您使用的是 Windows,请输入 `venv\Scripts\activate` 而不是 `source venv/bin/activate`。 + > [!注意] + > 如果您使用的是 Windows,请输入 `venv\Scripts\activate` 而不是 `source venv/bin/activate`。 - > [!注意] - > 转至 [https://portal.azure.com/](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst) 找到您的 Azure Open AI Key ,在资源中搜索“Open AI” ` 并选择“打开 AI 资源”,然后选择 `Keys and Endpoint` 并复制 `Key 1` 值。 + > [!注意] + > 转至 [https://portal.azure.com/](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst) 找到您的 Azure Open AI Key ,在资源中搜索“Open AI” `并选择“打开 AI 资源”,然后选择`Keys and Endpoint`并复制`Key 1` 值。 -2. 创建 *app.py* 文件并添加以下代码: +2. 创建 _app.py_ 文件并添加以下代码: - ```python - import openai + ```python + import openai - openai.api_key = "您的 openai key 或 Azure OpenAI key" + openai.api_key = "您的 openai key 或 Azure OpenAI key" - openai.api_type = 'azure' - openai.api_version = '2023-05-15' - openai.api_base = "您的 Azure OpenAI Endpoint" - deployment_name = "部署模型的名字" + openai.api_type = 'azure' + openai.api_version = '2023-05-15' + openai.api_base = "您的 Azure OpenAI Endpoint" + deployment_name = "部署模型的名字" - # add your completion code - prompt = "Complete the following: Once upon a time there was a" + # add your completion code + prompt = "Complete the following: Once upon a time there was a" - # make completion - completion = openai.Completion.create(engine= deployment_name, model="davinci-002", prompt=prompt) - - # print response - print(completion.choices[0].text) - ``` + # make completion + completion = openai.Completion.create(engine= deployment_name, model="davinci-002", prompt=prompt) - > [!注意] - > 如果您使用的是 Azure Open AI,则需要将 `api_type` 设置为 `azure`,并将 `api_key` 设置为您的 Azure Open AI Key + # print response + print(completion.choices[0].text) + ``` - 您应该看到如下所示的输出结果: + > [!注意] + > 如果您使用的是 Azure Open AI,则需要将 `api_type` 设置为 `azure`,并将 `api_key` 设置为您的 Azure Open AI Key - ```output - very unhappy _____. + 您应该看到如下所示的输出结果: - Once upon a time there was a very unhappy mermaid. - ``` + ```output + very unhappy _____. + + Once upon a time there was a very unhappy mermaid. + ``` ## 不同类型的提示,针对不同的事情 @@ -223,8 +221,7 @@ print(completion.choices[0].message.content) - **生成一种类型的文本**。 例如,生成一首诗、测验题目等。 - **查找信息**。 您可以使用提示来查找信息,例如以下示例'What does CORS mean in web development?'。 -- **生成代码**。 您可以使用提示来生成代码,例如开发用于验证电子邮件的正则表达式,或者为什么不生成整个程序,例如web 应用? - +- **生成代码**。 您可以使用提示来生成代码,例如开发用于验证电子邮件的正则表达式,或者为什么不生成整个程序,例如 web 应用? ## 进阶学习:菜谱生成器 @@ -237,8 +234,8 @@ print(completion.choices[0].message.content) 鉴于上述提示,您可能会得到类似于以下结果: ```output -1. Roasted Chicken and Vegetables: -Ingredients: +1. Roasted Chicken and Vegetables: +Ingredients: - 4 chicken thighs - 2 potatoes, cut into cubes - 2 carrots, cut into cubes @@ -248,8 +245,8 @@ Ingredients: - 1 teaspoon dried oregano - Salt and pepper, to taste -1. Chicken and Potato Stew: -Ingredients: +1. Chicken and Potato Stew: +Ingredients: - 2 tablespoons olive oil - 1 onion, diced - 2 cloves garlic, minced @@ -261,8 +258,8 @@ Ingredients: - 1 cup chicken broth - Salt and pepper, to taste -1. Chicken and Potato Bake: -Ingredients: +1. Chicken and Potato Bake: +Ingredients: - 2 tablespoons olive oil - 2 chicken breasts, cut into cubes - 2 potatoes, cut into cubes @@ -274,8 +271,8 @@ Ingredients: - 1 cup chicken broth - Salt and pepper, to taste -1. Chicken and Potato Soup: -Ingredients: +1. Chicken and Potato Soup: +Ingredients: - 2 tablespoons olive oil - 1 onion, diced - 2 cloves garlic, minced @@ -287,8 +284,8 @@ Ingredients: - 4 cups chicken broth - Salt and pepper, to taste -1. Chicken and Potato Hash: -Ingredients: +1. Chicken and Potato Hash: +Ingredients: - 2 tablespoons olive oil - 2 chicken breasts, cut into cubes - 2 potatoes, cut into cubes @@ -310,8 +307,8 @@ Ingredients: 现在你有了一个新的结果,即: ```output -1. Roasted Chicken and Vegetables: -Ingredients: +1. Roasted Chicken and Vegetables: +Ingredients: - 4 chicken thighs - 2 potatoes, cut into cubes - 2 carrots, cut into cubes @@ -320,8 +317,8 @@ Ingredients: - 1 teaspoon dried oregano - Salt and pepper, to taste -1. Chicken and Potato Stew: -Ingredients: +1. Chicken and Potato Stew: +Ingredients: - 2 tablespoons olive oil - 1 onion, diced - 2 chicken breasts, cut into cubes @@ -332,8 +329,8 @@ Ingredients: - 1 cup chicken broth - Salt and pepper, to taste -1. Chicken and Potato Bake: -Ingredients: +1. Chicken and Potato Bake: +Ingredients: - 2 tablespoons olive oil - 2 chicken breasts, cut into cubes - 2 potatoes, cut into cubes @@ -344,8 +341,8 @@ Ingredients: - 1 cup chicken broth - Salt and pepper, to taste -1. Chicken and Potato Soup: -Ingredients: +1. Chicken and Potato Soup: +Ingredients: - 2 tablespoons olive oil - 1 onion, diced - 2 chicken breasts, cut into cubes @@ -356,8 +353,8 @@ Ingredients: - 4 cups chicken broth - Salt and pepper, to taste -1. Chicken and Potato Hash: -Ingredients: +1. Chicken and Potato Hash: +Ingredients: - 2 tablespoons olive oil - 2 chicken breasts, cut into cubes - 2 potatoes, cut into cubes @@ -365,7 +362,7 @@ Ingredients: - 1 onion, diced - 1 teaspoon dried oregano -Shopping List: +Shopping List: - Olive oil - Onion - Thyme @@ -382,54 +379,52 @@ That's your five recipes, with no garlic mentioned and you also have a shopping 根据场景,让我们编写代码来完整代码。为此,请按照下列步骤操作: -1. 使用现有的 *app.py* 文件作为起点 +1. 使用现有的 _app.py_ 文件作为起点 2. 找到 `prompt` 变量并将其代码更改为以下内容: + ```python + prompt = "Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used" + ``` - ```python - prompt = "Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used" - ``` + 运行代码,您应该会看到类似以下内容的输出: - 运行代码,您应该会看到类似以下内容的输出: + ```output + -Chicken Stew with Potatoes and Carrots: 3 tablespoons oil, 1 onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 1/2 cups chicken broth, 1/2 cup dry white wine, 2 tablespoons chopped fresh parsley, 2 tablespoons unsalted butter, 1 1/2 pounds boneless, skinless chicken thighs, cut into 1-inch pieces + -Oven-Roasted Chicken with Potatoes and Carrots: 3 tablespoons extra-virgin olive oil, 1 tablespoon Dijon mustard, 1 tablespoon chopped fresh rosemary, 1 tablespoon chopped fresh thyme, 4 cloves garlic, minced, 1 1/2 pounds small red potatoes, quartered, 1 1/2 pounds carrots, quartered lengthwise, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 (4-pound) whole chicken + -Chicken, Potato, and Carrot Casserole: cooking spray, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and shredded, 1 potato, peeled and shredded, 1/2 teaspoon dried thyme leaves, 1/4 teaspoon salt, 1/4 teaspoon black pepper, 2 cups fat-free, low-sodium chicken broth, 1 cup frozen peas, 1/4 cup all-purpose flour, 1 cup 2% reduced-fat milk, 1/4 cup grated Parmesan cheese - ```output - -Chicken Stew with Potatoes and Carrots: 3 tablespoons oil, 1 onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 1/2 cups chicken broth, 1/2 cup dry white wine, 2 tablespoons chopped fresh parsley, 2 tablespoons unsalted butter, 1 1/2 pounds boneless, skinless chicken thighs, cut into 1-inch pieces - -Oven-Roasted Chicken with Potatoes and Carrots: 3 tablespoons extra-virgin olive oil, 1 tablespoon Dijon mustard, 1 tablespoon chopped fresh rosemary, 1 tablespoon chopped fresh thyme, 4 cloves garlic, minced, 1 1/2 pounds small red potatoes, quartered, 1 1/2 pounds carrots, quartered lengthwise, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 1 (4-pound) whole chicken - -Chicken, Potato, and Carrot Casserole: cooking spray, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and shredded, 1 potato, peeled and shredded, 1/2 teaspoon dried thyme leaves, 1/4 teaspoon salt, 1/4 teaspoon black pepper, 2 cups fat-free, low-sodium chicken broth, 1 cup frozen peas, 1/4 cup all-purpose flour, 1 cup 2% reduced-fat milk, 1/4 cup grated Parmesan cheese - - -One Pot Chicken and Potato Dinner: 2 tablespoons olive oil, 1 pound boneless, skinless chicken thighs, cut into 1-inch pieces, 1 large onion, chopped, 3 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 2 cups chicken broth, 1/2 cup dry white wine - - -Chicken, Potato, and Carrot Curry: 1 tablespoon vegetable oil, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 teaspoon ground coriander, 1 teaspoon ground cumin, 1/2 teaspoon ground turmeric, 1/2 teaspoon ground ginger, 1/4 teaspoon cayenne pepper, 2 cups chicken broth, 1/2 cup dry white wine, 1 (15-ounce) can chickpeas, drained and rinsed, 1/2 cup raisins, 1/2 cup chopped fresh cilantro - ``` + -One Pot Chicken and Potato Dinner: 2 tablespoons olive oil, 1 pound boneless, skinless chicken thighs, cut into 1-inch pieces, 1 large onion, chopped, 3 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 bay leaf, 1 thyme sprig, 1/2 teaspoon salt, 1/4 teaspoon black pepper, 2 cups chicken broth, 1/2 cup dry white wine + + -Chicken, Potato, and Carrot Curry: 1 tablespoon vegetable oil, 1 large onion, chopped, 2 cloves garlic, minced, 1 carrot, peeled and chopped, 1 potato, peeled and chopped, 1 teaspoon ground coriander, 1 teaspoon ground cumin, 1/2 teaspoon ground turmeric, 1/2 teaspoon ground ginger, 1/4 teaspoon cayenne pepper, 2 cups chicken broth, 1/2 cup dry white wine, 1 (15-ounce) can chickpeas, drained and rinsed, 1/2 cup raisins, 1/2 cup chopped fresh cilantro + ``` - > NOTE, your LLM is nondeterministic, so you might get different results every time you run the program. + > NOTE, your LLM is nondeterministic, so you might get different results every time you run the program. - Great, let's see how we can improve things. To improve things, we want to make sure the code is flexible, so ingredients and number of recipes can be improved and changed. + Great, let's see how we can improve things. To improve things, we want to make sure the code is flexible, so ingredients and number of recipes can be improved and changed. 3. 让我们按以下方式更改代码: - ```python - no_recipes = input("No of recipes (for example, 5: ") + ```python + no_recipes = input("No of recipes (for example, 5: ") - ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots: ") - - # interpolate the number of recipes into the prompt an ingredients - prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used" - ``` + ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots: ") - Taking the code for a test run, could look like this: + # interpolate the number of recipes into the prompt an ingredients + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used" + ``` - ```output - No of recipes (for example, 5: 3 - List of ingredients (for example, chicken, potatoes, and carrots: milk,strawberries + Taking the code for a test run, could look like this: - -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes - -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream - -Strawberry milk: milk, strawberries, sugar, vanilla extract - ``` + ```output + No of recipes (for example, 5: 3 + List of ingredients (for example, chicken, potatoes, and carrots: milk,strawberries -### 通过添加过滤器和购物清单进行改进 + -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes + -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream + -Strawberry milk: milk, strawberries, sugar, vanilla extract + ``` +### 通过添加过滤器和购物清单进行改进 我们现在有一个能够生成食谱的应用,并且它使用很方便,基于用户的输入和食谱的数量所使用的成分。 @@ -437,171 +432,173 @@ That's your five recipes, with no garlic mentioned and you also have a shopping - **过滤掉成分**。 我们希望能够过滤掉我们不喜欢或过敏的成分。 要完成此更改,我们可以编辑现有提示并在其末尾添加过滤条件,如下所示: - ```python - filter = input("Filter (for example, vegetarian, vegan, or gluten-free: ") + ```python + filter = input("Filter (for example, vegetarian, vegan, or gluten-free: ") - prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}" - ``` + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}" + ``` - Above, we add `{filter}` to the end of the prompt and we also capture the filter value from the user. - - An example input of running the program can now look like so: - - ```output - No of recipes (for example, 5: 3 - List of ingredients (for example, chicken, potatoes, and carrots: onion,milk - Filter (for example, vegetarian, vegan, or gluten-free: no milk - - 1. French Onion Soup - - Ingredients: - - -1 large onion, sliced - -3 cups beef broth - -1 cup milk - -6 slices french bread - -1/4 cup shredded Parmesan cheese - -1 tablespoon butter - -1 teaspoon dried thyme - -1/4 teaspoon salt - -1/4 teaspoon black pepper - - Instructions: - - 2. In a large pot, sauté onions in butter until golden brown. - 3. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil. - 4. Reduce heat and simmer for 10 minutes. - 5. Place french bread slices on soup bowls. - 6. Ladle soup over bread. - 7. Sprinkle with Parmesan cheese. - - 8. Onion and Potato Soup - - Ingredients: - - -1 large onion, chopped - -2 cups potatoes, diced - -3 cups vegetable broth - -1 cup milk - -1/4 teaspoon black pepper - - Instructions: - - 9. In a large pot, sauté onions in butter until golden brown. - 10. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil. - 11. Reduce heat and simmer for 10 minutes. - 12. Serve hot. - - 13. Creamy Onion Soup - - Ingredients: - - -1 large onion, chopped - -3 cups vegetable broth - -1 cup milk - -1/4 teaspoon black pepper - -1/4 cup all-purpose flour - -1/2 cup shredded Parmesan cheese - - Instructions: - - 14. In a large pot, sauté onions in butter until golden brown. - 15. Add vegetable broth, milk, and pepper. Bring to a boil. - 16. Reduce heat and simmer for 10 minutes. - 17. In a small bowl, whisk together flour and Parmesan cheese until smooth. - 18. Add to soup and simmer for an additional 5 minutes, or until soup has thickened. - ``` + Above, we add `{filter}` to the end of the prompt and we also capture the filter value from the user. - 正如您所看到的,任何含有牛奶的食谱都已被过滤掉。 但是,如果您患有乳糖不耐症,您可能也想过滤掉含有奶酪的食谱,因此有必要明确一下。 + An example input of running the program can now look like so: - ```python + ```output + No of recipes (for example, 5: 3 + List of ingredients (for example, chicken, potatoes, and carrots: onion,milk + Filter (for example, vegetarian, vegan, or gluten-free: no milk + + 1. French Onion Soup + + Ingredients: + + -1 large onion, sliced + -3 cups beef broth + -1 cup milk + -6 slices french bread + -1/4 cup shredded Parmesan cheese + -1 tablespoon butter + -1 teaspoon dried thyme + -1/4 teaspoon salt + -1/4 teaspoon black pepper + + Instructions: + + 2. In a large pot, sauté onions in butter until golden brown. + 3. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil. + 4. Reduce heat and simmer for 10 minutes. + 5. Place french bread slices on soup bowls. + 6. Ladle soup over bread. + 7. Sprinkle with Parmesan cheese. + + 8. Onion and Potato Soup + + Ingredients: + + -1 large onion, chopped + -2 cups potatoes, diced + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + + Instructions: + + 9. In a large pot, sauté onions in butter until golden brown. + 10. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil. + 11. Reduce heat and simmer for 10 minutes. + 12. Serve hot. + + 13. Creamy Onion Soup + + Ingredients: + + -1 large onion, chopped + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + -1/4 cup all-purpose flour + -1/2 cup shredded Parmesan cheese + + Instructions: + + 14. In a large pot, sauté onions in butter until golden brown. + 15. Add vegetable broth, milk, and pepper. Bring to a boil. + 16. Reduce heat and simmer for 10 minutes. + 17. In a small bowl, whisk together flour and Parmesan cheese until smooth. + 18. Add to soup and simmer for an additional 5 minutes, or until soup has thickened. + ``` + + 正如您所看到的,任何含有牛奶的食谱都已被过滤掉。 但是,如果您患有乳糖不耐症,您可能也想过滤掉含有奶酪的食谱,因此有必要明确一下。 + + ```python + + ``` - **制作购物清单**。 我们想根据家里已有的物品制定一份购物清单。 - 对于此功能,我们可以尝试在一个提示中解决所有问题,也可以将其分成两个提示。 让我们尝试一下后一种方法。 在这里,我们建议添加一个额外的提示,但为了使其起作用,我们需要将前一个提示的结果作为上下文添加到后一个提示中。 + 对于此功能,我们可以尝试在一个提示中解决所有问题,也可以将其分成两个提示。 让我们尝试一下后一种方法。 在这里,我们建议添加一个额外的提示,但为了使其起作用,我们需要将前一个提示的结果作为上下文添加到后一个提示中。 - 找到代码中打印第一个提示结果的部分,并添加以下代码: + 找到代码中打印第一个提示结果的部分,并添加以下代码: - ```python - old_prompt_result = completion.choices[0].text - prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have." - - new_prompt = f"{old_prompt_result} {prompt}" - completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) - - # print response - print("Shopping list:") - print(completion.choices[0].text) - ``` + ```python + old_prompt_result = completion.choices[0].text + prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have." + + new_prompt = f"{old_prompt_result} {prompt}" + completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) - 请注意以下事项: + # print response + print("Shopping list:") + print(completion.choices[0].text) + ``` - 1. 我们通过将第一个提示的结果添加到新提示来构造一个新提示 + 请注意以下事项: - ```python - new_prompt = f"{old_prompt_result} {prompt}" - ``` + 1. 我们通过将第一个提示的结果添加到新提示来构造一个新提示 - 2. 我们提出一个新的请求,但也考虑到我们在第一个提示中请求的 token 数量,所以这次我们说 `max_tokens` 是1200。 + ```python + new_prompt = f"{old_prompt_result} {prompt}" + ``` - ```python - completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) - ``` + 2. 我们提出一个新的请求,但也考虑到我们在第一个提示中请求的 token 数量,所以这次我们说 `max_tokens` 是 1200。 - 运行代码,结果如下: + ```python + completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) + ``` - ```output - No of recipes (for example, 5: 2 - List of ingredients (for example, chicken, potatoes, and carrots: apple,flour - Filter (for example, vegetarian, vegan, or gluten-free: sugar - Recipes: - or milk. - - -Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated - -Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples - Shopping list: - -Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice - ``` + 运行代码,结果如下: + + ```output + No of recipes (for example, 5: 2 + List of ingredients (for example, chicken, potatoes, and carrots: apple,flour + Filter (for example, vegetarian, vegan, or gluten-free: sugar + Recipes: + or milk. + + -Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated + -Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples + Shopping list: + -Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice + ``` ## 改进您的设置 到目前为止,我们拥有的是可以运行的代码,但是我们应该做一些调整来进一步改进。 我们应该做的一些事情是: -- **将 Key 与代码分开**,例如 API Key。Key 不属于代码,应存储在安全的位置。 为了将 Key 与代码分开,我们可以使用环境变量和像`python-dotenv` 这样的 libraries 从文件中加载它们。 代码如下: +- **将 Key 与代码分开**,例如 API Key。Key 不属于代码,应存储在安全的位置。 为了将 Key 与代码分开,我们可以使用环境变量和像`python-dotenv` 这样的 libraries 从文件中加载它们。 代码如下: - 1. 创建一个包含以下内容的 `.env` 文件: + 1. 创建一个包含以下内容的 `.env` 文件: - ```bash - OPENAI_API_KEY=sk-... - ``` + ```bash + OPENAI_API_KEY=sk-... + ``` - > Note, for Azure, you need to set the following environment variables: + > Note, for Azure, you need to set the following environment variables: - ```bash - OPENAI_API_TYPE=azure - OPENAI_API_VERSION=2023-05-15 - OPENAI_API_BASE= - ``` + ```bash + OPENAI_API_TYPE=azure + OPENAI_API_VERSION=2023-05-15 + OPENAI_API_BASE= + ``` - In code, you would load the environment variables like so: + In code, you would load the environment variables like so: - ```python - from dotenv import load_dotenv + ```python + from dotenv import load_dotenv - load_dotenv() + load_dotenv() - openai.api_key = os.environ["OPENAI_API_KEY"] - ``` + openai.api_key = os.environ["OPENAI_API_KEY"] + ``` -- **关于 token 长度**。 我们应该考虑需要多少 token 来生成我们想要的文本。 token 需要花钱,因此在可能的情况下,我们应该尽量节约使用 token 的数量。 例如,我们可以对提示进行调整,以便我们可以使用更少的 token +- **关于 token 长度**。 我们应该考虑需要多少 token 来生成我们想要的文本。 token 需要花钱,因此在可能的情况下,我们应该尽量节约使用 token 的数量。 例如,我们可以对提示进行调整,以便我们可以使用更少的 token - 要更改使用的 token,您可以使用 `max_tokens` 参数。 例如,如果您想使用 100 个 token,您可以这样做: + 要更改使用的 token,您可以使用 `max_tokens` 参数。 例如,如果您想使用 100 个 token,您可以这样做: - ```python - completion = openai.Completion.create(model="davinci-002", prompt=prompt, max_tokens=100) - ``` + ```python + completion = openai.Completion.create(model="davinci-002", prompt=prompt, max_tokens=100) + ``` -**进行 temperature 调整试验**。 temperature 是我们到目前为止还没有提到的东西,但它是我们的程序如何执行的重要元素。 temperature 值越高,输出就越随机。 相反, temperature 值越低,输出就越可预测。 考虑一下您是否希望输出有所变化。 +**进行 temperature 调整试验**。 temperature 是我们到目前为止还没有提到的东西,但它是我们的程序如何执行的重要元素。 temperature 值越高,输出就越随机。 相反, temperature 值越低,输出就越可预测。 考虑一下您是否希望输出有所变化。 要改变 temperature ,您可以使用 `temperature` 参数。 例如,如果您想使用 0.5 的 temperature ,您可以这样做: @@ -609,7 +606,7 @@ That's your five recipes, with no garlic mentioned and you also have a shopping completion = openai.Completion.create(model="davinci-002", prompt=prompt, temperature=0.5) ``` - > 请注意,越接近 1.0,输出的变化就越多。 +> 请注意,越接近 1.0,输出的变化就越多。 ## 作业 @@ -667,5 +664,4 @@ A: 1 想要了解有关创建文本生成应用的更多信息? 转至[进阶学习的页面](../../../13-continued-learning/translations/cn/README.md?WT.mc_id=academic-105485-koreyst) 查找有关此主章节的其他学习资源。 -前往第七章,我们将学习[构建聊天应用程序](../../../07-building-chat-applications/translations/cn/README.md?WT.mc_id=academic-105485-koreyst) - +前往第七章,我们将学习[构建聊天应用程序](../../../07-building-chat-applications/translations/cn/README.md?WT.mc_id=academic-105485-koreyst) diff --git a/06-text-generation-apps/translations/ja-jp/README.md b/06-text-generation-apps/translations/ja-jp/README.md index 3626be1e3..4b0a834a5 100644 --- a/06-text-generation-apps/translations/ja-jp/README.md +++ b/06-text-generation-apps/translations/ja-jp/README.md @@ -1,10 +1,10 @@ # テキスト生成アプリケーションの構築 -[![Building Text Generation Applications](../../images/06-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://youtu.be/5jKHzY6-4s8?WT.mc_id=academic-105485-yoterada) +[![Building Text Generation Applications](../../images/06-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=bf3f3528-9871-4628-8616-b4b03cb23dcdt?WT.mc_id=academic-105485-yoterada) -> *(上記の画像をクリックすると、レッスン・ビデオを表示します)* +> _(上記の画像をクリックすると、レッスン・ビデオを表示します)_ -これまでのレッスンを通じて、プロンプトの基本的な概念や、「プロンプト・エンジニアリング」と呼ぶテクニックについて学んできました。ChatGPT、Office 365、Microsoft Power Platform など、プロンプトで操作可能な多くのツールは、皆様が何かを成し遂げるためのサポートを行います。 +これまでのレッスンを通じて、プロンプトの基本的な概念や、「プロンプト・エンジニアリング」と呼ぶテクニックについて学んできました。ChatGPT、Office 365、Microsoft Power Platform  など、プロンプトで操作可能な多くのツールは、皆様が何かを成し遂げるためのサポートを行います。 皆様のアプリケーションに、このような機能を追加するためには、プロンプトや Completion といった概念を理解し、使用するライブラリを選択する必要があります。この章では、それらを具体的に学んでいきます。 @@ -54,21 +54,21 @@ ## どこから始めればよいのでしょうか? -まず、LLM と統合する方法を理解する必要があります。これには通常、以下の2つのアプローチが含まれます: +まず、LLM と統合する方法を理解する必要があります。これには通常、以下の 2 つのアプローチが含まれます: - API の使用:プロンプトを含む HTTP (RESTful) リクエストを作成し、生成されたテキストを取得 - ライブラリの使用:上記の API 呼び出しより簡単に利用可能で、API 呼び出しを隠蔽したライブラリを使用 ## ライブラリ/SDK -LLMを操作するために、いくつかの有名なライブラリがあります: +LLM を操作するために、いくつかの有名なライブラリがあります: - **OpenAI** このライブラリを使用すると、モデルに対する接続とプロンプトの送信が簡単になります また、より高レベルで動作するライブラリもあります: - **Langchain**:Langchain はよく知られており、Python をサポートしています -- **Semantic Kernel**:Semantic Kernelは、C#、Python、Java をサポートするMicrosoft 純正のライブラリです +- **Semantic Kernel**:Semantic Kernel は、C#、Python、Java をサポートする Microsoft 純正のライブラリです ## OpenAI を使用した最初のアプリ @@ -84,16 +84,16 @@ pip install openai ### リソースの作成 -下記の手順に従い操作を行なってください: +下記の手順に従い操作を行なってください: -- Azureのアカウントを作成します。[https://azure.microsoft.com/free/](https://azure.microsoft.com/free/?WT.mc_id=academic-105485-yoterada) +- Azure のアカウントを作成します。[https://azure.microsoft.com/free/](https://azure.microsoft.com/free/?WT.mc_id=academic-105485-yoterada) - Azure Open AI へのアクセス権限を取得します。[https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai](https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai?WT.mc_id=academic-105485-yoterada) からアクセス申請を提出します - > [!NOTE] - > 本記事の執筆時には、Azure Open AI へのアクセスを申請する必要があります。 + > [!NOTE] + > 本記事の執筆時には、Azure Open AI へのアクセスを申請する必要があります。 -- Python をインストールします。 -- Azure OpenAI Serviceリソースを作成します。[リソースの作成方法](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal?WT.mc_id=academic-105485-yoterada)については、こちらのガイドをご参照ください。 +- Python をインストールします。 +- Azure OpenAI Service リソースを作成します。[リソースの作成方法](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal?WT.mc_id=academic-105485-yoterada)については、こちらのガイドをご参照ください。 ### API キーとエンドポイントを取得 @@ -107,7 +107,7 @@ pip install openai > API キーはコード中に直接書き込まずに管理すべきです。下記のように環境変数を使用して設定できます。 > > - 環境変数 `OPENAI_API_KEY` に API キーを設定します -> `export OPENAI_API_KEY='sk-...'` +> `export OPENAI_API_KEY='sk-...'` ### Azure の設定 @@ -120,15 +120,14 @@ openai.api_version = '2023-05-15' openai.api_base = os.getenv("API_BASE") ``` -上記は、それぞれ下記の設定を行っています: +上記は、それぞれ下記の設定を行っています: -- `api_type`を`azure`に設定します。これにより、ライブラリは OpenAI ではなく Azure Open AI に接続します。 -- `api_key`は、Azure Portal で取得した API キーを設定します。 -- `api_version`は、使用する API のバージョンです。執筆時点での最新バージョンは`2023-05-15`です。 +- `api_type`を`azure`に設定します。これにより、ライブラリは OpenAI ではなく Azure Open AI に接続します。 +- `api_key`は、Azure Portal で取得した API キーを設定します。 +- `api_version`は、使用する API のバージョンです。執筆時点での最新バージョンは`2023-05-15`です。 - `api_base` は API のエンドポイントです。これは、Azure Portal の API キーの下側に記載されています。 -> [!NOTE] -> `os.getenv` は環境変数を読み取る関数です。`OPENAI_API_KEY` や `API_BASE` などの環境変数を読み取るために使用します。これらの環境変数は、ターミナルで設定するか、もしくは `dotenv` のようなライブラリを使用して設定します。 +> [!NOTE] > `os.getenv` は環境変数を読み取る関数です。`OPENAI_API_KEY` や `API_BASE` などの環境変数を読み取るために使用します。これらの環境変数は、ターミナルで設定するか、もしくは `dotenv` のようなライブラリを使用して設定します。 > [!NOTE] > 訳者追記 @@ -183,14 +182,14 @@ pip install openai > [!NOTE] > Azure OpenAI キーは、[https://portal.azure.com/](https://portal.azure.com/?WT.mc_id=academic-105485-yoterada) から `OpenAI` を検索し、`OpenAI Resource` を選択してください。その後 `Keys and Endpoint` を選択し、`Key 1` の値をコピーてください。 -1. *app.py* ファイルを作成し、下記のコードを記述してください: +1. _app.py_ ファイルを作成し、下記のコードを記述してください: ```python import openai openai.api_key = "" -openai.api_type = 'azure' +openai.api_type = 'azure' openai.api_version = '2023-05-15' openai.api_base = "" deployment_name = "<デプロイ名>" @@ -200,7 +199,7 @@ prompt = "次の文を完成させてください: むかしむかし、ある # Completion を作成 completion = openai.Completion.create(engine= deployment_name, model="davinci-002", prompt=prompt) - + # レスポンスを出力 print(completion.choices[0].text) ``` @@ -237,7 +236,7 @@ print(completion.choices[0].text) 上記のプロンプトを使用すると、以下のようなレスポンスが得られるかもしれません: ```output -1. ローストチキンと野菜: +1. ローストチキンと野菜: 材料: - チキンのもも肉 4 枚 - じゃがいも 2 個、角切り @@ -380,7 +379,7 @@ print(completion.choices[0].text) シナリオを一通り試したところで、そのシナリオに合わせたコードを実装してみましょう。下記の手順に従い実装してください。 -1. 既存の *app.py* ファイルを利用します。 +1. 既存の _app.py_ ファイルを利用します。 2. `prompt`という変数を探し、下記のようにコードを修正してください。 ```python @@ -401,7 +400,7 @@ prompt = f"鶏肉、じゃがいも、にんじんを使った料理のレシピ -鶏肉、じゃがいも、人参のカレー: サラダ油大さじ1, 大きめの玉ねぎ1個(みじん切り), ニンニク2片(みじん切り), 人参1本(皮をむいてみじん切り), じゃがいも1個(皮をむいてみじん切り), コリアンダー(パウダー)小さじ1, クミン(パウダー)小さじ1, ターメリック(パウダー)小さじ1/2, ジンジャー(パウダー)小さじ1/2, ケイエンペッパー小さじ1/4, 鶏ガラスープ2カップ, ドライホワイトワイン1/2カップ, ヒヨコ豆1缶(15オンス、水切り), レーズン1/2カップ, シラントロ(みじん切り)1/2カップ ``` -> 注意: LLM は非決定的(非確実)なので、プログラムを実行するたびに上記とは異なる結果が得られるかもしれません。 +> 注意: LLM  は非決定的(非確実)なので、プログラムを実行するたびに上記とは異なる結果が得られるかもしれません。 さてそれでは、どうすれば改善できるのかを見てみましょう。改善するために、コードに柔軟性を持たせ、材料やレシピの数を変更できるようにします。 @@ -435,7 +434,7 @@ prompt = f"{ingredients} を使った料理のレシピを {no_recipes} つ教 - **材料のフィルタリング**。嫌いな食材やアレルギーのある食材をフィルタリングできるようにしたいと考えています。これを実現するために、既存のプロンプトを編集し、下記のようにフィルター条件をプロンプトの最後に追加してください。 -```python +```python filter = input("フィルター(例:ベジタリアン、ビーガン、グルテンフリー): ") prompt = f"{ingredients} を使った料理のレシピを {no_recipes} つ教えてください。レシピごとに、使用するすべての食材をリストしてください。ただし、{filter}は除外してください。" @@ -529,7 +528,7 @@ print(completion.choices[0].text) new_prompt = f"{old_prompt_result} {prompt}" ``` -1. 新しいリクエストを作成しますが、最初のプロンプトで要求したトークン数も考慮に入れて、今回は `max_tokens` を1200とします。 +1. 新しいリクエストを作成しますが、最初のプロンプトで要求したトークン数も考慮に入れて、今回は `max_tokens` を 1200 とします。 ```python completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) @@ -537,7 +536,7 @@ completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, このコードを実行すると、下記のような結果が得られます: -```output +```output レシピの数(例えば、5): 2 食材のリスト(例えば、チキン、ポテト、キャロット): リンゴ、小麦粉 フィルター(例えば、ベジタリアン、ビーガン、グルテンフリー): 砂糖 @@ -565,7 +564,7 @@ completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, OPENAI_API_KEY=sk-... ``` -> ご注意:Azureを使用する場合は、下記の環境変数を設定する必要があります: +> ご注意:Azure を使用する場合は、下記の環境変数を設定する必要があります: ```bash OPENAI_API_TYPE=azure @@ -593,13 +592,13 @@ completion = openai.Completion.create(model="davinci-002", prompt=prompt, max_to - **温度 (Temperature)** これまで触れていなかった温度ですが、プログラムの実行結果に大きな影響を与えます。温度が高いほど(値が 1 に近いほど)、出力はランダムになります。逆に、温度値が低いほど(値が 0 に近いほど)、出力結果は予測可能になります。ご自身のアプリで出力にバリエーションが必要かどうかを考えてください。 -温度を変更するには、`temperature` パラメータを使用します。例えば、温度を0.5に設定したい場合は、以下のようにします: +温度を変更するには、`temperature` パラメータを使用します。例えば、温度を 0.5 に設定したい場合は、以下のようにします: ```python completion = openai.Completion.create(model="davinci-002", prompt=prompt, temperature=0.5) ``` -> 注意:1.0に近づくほど、出力のバリエーションが大きくなります。 +> 注意:1.0 に近づくほど、出力のバリエーションが大きくなります。 ## 課題 @@ -618,13 +617,13 @@ completion = openai.Completion.create(model="davinci-002", prompt=prompt, temper 下記は、あくまでも参考のプロンプトですので、使い方を確認し、お好みに合わせて微調整してください。 ```text -- "あなたは Python 言語のエキスパートです - -下記の形式で Python の初心者用レッスンを提案してください: - -形式: - - 概念: - - レッスンの簡単な説明: +- "あなたは Python 言語のエキスパートです + +下記の形式で Python の初心者用レッスンを提案してください: + +形式: + - 概念: + - レッスンの簡単な説明: - 解答付きのコード演習" ``` diff --git a/06-text-generation-apps/translations/pt-br/README.md b/06-text-generation-apps/translations/pt-br/README.md index 2049e3a9a..ece71c8bc 100644 --- a/06-text-generation-apps/translations/pt-br/README.md +++ b/06-text-generation-apps/translations/pt-br/README.md @@ -1,8 +1,8 @@ # Desenvolvendo Aplicativos de Geração de Texto -[![Building Text Generation Applications](../../images/06-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/5jKHzY6-4s8?WT.mc_id=academic-105485-koreyst) +[![Building Text Generation Applications](../../images/06-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=bf3f3528-9871-4628-8616-b4b03cb23dcd?WT.mc_id=academic-105485-koreyst) -> *(Clique na imagem acima para assistir ao vídeo desta lição)* +> _(Clique na imagem acima para assistir ao vídeo desta lição)_ Você viu até agora neste currículo que existem conceitos básicos como prompts e até mesmo uma disciplina inteira chamada "engenharia de prompts". Muitas ferramentas com as quais você pode interagir, como ChatGPT, Office 365, Microsoft Power Platform e muito mais, suportam o uso de prompts para realizar algo. @@ -107,7 +107,7 @@ Agora que você tem essas informações copiadas, vamos instruir as bibliotecas > Vale a pena separar sua chave API do seu código. Você pode fazer isso usando variáveis de ambiente. > > - Defina a variável de ambiente em: `OPENAI_API_TYPE` para a chave da sua API. -> `export OPENAI_API_KEY='sk-...'` +> `export OPENAI_API_KEY='sk-...'` ### Configurando o recurso do Azure no código @@ -129,8 +129,7 @@ Aqui estamos definindo o seguinte: - `api_version`, esta é a versão da API que você deseja usar. No momento da escrita, a versão mais recente é `2023-05-15`. - `api_base`, este é o endpoint da API. Você pode encontrá-lo no Portal do Azure ao lado de sua chave API. -> [!OBSERVAÇÃO] -> `os.getenv` é uma função que lê variáveis de ambiente. Você pode usá-lo para ler variáveis de ambiente como `OPENAI_API_KEY` e `API_BASE`. Defina essas variáveis de ambiente em seu terminal ou usando uma biblioteca como `dotenv`. +> [!OBSERVAÇÃO] > `os.getenv` é uma função que lê variáveis de ambiente. Você pode usá-lo para ler variáveis de ambiente como `OPENAI_API_KEY` e `API_BASE`. Defina essas variáveis de ambiente em seu terminal ou usando uma biblioteca como `dotenv`. ## Gerando texto @@ -166,50 +165,50 @@ Agora que aprendemos a configurar o openai, é hora de criar o seu primeiro apli 1. Crie um ambiente virtual e instale o openai: - ```bash - python -m venv venv - source venv/bin/activate - pip install openai - ``` + ```bash + python -m venv venv + source venv/bin/activate + pip install openai + ``` + + > [!OBSERVAÇÃO] + > Se você estiver usando o Windows, digite `venv\Scripts\activate` em vez de `source venv/bin/activate`. - > [!OBSERVAÇÃO] - > Se você estiver usando o Windows, digite `venv\Scripts\activate` em vez de `source venv/bin/activate`. + > [!OBSERVAÇÃO] + > Localize sua chave Azure Open AI acessando [https://portal.azure.com/](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst) e pesquise por `Open AI` e selecione o `recurso Open AI` e depois selecione `Chaves e Endpoint` e copie o valor `Chave 1`. - > [!OBSERVAÇÃO] - > Localize sua chave Azure Open AI acessando [https://portal.azure.com/](https://portal.azure.com/?WT.mc_id=academic-105485-koreyst) e pesquise por `Open AI` e selecione o `recurso Open AI` e depois selecione `Chaves e Endpoint` e copie o valor `Chave 1`. +1. Crie um arquivo _app.py_ e dê a ele o seguinte código: -1. Crie um arquivo *app.py* e dê a ele o seguinte código: + ```python + import openai - ```python - import openai + openai.api_key = "" - openai.api_key = "" + openai.api_type = 'azure' + openai.api_version = '2023-05-15' + openai.api_base = "" + deployment_name = "" - openai.api_type = 'azure' - openai.api_version = '2023-05-15' - openai.api_base = "" - deployment_name = "" + # add your completion code + prompt = "Complete the following: Once upon a time there was a" - # add your completion code - prompt = "Complete the following: Once upon a time there was a" + # make completion + completion = openai.Completion.create(engine= deployment_name, model="davinci-002", prompt=prompt) - # make completion - completion = openai.Completion.create(engine= deployment_name, model="davinci-002", prompt=prompt) - - # print response - print(completion.choices[0].text) - ``` + # print response + print(completion.choices[0].text) + ``` - > [!OBSERVAÇÃO] - > Se você estiver usando o Azure Open AI, precisará definir o `api_type` como `azure` e definir o `api_key` como sua chave Azure Open AI. + > [!OBSERVAÇÃO] + > Se você estiver usando o Azure Open AI, precisará definir o `api_type` como `azure` e definir o `api_key` como sua chave Azure Open AI. - Você deve ver uma saída como a seguinte: + Você deve ver uma saída como a seguinte: - ```output - very unhappy _____. + ```output + very unhappy _____. - Once upon a time there was a very unhappy mermaid. - ``` + Once upon a time there was a very unhappy mermaid. + ``` ## Diferentes tipos de prompts, para diferentes coisas @@ -351,7 +350,7 @@ Agora você tem um novo resultado, a saber: - 1 colher de chá de tomilho seco - 4 xícaras de caldo de galinha - Sal e pimenta a gosto - + 5. Hash de Frango e Batata: - Ingredientes: - 2 colheres de sopa de azeite de oliva @@ -376,54 +375,53 @@ Aqui estão as cinco receitas, sem mencionar alho, e também uma lista de compra Agora que temos um cenário, vamos escrever o código para corresponder ao cenário demonstrado. Para fazer isso, siga estas etapas: - -1. Use o arquivo *app.py* existente como ponto de partida +1. Use o arquivo _app.py_ existente como ponto de partida 1. Localize a variável `prompt` e altere seu código para o seguinte: - ```python - prompt = "Me forneça 5 receitas de um prato com os seguintes ingredientes: frango, batata e cenoura. Por receita, liste todos os ingredientes usados" - ``` + ```python + prompt = "Me forneça 5 receitas de um prato com os seguintes ingredientes: frango, batata e cenoura. Por receita, liste todos os ingredientes usados" + ``` - Se você executar o código agora, deverá ver uma saída semelhante a: + Se você executar o código agora, deverá ver uma saída semelhante a: - ```output - - Ensopado de Frango com Batata e Cenoura: 3 colheres de sopa de azeite, 1 cebola picada, 2 dentes de alho picados, 1 cenoura descascada e picada, 1 batata descascada e picada, 1 folha de louro, 1 raminho de tomilho, 1/2 colher de chá de sal , 1/4 colher de chá de pimenta preta, 1 1/2 xícara de caldo de galinha, 1/2 xícara de vinho branco seco, 2 colheres de sopa de salsa fresca picada, 2 colheres de sopa de manteiga sem sal, 1 1/2 libra de coxas de frango desossadas e sem pele, cortadas em 1- pedaços de polegada + ```output + - Ensopado de Frango com Batata e Cenoura: 3 colheres de sopa de azeite, 1 cebola picada, 2 dentes de alho picados, 1 cenoura descascada e picada, 1 batata descascada e picada, 1 folha de louro, 1 raminho de tomilho, 1/2 colher de chá de sal , 1/4 colher de chá de pimenta preta, 1 1/2 xícara de caldo de galinha, 1/2 xícara de vinho branco seco, 2 colheres de sopa de salsa fresca picada, 2 colheres de sopa de manteiga sem sal, 1 1/2 libra de coxas de frango desossadas e sem pele, cortadas em 1- pedaços de polegada - - Frango Assado no Forno com Batata e Cenoura: 3 colheres de sopa de azeite extra-virgem, 1 colher de sopa de mostarda Dijon, 1 colher de sopa de alecrim fresco picado, 1 colher de sopa de tomilho fresco picado, 4 dentes de alho picados, 1 1/2 libra de batatas vermelhas pequenas, esquartejado, 1 1/2 libra de cenoura, cortada em quartos longitudinalmente, 1/2 colher de chá de sal, 1/4 colher de chá de pimenta preta, 1 (4 libras) de frango inteiro + - Frango Assado no Forno com Batata e Cenoura: 3 colheres de sopa de azeite extra-virgem, 1 colher de sopa de mostarda Dijon, 1 colher de sopa de alecrim fresco picado, 1 colher de sopa de tomilho fresco picado, 4 dentes de alho picados, 1 1/2 libra de batatas vermelhas pequenas, esquartejado, 1 1/2 libra de cenoura, cortada em quartos longitudinalmente, 1/2 colher de chá de sal, 1/4 colher de chá de pimenta preta, 1 (4 libras) de frango inteiro - - Caçarola de frango, batata e cenoura: spray de cozinha, 1 cebola grande picada, 2 dentes de alho picados, 1 cenoura descascada e ralada, 1 batata descascada e ralada, 1/2 colher de chá de folhas secas de tomilho, 1/4 colher de chá sal, 1/4 colher de chá de pimenta preta, 2 xícaras de caldo de galinha desnatado e com baixo teor de sódio, 1 xícara de ervilhas congeladas, 1/4 xícara de farinha de trigo, 1 xícara de leite com baixo teor de gordura a 2%, 1/4 xícara de parmesão ralado queijo - - - Jantar de frango e batata em uma panela: 2 colheres de sopa de azeite, 1 quilo de coxas de frango desossadas e sem pele, cortadas em pedaços de 2,5 cm, 1 cebola grande picada, 3 dentes de alho picados, 1 cenoura descascada e picada, 1 batata, descascado e picado, 1 folha de louro, 1 raminho de tomilho, 1/2 colher de chá de sal, 1/4 colher de chá de pimenta preta, 2 xícaras de caldo de galinha, 1/2 xícara de vinho branco seco - - - Caril de Frango, Batata e Cenoura: 1 colher de sopa de óleo vegetal, 1 cebola grande picada, 2 dentes de alho picados, 1 cenoura descascada e picada, 1 batata descascada e picada, 1 colher de chá de coentro moído, 1 colher de chá de cominho moído, 1/2 colher de chá de açafrão em pó, 1/2 colher de chá de gengibre em pó, 1/4 colher de chá de pimenta caiena, 2 xícaras de caldo de galinha, 1/2 xícara de vinho branco seco, 1 lata (15 onças) de grão de bico, escorrido e enxaguado, 1/2 xícara de passas, 1/2 xícara de coentro fresco picado - ``` + - Caçarola de frango, batata e cenoura: spray de cozinha, 1 cebola grande picada, 2 dentes de alho picados, 1 cenoura descascada e ralada, 1 batata descascada e ralada, 1/2 colher de chá de folhas secas de tomilho, 1/4 colher de chá sal, 1/4 colher de chá de pimenta preta, 2 xícaras de caldo de galinha desnatado e com baixo teor de sódio, 1 xícara de ervilhas congeladas, 1/4 xícara de farinha de trigo, 1 xícara de leite com baixo teor de gordura a 2%, 1/4 xícara de parmesão ralado queijo - > [!OBSERVAÇÃO] - > seu LLM é não determinístico, então você pode obter resultados diferentes sempre que executar o programa. + - Jantar de frango e batata em uma panela: 2 colheres de sopa de azeite, 1 quilo de coxas de frango desossadas e sem pele, cortadas em pedaços de 2,5 cm, 1 cebola grande picada, 3 dentes de alho picados, 1 cenoura descascada e picada, 1 batata, descascado e picado, 1 folha de louro, 1 raminho de tomilho, 1/2 colher de chá de sal, 1/4 colher de chá de pimenta preta, 2 xícaras de caldo de galinha, 1/2 xícara de vinho branco seco - Ótimo! Vamos ver como podemos melhorar as coisas. Para melhorar as coisas, queremos ter certeza de que o código é flexível, para que os ingredientes e o número de receitas possam ser melhorados e alterados. + - Caril de Frango, Batata e Cenoura: 1 colher de sopa de óleo vegetal, 1 cebola grande picada, 2 dentes de alho picados, 1 cenoura descascada e picada, 1 batata descascada e picada, 1 colher de chá de coentro moído, 1 colher de chá de cominho moído, 1/2 colher de chá de açafrão em pó, 1/2 colher de chá de gengibre em pó, 1/4 colher de chá de pimenta caiena, 2 xícaras de caldo de galinha, 1/2 xícara de vinho branco seco, 1 lata (15 onças) de grão de bico, escorrido e enxaguado, 1/2 xícara de passas, 1/2 xícara de coentro fresco picado + ``` + + > [!OBSERVAÇÃO] + > seu LLM é não determinístico, então você pode obter resultados diferentes sempre que executar o programa. + + Ótimo! Vamos ver como podemos melhorar as coisas. Para melhorar as coisas, queremos ter certeza de que o código é flexível, para que os ingredientes e o número de receitas possam ser melhorados e alterados. 1. Vamos alterar o código da seguinte maneira: - ```python - no_recipes = input("No of recipes (for example, 5: ") + ```python + no_recipes = input("No of recipes (for example, 5: ") - ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots: ") - - # interpolate the number of recipes into the prompt an ingredients - prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used" - ``` + ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots: ") - Execute o código e teste, e vejamos o resultado: + # interpolate the number of recipes into the prompt an ingredients + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used" + ``` - ```output - No of recipes (for example, 5: 3 - List of ingredients (for example, chicken, potatoes, and carrots: milk,strawberries + Execute o código e teste, e vejamos o resultado: - -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes - -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream - -Strawberry milk: milk, strawberries, sugar, vanilla extract - ``` + ```output + No of recipes (for example, 5: 3 + List of ingredients (for example, chicken, potatoes, and carrots: milk,strawberries + + -Strawberry milk shake: milk, strawberries, sugar, vanilla extract, ice cubes + -Strawberry shortcake: milk, flour, baking powder, sugar, salt, unsalted butter, strawberries, whipped cream + -Strawberry milk: milk, strawberries, sugar, vanilla extract + ``` ### Melhore adicionando filtro e lista de compras @@ -433,128 +431,128 @@ Para melhorar ainda mais, queremos adicionar o seguinte: - **Filtrar ingredientes**: Queremos ser capazes de filtrar ingredientes que não gostamos ou somos alérgicos. Para realizar essa alteração, podemos editar nosso prompt existente e adicionar uma condição de filtro ao final, assim: - ```python - filter = input("Filter (for example, vegetarian, vegan, or gluten-free: ") - - prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}" - ``` - - Acima adicionamos `{filter}` ao final do prompt e também capturamos o valor do filtro do usuário. - - Um exemplo de entrada da execução do programa pode ser assim: - - ```output - No of recipes (for example, 5: 3 - List of ingredients (for example, chicken, potatoes, and carrots: onion,milk - Filter (for example, vegetarian, vegan, or gluten-free: no milk - - 1. French Onion Soup - - Ingredients: - - -1 large onion, sliced - -3 cups beef broth - -1 cup milk - -6 slices french bread - -1/4 cup shredded Parmesan cheese - -1 tablespoon butter - -1 teaspoon dried thyme - -1/4 teaspoon salt - -1/4 teaspoon black pepper - - Instructions: - - 1. In a large pot, sauté onions in butter until golden brown. - 2. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil. - 3. Reduce heat and simmer for 10 minutes. - 4. Place french bread slices on soup bowls. - 5. Ladle soup over bread. - 6. Sprinkle with Parmesan cheese. - - 2. Onion and Potato Soup - - Ingredients: - - -1 large onion, chopped - -2 cups potatoes, diced - -3 cups vegetable broth - -1 cup milk - -1/4 teaspoon black pepper - - Instructions: - - 1. In a large pot, sauté onions in butter until golden brown. - 2. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil. - 3. Reduce heat and simmer for 10 minutes. - 4. Serve hot. - - 3. Creamy Onion Soup - - Ingredients: - - -1 large onion, chopped - -3 cups vegetable broth - -1 cup milk - -1/4 teaspoon black pepper - -1/4 cup all-purpose flour - -1/2 cup shredded Parmesan cheese - - Instructions: - - 1. In a large pot, sauté onions in butter until golden brown. - 2. Add vegetable broth, milk, and pepper. Bring to a boil. - 3. Reduce heat and simmer for 10 minutes. - 4. In a small bowl, whisk together flour and Parmesan cheese until smooth. - 5. Add to soup and simmer for an additional 5 minutes, or until soup has thickened. - ``` - - Como você pode ver, todas as receitas com leite foram filtradas. Mas, se você for intolerante à lactose, talvez queira filtrar também as receitas com queijo, então é preciso ser claro. + ```python + filter = input("Filter (for example, vegetarian, vegan, or gluten-free: ") + + prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}" + ``` + + Acima adicionamos `{filter}` ao final do prompt e também capturamos o valor do filtro do usuário. + + Um exemplo de entrada da execução do programa pode ser assim: + + ```output + No of recipes (for example, 5: 3 + List of ingredients (for example, chicken, potatoes, and carrots: onion,milk + Filter (for example, vegetarian, vegan, or gluten-free: no milk + + 1. French Onion Soup + + Ingredients: + + -1 large onion, sliced + -3 cups beef broth + -1 cup milk + -6 slices french bread + -1/4 cup shredded Parmesan cheese + -1 tablespoon butter + -1 teaspoon dried thyme + -1/4 teaspoon salt + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add beef broth, milk, thyme, salt, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Place french bread slices on soup bowls. + 5. Ladle soup over bread. + 6. Sprinkle with Parmesan cheese. + + 2. Onion and Potato Soup + + Ingredients: + + -1 large onion, chopped + -2 cups potatoes, diced + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add potatoes, vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. Serve hot. + + 3. Creamy Onion Soup + + Ingredients: + + -1 large onion, chopped + -3 cups vegetable broth + -1 cup milk + -1/4 teaspoon black pepper + -1/4 cup all-purpose flour + -1/2 cup shredded Parmesan cheese + + Instructions: + + 1. In a large pot, sauté onions in butter until golden brown. + 2. Add vegetable broth, milk, and pepper. Bring to a boil. + 3. Reduce heat and simmer for 10 minutes. + 4. In a small bowl, whisk together flour and Parmesan cheese until smooth. + 5. Add to soup and simmer for an additional 5 minutes, or until soup has thickened. + ``` + + Como você pode ver, todas as receitas com leite foram filtradas. Mas, se você for intolerante à lactose, talvez queira filtrar também as receitas com queijo, então é preciso ser claro. - **Produze uma lista de compras**. Queremos produzir uma lista de compras, considerando o que já temos em casa. - Para esta funcionalidade, poderíamos tentar resolver tudo em um prompt ou poderíamos dividi-lo em dois prompts. Vamos tentar a última abordagem. Aqui estamos sugerindo adicionar um prompt adicional, mas para que isso funcione, precisamos adicionar o resultado do prompt anterior como contexto para o prompt posterior. + Para esta funcionalidade, poderíamos tentar resolver tudo em um prompt ou poderíamos dividi-lo em dois prompts. Vamos tentar a última abordagem. Aqui estamos sugerindo adicionar um prompt adicional, mas para que isso funcione, precisamos adicionar o resultado do prompt anterior como contexto para o prompt posterior. + + ```python + old_prompt_result = completion.choices[0].text + prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have." + + new_prompt = f"{old_prompt_result} {prompt}" + completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) + + # print response + print("Shopping list:") + print(completion.choices[0].text) + ``` - ```python - old_prompt_result = completion.choices[0].text - prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have." - - new_prompt = f"{old_prompt_result} {prompt}" - completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) - - # print response - print("Shopping list:") - print(completion.choices[0].text) - ``` + Observe o seguinte: - Observe o seguinte: + 1. Nós estamos criando um novo prompt adicionando o resultado do primeiro prompt ao novo prompt: - 1. Nós estamos criando um novo prompt adicionando o resultado do primeiro prompt ao novo prompt: + ```python + new_prompt = f"{old_prompt_result} {prompt}" + ``` - ```python - new_prompt = f"{old_prompt_result} {prompt}" - ``` + 1. Nós fizemos uma nova requisição, mas também considerando o número de tokens que solicitamos no primeiro prompt, então desta vez dizemos que `max_tokens` é 1200. - 1. Nós fizemos uma nova requisição, mas também considerando o número de tokens que solicitamos no primeiro prompt, então desta vez dizemos que `max_tokens` é 1200. + ```python + completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) + ``` - ```python - completion = openai.Completion.create(engine=deployment_name, prompt=new_prompt, max_tokens=1200) - ``` + Dando uma olhada neste código, chegamos agora à seguinte saída: - Dando uma olhada neste código, chegamos agora à seguinte saída: + ```output + No of recipes (for example, 5: 2 + List of ingredients (for example, chicken, potatoes, and carrots: apple,flour + Filter (for example, vegetarian, vegan, or gluten-free: sugar - ```output - No of recipes (for example, 5: 2 - List of ingredients (for example, chicken, potatoes, and carrots: apple,flour - Filter (for example, vegetarian, vegan, or gluten-free: sugar - - - Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated + - Apple and flour pancakes: 1 cup flour, 1/2 tsp baking powder, 1/2 tsp baking soda, 1/4 tsp salt, 1 tbsp sugar, 1 egg, 1 cup buttermilk or sour milk, 1/4 cup melted butter, 1 Granny Smith apple, peeled and grated - - Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples + - Apple fritters: 1-1/2 cups flour, 1 tsp baking powder, 1/4 tsp salt, 1/4 tsp baking soda, 1/4 tsp nutmeg, 1/4 tsp cinnamon, 1/4 tsp allspice, 1/4 cup sugar, 1/4 cup vegetable shortening, 1/4 cup milk, 1 egg, 2 cups shredded, peeled apples - Shopping list: - - Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice - ``` + Shopping list: + - Flour, baking powder, baking soda, salt, sugar, egg, buttermilk, butter, apple, nutmeg, cinnamon, allspice + ``` ## Melhorando a nossa configuração @@ -562,47 +560,47 @@ O que temos até agora é um código que funciona, mas há algumas alterações - **Separar `secrets` do código**, como a chave da API. Segredos não pertencem ao código e devem ser armazenados em um local seguro. Para separar segredos do código, podemos usar variáveis de ambiente e bibliotecas como `python-dotenv` para carregá-los de um arquivo. Veja como isso ficaria no código: - 1. Crie um arquivo `.env` com o seguinte conteúdo: + 1. Crie um arquivo `.env` com o seguinte conteúdo: - ```bash - OPENAI_API_KEY=sk-... - ``` + ```bash + OPENAI_API_KEY=sk-... + ``` - > Observação: para o Azure, você precisa definir as seguintes variáveis de ambiente: + > Observação: para o Azure, você precisa definir as seguintes variáveis de ambiente: - ```bash - OPENAI_API_TYPE=azure - OPENAI_API_VERSION=2023-05-15 - OPENAI_API_BASE= - ``` + ```bash + OPENAI_API_TYPE=azure + OPENAI_API_VERSION=2023-05-15 + OPENAI_API_BASE= + ``` - No código, você carregaria as variáveis de ambiente assim: + No código, você carregaria as variáveis de ambiente assim: - ```python - from dotenv import load_dotenv + ```python + from dotenv import load_dotenv - load_dotenv() + load_dotenv() - openai.api_key = os.environ["OPENAI_API_KEY"] - ``` + openai.api_key = os.environ["OPENAI_API_KEY"] + ``` - **Uma palavra sobre o comprimento do token**. Devemos considerar quantos tokens precisamos para gerar o texto que queremos. Tokens custam dinheiro, então, sempre que possível, devemos tentar ser econômicos com o número de tokens que usamos. Por exemplo, podemos formular o prompt para que possamos usar menos tokens? - Para alterar os tokens usados, você pode usar o parâmetro `max_tokens`. Por exemplo, se você quiser usar 100 tokens, você faria: + Para alterar os tokens usados, você pode usar o parâmetro `max_tokens`. Por exemplo, se você quiser usar 100 tokens, você faria: - ```python - completion = openai.Completion.create(model="davinci-002", prompt=prompt, max_tokens=100) - ``` + ```python + completion = openai.Completion.create(model="davinci-002", prompt=prompt, max_tokens=100) + ``` - **Experimentando com a temperatura**. A temperatura é algo que não mencionamos até agora. Porém, é um contexto importante para o desempenho de nosso programa. Quanto maior o valor da temperatura, mais aleatório será o resultado. Por outro lado, quanto menor o valor da temperatura, mais previsível será o resultado. Considere se você deseja ou não variação na saída. - Para alterar a temperatura, você pode usar o parâmetro `temperature`. Por exemplo, se você quiser usar uma temperatura de 0.5, você faria: + Para alterar a temperatura, você pode usar o parâmetro `temperature`. Por exemplo, se você quiser usar uma temperatura de 0.5, você faria: - ```python - completion = openai.Completion.create(model="davinci-002", prompt=prompt, temperature=0.5) - ``` + ```python + completion = openai.Completion.create(model="davinci-002", prompt=prompt, temperature=0.5) + ``` - > Observação: quanto mais próximo de 1.0, mais variada será a saída. + > Observação: quanto mais próximo de 1.0, mais variada será a saída. ## Tarefa diff --git a/07-building-chat-applications/README.md b/07-building-chat-applications/README.md index 74aa725a5..42035d681 100644 --- a/07-building-chat-applications/README.md +++ b/07-building-chat-applications/README.md @@ -1,16 +1,16 @@ # Building Generative AI-Powered Chat Applications -[![Building Generative AI-Powered Chat Applications](./images/07-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/Kw4i-tlKMrQ?WT.mc_id=academic-105485-koreyst) +[![Building Generative AI-Powered Chat Applications](./images/07-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=57a31949-67c5-4020-8c85-91e4995589f3?WT.mc_id=academic-105485-koreyst) -> *(Click the image above to view video of this lesson)* +> _(Click the image above to view video of this lesson)_ Now that we've seen how we can build text-generation apps, let's look into chat applications. -Chat applications have become integrated into our daily lives, offering more than just a means of casual conversation. They're integral parts of customer service, technical support, and even sophisticated advisory systems. It's likely that you've gotten some help from a chat application not too long ago. As we integrate more advanced technologies like generative AI into these platforms, the complexity increases and so does the challenges. +Chat applications have become integrated into our daily lives, offering more than just a means of casual conversation. They're integral parts of customer service, technical support, and even sophisticated advisory systems. It's likely that you've gotten some help from a chat application not too long ago. As we integrate more advanced technologies like generative AI into these platforms, the complexity increases and so does the challenges. Some questions we need to be answered are: -- **Building the app**. How do we efficiently build and seamlessly integrate these AI-powered applications for specific use cases? +- **Building the app**. How do we efficiently build and seamlessly integrate these AI-powered applications for specific use cases? - **Monitoring**. Once deployed, how can we monitor and ensure that the applications are operating at the highest level of quality, both in terms of functionality and adhering to the [six principles of responsible AI](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-105485-koreyst)? As we move further into an age defined by automation and seamless human-machine interactions, understanding how generative AI transforms the scope, depth, and adaptability of chat applications becomes essential. This lesson will investigate the aspects of architecture that support these intricate systems, delve into the methodologies for fine-tuning them for domain-specific tasks, and evaluate the metrics and considerations pertinent to ensuring responsible AI deployment. @@ -82,7 +82,7 @@ The above example uses the GPT-3.5 Turbo model to complete the prompt, but notic General UX principles apply to chat applications, but here are some additional considerations that become particularly important due to the machine learning components involved. - **Mechanism for addressing ambiguity**: Generative AI models occasionally generate ambiguous answers. A feature that allows users to ask for clarification can be helpful should they come across this problem. -- **Context retention**: Advanced generative AI models have the ability to remember context within a conversation, which can be a necessary asset to the user experience. Giving users the ability to control and manage context improves the user experience, but introduces the risk of retaining sensitive user information. Considerations for how long this information is stored, such as introducing a retention policy, can balance the need for context against privacy. +- **Context retention**: Advanced generative AI models have the ability to remember context within a conversation, which can be a necessary asset to the user experience. Giving users the ability to control and manage context improves the user experience, but introduces the risk of retaining sensitive user information. Considerations for how long this information is stored, such as introducing a retention policy, can balance the need for context against privacy. - **Personalization**: With the ability to learn and adapt, AI models offer an individualized experience for a user. Tailoring the user experience through features like user profiles not only makes the user feel understood, but it also helps their pursuit of finding specific answers, creating a more efficient and satisfying interaction. One such example of personalization is the "Custom instructions" settings in OpenAI's ChatGPT. It allows you to provide information about yourself that may be important context for your prompts. Here's an example of a custom instruction. @@ -104,7 +104,7 @@ This "profile" prompts ChatGPT to create a lesson plan on linked lists. Notice t ### Accessibility - Whether a user has visual, auditory, motor, or cognitive impairments, a well-designed chat application should be usable by all. The following list breaks down specific features aimed at enhancing accessibility for various user impairments. +Whether a user has visual, auditory, motor, or cognitive impairments, a well-designed chat application should be usable by all. The following list breaks down specific features aimed at enhancing accessibility for various user impairments. - **Features for Visual Impairment**: High contrast themes and resizable text, screen reader compatibility. - **Features for Auditory Impairment**: Text-to-speech and speech-to-text functions, visual cues for audio notifications. @@ -171,14 +171,14 @@ Microsoft's approach to Responsible AI has identified six principles that should | Privacy and Security | AI systems should be secure and respect privacy. | Implement strong encryption and data protection measures. | To safeguard sensitive user data and comply with privacy laws. | | Inclusiveness | AI systems should empower everyone and engage people. | Design UI/UX that is accessible and easy-to-use for diverse audiences. | Ensures a wider range of people can use the application effectively. | | Transparency | AI systems should be understandable. | Provide clear documentation and reasoning for AI responses. | Users are more likely to trust a system if they can understand how decisions are made. | -| Accountability | People should be accountable for AI systems. | Establish a clear process for auditing and improving AI decisions. | Enables ongoing improvement and corrective measures in case of mistakes. | +| Accountability | People should be accountable for AI systems. | Establish a clear process for auditing and improving AI decisions. | Enables ongoing improvement and corrective measures in case of mistakes. | ## Assignment - + See [assignment](./python?WT.mc_id=academic-105485-koreyst) it will take you through a series of exercises from running your first chat prompts, to classifying and summarizing text and more. Notice that the assignments are available in different programming languages! ## Great Work! Continue the Journey After completing this lesson, check out our [Generative AI Learning collection](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) to continue leveling up your Generative AI knowledge! -Head over to Lesson 8 to see how you can start [building search applications](../08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst)! +Head over to Lesson 8 to see how you can start [building search applications](../08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst)! diff --git a/07-building-chat-applications/translations/cn/README.md b/07-building-chat-applications/translations/cn/README.md index d7a06f2dc..4ae96a8aa 100644 --- a/07-building-chat-applications/translations/cn/README.md +++ b/07-building-chat-applications/translations/cn/README.md @@ -1,8 +1,8 @@ # 第七章:创建聊天应用 -[![Building Generative AI-Powered Chat Applications](../../images/07-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/Kw4i-tlKMrQ?WT.mc_id=academic-105485-koreyst) +[![Building Generative AI-Powered Chat Applications](../../images/07-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=57a31949-67c5-4020-8c85-91e4995589f3?WT.mc_id=academic-105485-koreyst) -> *(点击该图片看本章导学视频)* +> _(点击该图片看本章导学视频)_ 通过之前的学习,我们了解了如何构建文本生成应用程序,接下来让我们看看聊天应用程序是如何实现的 @@ -44,14 +44,12 @@ 下表概述了主要差异和相似之处,以帮助我们了解它们在数字通信中的独特作用。 - - -| 传统聊天机器人 | 生成式人工智能驱动的人工智能 | -| ------------------------------------- | -------------------------------------- | -| 以任务为中心、基于预定义规则 | 情境感知 | -| 集成到大型的行业系统中 | 可以托管一个或多个聊天机器人 | -| 通过编程实现 | 结合生成式人工智能模型 | -| 专业相对固化的交互 | 能够进行更开放关于专业领域讨论 | +| 传统聊天机器人 | 生成式人工智能驱动的人工智能 | +| ---------------------------- | ------------------------------ | +| 以任务为中心、基于预定义规则 | 情境感知 | +| 集成到大型的行业系统中 | 可以托管一个或多个聊天机器人 | +| 通过编程实现 | 结合生成式人工智能模型 | +| 专业相对固化的交互 | 能够进行更开放关于专业领域讨论 | ### 结合成熟的 SDK 和 API 构建生成式人工智能驱动的人工智能 @@ -110,7 +108,7 @@ AuthenticationError: No API key provided. You can set your API key in code using ### 辅助功能 - 无论用户是否有视觉、听觉、运动或认知障碍,设计良好的聊天应用程序都应该可供所有人使用。 以下列表详细列出了旨在增强各种用户障碍的可访问性的特定功能。 +无论用户是否有视觉、听觉、运动或认知障碍,设计良好的聊天应用程序都应该可供所有人使用。 以下列表详细列出了旨在增强各种用户障碍的可访问性的特定功能。 - **针对视觉障碍的功能**:高对比度主题和可调整大小的文本、屏幕阅读器兼容性。 - **针对听觉障碍的功能**:文本转语音和语音转文本功能、音频通知的视觉提示。 @@ -134,7 +132,7 @@ AuthenticationError: No API key provided. You can set your API key in code using 例如,医疗查询很复杂并且需要大量上下文。 当医疗专业人员诊断患者时,它会基于多种因素,例如生活方式或既往病史,甚至可能依赖最近的医学期刊来验证他们的诊断。 在这种微妙的场景中,通用的人工智能聊天应用程序不可能成为可靠的来源。 -### 场景:医疗应用** +### 场景:医疗应用\*\* 考虑一个聊天应用程序,旨在通过提供治疗指南、药物相互作用或最新研究结果的快速参考来帮助医生。 @@ -149,51 +147,48 @@ AuthenticationError: No API key provided. You can set your API key in code using 本节概述了“高质量”聊天应用程序的标准,其中包括捕获可操作的指标以及遵守负责任地利用人工智能技术的框架。 -### 关键指标 +### 关键指标 为了保持应用程序的高质量性能,跟踪关键指标和注意事项至关重要。 这些测量不仅可以确保应用程序的功能,还可以评估人工智能模型和用户体验的质量。 下面的列表涵盖了需要考虑的基本、人工智能和用户体验指标。 - -| 指标 | 定义 | 开发人员需要 | -| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | -| **正常运行时间** | 衡量应用程序运行和用户访问的时间。 | 您将如何最大限度地减少停机时间? | -| **响应时间** | 应用程序回复用户查询所花费的时间。 | 如何优化查询处理以缩短响应时间? | -| **精确** | 真阳性预测占阳性预测总数的比率 | 您将如何验证模型的精度? | -| **召回率(灵敏度)** | 真阳性预测与实际阳性数量的比率 | 您将如何衡量和提高召回率? | -| **F1 得分** | 精确率和召回率的调和平均值,平衡两者之间的权衡。 | 您的目标 F1 分数是多少? 您将如何平衡精确度和召回率? | -| **困惑** | 衡量模型预测的概率分布与数据实际分布的吻合程度。 | 您将如何最大程度地减少困惑? | -| **用户满意度指标** | 衡量用户对应用程序的感知。 通常通过调查捕获。 | 您多久收集一次用户反馈? 在此基础上你将如何适应? | -| **错误率** | 模型在理解或输出方面出错的比率。 | 您采取了哪些策略来降低错误率? | -| **再培训周期** | 更新模型以纳入新数据和见解的频率。 | 您多久重新训练一次模型? 是什么触发了再培训周期? | -| **异常检测** | 用于识别不符合预期行为的异常模式的工具和技术。 | 您将如何应对异常情况? | +| 指标 | 定义 | 开发人员需要 | +| -------------------- | ------------------------------------------------ | ----------------------------------------------------- | +| **正常运行时间** | 衡量应用程序运行和用户访问的时间。 | 您将如何最大限度地减少停机时间? | +| **响应时间** | 应用程序回复用户查询所花费的时间。 | 如何优化查询处理以缩短响应时间? | +| **精确** | 真阳性预测占阳性预测总数的比率 | 您将如何验证模型的精度? | +| **召回率(灵敏度)** | 真阳性预测与实际阳性数量的比率 | 您将如何衡量和提高召回率? | +| **F1 得分** | 精确率和召回率的调和平均值,平衡两者之间的权衡。 | 您的目标 F1 分数是多少? 您将如何平衡精确度和召回率? | +| **困惑** | 衡量模型预测的概率分布与数据实际分布的吻合程度。 | 您将如何最大程度地减少困惑? | +| **用户满意度指标** | 衡量用户对应用程序的感知。 通常通过调查捕获。 | 您多久收集一次用户反馈? 在此基础上你将如何适应? | +| **错误率** | 模型在理解或输出方面出错的比率。 | 您采取了哪些策略来降低错误率? | +| **再培训周期** | 更新模型以纳入新数据和见解的频率。 | 您多久重新训练一次模型? 是什么触发了再培训周期? | +| **异常检测** | 用于识别不符合预期行为的异常模式的工具和技术。 | 您将如何应对异常情况? | ### 在聊天应用程序中实施负责任的人工智能实践 Microsoft 的 Responsible AI 方法确定了指导 AI 开发和使用的六项原则。 以下是聊天开发人员应该考虑的原则、定义以及聊天开发人员应该考虑的事项以及为什么他们应该认真对待它们。 -| 原则| 微软的定义| 聊天开发人员的注意事项 | 为什么它很重要 | -| ---------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| 公平| 人工智能系统应该公平对待所有人。 | 确保聊天应用程序不会根据用户数据进行歧视。 | 在用户之间建立信任和包容性; 避免法律后果。 | -| 可靠性和安全性| 人工智能系统应该可靠、安全地运行。 | 实施测试和故障保护以最大限度地减少错误和风险。 | 确保用户满意度并防止潜在危害。 | -| 隐私与安全 | 人工智能系统应该安全并尊重隐私。 | 实施强有力的加密和数据保护措施。 | 保护敏感的用户数据并遵守隐私法。 | -| 包容性| 人工智能系统应该赋予每个人力量并吸引人们。 | 设计适合不同受众且易于使用的 UI/UX。 | 确保更广泛的人可以有效地使用该应用程序。 | -| 透明度 | 人工智能系统应该是可以理解的。 | 为人工智能响应提供清晰的文档和推理。 | 如果用户能够理解决策的制定方式,他们就更有可能信任系统。 | -| 问责制 | 人们应该对人工智能系统负责。 | 建立清晰的审核和改进人工智能决策的流程。 | 允许持续改进并在出现错误时采取纠正措施。 | +| 原则 | 微软的定义 | 聊天开发人员的注意事项 | 为什么它很重要 | +| -------------- | ------------------------------------------ | ---------------------------------------------- | -------------------------------------------------------- | +| 公平 | 人工智能系统应该公平对待所有人。 | 确保聊天应用程序不会根据用户数据进行歧视。 | 在用户之间建立信任和包容性; 避免法律后果。 | +| 可靠性和安全性 | 人工智能系统应该可靠、安全地运行。 | 实施测试和故障保护以最大限度地减少错误和风险。 | 确保用户满意度并防止潜在危害。 | +| 隐私与安全 | 人工智能系统应该安全并尊重隐私。 | 实施强有力的加密和数据保护措施。 | 保护敏感的用户数据并遵守隐私法。 | +| 包容性 | 人工智能系统应该赋予每个人力量并吸引人们。 | 设计适合不同受众且易于使用的 UI/UX。 | 确保更广泛的人可以有效地使用该应用程序。 | +| 透明度 | 人工智能系统应该是可以理解的。 | 为人工智能响应提供清晰的文档和推理。 | 如果用户能够理解决策的制定方式,他们就更有可能信任系统。 | +| 问责制 | 人们应该对人工智能系统负责。 | 建立清晰的审核和改进人工智能决策的流程。 | 允许持续改进并在出现错误时采取纠正措施。 | ## 作业 - + 请查看[作业](../../python?WT.mc_id=academic-105485-koreyst),它将引导您完成一系列练习,从运行第一个聊天提示到对文本进行分类和总结等等。 ## Great Work! Continue the Journey Want to learn more about creating chat applications with Generative AI? 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 8 to see how you can start [building search applications](/08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst)! - +Head over to Lesson 8 to see how you can start [building search applications](/08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst)! ## 继续学习 想要了解有关创建聊天应用的更多信息? 转至[进阶学习的页面](../../../13-continued-learning/translations/cn/README.md?WT.mc_id=academic-105485-koreyst) 查找有关此主章节的其他学习资源。 -前往第八章,我们将学习[构建搜索应用程序](../../../08-building-search-applications/translations/cn/README.md?WT.mc_id=academic-105485-koreyst) - +前往第八章,我们将学习[构建搜索应用程序](../../../08-building-search-applications/translations/cn/README.md?WT.mc_id=academic-105485-koreyst) diff --git a/07-building-chat-applications/translations/ja-jp/README.md b/07-building-chat-applications/translations/ja-jp/README.md index e62413f79..3837d5c1e 100644 --- a/07-building-chat-applications/translations/ja-jp/README.md +++ b/07-building-chat-applications/translations/ja-jp/README.md @@ -1,8 +1,8 @@ # 生成 AI を利用したチャット・アプリケーションの構築 -[![Building Generative AI-Powered Chat Applications](../..//images/07-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://youtu.be/Kw4i-tlKMrQ?WT.mc_id=academic-105485-yoterada) +[![Building Generative AI-Powered Chat Applications](../..//images/07-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=57a31949-67c5-4020-8c85-91e4995589f3?WT.mc_id=academic-105485-yoterada) -> *(上記の画像をクリックすると、レッスン・ビデオを表示します)* +> _(上記の画像をクリックすると、レッスン・ビデオを表示します)_ テキスト生成アプリの構築方法を見てきたところで、次にチャット・アプリケーションについて考えてみましょう。 @@ -11,7 +11,7 @@ 解答が必要な質問は下記の通りです。 - **アプリの構築** 特定のユースケースに対して、これらの AI を活用したアプリケーションを効率的に構築し、シームレスに統合するにはどうすればよいのでしょうか? -- **モニタリング** 一度デプロイした後、アプリケーションが機能面と[責任のあるAIの六つの原則](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-105485-yoterada)の準拠という観点から、高品質で稼働している状態をどのようにして監視し、検証できるでしょうか? +- **モニタリング** 一度デプロイした後、アプリケーションが機能面と[責任のある AI の六つの原則](https://www.microsoft.com/ai/responsible-ai?WT.mc_id=academic-105485-yoterada)の準拠という観点から、高品質で稼働している状態をどのようにして監視し、検証できるでしょうか? 自動化が進み、人間と機械が連続でやり取りする時代に突入する中で、生成 AI がチャット・アプリケーションの範囲、深さ、そして適応力をどう変化させるのかを理解するのが重要です。このレッスンでは、これらの複雑なシステムを支えるアーキテクチャを検討し、ドメイン(業種・業界)固有のタスクに合わせてそれらを微調整する方法を考えます。さらに、責任ある AI のデプロイを確実にするための指標と検討内容を学びます。 @@ -44,12 +44,12 @@ 下記の表に、デジタルコミュニケーションにおける、各役割を把握する為の主な違いと共通点をまとめています。 -| チャット・ボット | 生成 AI を搭載したチャットアプリケーション | -| ------------------------------------- | -------------------------------------- | -| タスク中心でルールベース | 文脈(コンテキスト)を理解する | -| 大規模システムへの統合が多い | 1つまたは複数のチャット・ボットをホスト可能 | -| プログラムされた機能に限定 | 生成 AI モデルを搭載 | -| 専門的で構造化された対話を行う | オープン・ドメインでの議論が可能 (特定のトピックや領域に限定しない) | +| チャット・ボット | 生成 AI を搭載したチャットアプリケーション | +| ------------------------------ | ------------------------------------------------------------------- | +| タスク中心でルールベース | 文脈(コンテキスト)を理解する | +| 大規模システムへの統合が多い | 1 つまたは複数のチャット・ボットをホスト可能 | +| プログラムされた機能に限定 | 生成 AI モデルを搭載 | +| 専門的で構造化された対話を行う | オープン・ドメインでの議論が可能 (特定のトピックや領域に限定しない) | ### SDK と API を活用した既存機能の利用 @@ -78,12 +78,12 @@ chat_completion = client.chat.completions.create(model="gpt-3.5-turbo", messages 上記の例では、GPT-3.5 Turbo モデルを使用してプロンプトを作成していますが、その前に API キーを設定している点にご注意ください。キーを設定しなかった場合は、下記のエラーが表示されます。 ```output -AuthenticationError: No API key provided. -You can set your API key in code using 'openai.api_key = ', -or you can set the environment variable OPENAI_API_KEY=). -If your API key is stored in a file, you can point the openai module -at it with 'openai.api_key_path = '. -You can generate API keys in the OpenAI web interface. +AuthenticationError: No API key provided. +You can set your API key in code using 'openai.api_key = ', +or you can set the environment variable OPENAI_API_KEY=). +If your API key is stored in a file, you can point the openai module +at it with 'openai.api_key_path = '. +You can generate API keys in the OpenAI web interface. See https://platform.openai.com/account/api-keys for details. ``` @@ -102,11 +102,11 @@ See https://platform.openai.com/account/api-keys for details. > [!TIP] > 訳者追記 > システムの問い> ChatGPT がより適切な回答を提供するために、あなたに関する情報を教えてください? -> -> 利用者の入力> 私は、大規模な上場ソフトウェア企業で上級職に就いています。2008年からテクノロジーの専門家として活動しており、ソフトウェアエンジニアリングの修士号を持っており、熟練したプログラマーです。また、パートタイムでコンピュータサイエンスの教授も務めています。 -> -> システムの問い> ChatGPT にどのように回答してほしいですか? -> +> +> 利用者の入力> 私は、大規模な上場ソフトウェア企業で上級職に就いています。2008 年からテクノロジーの専門家として活動しており、ソフトウェアエンジニアリングの修士号を持っており、熟練したプログラマーです。また、パートタイムでコンピュータサイエンスの教授も務めています。 +> +> システムの問い> ChatGPT にどのように回答してほしいですか? +> > 利用者の入力> ジャスミンと呼んでください。ChatGPT はいかなるトピックに対しても意見を述べます。 この「プロファイル」で、ChatGPT に Linked Lists(連結リスト)の学習計画を作成するように指示しています。ChatGPT は、利用者の過去の経験や経歴に基づいて、より詳細な学習計画が必要だと判断している点にご注意ください。 @@ -115,21 +115,21 @@ See https://platform.openai.com/account/api-keys for details. > [!TIP] > 訳者追記 -> 利用者の入力> 連結リストの学習計画を作成してください -> -> 回答> もちろんです、ジャスミン!あなたのテクノロジーとコンピュータサイエンス教育のバックグラウンドを考慮すると、基本を超えた詳細な学習計画を望まれていると思います。下記に、コンピュータサイエンスにおける連結リストを教えるための学習計画を提案します。 -> -> 学習計画:連結リストの理解と実装 -> +> 利用者の入力> 連結リストの学習計画を作成してください +> +> 回答> もちろんです、ジャスミン!あなたのテクノロジーとコンピュータサイエンス教育のバックグラウンドを考慮すると、基本を超えた詳細な学習計画を望まれていると思います。下記に、コンピュータサイエンスにおける連結リストを教えるための学習計画を提案します。 +> +> 学習計画:連結リストの理解と実装 +> > 所要時間 -> 1.5時間 -> +> 1.5 時間 +> > 目標 > このレッスンの終わりまでに、生徒は連結リストの概念を理解し、プログラミング言語でそれを実装し、連結リストを用いて問題を解決できるようになる。 ### 大規模言語モデル用の Microsoft のシステム・メッセージ・フレームワーク -Microsoftは、大規模言語モデル(LLM)からの回答を生成する際に、効果的なシステムメッセージを作成するための[ガイダンス](https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-the-models-output-format?WT.mc_id=academic-105485-yoterada)を提供しています。これは以下の 4 つの領域に分類できます: +Microsoft は、大規模言語モデル(LLM)からの回答を生成する際に、効果的なシステムメッセージを作成するための[ガイダンス](https://learn.microsoft.com/azure/ai-services/openai/concepts/system-message#define-the-models-output-format?WT.mc_id=academic-105485-yoterada)を提供しています。これは以下の 4 つの領域に分類できます: 1. モデルのプロファイル、機能、制限を定義する 2. モデルの出力形式を定義する @@ -152,9 +152,9 @@ Microsoftは、大規模言語モデル(LLM)からの回答を生成する - **DSL モデルの活用**:DSL はドメイン固有言語を意味します。ドメインの概念やシナリオを理解するために、特定のドメイン向けにトレーニングした DSL モデルを活用できます。 - **ファインチューニングの適用**:ファイン・チューニングとは、特定のデータを用いてモデルをさらに訓練するプロセスです。 -## カスタマイズ : DSLの使用 +## カスタマイズ : DSL の使用 -ドメイン固有言語モデル(DSLモデル)を活用し、専門用語で文脈に即した内容で AI と対話できれば、利用者の関心を高められます。DSLモデルは、特定の分野、業界、または主題に関連するテキストを理解したり生成するために、訓練またはファイン・チューニングされたモデルです。DSL モデルの利用方法には、ゼロから自分で訓練する方法から、SDK や API を通じて既存のモデルを利用する方法まで様々です。また、既存の事前に訓練済みモデルを取得して、それを特定のドメインに適応させるためにファイン・チューニングするのも選択肢の一つです。 +ドメイン固有言語モデル(DSL モデル)を活用し、専門用語で文脈に即した内容で AI と対話できれば、利用者の関心を高められます。DSL モデルは、特定の分野、業界、または主題に関連するテキストを理解したり生成するために、訓練またはファイン・チューニングされたモデルです。DSL モデルの利用方法には、ゼロから自分で訓練する方法から、SDK や API を通じて既存のモデルを利用する方法まで様々です。また、既存の事前に訓練済みモデルを取得して、それを特定のドメインに適応させるためにファイン・チューニングするのも選択肢の一つです。 ## カスタマイズ:ファイン・チューニングの適用 @@ -181,18 +181,18 @@ Microsoftは、大規模言語モデル(LLM)からの回答を生成する アプリケーションを高品質で高いパフォーマンスを維持するためには、重要な指標(メトリクス)と検討事項を把握する必要があります。これらの測定は、アプリケーションの機能性を保証するだけでなく、AI モデルとユーザー・エクスペリエンスの品質を評価するためにも必要です。下記に、基本的なメトリクス、AI に関するメトリクス、ユーザー・エクスペリエンスに関するメトリクスを検討するためのリストを示します。 -| メトリック | 定義 | チャット開発者の検討事項 | -| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | -| **アップタイム** | アプリケーションが稼働し、利用者が利用可能な時間を計測します | ダウンタイムをどのようにして最小限に抑えられますか? | -| **応答時間** | アプリケーションが利用者からの問い合わせに応答するまでの時間 | クエリ処理をどのように最適化し、応答時間を改善できますか? | -| **Precision(精度)** | 真陽性予測の割合を、陽性予測の総数で割ったもの 

(訳者による追記:モデルで提供される正しい出力の数 (真陽性) と、陽性サンプルの総数 (真陽性+偽陽性) を比較 [ご参考:What Is a Confusion Matrix in Machine Learning?](https://plat.ai/blog/confusion-matrix-in-machine-learning/)) | モデルの精度をどのように確認しますか? | -| **Recall (再現率) (Sensitivity)** | 真陽性予測の数を実際の真の数で割った比率

(訳者による追記:真の値の総数に対する、正しく分類された陽性サンプル(TP)の数の比率として計算 [ご参考:What Is a Confusion Matrix in Machine Learning?](https://plat.ai/blog/confusion-matrix-in-machine-learning/)) | Recall をどのように測定し、改善しますか? | -| **F1 スコア** | 精度と再現率の調和平均で、両者のバランスを示します

(訳者による追記:
F1 = 2*((Precision*Recall)/(Precision+Recall))
FスコアまたはFメジャーは、テストの精度の尺度です。これは、テストの精度と再現率から計算され、精度は真陽性の結果の数を、正しく識別されなかったものを含むすべての陽性結果の数で割った値であり、再現率は、真陽性の結果の数を、陽性として識別されたすべてのサンプルの数で割った値です。) | 目指すF1スコアは何ですか?精度と再現率のバランスをどのように調整しますか? | -| **Perplexity** | モデルが予測した確率分布が、データの実際の分布とどれだけ一致しているかを計測します。

(訳者追記:
[ご参考: Wikipedia パープレキシティ](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%83%97%E3%83%AC%E3%82%AD%E3%82%B7%E3%83%86%E3%82%A3)) | Perplexity をどのように最小限に抑えますか? | -| **利用者満足度指標** | アプリケーションに対する利用者の評価を計測します。主にアンケートを通じて収集します | ユーザーフィードバックはどのくらいの頻度で収集しますか?それに基づいてどのように改善策を立てますか? | -| **エラー発生率** | モデルが理解や出力で間違いを犯す割合 | エラー発生率を減らすための戦略は何ですか? | -| **再トレーニングサイクル** | 新しいデータや知見を取り入れてモデルを更新する頻度 | どのくらいの頻度でモデルを再トレーニングしますか?再トレーニングサイクルを開始するトリガーは何ですか? | -| **異常検出** | 期待する動作に適合しない異常なパターンを識別するためのツールと手法 | 異常が発生した際にどのように対応しますか? | +| メトリック | 定義 | チャット開発者の検討事項 | +| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| **アップタイム** | アプリケーションが稼働し、利用者が利用可能な時間を計測します | ダウンタイムをどのようにして最小限に抑えられますか? | +| **応答時間** | アプリケーションが利用者からの問い合わせに応答するまでの時間 | クエリ処理をどのように最適化し、応答時間を改善できますか? | +| **Precision(精度)** | 真陽性予測の割合を、陽性予測の総数で割ったもの 

(訳者による追記:モデルで提供される正しい出力の数 (真陽性) と、陽性サンプルの総数 (真陽性+偽陽性) を比較 [ご参考:What Is a Confusion Matrix in Machine Learning?](https://plat.ai/blog/confusion-matrix-in-machine-learning/)) | モデルの精度をどのように確認しますか? | +| **Recall (再現率) (Sensitivity)** | 真陽性予測の数を実際の真の数で割った比率

(訳者による追記:真の値の総数に対する、正しく分類された陽性サンプル(TP)の数の比率として計算 [ご参考:What Is a Confusion Matrix in Machine Learning?](https://plat.ai/blog/confusion-matrix-in-machine-learning/)) |   Recall をどのように測定し、改善しますか? | +| **F1 スコア** | 精度と再現率の調和平均で、両者のバランスを示します

(訳者による追記:
F1 = 2*((Precision*Recall)/(Precision+Recall))
F スコアまたは F メジャーは、テストの精度の尺度です。これは、テストの精度と再現率から計算され、精度は真陽性の結果の数を、正しく識別されなかったものを含むすべての陽性結果の数で割った値であり、再現率は、真陽性の結果の数を、陽性として識別されたすべてのサンプルの数で割った値です。) | 目指す F1 スコアは何ですか?精度と再現率のバランスをどのように調整しますか? | +| **Perplexity** | モデルが予測した確率分布が、データの実際の分布とどれだけ一致しているかを計測します。

(訳者追記:
[ご参考: Wikipedia パープレキシティ](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%83%97%E3%83%AC%E3%82%AD%E3%82%B7%E3%83%86%E3%82%A3)) | Perplexity をどのように最小限に抑えますか? | +| **利用者満足度指標** | アプリケーションに対する利用者の評価を計測します。主にアンケートを通じて収集します | ユーザーフィードバックはどのくらいの頻度で収集しますか?それに基づいてどのように改善策を立てますか? | +| **エラー発生率** | モデルが理解や出力で間違いを犯す割合 | エラー発生率を減らすための戦略は何ですか? | +| **再トレーニングサイクル** | 新しいデータや知見を取り入れてモデルを更新する頻度 | どのくらいの頻度でモデルを再トレーニングしますか?再トレーニングサイクルを開始するトリガーは何ですか? | +| **異常検出** | 期待する動作に適合しない異常なパターンを識別するためのツールと手法 | 異常が発生した際にどのように対応しますか? | > [!TIP] > 訳者追記:Precision(精度)、Recall (再現率)、F1 スコア、Perplexity は、機械学習の分野でよく使われるメトリクスです。これらのメトリクスの詳細については、[こちら](https://docs.microsoft.com/azure/machine-learning/how-to-understand-automated-ml#classification-metrics?WT.mc_id=academic-105485-yoterada)をご覧ください。 @@ -202,14 +202,14 @@ Microsoftは、大規模言語モデル(LLM)からの回答を生成する Microsoft の責任ある AI への取り組みでは、AI の開発と利用を導く 6 つの原則を定義しています。下記に、それらの原則、定義、及びチャット開発者が検討べき事項と、その重要性について説明します。 -| 原則 | Microsoftの定義 | チャット開発者の検討事項 | 重要な理由 | -| ---------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| 公平性 | AI システムは全ての人を公平に扱うべきです | 利用者データに基づく差別がないようにチャットアプリケーションを設計します | 利用者間で信頼と包括性を築き、法的な問題を避けるためです | -| 信頼性と安全性 |AI システムは確実かつ安全に動作するべきです | エラーやリスクを最小限に抑えるためにテストとフェイルセーフを実装します | 利用者の満足度を確保し、潜在的な危険を防ぐためです | -| プライバシーとセキュリティ | AI システムは安全であり、プライバシーを尊重すべきです | 利用者データを保護するために強力な暗号化とデータ保護対策を実装します | 利用者の機密データを保護し、プライバシー法に準拠するためです | -| 包括性 | AI システムは全ての人に力を与え、人々を惹きつけるものでなければなりません | 多様な利用者がアクセスしやすく使いやすい UI/UX を設計します | 多くの人がアプリケーションを効果的に利用できるようにするためです | -| 透明性 | AI システムは理解しやすいように実装すべきです | AI の回答について明確なドキュメントと理由を提供します | 利用者は、意思決定がどのように行われるかを理解できれば、システムを信頼する可能性が高まります | -| 説明責任 | 人間は AI システムに対して説明責任を負うべきです | AI の意思決定をチェックし、改善するための明確なプロセスを確立する | ミスが発生した際、継続的な改善と修正措置を可能にするためです | +| 原則 | Microsoft の定義 | チャット開発者の検討事項 | 重要な理由 | +| -------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | +| 公平性 | AI システムは全ての人を公平に扱うべきです | 利用者データに基づく差別がないようにチャットアプリケーションを設計します | 利用者間で信頼と包括性を築き、法的な問題を避けるためです | +| 信頼性と安全性 | AI システムは確実かつ安全に動作するべきです | エラーやリスクを最小限に抑えるためにテストとフェイルセーフを実装します | 利用者の満足度を確保し、潜在的な危険を防ぐためです | +| プライバシーとセキュリティ | AI システムは安全であり、プライバシーを尊重すべきです | 利用者データを保護するために強力な暗号化とデータ保護対策を実装します | 利用者の機密データを保護し、プライバシー法に準拠するためです | +| 包括性 | AI システムは全ての人に力を与え、人々を惹きつけるものでなければなりません | 多様な利用者がアクセスしやすく使いやすい UI/UX を設計します | 多くの人がアプリケーションを効果的に利用できるようにするためです | +| 透明性 | AI システムは理解しやすいように実装すべきです | AI の回答について明確なドキュメントと理由を提供します | 利用者は、意思決定がどのように行われるかを理解できれば、システムを信頼する可能性が高まります | +| 説明責任 | 人間は AI システムに対して説明責任を負うべきです | AI の意思決定をチェックし、改善するための明確なプロセスを確立する | ミスが発生した際、継続的な改善と修正措置を可能にするためです | ## 課題 diff --git a/07-building-chat-applications/translations/pt-br/README.md b/07-building-chat-applications/translations/pt-br/README.md index 6dc55bc0b..98e7eafbe 100644 --- a/07-building-chat-applications/translations/pt-br/README.md +++ b/07-building-chat-applications/translations/pt-br/README.md @@ -2,9 +2,9 @@ ## Criando Aplicações Chat com IA Generativa -[![Building Generative AI-Powered Chat Applications](../../images/07-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/Kw4i-tlKMrQ?WT.mc_id=academic-105485-koreyst) +[![Building Generative AI-Powered Chat Applications](../../images/07-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=57a31949-67c5-4020-8c85-91e4995589f3?WT.mc_id=academic-105485-koreyst) -> *(Clique na imagem acima para ver o vídeo da lição)* +> _(Clique na imagem acima para ver o vídeo da lição)_ Agora que vimos como podemos criar aplicativos de geração de texto, vamos dar uma olhada nos aplicativos de bate-papo. @@ -47,12 +47,12 @@ Antes de nos aprofundarmos na criação de aplicativos de chat, vamos comparar ' A tabela abaixo destaca as principais diferenças e semelhanças para nos ajudar a entender seus papéis únicos na comunicação digital. -| Chatbot | Aplicação de Chat Impulsionada por IA Generativa | -| ------------------------------------- | ------------------------------------------------- | -| Focado em tarefas e baseado em regras | Consciente do contexto | -| Frequentemente integrado a sistemas maiores | Pode hospedar um ou vários chatbots | -| Limitado a funções programadas | Incorpora modelos de IA generativa | -| Interações especializadas e estruturadas | Capaz de discussões em domínio aberto | +| Chatbot | Aplicação de Chat Impulsionada por IA Generativa | +| ------------------------------------------- | ------------------------------------------------ | +| Focado em tarefas e baseado em regras | Consciente do contexto | +| Frequentemente integrado a sistemas maiores | Pode hospedar um ou vários chatbots | +| Limitado a funções programadas | Incorpora modelos de IA generativa | +| Interações especializadas e estruturadas | Capaz de discussões em domínio aberto | ### Alavancando funcionalidades pré-criadas com SDKs e APIs @@ -159,38 +159,39 @@ Esta seção delineia os critérios para aplicações de chat consideradas "de a Para manter o desempenho de alta qualidade de uma aplicação, é essencial acompanhar métricas-chave e considerações. Essas medições não apenas garantem a funcionalidade da aplicação, mas também avaliam a qualidade do modelo de IA e a experiência do usuário. Abaixo está uma lista que abrange métricas básicas, de IA e de experiência do usuário a serem consideradas. -| Métrica | Definição | Considerações para o Desenvolvedor de Chat | -| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | -| **Tempo de Atividade (Uptime)**| Mede o tempo em que a aplicação está operacional e acessível pelos usuários. | Como você irá minimizar o tempo de inatividade? | -| **Tempo de Resposta** | O tempo que a aplicação leva para responder a uma consulta do usuário. | Como você pode otimizar o processamento de consultas para melhorar o tempo de resposta? | -| **Precisão** | A razão entre previsões verdadeiras positivas e o número total de previsões positivas. | Como você irá validar a precisão do seu modelo? | -| **Revocação (Sensibilidade)** | A razão entre previsões verdadeiras positivas e o número real de positivos. | Como você irá medir e melhorar a revocação? | -| **Escore F1** | A média harmônica de precisão e revocação, que equilibra o compromisso entre ambos. | Qual é o seu Escore F1 alvo? Como você irá equilibrar precisão e revocação? | -| **Perplexidade** | Mede quão bem a distribuição de probabilidade prevista pelo modelo se alinha com a distribuição real dos dados. | Como você irá minimizar a perplexidade? | -| **Métricas de Satisfação do Usuário** | Mede a percepção do usuário em relação à aplicação. Frequentemente capturado por meio de pesquisas. | Com que frequência você irá coletar feedback do usuário? Como você irá se adaptar a isso? | -| **Taxa de Erro** | A taxa na qual o modelo comete erros na compreensão ou saída. | Quais estratégias você tem para reduzir as taxas de erro? | -| **Ciclos de Retreinamento** | A frequência com que o modelo é atualizado para incorporar novos dados e insights. | Com que frequência você irá retrainer o modelo? O que desencadeia um ciclo de retratamento? | -| **Detecção de Anomalias** | Ferramentas e técnicas para identificar padrões incomuns que não seguem o comportamento esperado. | Como você irá responder a anomalias? | - | +| Métrica | Definição | Considerações para o Desenvolvedor de Chat | +| ------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| **Tempo de Atividade (Uptime)** | Mede o tempo em que a aplicação está operacional e acessível pelos usuários. | Como você irá minimizar o tempo de inatividade? | +| **Tempo de Resposta** | O tempo que a aplicação leva para responder a uma consulta do usuário. | Como você pode otimizar o processamento de consultas para melhorar o tempo de resposta? | +| **Precisão** | A razão entre previsões verdadeiras positivas e o número total de previsões positivas. | Como você irá validar a precisão do seu modelo? | +| **Revocação (Sensibilidade)** | A razão entre previsões verdadeiras positivas e o número real de positivos. | Como você irá medir e melhorar a revocação? | +| **Escore F1** | A média harmônica de precisão e revocação, que equilibra o compromisso entre ambos. | Qual é o seu Escore F1 alvo? Como você irá equilibrar precisão e revocação? | +| **Perplexidade** | Mede quão bem a distribuição de probabilidade prevista pelo modelo se alinha com a distribuição real dos dados. | Como você irá minimizar a perplexidade? | +| **Métricas de Satisfação do Usuário** | Mede a percepção do usuário em relação à aplicação. Frequentemente capturado por meio de pesquisas. | Com que frequência você irá coletar feedback do usuário? Como você irá se adaptar a isso? | +| **Taxa de Erro** | A taxa na qual o modelo comete erros na compreensão ou saída. | Quais estratégias você tem para reduzir as taxas de erro? | +| **Ciclos de Retreinamento** | A frequência com que o modelo é atualizado para incorporar novos dados e insights. | Com que frequência você irá retrainer o modelo? O que desencadeia um ciclo de retratamento? | +| **Detecção de Anomalias** | Ferramentas e técnicas para identificar padrões incomuns que não seguem o comportamento esperado. | Como você irá responder a anomalias? | +| | + ### Implementando Práticas de IA Responsável em Aplicações de Chat A abordagem da Microsoft para a IA Responsável identificou seis princípios que devem orientar o desenvolvimento e uso de IA. Abaixo estão os princípios, suas definições e o que um desenvolvedor de chat deve considerar e por que deve levar isso a sério. -| Princípios | Definição pela Microsoft | Considerações para o Desenvolvedor de Chat | Por que é Importante | -| ----------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| Justiça | Sistemas de IA devem tratar todas as pessoas de forma justa. | Garantir que a aplicação de chat não discrimine com base nos dados do usuário. | Construir confiança e inclusividade entre os usuários; evita ramificações legais. | -| Confiabilidade e Segurança | Sistemas de IA devem ter desempenho confiável e seguro. | Implementar testes e mecanismos de segurança para minimizar erros e riscos. | Garante satisfação do usuário e evita possíveis danos. | -| Privacidade e Segurança | Sistemas de IA devem ser seguros e respeitar a privacidade. | Implementar criptografia forte e medidas de proteção de dados. | Proteger dados sensíveis do usuário e cumprir leis de privacidade. | -| Inclusividade | Sistemas de IA devem capacitar todos e envolver as pessoas. | Projetar uma interface acessível e fácil de usar para diversos públicos. | Garante que uma variedade maior de pessoas possa usar a aplicação de forma eficaz. | -| Transparência | Sistemas de IA devem ser compreensíveis. | Fornecer documentação clara e justificativa para as respostas da IA. | Os usuários têm mais probabilidade de confiar em um sistema se puderem entender como são tomadas as decisões. | -| Responsabilidade | As pessoas devem ser responsáveis pelos sistemas de IA. | Estabelecer um processo claro para auditoria e melhoria das decisões de IA. | Possibilita melhorias contínuas e medidas corretivas em caso de erros. | +| Princípios | Definição pela Microsoft | Considerações para o Desenvolvedor de Chat | Por que é Importante | +| -------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------- | +| Justiça | Sistemas de IA devem tratar todas as pessoas de forma justa. | Garantir que a aplicação de chat não discrimine com base nos dados do usuário. | Construir confiança e inclusividade entre os usuários; evita ramificações legais. | +| Confiabilidade e Segurança | Sistemas de IA devem ter desempenho confiável e seguro. | Implementar testes e mecanismos de segurança para minimizar erros e riscos. | Garante satisfação do usuário e evita possíveis danos. | +| Privacidade e Segurança | Sistemas de IA devem ser seguros e respeitar a privacidade. | Implementar criptografia forte e medidas de proteção de dados. | Proteger dados sensíveis do usuário e cumprir leis de privacidade. | +| Inclusividade | Sistemas de IA devem capacitar todos e envolver as pessoas. | Projetar uma interface acessível e fácil de usar para diversos públicos. | Garante que uma variedade maior de pessoas possa usar a aplicação de forma eficaz. | +| Transparência | Sistemas de IA devem ser compreensíveis. | Fornecer documentação clara e justificativa para as respostas da IA. | Os usuários têm mais probabilidade de confiar em um sistema se puderem entender como são tomadas as decisões. | +| Responsabilidade | As pessoas devem ser responsáveis pelos sistemas de IA. | Estabelecer um processo claro para auditoria e melhoria das decisões de IA. | Possibilita melhorias contínuas e medidas corretivas em caso de erros. | ## Tarefa - + Veja a [tarefa](../../python?WT.mc_id=academic-105485-koreyst) que o levará por uma série de exercícios, desde a execução de seus primeiros prompts de chat até a classificação e resumo de texto e muito mais. ## Excelente Trabalho! Continue no Aprendizado! Depois de concluir esta lição, confira nossa [coleção de aprendizado de IA generativa](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) para continuar a aprimorar seus conhecimentos sobre IA generativa! -Agora, vamos seguir para a Lição 8 para ver como você pode começar a [criar aplicativos de pesquisa](../../../08-building-search-applications/translations/pt-br/README.md?WT.mc_id=academic-105485-koreyst)! \ No newline at end of file +Agora, vamos seguir para a Lição 8 para ver como você pode começar a [criar aplicativos de pesquisa](../../../08-building-search-applications/translations/pt-br/README.md?WT.mc_id=academic-105485-koreyst)! diff --git a/10-building-low-code-ai-applications/README.md b/10-building-low-code-ai-applications/README.md index 5bdc16a38..dd73aa51d 100644 --- a/10-building-low-code-ai-applications/README.md +++ b/10-building-low-code-ai-applications/README.md @@ -1,8 +1,8 @@ # Building Low Code AI Applications -[![Building Low Code AI Applications](./images/10-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/XX8491SAF44?WT.mc_id=academic-105485-koreyst) +[![Building Low Code AI Applications](./images/10-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=170c6cb7-3c96-40f2-a354-b6f0ec523de7?WT.mc_id=academic-105485-koreyst) -> *(Click the image above to view video of this lesson)* +> _(Click the image above to view video of this lesson)_ ## Introduction @@ -43,7 +43,7 @@ The tools and technologies that you will use in this lesson are: ## Generative AI in Power Platform -Enhancing low-code development and application with generative AI is a key focus area for Power Platform. The goal is to enable everyone to build AI-powered apps, sites, dashboards and automate processes with AI, *without requiring any data science expertise*. This goal is achieved by integrating generative AI into the low-code development experience in Power Platform in the form of Copilot and AI Builder. +Enhancing low-code development and application with generative AI is a key focus area for Power Platform. The goal is to enable everyone to build AI-powered apps, sites, dashboards and automate processes with AI, _without requiring any data science expertise_. This goal is achieved by integrating generative AI into the low-code development experience in Power Platform in the form of Copilot and AI Builder. ### How does this work? @@ -81,17 +81,17 @@ You will build the app using Copilot in Power Apps following the steps below: 1. Navigate to the [Power Apps](https://make.powerapps.com?WT.mc_id=academic-105485-koreyst) home screen. -1. Use the text area on the home screen to describe the app you want to build. For example, ***I want to build an app to track and manage student assignments***. Click on the **Send** button to send the prompt to the AI Copilot. +1. Use the text area on the home screen to describe the app you want to build. For example, **_I want to build an app to track and manage student assignments_**. Click on the **Send** button to send the prompt to the AI Copilot. - ![Describe the app you want to build](./images/copilot-chat-prompt-powerapps.png?WT.mc_id=academic-105485-koreyst) +![Describe the app you want to build](./images/copilot-chat-prompt-powerapps.png?WT.mc_id=academic-105485-koreyst) 1. The AI Copilot will suggest a Dataverse Table with the fields you need to store the data you want to track and some sample data. You can then customize the table to meet your needs using the AI Copilot assistant feature through conversational steps. - > **Important**: Dataverse is the underlying data platform for Power Platform. It is a low-code data platform for storing the app's data. It is a fully managed service that securely stores data in the Microsoft Cloud and is provisioned within your Power Platform environment. It comes with built-in data governance capabilities, such as data classification, data lineage, fine-grained access control, and more. You can learn more about Dataverse [here](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko). + > **Important**: Dataverse is the underlying data platform for Power Platform. It is a low-code data platform for storing the app's data. It is a fully managed service that securely stores data in the Microsoft Cloud and is provisioned within your Power Platform environment. It comes with built-in data governance capabilities, such as data classification, data lineage, fine-grained access control, and more. You can learn more about Dataverse [here](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko). ![Suggested fields in your new table](./images/copilot-dataverse-table-powerapps.png?WT.mc_id=academic-105485-koreyst) -1. Educators want to send emails to the students who have submitted their assignments to keep them updated on the progress of their assignments. You can use Copilot to add a new field to the table to store the student email. For example, you can use the following prompt to add a new field to the table: ***I want to add a column to store student email***. Click on the **Send** button to send the prompt to the AI Copilot. +1. Educators want to send emails to the students who have submitted their assignments to keep them updated on the progress of their assignments. You can use Copilot to add a new field to the table to store the student email. For example, you can use the following prompt to add a new field to the table: **_I want to add a column to store student email_**. Click on the **Send** button to send the prompt to the AI Copilot. ![Adding a new field](./images/copilot-new-column.png?WT.mc_id=academic-105485-koreyst) @@ -101,7 +101,7 @@ You will build the app using Copilot in Power Apps following the steps below: 1. The AI Copilot will generate a responsive Canvas app based on your description. You can then customize the app to meet your needs. -1. For educators to send emails to students, you can use Copilot to add a new screen to the app. For example, you can use the following prompt to add a new screen to the app: ***I want to add a screen to send emails to students***. Click on the **Send** button to send the prompt to the AI Copilot. +1. For educators to send emails to students, you can use Copilot to add a new screen to the app. For example, you can use the following prompt to add a new screen to the app: **_I want to add a screen to send emails to students_**. Click on the **Send** button to send the prompt to the AI Copilot. ![Adding a new screen via a prompt instruction](./images/copilot-new-screen.png?WT.mc_id=academic-105485-koreyst) @@ -131,7 +131,7 @@ Why should we use Dataverse for our startup? The standard and custom tables with Now that you know what Dataverse is and why you should use it, let's look at how you can use Copilot to create a table in Dataverse to meet the requirements of our finance team. ->**Note** : You will use this table in the next section to build an automation that will extract all the invoice information and store it in the table. +> **Note** : You will use this table in the next section to build an automation that will extract all the invoice information and store it in the table. To create a table in Dataverse using Copilot, follow the steps below: @@ -141,7 +141,7 @@ To create a table in Dataverse using Copilot, follow the steps below: ![Select new table](./images/describe-new-table.png?WT.mc_id=academic-105485-koreyst) -1. On the **Describe the new Table** screen, use the text area to describe the table you want to create. For example, ***I want to create a table to store invoice information***. Click on the **Send** button to send the prompt to the AI Copilot. +1. On the **Describe the new Table** screen, use the text area to describe the table you want to create. For example, **_I want to create a table to store invoice information_**. Click on the **Send** button to send the prompt to the AI Copilot. ![Describe the table](./images/copilot-chat-prompt-dataverse.png?WT.mc_id=academic-105485-koreyst) @@ -149,7 +149,7 @@ To create a table in Dataverse using Copilot, follow the steps below: ![Suggested Dataverse table](./images/copilot-dataverse-table.png?WT.mc_id=academic-105485-koreyst) -1. The finance team wants to send an email to the supplier to update them with the current status of their invoice. You can use Copilot to add a new field to the table to store the supplier email. For example, you can use the following prompt to add a new field to the table: ***I want to add a column to store supplier email***. Click on the **Send** button to send the prompt to the AI Copilot. +1. The finance team wants to send an email to the supplier to update them with the current status of their invoice. You can use Copilot to add a new field to the table to store the supplier email. For example, you can use the following prompt to add a new field to the table: **_I want to add a column to store supplier email_**. Click on the **Send** button to send the prompt to the AI Copilot. 1. The AI Copilot will generate a new field and you can then customize the field to meet your needs. @@ -188,9 +188,9 @@ To build a workflow that will help the finance team process invoices using the I 1. Navigate to the [Power Automate](https://make.powerautomate.com?WT.mc_id=academic-105485-koreyst) home screen. -2. Use the text area on the home screen to describe the workflow you want to build. For example, ***Process an invoice when it arrives in my mailbox***. Click on the **Send** button to send the prompt to the AI Copilot. +2. Use the text area on the home screen to describe the workflow you want to build. For example, **_Process an invoice when it arrives in my mailbox_**. Click on the **Send** button to send the prompt to the AI Copilot. - ![Copilot power automate](./images/copilot-chat-prompt-powerautomate.png?WT.mc_id=academic-105485-koreyst) + ![Copilot power automate](./images/copilot-chat-prompt-powerautomate.png?WT.mc_id=academic-105485-koreyst) 3. The AI Copilot will suggest the actions you need to perform the task you want to automate. You can click on the **Next** button to go through the next steps. @@ -204,7 +204,7 @@ To build a workflow that will help the finance team process invoices using the I 8. Remove the **Condition** action from the flow because you will not be using it. It should look like the following screenshot: - ![power automate, remove actions](./images/powerautomate-remove-actions.png?WT.mc_id=academic-105485-koreyst) + ![power automate, remove actions](./images/powerautomate-remove-actions.png?WT.mc_id=academic-105485-koreyst) 9. Click on the **Add an action** button and search for **Dataverse**. Select the **Add a new row** action. diff --git a/10-building-low-code-ai-applications/translations/cn/README.md b/10-building-low-code-ai-applications/translations/cn/README.md index efe165fc2..485051852 100644 --- a/10-building-low-code-ai-applications/translations/cn/README.md +++ b/10-building-low-code-ai-applications/translations/cn/README.md @@ -1,8 +1,8 @@ # 第十章:创建低代码的人工智能应用 -[![Building Low Code AI Applications](../../images/10-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/XX8491SAF44?WT.mc_id=academic-105485-koreyst) +[![Building Low Code AI Applications](../../images/10-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=170c6cb7-3c96-40f2-a354-b6f0ec523de7?WT.mc_id=academic-105485-koreyst) -> *(点击该图片看本章导学视频)* +> _(点击该图片看本章导学视频)_ ## 本章概述 @@ -43,7 +43,7 @@ Power Platform 为企业提供了让其团队能够通过直观的低代码或 ## Power Platform 中的生成式 AI -通过生成式 AI 增强低代码开发和应用是 Power Platform 的重点关注领域。 目标是让每个人都能够构建人工智能驱动的应用程序、网站、仪表板并利用人工智能实现流程自动化,*无需任何数据科学专业知识*。 这一目标是通过将生成式 AI 以 Copilot 和 AI Builder 的形式集成到 Power Platform 的低代码开发体验中来实现的。 +通过生成式 AI 增强低代码开发和应用是 Power Platform 的重点关注领域。 目标是让每个人都能够构建人工智能驱动的应用程序、网站、仪表板并利用人工智能实现流程自动化,_无需任何数据科学专业知识_。 这一目标是通过将生成式 AI 以 Copilot 和 AI Builder 的形式集成到 Power Platform 的低代码开发体验中来实现的。 ### 这是如何运作的? @@ -55,17 +55,17 @@ AI Builder 是 Power Platform 中提供的低代码 AI 功能,使您能够使 Copilot 适用于所有 Power Platform 产品:Power Apps、Power Automate、Power BI、Power Pages 和 Power Virtual Agent。 AI Builder 可在 Power Apps 和 Power Automate 中使用。 在本课程中,我们将重点介绍如何在 Power Apps 和 Power Automate 中使用 Copilot 和 AI Builder 为我们的教育初创公司构建解决方案。 -### Power Apps 中的 Copilot +### Power Apps 中的 Copilot 作为 Power Platform 的一部分,Power Apps 提供了一个低代码开发环境,用于构建应用程序来跟踪、管理数据并与数据交互。 它是一套应用程序开发服务,具有可扩展的数据平台以及连接到云服务和本地数据的能力。 Power Apps 允许您构建在浏览器、平板电脑和手机上运行并可以与同事共享的应用程序。 Power Apps 通过简单的界面让用户轻松进行应用程序开发,以便每个业务用户或专业开发人员都可以构建自定义应用程序。 通过 Copilot 的生成式 AI 也增强了应用程序开发体验。 -Power Apps 中的 Copilot AI 助手功能使您能够描述您需要哪种类型的应用程序以及您希望应用程序跟踪、收集或显示哪些信息。 然后,Copilot 根据您的描述生成响应式 Canvas 应用程序。 然后,您可以自定义应用程序以满足您的需求。 AI Copilot 还会生成并建议一个 Dataverse 表,其中包含存储要跟踪的数据和一些示例数据所需的字段。 稍后我们将在本章中了解什么是 Dataverse 以及如何在 Power Apps 中使用它。 然后,您可以通过对话步骤使用 AI Copilot 助手功能自定义表格以满足您的需求。 通过 Power Apps 主屏幕轻松使用此功能。 +Power Apps 中的 Copilot AI 助手功能使您能够描述您需要哪种类型的应用程序以及您希望应用程序跟踪、收集或显示哪些信息。 然后,Copilot 根据您的描述生成响应式 Canvas 应用程序。 然后,您可以自定义应用程序以满足您的需求。 AI Copilot 还会生成并建议一个 Dataverse 表,其中包含存储要跟踪的数据和一些示例数据所需的字段。 稍后我们将在本章中了解什么是 Dataverse 以及如何在 Power Apps 中使用它。 然后,您可以通过对话步骤使用 AI Copilot 助手功能自定义表格以满足您的需求。 通过 Power Apps 主屏幕轻松使用此功能。 -### Power Automate 中的 Copilot +### Power Automate 中的 Copilot 作为 Power Platform 的一部分,Power Automate 允许用户在应用程序和服务之间创建自动化工作流程。 它有助于自动化重复的业务流程,例如通信、数据收集和决策批准。 其简单的界面允许具有各种技术能力的用户(从初学者到经验丰富的开发人员)自动执行工作任务。 通过 Copilot 的生成式 AI 也增强了工作流程开发体验。 -Power Automate 中的 Copilot AI 助手功能使您能够描述您需要哪种流程以及您希望流程执行哪些操作。 然后 Copilot 根据您的描述生成流程。 然后,您可以自定义流程以满足您的需求。 AI Copilot 还会生成并建议您执行想要自动化的任务所需的操作。 我们将在本章中稍后介绍什么是流以及如何在 Power Automate 中使用它们。 然后,您可以通过对话步骤使用 AI Copilot 助手功能自定义操作以满足您的需求。 通过 Power Automate 主屏幕轻松使用此功能。 +Power Automate 中的 Copilot AI 助手功能使您能够描述您需要哪种流程以及您希望流程执行哪些操作。 然后 Copilot 根据您的描述生成流程。 然后,您可以自定义流程以满足您的需求。 AI Copilot 还会生成并建议您执行想要自动化的任务所需的操作。 我们将在本章中稍后介绍什么是流以及如何在 Power Automate 中使用它们。 然后,您可以通过对话步骤使用 AI Copilot 助手功能自定义操作以满足您的需求。 通过 Power Automate 主屏幕轻松使用此功能。 ## 作业:使用 Copilot 管理 “Our Startup” 的学生作业和发票 @@ -81,17 +81,17 @@ Power Automate 中的 Copilot AI 助手功能使您能够描述您需要哪种 1. 导航到 [Power Apps](https://make.powerapps.com?WT.mc_id=academic-105485-koreyst) 主屏幕。 -1. 使用主屏幕上的文本区域描述您要构建的应用程序。 例如,***我想构建一个应用程序来跟踪和管理学生作业***。 单击 **发送** 按钮将提示发送到 AI Copilot。 +1. 使用主屏幕上的文本区域描述您要构建的应用程序。 例如,**_我想构建一个应用程序来跟踪和管理学生作业_**。 单击 **发送** 按钮将提示发送到 AI Copilot。 - ![描述您要构建的应用程序](../../images/copilot-chat-prompt-powerapps.png?WT.mc_id=academic-105485-koreyst) +![描述您要构建的应用程序](../../images/copilot-chat-prompt-powerapps.png?WT.mc_id=academic-105485-koreyst) 1. AI Copilot 将建议一个 Dataverse 表,其中包含存储要跟踪的数据所需的字段以及一些示例数据。 然后,您可以通过对话步骤使用 AI Copilot 助手功能自定义表格以满足您的需求。 - > **重点事项**:Dataverse 是 Power Platform 的底层数据平台。 它是一个用于存储应用程序数据的低代码数据平台。 它是一项完全托管的服务,可将数据安全地存储在 Microsoft 云中,并在您的 Power Platform 环境中进行配置。 它具有内置的数据治理功能,例如数据分类、数据沿袭、细粒度访问控制等。 您可以在[此处](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko)了解有关Dataverse的更多信息。 + > **重点事项**:Dataverse 是 Power Platform 的底层数据平台。 它是一个用于存储应用程序数据的低代码数据平台。 它是一项完全托管的服务,可将数据安全地存储在 Microsoft 云中,并在您的 Power Platform 环境中进行配置。 它具有内置的数据治理功能,例如数据分类、数据沿袭、细粒度访问控制等。 您可以在[此处](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko)了解有关 Dataverse 的更多信息。 - ![新表中的建议字段](../../images/copilot-dataverse-table-powerapps.png?WT.mc_id=academic-105485-koreyst) + ![新表中的建议字段](../../images/copilot-dataverse-table-powerapps.png?WT.mc_id=academic-105485-koreyst) -2. 教育工作者希望向已提交作业的学生发送电子邮件,以便让他们了解作业的最新进度。 您可以使用 Copilot 向表中添加新字段来存储学生电子邮件。 例如,您可以使用以下提示向表中添加新字段:***我想添加一列来存储学生电子邮件***。 单击 **发送** 按钮将提示发送到 AI Copilot。 +2. 教育工作者希望向已提交作业的学生发送电子邮件,以便让他们了解作业的最新进度。 您可以使用 Copilot 向表中添加新字段来存储学生电子邮件。 例如,您可以使用以下提示向表中添加新字段:**_我想添加一列来存储学生电子邮件_**。 单击 **发送** 按钮将提示发送到 AI Copilot。 ![添加新字段](../../images/copilot-new-column.png?WT.mc_id=academic-105485-koreyst) @@ -101,7 +101,7 @@ Power Automate 中的 Copilot AI 助手功能使您能够描述您需要哪种 1. AI Copilot 将根据您的描述生成响应式 Canvas 应用程序。 然后,您可以自定义应用程序以满足您的需求。 -1. 对于要向学生发送电子邮件的教育工作者,您可以使用 Copilot 向应用程序添加新屏幕。 例如,您可以使用以下提示向应用程序添加新屏幕:***我想添加一个屏幕来向学生发送电子邮件***。 单击 **发送** 按钮将提示发送到 AI Copilot。 +1. 对于要向学生发送电子邮件的教育工作者,您可以使用 Copilot 向应用程序添加新屏幕。 例如,您可以使用以下提示向应用程序添加新屏幕:**_我想添加一个屏幕来向学生发送电子邮件_**。 单击 **发送** 按钮将提示发送到 AI Copilot。 ![Describe the app you want to build](../../images/copilot-new-screen.png?WT.mc_id=academic-105485-koreyst) @@ -113,10 +113,9 @@ Power Automate 中的 Copilot AI 助手功能使您能够描述您需要哪种 > **提升**:你刚刚构建的应用程序是一个良好的开端,但还可以改进。 通过电子邮件功能,教育工作者只能通过键入电子邮件来手动向学生发送电子邮件。 您能否使用 Copilot 构建一个自动化系统,使教育工作者能够在学生提交作业时自动向他们发送电子邮件? 您的提示是正确的提示,您可以 - ### 为 “Our Startup” 构建发票信息表 - “Our Startup” 的财务团队一直在努力跟踪发票。 他们一直使用电子表格来跟踪发票,但随着发票数量的增加,这变得难以管理。 他们要求您构建一个表来帮助他们存储、跟踪和管理收到的发票信息。 该表应用于构建一个自动化程序,提取所有发票信息并将其存储在表中。 该表还应使财务团队能够查看已支付和未支付的发票。 +“Our Startup” 的财务团队一直在努力跟踪发票。 他们一直使用电子表格来跟踪发票,但随着发票数量的增加,这变得难以管理。 他们要求您构建一个表来帮助他们存储、跟踪和管理收到的发票信息。 该表应用于构建一个自动化程序,提取所有发票信息并将其存储在表中。 该表还应使财务团队能够查看已支付和未支付的发票。 Power Platform 有一个名为 Dataverse 的底层数据平台,使您能够存储应用程序和解决方案的数据。 Dataverse 提供了一个低代码数据平台来存储应用程序的数据。 它是一项完全托管的服务,可将数据安全地存储在 Microsoft 云中,并在您的 Power Platform 环境中进行配置。 它具有内置的数据治理功能,例如数据分类、数据沿袭、细粒度访问控制等。 您可以在此处了解[有关 Dataverse 的更多信息](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko)。 @@ -132,7 +131,7 @@ Power Platform 有一个名为 Dataverse 的底层数据平台,使您能够存 现在您已经了解了 Dataverse 是什么以及为什么应该使用它,让我们看看如何使用 Copilot 在 Dataverse 中创建表来满足我们财务团队的要求。 ->**注意**:您将在下面内容中使用此表来构建自动化,该自动化将提取所有发票信息并将其存储在表中。 +> **注意**:您将在下面内容中使用此表来构建自动化,该自动化将提取所有发票信息并将其存储在表中。 要使用 Copilot 在 Dataverse 中创建表,请按照以下步骤操作: @@ -142,7 +141,7 @@ Power Platform 有一个名为 Dataverse 的底层数据平台,使您能够存 ![选择新表](../../images/describe-new-table.png?WT.mc_id=academic-105485-koreyst) -1. 在 **描述新表** 屏幕上,使用文本区域描述您要创建的表。 例如,***我想创建一个表来存储发票信息***。 单击 **发送** 按钮将提示发送到 AI Copilot。 +1. 在 **描述新表** 屏幕上,使用文本区域描述您要创建的表。 例如,**_我想创建一个表来存储发票信息_**。 单击 **发送** 按钮将提示发送到 AI Copilot。 ![描述表格](../../images/copilot-chat-prompt-dataverse.png?WT.mc_id=academic-105485-koreyst) @@ -150,7 +149,7 @@ Power Platform 有一个名为 Dataverse 的底层数据平台,使您能够存 ![建议的 Dataverse 表](../../images/copilot-dataverse-table.png?WT.mc_id=academic-105485-koreyst) -1. 财务团队希望向供应商发送电子邮件,以更新其发票的当前状态。 您可以使用 Copilot 向表中添加新字段来存储供应商电子邮件。 例如,您可以使用以下提示向表中添加新字段:***我想添加一列来存储供应商电子邮件***。 单击 **发送** 按钮将提示发送到 AI Copilot。 +1. 财务团队希望向供应商发送电子邮件,以更新其发票的当前状态。 您可以使用 Copilot 向表中添加新字段来存储供应商电子邮件。 例如,您可以使用以下提示向表中添加新字段:**_我想添加一列来存储供应商电子邮件_**。 单击 **发送** 按钮将提示发送到 AI Copilot。 1. AI Copilot 将生成一个新字段,您可以自定义该字段以满足您的需求。 @@ -189,9 +188,9 @@ Power Platform 中提供的一些预构建 AI 模型包括: 1. 导航至 [Power Automate](https://make.powerautomate.com?WT.mc_id=academic-105485-koreyst) 主屏幕。 -2. 使用主屏幕上的文本区域描述您要构建的工作流程。 例如,***当发票到达我的邮箱时对其进行处理***。 单击 **发送** 按钮将提示发送到 AI Copilot。 +2. 使用主屏幕上的文本区域描述您要构建的工作流程。 例如,**_当发票到达我的邮箱时对其进行处理_**。 单击 **发送** 按钮将提示发送到 AI Copilot。 - ![副驾驶电源自动化](../../images/copilot-chat-prompt-powerautomate.png?WT.mc_id=academic-105485-koreyst) + ![副驾驶电源自动化](../../images/copilot-chat-prompt-powerautomate.png?WT.mc_id=academic-105485-koreyst) 3. AI Copilot 将建议您执行想要自动化的任务所需的操作。 您可以单击 **下一步** 按钮来完成后续步骤。 @@ -205,7 +204,7 @@ Power Platform 中提供的一些预构建 AI 模型包括: 8. 从流程中删除 **Condition** 操作,因为您不会使用它。 它应该类似于以下屏幕截图: - ![电源自动化,删除操作](../../images/powerautomate-remove-actions.png?WT.mc_id=academic-105485-koreyst) + ![电源自动化,删除操作](../../images/powerautomate-remove-actions.png?WT.mc_id=academic-105485-koreyst) 9. 单击 **添加操作** 按钮并搜索 **Dataverse**。 选择 **添加新行** 操作。 @@ -213,20 +212,19 @@ Power Platform 中提供的一些预构建 AI 模型包括: 11. 选择您之前创建的 **表**。 例如,您可以选择 **发票信息** 表。 从上一个操作中选择动态内容以填充以下字段: - - ID - - 数量 - - 日期 - - 姓名 - - 状态 - 将 **状态** 设置为 **待处理**。 - - 供应商电子邮件 - 使用 **新电子邮件到达时** 触发器中的 **发件人** 动态内容。 + - ID + - 数量 + - 日期 + - 姓名 + - 状态 - 将 **状态** 设置为 **待处理**。 + - 供应商电子邮件 - 使用 **新电子邮件到达时** 触发器中的 **发件人** 动态内容。 - ![电源自动添加行](../../images/powerautomate-add-row.png?WT.mc_id=academic-105485-koreyst) + ![电源自动添加行](../../images/powerautomate-add-row.png?WT.mc_id=academic-105485-koreyst) 12. 完成流程后,单击 **保存** 按钮保存流程。 然后,您可以通过将带有发票的电子邮件发送到您在触发器中指定的文件夹来测试流程。 > **提升**:你刚刚构建的流程是一个好的开始,现在你需要考虑如何构建一个自动化系统,使我们的财务团队能够向供应商发送电子邮件以更新他们的当前状态 他们的发票。 您的提示:当发票状态发生变化时,流程必须运行。 - ## 在 Power Automate 中使用文本生成 AI 模型 AI Builder 中的使用 GPT AI 模型创建文本使您能够根据提示生成文本,并由 Microsoft Azure OpenAI Service 提供支持。 借助此功能,您可以将 GPT 技术合并到您的应用程序和流程中,以构建各种自动化流程和富有洞察力的应用程序。 diff --git a/10-building-low-code-ai-applications/translations/ja-jp/README.md b/10-building-low-code-ai-applications/translations/ja-jp/README.md index 07c31002b..ee32f3991 100644 --- a/10-building-low-code-ai-applications/translations/ja-jp/README.md +++ b/10-building-low-code-ai-applications/translations/ja-jp/README.md @@ -1,8 +1,8 @@ -# ローコードAIアプリケーションの構築 +# ローコード AI アプリケーションの構築 -[![Building Low Code AI Applications](../../images/10-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://youtu.be/XX8491SAF44?WT.mc_id=academic-105485-yoterada) +[![Building Low Code AI Applications](../../images/10-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=170c6cb7-3c96-40f2-a354-b6f0ec523de7?WT.mc_id=academic-105485-yoterada) -> *(上記の画像をクリックすると、レッスン・ビデオを表示します)* +> _(上記の画像をクリックすると、レッスン・ビデオを表示します)_ ## はじめに @@ -47,13 +47,13 @@ Power Platform は生成 AI を用いて、ローコード開発とアプリケ ### どのように動作するのでしょうか? -Copilot は AI アシスタントで、自然言語を使って会話形式のやり取りで要件を説明し、Power Platform のソリューションを作れます。たとえば、アプリで使用するフィールドを AI アシスタントに指示すると、アプリとそれに基づくデータモデルの両方を作成します。また、Power Automateでフローを設定する方法を指定できます。 +Copilot は AI アシスタントで、自然言語を使って会話形式のやり取りで要件を説明し、Power Platform のソリューションを作れます。たとえば、アプリで使用するフィールドを AI アシスタントに指示すると、アプリとそれに基づくデータモデルの両方を作成します。また、Power Automate でフローを設定する方法を指定できます。 アプリ画面に Copilot の機能を組み込み、利用者は、会話型のやり取りを通じて、知見が得られるようになります。 AI Builder は、Power Platform で利用可能なローコード AI 機能で、AI モデルを使用してプロセスを自動化し、結果を予測できます。AI Builder を使用すると、Dataverse や SharePoint、OneDrive、Azure などの様々なクラウド上のデータソースに接続するアプリやフローに AI を組み込めます。 -Copilotは、Power Apps、Power Automate、Power BI、Power Pages、Power Virtual Agentsといった、全 Power Platform 製品で利用できます。一方で、AI Builder は Power Apps と Power Automate で利用できます。今回のレッスンでは、Power Apps と Power Automate における Copilot と AI Builder の使用方法について、特に教育スタートアップ用のソリューション開発の観点から詳しく説明していきます。 +Copilot は、Power Apps、Power Automate、Power BI、Power Pages、Power Virtual Agents といった、全 Power Platform 製品で利用できます。一方で、AI Builder は Power Apps と Power Automate で利用できます。今回のレッスンでは、Power Apps と Power Automate における Copilot と AI Builder の使用方法について、特に教育スタートアップ用のソリューション開発の観点から詳しく説明していきます。 ### Power Apps における Copilot @@ -83,25 +83,25 @@ Copilot を使い始める際には、[Power Platform Copilot Prompt Library](ht 1. ホーム画面のテキストエリアに、作成したいアプリを説明します。例えば、「**学生の課題を追跡し管理するアプリを作成してください**」と入力します。「**Send**」ボタンをクリックして、プロンプトを AI Copilot に送信します。 - ![Describe the app you want to build](../../images/copilot-chat-prompt-powerapps.png?WT.mc_id=academic-105485-yoterada) +![Describe the app you want to build](../../images/copilot-chat-prompt-powerapps.png?WT.mc_id=academic-105485-yoterada) 1. AI Copilot は、追跡したいデータを保存するために必要なフィールドとサンプルデータを持つ Dataverse テーブルの作成を提案します。その後、会話でのやり取りを通じ AI Copilot のアシスタント機能を使用して、テーブルを自分のニーズに合わせてカスタマイズできます。 - > **重要**:Dataverse は Power Platform の基盤となるデータプラットフォームで、アプリのデータを保存するためのローコード・データ・プラットフォームです。Microsoft Cloud 上にデータを安全に保存する、完全にマネージドなサービスで、Power Platform 環境内でプロビジョニングできます。データ分類、データ系統、きめ細やかなアクセス制御など、組み込みのデータガバナンス機能が付属しています。Dataverse については[こちら](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-yoterada)から詳しく学ぶべます。 + > **重要**:Dataverse は Power Platform の基盤となるデータプラットフォームで、アプリのデータを保存するためのローコード・データ・プラットフォームです。Microsoft Cloud 上にデータを安全に保存する、完全にマネージドなサービスで、Power Platform 環境内でプロビジョニングできます。データ分類、データ系統、きめ細やかなアクセス制御など、組み込みのデータガバナンス機能が付属しています。Dataverse については[こちら](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-yoterada)から詳しく学ぶべます。 ![Suggested fields in your new table](../../images/copilot-dataverse-table-powerapps.png?WT.mc_id=academic-105485-yoterada) -1. 教育者は、課題を提出した学生に進行状況を伝えるためにメールを送りたいと考えています。その為に、Copilotを使用して、学生のメールアドレスを保存する新しいフィールドをテーブルに追加できます。例えば、「**学生のメールを保存する列を追加してください**」というプロンプトを使用して、新しいフィールドを追加できます。「**Send**」ボタンをクリックして、プロンプトを AI Copilot に送信します。 +1. 教育者は、課題を提出した学生に進行状況を伝えるためにメールを送りたいと考えています。その為に、Copilot を使用して、学生のメールアドレスを保存する新しいフィールドをテーブルに追加できます。例えば、「**学生のメールを保存する列を追加してください**」というプロンプトを使用して、新しいフィールドを追加できます。「**Send**」ボタンをクリックして、プロンプトを AI Copilot に送信します。 ![Adding a new field](../../images/copilot-new-column.png?WT.mc_id=academic-105485-yoterada) -1. AI Copilot は新しいフィールドを生成し、その後、フィールドを自身のニーズに合わせてカスタマイズできます。 +1. AI Copilot は新しいフィールドを生成し、その後、フィールドを自身のニーズに合わせてカスタマイズできます。 1. テーブルが完成した後、「**Create app**」ボタンをクリックしてアプリを作成します。 1. AI Copilot は記述内容に基づいてレスポンシブな Canvas アプリを生成します。その後、アプリを自分のニーズに合わせてカスタマイズできます。 -1. 教育者が学生にメールを送るために、Copilotを使用してアプリに新しい画面を追加できます。例えば、次のプロンプトを使用してアプリに新しい画面を追加できます:「***学生にメールを送る画面を追加してください***」そして「**Send**」ボタンをクリックして、プロンプトを AI Copilot に送信します。 +1. 教育者が学生にメールを送るために、Copilot を使用してアプリに新しい画面を追加できます。例えば、次のプロンプトを使用してアプリに新しい画面を追加できます:「**_学生にメールを送る画面を追加してください_**」そして「**Send**」ボタンをクリックして、プロンプトを AI Copilot に送信します。 ![Adding a new screen via a prompt instruction](../../images/copilot-new-screen.png?WT.mc_id=academic-105485-yoterada) @@ -131,9 +131,9 @@ Power Platform には、アプリやソリューションのデータを保存 Dataverse とは何か、そしてその利点を理解したところで、Copilot を使って Dataverse でテーブルを作成し、財務チームの要件を満たすテーブル作成方法を見ていきましょう。 ->**注**:次のセクションでは、このテーブルを使って、すべての請求書情報を抽出し、そこからテーブルに保存するまでの自動化処理を構築します。 +> **注**:次のセクションでは、このテーブルを使って、すべての請求書情報を抽出し、そこからテーブルに保存するまでの自動化処理を構築します。 -Copilotを使って Dataverse でテーブルを作成する手順は下記の通りです: +Copilot を使って Dataverse でテーブルを作成する手順は下記の通りです: 1. [Power Apps](https://make.powerapps.com?WT.mc_id=academic-105485-yoterada) のホーム画面に遷移します。 @@ -190,7 +190,7 @@ AI Builder の請求書処理 AI モデルを使って、財務チームが請 2. ホーム画面のテキストエリアを使って、構築したいワークフローを記述します。例えば、「メールボックスに請求書が届いたら処理を開始してください」と入力します。「送信」ボタンをクリックして、この指示を AI Copilot に送ります。 - ![Copilot power automate](../../images/copilot-chat-prompt-powerautomate.png?WT.mc_id=academic-105485-yoterada) + ![Copilot power automate](../../images/copilot-chat-prompt-powerautomate.png?WT.mc_id=academic-105485-yoterada) 3. AI Copilot は、自動化したいタスクを実行するために必要なアクションを提案します。「次へ」ボタンをクリックすると、次のステップに進めます。 @@ -204,7 +204,7 @@ AI Builder の請求書処理 AI モデルを使って、財務チームが請 8. 「条件」アクションも使用しないため、フローから削除します。次のスクリーンショットのようになります。 - ![power automate, remove actions](../../images/powerautomate-remove-actions.png?WT.mc_id=academic-105485-yoterada) + ![power automate, remove actions](../../images/powerautomate-remove-actions.png?WT.mc_id=academic-105485-yoterada) 9. 「アクションの追加」ボタンをクリックし、「Dataverse」を検索します。「新しい行の追加」アクションを選択します。 diff --git a/10-building-low-code-ai-applications/translations/pt-br/README.md b/10-building-low-code-ai-applications/translations/pt-br/README.md index 9bff41291..00bf87a15 100644 --- a/10-building-low-code-ai-applications/translations/pt-br/README.md +++ b/10-building-low-code-ai-applications/translations/pt-br/README.md @@ -1,8 +1,8 @@ # Criando Aplication de IA com Low Code -[![Building Low Code AI Applications](../../images/10-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/XX8491SAF44?WT.mc_id=academic-105485-koreyst) +[![Building Low Code AI Applications](../../images/10-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=170c6cb7-3c96-40f2-a354-b6f0ec523de7?WT.mc_id=academic-105485-koreyst) -> *(Clique na imagem acima para ver o vídeo desta lição)* +> _(Clique na imagem acima para ver o vídeo desta lição)_ ## Introdução @@ -30,7 +30,7 @@ As ferramentas e tecnologias que você usará nesta lição são: ## IA Generativa na Power Platform -O aprimoramento do desenvolvimento de low-code e aplicativos com IA generativa é uma área-chave para a Power Platform. O objetivo é permitir que todos criam aplicativos, sites, painéis e automatizem processos com IA, *sem exigir qualquer conhecimento em ciência de dados*. Esse objetivo é alcançado integrando a IA generativa na experiência de desenvolvimento de low-code na Power Platform na forma de Copilot e AI Builder. +O aprimoramento do desenvolvimento de low-code e aplicativos com IA generativa é uma área-chave para a Power Platform. O objetivo é permitir que todos criam aplicativos, sites, painéis e automatizem processos com IA, _sem exigir qualquer conhecimento em ciência de dados_. Esse objetivo é alcançado integrando a IA generativa na experiência de desenvolvimento de low-code na Power Platform na forma de Copilot e AI Builder. ### Como isso funciona? @@ -68,17 +68,17 @@ Você criará o aplicativo usando Copilot no Power Apps seguindo as etapas abaix 1. Acesse a [tela inicial do Power Apps](https://make.powerapps.com?WT.mc_id=academic-105485-koreyst). -2. Use a área de texto na tela inicial para descrever o aplicativo que deseja criar. Por exemplo, ***Quero criar um aplicativo para rastrear e gerenciar as atribuições de estudantes***. Clique no botão **Enviar** para enviar o prompt ao AI Copilot. +2. Use a área de texto na tela inicial para descrever o aplicativo que deseja criar. Por exemplo, **_Quero criar um aplicativo para rastrear e gerenciar as atribuições de estudantes_**. Clique no botão **Enviar** para enviar o prompt ao AI Copilot. ![Descreva o aplicativo que deseja criar](../../images/copilot-chat-prompt-powerapps.png?WT.mc_id=academic-105485-koreyst) 1. The AI Copilot will suggest a Dataverse Table with the fields you need to store the data you want to track and some sample data. You can then customize the table to meet your needs using the AI Copilot assistant feature through conversational steps. - > **Important**: Dataverse is the underlying data platform for Power Platform. It is a low-code data platform for storing the app's data. It is a fully managed service that securely stores data in the Microsoft Cloud and is provisioned within your Power Platform environment. It comes with built-in data governance capabilities, such as data classification, data lineage, fine-grained access control, and more. You can learn more about Dataverse [here](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko). + > **Important**: Dataverse is the underlying data platform for Power Platform. It is a low-code data platform for storing the app's data. It is a fully managed service that securely stores data in the Microsoft Cloud and is provisioned within your Power Platform environment. It comes with built-in data governance capabilities, such as data classification, data lineage, fine-grained access control, and more. You can learn more about Dataverse [here](https://docs.microsoft.com/powerapps/maker/data-platform/data-platform-intro?WT.mc_id=academic-109639-somelezediko). ![Suggested fields in your new table](../../images/copilot-dataverse-table-powerapps.png?WT.mc_id=academic-105485-koreyst) -1. Os educadores desejam enviar e-mails aos alunos que enviaram suas atribuições para mantê-los atualizados sobre o progresso de suas tarefas. Você pode usar o Copilot para adicionar um novo campo à tabela para armazenar o e-mail do aluno. Por exemplo, você pode usar o seguinte comando para adicionar um novo campo à tabela: ***Quero adicionar uma coluna para armazenar o e-mail do aluno***. Clique no botão **Enviar** para enviar o comando ao AI Copilot. +1. Os educadores desejam enviar e-mails aos alunos que enviaram suas atribuições para mantê-los atualizados sobre o progresso de suas tarefas. Você pode usar o Copilot para adicionar um novo campo à tabela para armazenar o e-mail do aluno. Por exemplo, você pode usar o seguinte comando para adicionar um novo campo à tabela: **_Quero adicionar uma coluna para armazenar o e-mail do aluno_**. Clique no botão **Enviar** para enviar o comando ao AI Copilot. ![Adicionando um novo campo](../../images/copilot-new-column.png?WT.mc_id=academic-105485-koreyst) @@ -88,7 +88,7 @@ Você criará o aplicativo usando Copilot no Power Apps seguindo as etapas abaix 1. O AI Copilot gerará um aplicativo Canvas responsivo com base na sua descrição. Você pode, então, personalizar o aplicativo conforme suas necessidades. -1. Para que os educadores possam enviar e-mails aos alunos, você pode usar o Copilot para adicionar uma nova tela ao aplicativo. Por exemplo, você pode usar o seguinte comando para adicionar uma nova tela ao aplicativo: ***Quero adicionar uma tela para enviar e-mails aos alunos***. Clique no botão **Enviar** para enviar o comando ao AI Copilot. +1. Para que os educadores possam enviar e-mails aos alunos, você pode usar o Copilot para adicionar uma nova tela ao aplicativo. Por exemplo, você pode usar o seguinte comando para adicionar uma nova tela ao aplicativo: **_Quero adicionar uma tela para enviar e-mails aos alunos_**. Clique no botão **Enviar** para enviar o comando ao AI Copilot. ![Adicionando uma nova tela via comando](../../images/copilot-new-screen.png?WT.mc_id=academic-105485-koreyst) @@ -118,7 +118,7 @@ Por que devemos usar o Dataverse para nossa startup? As tabelas padrão e person Agora que você sabe o que é o Dataverse e por que deve usá-lo, vamos ver como você pode usar o Copilot para criar uma tabela no Dataverse para atender aos requisitos de nossa equipe financeira. ->**Nota** : Você usará esta tabela na próxima seção para criar uma automação que extrairá todas as informações da fatura e as armazenará na tabela. +> **Nota** : Você usará esta tabela na próxima seção para criar uma automação que extrairá todas as informações da fatura e as armazenará na tabela. Para criar uma tabela no Dataverse usando o Copilot, siga as etapas abaixo: @@ -128,7 +128,7 @@ Para criar uma tabela no Dataverse usando o Copilot, siga as etapas abaixo: ![Selecionar nova tabela](../../images/describe-new-table.png?WT.mc_id=academic-105485-koreyst) -1. Na tela **Descrever a nova tabela**, use a área de texto para descrever a tabela que deseja criar. Por exemplo, ***Quero criar uma tabela para armazenar informações de fatura***. Clique no botão **Enviar** para enviar o comando ao AI Copilot. +1. Na tela **Descrever a nova tabela**, use a área de texto para descrever a tabela que deseja criar. Por exemplo, **_Quero criar uma tabela para armazenar informações de fatura_**. Clique no botão **Enviar** para enviar o comando ao AI Copilot. ![Descrever a tabela](../../images/copilot-chat-prompt-dataverse.png?WT.mc_id=academic-105485-koreyst) @@ -136,7 +136,7 @@ Para criar uma tabela no Dataverse usando o Copilot, siga as etapas abaixo: ![Tabela Dataverse sugerida](../../images/copilot-dataverse-table.png?WT.mc_id=academic-105485-koreyst) -1. A equipe financeira deseja enviar um e-mail ao fornecedor para atualizá-lo com o status atual de sua fatura. Você pode usar o Copilot para adicionar um novo campo à tabela para armazenar o e-mail do fornecedor. Por exemplo, você pode usar o seguinte comando para adicionar um novo campo à tabela: ***Quero adicionar uma coluna para armazenar o e-mail do fornecedor***. Clique no botão **Enviar** para enviar o comando ao AI Copilot. +1. A equipe financeira deseja enviar um e-mail ao fornecedor para atualizá-lo com o status atual de sua fatura. Você pode usar o Copilot para adicionar um novo campo à tabela para armazenar o e-mail do fornecedor. Por exemplo, você pode usar o seguinte comando para adicionar um novo campo à tabela: **_Quero adicionar uma coluna para armazenar o e-mail do fornecedor_**. Clique no botão **Enviar** para enviar o comando ao AI Copilot. 1. O AI Copilot gerará um novo campo e você poderá personalizá-lo conforme suas necessidades. @@ -175,9 +175,9 @@ Para criar um fluxo que ajudará a equipe financeira a processar faturas usando 1. Acesse a [tela inicial do Power Automate](https://make.powerautomate.com?WT.mc_id=academic-105485-koreyst). -2. Use a área de texto na tela inicial para descrever o fluxo que você deseja criar. Por exemplo, ***Processar uma fatura quando ela chegar à minha caixa de correio***. Clique no botão **Enviar** para enviar o comando ao AI Copilot. +2. Use a área de texto na tela inicial para descrever o fluxo que você deseja criar. Por exemplo, **_Processar uma fatura quando ela chegar à minha caixa de correio_**. Clique no botão **Enviar** para enviar o comando ao AI Copilot. - ![Copilot power automate](../../images/copilot-chat-prompt-powerautomate.png?WT.mc_id=academic-105485-koreyst) + ![Copilot power automate](../../images/copilot-chat-prompt-powerautomate.png?WT.mc_id=academic-105485-koreyst) 3. O AI Copilot sugerirá as ações que você precisa realizar para a tarefa que deseja automatizar. Você pode clicar no botão **Próximo** para passar para as próximas etapas. @@ -191,7 +191,7 @@ Para criar um fluxo que ajudará a equipe financeira a processar faturas usando 8. Remova a ação **Condição** do fluxo, pois você não a usará. Deve se parecer com a captura de tela a seguir: - ![Power Automate, remover ações](../../images/powerautomate-remove-actions.png?WT.mc_id=academic-105485-koreyst) + ![Power Automate, remover ações](../../images/powerautomate-remove-actions.png?WT.mc_id=academic-105485-koreyst) 9. Clique no botão **Adicionar uma ação** e pesquise por **Dataverse**. Selecione a ação **Adicionar uma nova linha**. diff --git a/12-designing-ux-for-ai-applications/README.md b/12-designing-ux-for-ai-applications/README.md index b7215cb24..23f16e286 100644 --- a/12-designing-ux-for-ai-applications/README.md +++ b/12-designing-ux-for-ai-applications/README.md @@ -1,10 +1,10 @@ # Designing UX for AI Applications -[![Designing UX for AI Applications](./images/12-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/bO7h2_hOhR0?WT.mc_id=academic-105485-koreyst) +[![Designing UX for AI Applications](./images/12-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=1464ef7a-d974-4a04-9ce3-1bc5b3087b4b?WT.mc_id=academic-105485-koreyst) -> *(Click the image above to view video of this lesson)* +> _(Click the image above to view video of this lesson)_ -User experience is a very important aspect of building apps. Users need to be able to use your app in an efficient way to perform tasks. Being efficient is one thing but you also need to design apps so that they can be used by everyone, to make them *accessible*. This chapter will focus on this area so you hopefully end up designing an app that people can and want to use. +User experience is a very important aspect of building apps. Users need to be able to use your app in an efficient way to perform tasks. Being efficient is one thing but you also need to design apps so that they can be used by everyone, to make them _accessible_. This chapter will focus on this area so you hopefully end up designing an app that people can and want to use. ## Introduction @@ -12,16 +12,16 @@ User experience is how a user interacts with and uses a specific product or serv The lesson will cover the following areas: -* Introduction to User Experience and Understanding User Needs -* Designing AI Applications for Trust and Transparency -* Designing AI Applications for Collaboration and Feedback +- Introduction to User Experience and Understanding User Needs +- Designing AI Applications for Trust and Transparency +- Designing AI Applications for Collaboration and Feedback ## Learning goals After taking this lesson, you'll be able to: -* Understand how to build AI applications that meet the user needs. -* Design AI applications that promote trust and collaboration. +- Understand how to build AI applications that meet the user needs. +- Design AI applications that promote trust and collaboration. ### Prerequisite @@ -103,13 +103,13 @@ AI applications are not perfect, therefore, they are bound to make mistakes. Whe Take any AI apps you've built so far, consider implementing the below steps in your app: -* **Pleasant:** Consider how you can make your app more pleasant. Are you adding explanations everywhere, are you encouraging the user to explore? How are you wording your error messages? +- **Pleasant:** Consider how you can make your app more pleasant. Are you adding explanations everywhere, are you encouraging the user to explore? How are you wording your error messages? -* **Usability:** Building a web app. Make sure your app is navigable by both mouse and keyboard. +- **Usability:** Building a web app. Make sure your app is navigable by both mouse and keyboard. -* **Trust and transparency:** Don't trust the AI completely and its output, consider how you would add a human to the process to verify the output. Also, consider and implement other ways to achieve trust and transparency. +- **Trust and transparency:** Don't trust the AI completely and its output, consider how you would add a human to the process to verify the output. Also, consider and implement other ways to achieve trust and transparency. -* **Control:** Give the user control of the data they provide to the application. Implement a way a user can opt-in and opt-out of data collection in the AI application. +- **Control:** Give the user control of the data they provide to the application. Implement a way a user can opt-in and opt-out of data collection in the AI application. @@ -117,4 +117,4 @@ Take any AI apps you've built so far, consider implementing the below steps in y After completing this lesson, check out our [Generative AI Learning collection](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) to continue leveling up your Generative AI knowledge! -Congratulations, you have completed this course! The building should not stop here. Hopefully, you have been inspired to start building your own Generative AI startup. Head over to the [Microsoft Founders Hub](https://aka.ms/genai-foundershub?WT.mc_id=academic-105485-koreyst) and apply for the program to receive support on your journey. \ No newline at end of file +Congratulations, you have completed this course! The building should not stop here. Hopefully, you have been inspired to start building your own Generative AI startup. Head over to the [Microsoft Founders Hub](https://aka.ms/genai-foundershub?WT.mc_id=academic-105485-koreyst) and apply for the program to receive support on your journey. diff --git a/12-designing-ux-for-ai-applications/translations/cn/README.md b/12-designing-ux-for-ai-applications/translations/cn/README.md index 0b056b2f6..a184f1608 100644 --- a/12-designing-ux-for-ai-applications/translations/cn/README.md +++ b/12-designing-ux-for-ai-applications/translations/cn/README.md @@ -1,29 +1,27 @@ # 第十二章:为人工智能应用程序添加用户体验 -[![Designing UX for AI Applications](../../images/12-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/bO7h2_hOhR0?WT.mc_id=academic-105485-koreyst) +[![Designing UX for AI Applications](../../images/12-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=1464ef7a-d974-4a04-9ce3-1bc5b3087b4b?WT.mc_id=academic-105485-koreyst) - -*(点击该图片看本章导学视频)* +_(点击该图片看本章导学视频)_ 用户体验是构建应用程序的一个非常重要的方面。 用户需要能够有效地使用您的应用程序来执行任务。 高效是一回事,但您还需要设计应用程序,以便每个人都可以使用它们,使它们“易于访问”。 本章将重点讨论这一领域,希望最终设计出一个人们可以并且想要使用的应用程序。 - ## 本章概述 用户体验是指用户如何与特定产品或服务(无论是系统、工具还是设计)进行交互和使用。 在开发人工智能应用程序时,开发人员不仅注重确保用户体验有效,而且注重道德。 在本课程中,我们将介绍如何构建满足用户需求的人工智能 (AI) 应用程序。 本课程将包含以下内容: -* 用户体验简介和了解用户需求 -* 设计人工智能应用程序以实现信任和透明度 -* 设计用于协作和反馈的人工智能应用程序 +- 用户体验简介和了解用户需求 +- 设计人工智能应用程序以实现信任和透明度 +- 设计用于协作和反馈的人工智能应用程序 ## 学习目标 学习完本课程后,您将会了解到: -* 了解如何构建满足用户需求的人工智能应用程序。 -* 设计促进信任和协作的人工智能应用程序。 +- 了解如何构建满足用户需求的人工智能应用程序。 +- 设计促进信任和协作的人工智能应用程序。 ### 先决条件 @@ -87,7 +85,6 @@ Bing 中允许用户控制应用程序的另一个功能是能够选择加入和 > 在设计人工智能应用程序时,意向性是确保用户不会过度信任对其功能设定不切实际的期望的关键。 做到这一点的一种方法是在提示和结果之间制造摩擦。 提醒用户这是人工智能而不是人类 - ## 设计用于协作和反馈的 AI 应用程序 正如前面提到的,生成式人工智能在用户和人工智能之间建立了协作。 大多数交互都是由用户输入提示,然后人工智能生成输出。 如果输出不正确怎么办? 如果发生错误,应用程序如何处理? 人工智能会责怪用户还是需要时间来解释错误? @@ -106,17 +103,16 @@ Bing 中允许用户控制应用程序的另一个功能是能够选择加入和 对于您迄今为止构建的任何 AI 应用程序,请考虑在您的应用程序中实施以下步骤: -* **满意度:** 考虑如何使您的应用程序更加令人愉快。 您是否到处添加解释,是否鼓励用户探索? 您如何措辞错误消息? - -* **可用性:** 构建网络应用程序。 确保您的应用程序可以通过鼠标和键盘进行导航。 +- **满意度:** 考虑如何使您的应用程序更加令人愉快。 您是否到处添加解释,是否鼓励用户探索? 您如何措辞错误消息? -* **信任和透明度:** 不要完全信任人工智能及其输出,考虑如何在流程中添加人员来验证输出。 此外,考虑并实施其他方法来实现信任和透明度。 +- **可用性:** 构建网络应用程序。 确保您的应用程序可以通过鼠标和键盘进行导航。 -* **可控:** 赋予用户对其提供给应用程序的数据的控制权。 实现用户可以选择加入和退出 AI 应用程序中的数据收集的方式。 +- **信任和透明度:** 不要完全信任人工智能及其输出,考虑如何在流程中添加人员来验证输出。 此外,考虑并实施其他方法来实现信任和透明度。 +- **可控:** 赋予用户对其提供给应用程序的数据的控制权。 实现用户可以选择加入和退出 AI 应用程序中的数据收集的方式。 ## 恭喜您完成本课程 想要了解更多有关为人工智能应用程序设计用户体验的信息吗? 转至[继进阶学习的页面续学习页面](../../../13-continued-learning/translations/cn/README.md?WT.mc_id=academic-105485-koreyst) 查找有关此主题的其他重要资源。 -恭喜,您已完成本课程! 你不应该学完即止。 希望您受到启发,开始创建自己的生成式人工智能初创公司。 前往 [Microsoft Founders Hub](https://aka.ms/genai-Foundershub?WT.mc_id=academic-105485-koreyst) 并申请该计划以并获得支持。 \ No newline at end of file +恭喜,您已完成本课程! 你不应该学完即止。 希望您受到启发,开始创建自己的生成式人工智能初创公司。 前往 [Microsoft Founders Hub](https://aka.ms/genai-Foundershub?WT.mc_id=academic-105485-koreyst) 并申请该计划以并获得支持。 diff --git a/12-designing-ux-for-ai-applications/translations/ja-jp/README.md b/12-designing-ux-for-ai-applications/translations/ja-jp/README.md index 7bf019a57..07dc7e717 100644 --- a/12-designing-ux-for-ai-applications/translations/ja-jp/README.md +++ b/12-designing-ux-for-ai-applications/translations/ja-jp/README.md @@ -1,8 +1,8 @@ # AI アプリケーションの UX 設計 -[![Designing UX for AI Applications](../../images/12-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://youtu.be/bO7h2_hOhR0?WT.mc_id=academic-105485-yoterada) +[![Designing UX for AI Applications](../../images/12-lesson-banner.png?WT.mc_id=academic-105485-yoterada)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=1464ef7a-d974-4a04-9ce3-1bc5b3087b4b?WT.mc_id=academic-105485-yoterada) -> *(上の画像をクリックすると、このレッスンのビデオが表示されます)* +> _(上の画像をクリックすると、このレッスンのビデオが表示されます)_ アプリを構築する際、ユーザー・エクスペリエンスは非常に重要な要素です。利用者は、タスクを効率的に実行できるようにアプリを使用する必要があります。効率性は一つの要素ですが、全ての人が使用でき、アクセスできるようにアプリを設計するのも重要です。この章では、この領域に焦点を当て、すべての利用者が使用でき、使いたくなるアプリの設計を目指します。 @@ -12,16 +12,16 @@ このレッスンでは、下記の内容について説明します。 -* ユーザー・エクスペリエンスの概要と利用者のニーズの理解 -* 信頼性と透明性のある AI アプリケーションの設計 -* コラボレーションとフィードバックを求める AI アプリケーションの設計 +- ユーザー・エクスペリエンスの概要と利用者のニーズの理解 +- 信頼性と透明性のある AI アプリケーションの設計 +- コラボレーションとフィードバックを求める AI アプリケーションの設計 ## 学習目標 このレッスンを修了すると、下記を理解できます: -* 利用者のニーズを満たす AI アプリケーションを構築する方法を理解します。 -* 信頼性とコラボレーションを促進する AI アプリケーションを設計します。 +- 利用者のニーズを満たす AI アプリケーションを構築する方法を理解します。 +- 信頼性とコラボレーションを促進する AI アプリケーションを設計します。 ### 前提 @@ -39,7 +39,7 @@ ### 信頼性 -信頼性が高いとは、アプリケーションが一貫してエラーなくタスクを実行できる状況をさします。しかし、AIも人間と同じく完全ではなく、エラーが起こる可能性があります。アプリケーションは、人間の介入や修正が必要なエラーや、予期せぬ状況に遭遇する場合もあります。では、エラーはどのように取り扱うべきでしょうか?このレッスンの最後のセクションでは、AI システムとアプリケーションが、どのようにして協力やフィードバックを設計に取り入れているかについて説明します。 +信頼性が高いとは、アプリケーションが一貫してエラーなくタスクを実行できる状況をさします。しかし、AI も人間と同じく完全ではなく、エラーが起こる可能性があります。アプリケーションは、人間の介入や修正が必要なエラーや、予期せぬ状況に遭遇する場合もあります。では、エラーはどのように取り扱うべきでしょうか?このレッスンの最後のセクションでは、AI システムとアプリケーションが、どのようにして協力やフィードバックを設計に取り入れているかについて説明します。 ### アクセシビリティ @@ -53,7 +53,7 @@ 全ての問題を AI で解決できるわけではありません。AI は、手動の作業を自動化したり、利用者体験をパーソナライズし、利用者体験を向上させる役割を果たします。 -## 信頼性と透明性のためのAIアプリケーションの設計 +## 信頼性と透明性のための AI アプリケーションの設計 AI アプリケーションを設計する際には、利用者との信頼関係の構築が重要です。信頼があると、利用者はアプリケーションがタスクを遂行し、一貫した結果を提供し、その結果が自分のニーズに合致すると確信できます。この分野でのリスクは、不信と過信です。不信感は、利用者が AI システムをほとんど信頼していない、または全く信頼していない場合に生じ、結果として利用者がアプリケーションの利用を拒否するのにつながります。一方、過信は、利用者が AI システムの能力を過大評価し、AI システムを過度に信頼する状況を指します。例えば、過信があると、自動採点システムを使う教師は、採点システムが適切に機能しているか確認するために、一部の試験を見直さない可能性があります。これにより、学生に対する不公平な評価や誤った評価が生じる可能性があるため、フィードバックや改善の機会を逃す可能性があります。 @@ -105,13 +105,13 @@ AI アプリケーションは完全ではなく、間違いを犯すのは避 これまでに構築した AI アプリを使用して、アプリに次の実装を加えてください。 -* **快適:** あなたのアプリをより使いやすくするためにどのような工夫ができるか考えてみてください。各所に説明を追加していますか?利用者が自由に探索できるように促していますか?エラーメッセージはどのように表現していますか? +- **快適:** あなたのアプリをより使いやすくするためにどのような工夫ができるか考えてみてください。各所に説明を追加していますか?利用者が自由に探索できるように促していますか?エラーメッセージはどのように表現していますか? -* **ユーザビリティ:** Web アプリ構築の場合、アプリがマウスとキーボードの両方で操作できていますか? +- **ユーザビリティ:** Web アプリ構築の場合、アプリがマウスとキーボードの両方で操作できていますか? -* **信頼と透明性:** AI とその結果を完全に信頼するのではなく、結果を確認するために人間が介入するプロセスをどのように追加するか考えてみてください。また、信頼性と透明性を高めるための他の手段も検討し、取り入れてみてください。 +- **信頼と透明性:** AI とその結果を完全に信頼するのではなく、結果を確認するために人間が介入するプロセスをどのように追加するか考えてみてください。また、信頼性と透明性を高めるための他の手段も検討し、取り入れてみてください。 -* **コントロール:** 利用者が自分で提供するデータを管理できるようにしましょう。AI アプリケーションで、利用者が使用するデータの選択(オプトイン)や選択解除(オプトアウト)する方法を導入してください。 +- **コントロール:** 利用者が自分で提供するデータを管理できるようにしましょう。AI アプリケーションで、利用者が使用するデータの選択(オプトイン)や選択解除(オプトアウト)する方法を導入してください。 diff --git a/12-designing-ux-for-ai-applications/translations/pt-br/README.md b/12-designing-ux-for-ai-applications/translations/pt-br/README.md index ebe8f450f..70d949c6a 100644 --- a/12-designing-ux-for-ai-applications/translations/pt-br/README.md +++ b/12-designing-ux-for-ai-applications/translations/pt-br/README.md @@ -1,10 +1,10 @@ # Projetando UX para aplicativos de IA -[![Designing UX for AI Applications](../../images/12-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://youtu.be/bO7h2_hOhR0?WT.mc_id=academic-105485-koreyst) +[![Designing UX for AI Applications](../../images/12-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://learn.microsoft.com/_themes/docs.theme/master/en-us/_themes/global/video-embed.html?id=1464ef7a-d974-4a04-9ce3-1bc5b3087b4b?WT.mc_id=academic-105485-koreyst) -> *(Clique na imagem acima para assistir ao vídeo desta lição)* +> _(Clique na imagem acima para assistir ao vídeo desta lição)_ -A experiência do usuário é um aspecto muito importante na criação de aplicativos. Os usuários precisam poder usar seu aplicativo de maneira eficiente para realizar tarefas. Ser eficiente é uma coisa, mas você também precisa projetar aplicativos para que possam ser usados por todos, tornando-os *acessíveis*. Este capítulo se concentrará nessa área para que você termine projetando um aplicativo que as pessoas possam e queiram usar. +A experiência do usuário é um aspecto muito importante na criação de aplicativos. Os usuários precisam poder usar seu aplicativo de maneira eficiente para realizar tarefas. Ser eficiente é uma coisa, mas você também precisa projetar aplicativos para que possam ser usados por todos, tornando-os _acessíveis_. Este capítulo se concentrará nessa área para que você termine projetando um aplicativo que as pessoas possam e queiram usar. ## Introdução @@ -12,16 +12,16 @@ A experiência do usuário é como um usuário interage e utiliza um produto ou A lição abordará as seguintes áreas: -* Introdução à Experiência do Usuário e Compreensão das Necessidades do Usuário -* Projeto de Aplicações de IA para Confiança e Transparência -* Projeto de Aplicações de IA para Colaboração e Feedback +- Introdução à Experiência do Usuário e Compreensão das Necessidades do Usuário +- Projeto de Aplicações de IA para Confiança e Transparência +- Projeto de Aplicações de IA para Colaboração e Feedback ## Metas de Aprendizado Após esta lição, você será capaz de: -* Compreender como construir aplicativos de IA que atendam às necessidades do usuário. -* Projetar aplicativos de IA que promovam confiança e colaboração. +- Compreender como construir aplicativos de IA que atendam às necessidades do usuário. +- Projetar aplicativos de IA que promovam confiança e colaboração. ### Pré-requisito diff --git a/13-securing-ai-applications/README.md b/13-securing-ai-applications/README.md new file mode 100644 index 000000000..22922dab5 --- /dev/null +++ b/13-securing-ai-applications/README.md @@ -0,0 +1,164 @@ +# Securing Your Generative AI Applications + +[![Securing Your Generative AI Applications](./images/13-lesson-banner.jpg?WT.mc_id=academic-105485-koreyst)]() + +## Introduction + +This lesson will cover: + +- Security within the context of AI systems. +- Common risks and threats to AI systems. +- Methods and considerations for securing AI systems. + +## Learning Goals + +After completing this lesson, you will have an understanding of: + +- The threats and risks to AI systems. +- Common methods and practices for securing AI systems. +- How implementing security testing can prevent unexpected results and erosion of user trust. + +## What does security mean within the context of generative AI? + +As Artificial Intelligence (AI) and Machine Learning (ML) technologies increasingly shape our lives, it’s crucial to protect not only customer data but also the AI systems themselves. AI/ML is increasingly used in support of high-value decision-making processes in industries where the wrong decision may result in serious consequences. + +Here are key points to consider: + +- **Impact of AI/ML**: AI and ML have significant impacts on daily life and as such safeguarding them has become essential. +- **Security Challenges**: This impact that AI/ML has needs proper attention in order to address the need to protect AI-based products from sophisticated attacks, whether by trolls or organized groups. +- **Strategic Problems**: The tech industry must proactively address strategic challenges to ensure long-term customer safety and data security. + +Additionally, Machine Learning models are largely unable to discern between malicious input and benign anomalous data. A significant source of training data is derived from uncurated, unmoderated, public datasets, which are open to 3rd-party contributions. Attackers don’t need to compromise datasets when they're free to contribute to them. Over time, low-confidence malicious data becomes high-confidence trusted data, if the data structure/formatting remains correct. + +This is why it is critical to ensure the integrity and protectiom of the data stores your models use to make decisions with. + +## Understanding the threats and risks of AI + +In terms of AI and related systems, data poisoning stands out as the most significant security threat today. This is due to the absence of standardized detection and mitigation methods, coupled with our reliance on untrusted or uncurated public datasets for training. To maintain data integrity and prevent a flawed training process, it is crucial to track the origin and lineage of your data. Otherwise, the old adage “garbage in, garbage out” holds true, leading to compromised model performance. + +Here are examples of how data poisoning can affect your models: + +1. **Label Flipping**: In a binary classification task, an adversary intentionally flips the labels of a small subset of training data. For instance, benign samples are labeled as malicious, leading the model to learn incorrect associations.\ + **Example**: A spam filter misclassifying legitimate emails as spam due to manipulated labels. +2. **Feature Poisoning**: An attacker subtly modifies features in the training data to introduce bias or mislead the model.\ + **Example**: Adding irrelevant keywords to product descriptions to manipulate recommendation systems. +3. **Data Injection**: Injecting malicious data into the training set to influence the model’s behavior.\ + **Example**: Introducing fake user reviews to skew sentiment analysis results. +4. **Backdoor Attacks**: An adversary inserts a hidden pattern (backdoor) into the training data. The model learns to recognize this pattern and behaves maliciously when triggered.\ + **Example**: A face recognition system trained with backdoored images that misidentifies a specific person. + +The MITRE Corporation has created [ATLAS (Adversarial Threat Landscape for Artificial-Intelligence Systems)](https://atlas.mitre.org/), a knowledgebase of tactics and techniques employed by adversaries in real-world attacks on AI systems. + +> There are a growing number of vulnerabilities in AI-enabled systems, as the incorporation of AI increases the attack surface of existing systems beyond those of traditional cyber-attacks. We developed ATLAS to raise awareness of these unique and evolving vulnerabilities, as the global community starts to incorporate AI into more systems. ATLAS is modeled after the MITRE ATT&CK® framework and its tactics, techniques, and procedures (TTPs) are complementary to those in ATT&CK. + +Much like the MITRE ATT&CK® framework, which is extensively used in traditional cybersecurity for planning advanced threat emulation scenarios, ATLAS provides an easily searchable set TTPs that can help to better understand and prepare for defending against emerging attacks. + +Additionally, the Open Web Application Security Project (OWASP) has created a "[Top 10 list](https://llmtop10.com/)" of the most critical vulnerabilities found in applications utilizing LLMs. The list highlights the risks of threats such as the aforementioned data poisoning along with others such as: + +- **Prompt Injection**: a technique where attackers manipulate a Large Language Model (LLM) through carefully crafted inputs, causing it to behave outside of its intended behavior. +- **Supply Chain Vulnerabilities**: The components and software that make up the applications used by an LLM, such as Python modules or external datasets, can themselves be compromised leading to unpexected results, introduced biases and even vulmerabilities in the underlying infrastructure. +- **Overreliance**: LLMs are fallible and have been prone to hallucinate, providing inaccurate or unsafe results. In several documented circumstances, people have taken the results at face value leading to unintended real-world megative consequences. + +Microsoft Cloud Advocate Rod Trent has written a free ebook, [Must Learn AI Security](https://github.com/rod-trent/OpenAISecurity/tree/main/Must_Learn/Book_Version), that dives deeply into these and other emerging AI threats and provides extensive guidance on how to best tackle these scenarios. + +## Security Testing for AI Systems and LLMs + +Artificial intelligence (AI) is transforming various domains and industries, offering new possibilities and benefits for society. However, AI also poses significant challenges and risks, such as data privacy, bias, lack of explainability, and potential misuse. Therefore, it is crucial to ensure that AI systems are secure and responsible, meaning that they adhere to ethical and legal standards and can be trusted by users and stakeholders. + +Security testing is the process of evaluating the security of an AI system or LLM by identifying and exploiting its vulnerabilities. This can be performed by developers, users, or third-party auditors, depending on the purpose and scope of the testing. Some of the most common security testing methods for AI systems and LLMs are: + +- **Data sanitization**: This is the process of removing or anonymizing sensitive or private information from the training data or the input of an AI system or LLM. Data sanitization can help prevent data leakage and malicious manipulation by reducing the exposure of confidential or personal data. +- **Adversarial testing**: This is the process of generating and applying adversarial examples to the input or output of an AI system or LLM to evaluate its robustness and resilience against adversarial attacks. Adversarial testing can help identify and mitigate the vulnerabilities and weaknesses of an AI system or LLM that may be exploited by attackers. +- **Model verification**: This is the process of verifying the correctness and completeness of the model parameters or architecture of an AI system or LLM. Model verification can help detect and prevent model stealing by ensuring that the model is protected and authenticated. +- **Output validation**: This is the process of validating the quality and reliability of the output of an AI system or LLM. Output validation can help detect and correct malicious manipulation by ensuring that the output is consistent and accurate. + +OpenAI, a leader in AI systems, has setup a series of _safety evaluations_ as part of their red teaming network initiative, aimed at testing the output AI systems in the hopes of contributing to AI safety. + +> Evaluations can range from simple Q&A tests to more-complex simulations. As concrete examples, here are sample evaluations developed by OpenAI for evaluating AI behaviors from a number of angles: + +#### Persuasion + +- [MakeMeSay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_say/readme.md): How well can an AI system trick another AI system into saying a secret word? +- [MakeMePay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_pay/readme.md): How well can an AI system convince another AI system to donate money? +- [Ballot Proposal](https://github.com/openai/evals/tree/main/evals/elsuite/ballots/readme.md): How well can an AI system influence another AI system’s support of a political proposition? + +#### Steganography (hidden messaging) + +- [Steganography](https://github.com/openai/evals/tree/main/evals/elsuite/steganography/readme.md): How well can an AI system ​​pass secret messages without being caught by another AI system? +- [Text Compression](https://github.com/openai/evals/tree/main/evals/elsuite/text_compression/readme.md): How well can an AI system compress and decompress messages, to enable hiding secret messages? +- [Schelling Point](https://github.com/openai/evals/blob/main/evals/elsuite/schelling_point/README.md): How well can an AI system coordinate with another AI system, without direct communication? + +### AI Security + +It's imperative that we aim to protect AI systems from malicious attacks, misuse, or unintended consequences. This includes taking steps to ensure the safety, reliability, and trustworthiness of AI systems, such as: + +- Securing the data and algorithms that are used to train and run AI models +- Preventing unauthorized access, manipulation, or sabotage of AI systems +- Detecting and mitigating bias, discrimination, or ethical issues in AI systems +- Ensuring the accountability, transparency, and explainability of AI decisions and actions +- Aligning the goals and values of AI systems with those of humans and society + +AI security is important for ensuring the integrity, availability, and confidentiality of AI systems and data. Some of the challenges and opportunities of AI security are: + +- Opportunity: Incorporating AI in cybersecurity strategies since it can play a crucial role in identifying threats and improving response times. AI can help automate and augment the detection and mitigation of cyberattacks, such as phishing, malware, or ransomware. +- Challenge: AI can also be used by adversaries to launch sophisticated attacks, such as generating fake or misleading content, impersonating users, or exploiting vulnerabilities in AI systems. Therefore, AI developers have a unique responsibility to design systems that are robust and resilient against misuse. + +### Data Protection + +LLMs can pose risks to the privacy and security of the data that they use. For example, LLMs can potentially memorize and leak sensitive information from their training data, such as personal names, addresses, passwords, or credit card numbers. They can also be manipulated or attacked by malicious actors who want to exploit their vulnerabilities or biases. Therefore, it is important to be aware of these risks and take appropriate measures to protect the data used with LLMs. There are several steps that you can take to protect the data that is used with LLMs. These steps include: + +- **Limiting the amount and type of data that they share with LLMs**: Only share the data that is necessary and relevant for the intended purposes, and avoid sharing any data that is sensitive, confidential, or personal. Users should also anonymize or encrypt the data that they share with LLMs, such as by removing or masking any identifying information, or using secure communication channels. +- **Verifying the data that LLMs generate**: Always check the accuracy and quality of the output generated by LLMs to ensure they don't contain any unwanted or inappropriate information. +- **Reporting and alerting any data breaches or incidents**: Be vigilant of any suspicious or abnormal activities or behaviors from LLMs, such as generating texts that are irrelevant, inaccurate, offensive, or harmful. This could be an indication of a data breach or security incident. + +Data security, governance, and compliance are critical for any organization that wants to leverage the power of data and AI in a multi-cloud environment. Securing and governing all your data is a complex and multifaceted undertaking. You need to secure and govern different types of data (structured, unstructured, and data generated by AI) in different locations across multiple clouds, and you need to account for existing and future data security, governance, and AI regulations. To protect your data, you need to adopt some best practices and precautions, such as: + +- Use cloud services or platforms that offer data protection and privacy features. +- Use data quality and validation tools to check your data for errors, inconsistencies, or anomalies. +- Use data governance and ethics frameworks to ensure your data is used in a responsible and transparent manner. + +### Emulating real-world threats - AI red teaming + +Emulating real-world threats is now considered a standard practice in building resilient AI systems by employing similar tools, tactics, procedures to identify the risks to systems and test the response of defenders. + +> The practice of AI red teaming has evolved to take on a more expanded meaning: it not only covers probing for security vulnerabilities, but also includes probing for other system failures, such as the generation of potentially harmful content. AI systems come with new risks, and red teaming is core to understanding those novel risks, such as prompt injection and producing ungrounded content. - [Microsoft AI Red Team building future of safer AI](https://www.microsoft.com/en-us/security/blog/2023/08/07/microsoft-ai-red-team-building-future-of-safer-ai/?WT.mc_id=academic-105485-koreyst) + +[![Guidance and resources for red teaming](./images/13-AI-red-team.png?WT.mc_id=academic-105485-koreyst)]() + +Below are key insights that have shaped Microsoft’s AI Red Team program. + +1. **Expansive Scope of AI Red Teaming:** + AI red teaming now encompasses both security and Responsible AI (RAI) outcomes. Traditionally, red teaming focused on security aspects, treating the model as a vector (e.g., stealing the underlying model). However, AI systems introduce novel security vulnerabilities (e.g., prompt injection, poisoning), necessitating special attention. Beyond security, AI red teaming also probes fairness issues (e.g., stereotyping) and harmful content (e.g., glorification of violence). Early identification of these issues allows prioritization of defense investments. +2. **Malicious and Benign Failures:** + AI red teaming considers failures from both malicious and benign perspectives. For example, when red teaming the new Bing, we explore not only how malicious adversaries can subvert the system but also how regular users may encounter problematic or harmful content. Unlike traditional security red teaming, which focuses mainly on malicious actors, AI red teaming accounts for a broader range of personas and potential failures. +3. **Dynamic Nature of AI Systems:** + AI applications constantly evolve. In large language model applications, developers adapt to changing requirements. Continuous red teaming ensures ongoing vigilance and adaptation to evolving risks. + +AI red teaming is not all encompassing and should be consider a complementary motion to additonal controls such as [role-based access control (RBAC)](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/role-based-access-control?WT.mc_id=academic-105485-koreyst) and comprehensive data management solutions. It's meant to suppplement a security strategy that focuses on employing safe and responsible AI solutions that account for privacy and security while aspiring to minimize biases, harmful content and misinformaiton that can erode user confidence. + +Here's a list of additional reading that can help you better understand how red teaming can help identify and mitigate risks in your AI systems: + +- [Planning red teaming for large language models (LLMs) and their applications](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/red-teaming?WT.mc_id=academic-105485-koreyst) +- [What is the OpenAI Red Teaming Network?](https://openai.com/blog/red-teaming-network) +- [AI Red Teaming - A Key Practice for Building Safer and More Responsible AI Solutions](https://rodtrent.substack.com/p/ai-red-teaming) +- MITRE [ATLAS (Adversarial Threat Landscape for Artificial-Intelligence Systems)](https://atlas.mitre.org/), a knowledgebase of tactics and techniques employed by adversaries in real-world attacks on AI systems. + +## Knowledge check + +What could be a good approach to maintaining data integrity and preventing misuse? + +1. Have strong role-based controls for data access and data management +1. Implement and audit data labeling to prevent data misrepresentation or misuse +1. Ensure your AI infrastructure supports content filtering + +A:1, While all three are great recommendations, ensuring that you're assigning the proper data access privileges to users will go a long way to preventing manipulation and misrepresentation of the data used by LLMs. + +## 🚀 Challenge + +Read up more on how you can [govern and protect sensitive information](https://learn.microsoft.com/en-us/training/paths/purview-protect-govern-ai/?WT.mc_id=academic-105485-koreyst) in the age of AI. + +## Great Work, Continue Your Learning + +After completing this lesson, check out our [Generative AI Learning collection](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) to continue leveling up your Generative AI knowledge! + +Head over to Lesson 14 where we will look at [the Generative AI Application Lifecycle](../14-the-generative-ai-application-lifecycle/README.md?WT.mc_id=academic-105485-koreyst)! diff --git a/13-securing-ai-applications/images/13-AI-red-team.png b/13-securing-ai-applications/images/13-AI-red-team.png new file mode 100644 index 000000000..61ed150c7 Binary files /dev/null and b/13-securing-ai-applications/images/13-AI-red-team.png differ diff --git a/13-securing-ai-applications/images/13-lesson-banner.jpg b/13-securing-ai-applications/images/13-lesson-banner.jpg new file mode 100644 index 000000000..cf49a0e18 Binary files /dev/null and b/13-securing-ai-applications/images/13-lesson-banner.jpg differ diff --git a/17-ai-agents/README.md b/17-ai-agents/README.md new file mode 100644 index 000000000..d9baaa165 --- /dev/null +++ b/17-ai-agents/README.md @@ -0,0 +1,148 @@ +## Introduction + +AI Agents represent an exciting development in Generative AI, enabling Large Language Models (LLMs) to evolve from assistants into agents capable of taking actions. AI Agent frameworks enable developers to create applications that give LLMs access to tools and state management. These frameworks also enhance visibility, allowing users and developers to monitor the actions planned by LLMs, thereby improving experience management. + +The lesson will cover the following areas: + +- Understanding what an AI Agent is - What exactly is an AI Agent? +- Exploring four different AI Agent Frameworks - What makes them unique? +- Applying these AI Agents to different use cases - When should we use AI Agents? + +## Learning goals + +After taking this lesson, you'll be able to: + +- Explain what AI Agents are and how they can be used. +- Have an understanding of the differences between some of the popular AI Agent Frameworks, and how they differ. +- Understand how AI Agents function in order to build applications with them. + +## What Are AI Agents? + +AI Agents are a very exciting field in the world of Generative AI. With this excitement comes sometimes a confusion of terms and their application. To keep things simple and inclusive of most of the tools that refer to AI Agents, we are going to use this definition: + +AI Agents allow Large Language Models (LLMs) to perform tasks by giving them access to a **state** and **tools**. + +Let's define these terms: + +**Large Language Models** - These are the models referred throughout this course such as GPT-3.5, GPT-4, Llama-2, etc. + +**State** - This refers to the context that the LLM is working in. The LLM uses the context of its past actions and the current context, guiding its decision-making for subsequent actions.. AI Agent Frameworks allow developers to maintain this context easier. + +**Tools** - To complete the task that the user has requested and that the LLM has planned out, the LLM needs access to tools. Some examples of tools can be a database, an API, an external application or even another LLM! + +These definitions will hopefully give you a good grounding going forward as we look at how they are implemented. Let's explore a few different AI Agent frameworks: + +## LangChain Agents + +LangChain Agents is an implementation of the definitions we provided above. + +To manage the **state** , it uses a built-in function called the `AgentExecutor`. This accepts the defined `agent`a and the `tools` that are available to it. + +The `Agent Executor` also stores the chat history to provide the context of the chat. + +LangChain offers a catalog of tools that can be imported into your application in which the LLM can get access to. These are made by the community and by the LangChain team. + +You can then define these tools and pass them to the `Agent Executor. + +Visibility is another important aspect when talking about AI Agents. It is important for application developers to understand which tool the LLM is using and why.. For that, the team at LangChain have developed LangSmtih. + +https://python.langchain.com/docs/integrations/tools +https://integrations.langchain.com/tools + +## AutoGen + +The next AI Agent framework we will discuss is AutoGen. The main focus of AutoGen is conversations. Agents are both **conversable** and **customizable**. + +**Conversable -** LLMs can start and continue a conversation with another LLM in order to complete a task. This is done by creating `AssistantAgents` and giving them a specific system message. + +```python + +autogen.AssistantAgent( name="Coder", llm_config=llm_config, ) pm = autogen.AssistantAgent( name="Product_manager", system_message="Creative in software product ideas.", llm_config=llm_config, ) + +``` + +**Customizable** - Agents can be defined not only as LLMs but be a user or a tool. As a developer, you can define a `UserProxyAgent` which is responsible for interacting with the user for feedback in completing a task. This feedback can either continue the execution of the task or stop it. + +```python +user_proxy = UserProxyAgent(name="user_proxy") +``` + +### State and Tools + +To change and manage state, an assistant Agent generates Python code to complete the task. + +Here is an example of the process: + +#### LLM Defined with a System Message + +```python +system_message="For weather related tasks, only use the functions you have been provided with. Reply TERMINATE when the task is done." +``` + +This system messages directs this specific LLM to which functions are relevant for its task. Remember, with AutoGen you can have multiple defined AssistantAgents with different system messages. + +#### Chat is Initiated by User + +```python +user_proxy.initiate_chat( chatbot, message="I am planning a trip to NYC next week, can you help me pick out what to wear? ", ) + +``` + +This message from the user_proxy (Human) is what will start the process of the Agent to explore the possible functions that it should execute. + +#### Function is Executed + +```bash +chatbot (to user_proxy): + +***** Suggested tool Call: get_weather ***** Arguments: {"location":"New York City, NY","time_periond:"7","temperature_unit":"Celsius"} ******************************************************** -------------------------------------------------------------------------------- + +>>>>>>>> EXECUTING FUNCTION get_weather... user_proxy (to chatbot): ***** Response from calling function "get_weather" ***** 112.22727272727272 EUR **************************************************************** + +``` + +Once the initial chat is processed, the Agent will send the suggest tool to call. In this case, it is a function called `get_weather`. Depending on your configuration, this function can be automatically executed and read by the Agent or can be executed based on user input. + +We will look at this process in more detail with the Python example included in this lesson. + +## Taskweaver + +The next agent framework we will explore is Taskweaver. It is known as a "code-first" agent because instead of working strictly with `strings` , it can work with dataframes in Python. This becomes extremely useful for data analysis and generation tasks. This can be things like creating graphs and charts or generating random numbers. + +### State and Tools + +To manage the state of the conversation, TaskWeaver uses the concept of a `Planner`. The `Planner` is a LLM that takes the request from the users and maps out the tasks that need to be completed to fulfill this request. + +To complete the tasks the `Planner` is exposed to the collection of tools called `Plugins`. This can be Python classes or a general code interpreter. This plugins are stored as embeddings so that the LLM can better search for the correct plugin. + +Here is an example of a plugin to handle anomaly detection: + +```python +class AnomalyDetectionPlugin(Plugin): def __call__(self, df: pd.DataFrame, time_col_name: str, value_col_name: str): +``` + +The code is verified before executing. Another feature to manage context in Taskweaver is `experience`. Experience allows for the context of a conversation to be stored over to the long term in a YAML file. This can be configured so that the LLM improves over time on certain tasks given that it is exposed to prior conversations. + +## JARVIS + +The last agent framework we will explore is JARVIS. What makes JARVIS unique is that it uses an LLM to manage the `state` of the conversation and the `tools`are other AI models. Each of the AI models are specialized models that perform certain tasks such as object detection, transcription or image captioning. + +The LLM, being a general purpose model, receives the request from the user and identifies the the specific task and any arguments/data that is needed to complete the task. + +```python +[{"task": "object-detection", "id": 0, "dep": [-1], "args": {"image": "e1.jpg" }}] +``` + +The LLM then formats the request in a manner that the specialized AI model can interpret, such as JSON. Once the AI model has returned its prediction based on the task, the LLM receives the response. + +If multiple models are required to complete the task, it will also interpret the response from those models before bringing them together to generate to the response to the user. + +The example below shows how this would work when a user is requesting a description and count of the objects in a picture: + +## Assignment + +To continue your learning of AI Agents you can build with AutoGen: + +- An application that simulates a business meeting with different departments of an education startup. +- Create system messages that guide LLMs in understanding different personas and priorities, and enable the user to pitch a new product idea. +- The LLM should then generate follow-up questions from each department to refine and improve the pitch and the product idea diff --git a/README.md b/README.md index be477855e..4174d8cf3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![Generative AI For Beginners](./images/repo-thubmnail2.png?WT.mc_id=academic-105485-koreyst) -### 18 Lessons teaching everything you need to know to start building Generative AI applications +### 18 Lessons teaching everything you need to know to start building Generative AI applications [![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) @@ -15,74 +15,81 @@ [![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) **Version 2 of this course is currently being deployed. Official Release February 23rd. Pardon the mess meanwhile** -# Generative AI for Beginners - A Course -Learn the fundamentals of building Generative AI applications with our 18-lesson comprehensive course by Microsoft Cloud Advocates. +# Generative AI for Beginners - A Course + +Learn the fundamentals of building Generative AI applications with our 18-lesson comprehensive course by Microsoft Cloud Advocates. + ## 🌱 Getting Started -This course is 18 lessons. Each lesson covers its own topic so start wherever you would like! +This course is 18 lessons. Each lesson covers its own topic so start wherever you would like! + +Lessons are labeled either "Learn" lessons explaining a Generative AI concept or "Build" lessons that explain a concept and code examples in both **Python** and **TypeScript** when possible. -Lessons are labeled either "Learn" lessons explaining a Generative AI concept or "Build" lessons that explain a concept and code examples in both **Python** and **TypeScript** when possible. +Each lesson also includes a "Keep Learning" section with additional learning tools. -Each lesson also includes a "Keep Learning" section with additional learning tools. +**What You Need** -**What You Need** -- Access to the [Azure OpenAI Service](https://azure.microsoft.com/en-us/products/ai-services/openai-service?WT.mc_id=academic-105485-koreyst) **OR** [OpenAI API](https://platform.openai.com/docs/quickstart?context=python?WT.mc_id=academic-105485-koreyst) - *Only required to complete coding lessons* -- Basic knowledge of Python or Typescript is helpful - *For absolute beginners check out these [Python](https://learn.microsoft.com/en-us/training/paths/python-language/?WT.mc_id=academic-105485-koreyst) and [TypeScript](https://learn.microsoft.com/en-us/training/paths/build-javascript-applications-typescript/?WT.mc_id=academic-105485-koreyst) courses. +- Access to the [Azure OpenAI Service](https://azure.microsoft.com/en-us/products/ai-services/openai-service?WT.mc_id=academic-105485-koreyst) **OR** [OpenAI API](https://platform.openai.com/docs/quickstart?context=python?WT.mc_id=academic-105485-koreyst) - _Only required to complete coding lessons_ +- Basic knowledge of Python or Typescript is helpful - \*For absolute beginners check out these [Python](https://learn.microsoft.com/en-us/training/paths/python-language/?WT.mc_id=academic-105485-koreyst) and [TypeScript](https://learn.microsoft.com/en-us/training/paths/build-javascript-applications-typescript/?WT.mc_id=academic-105485-koreyst) courses. - A Github Account to [fork this entire repo](https://github.com/microsoft/generative-ai-for-beginners/fork?WT.mc_id=academic-105485-koreyst) to your own GitHub account -We have created a **[Course Setup](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst)** lesson to help you with setting up your developement environment. +We have created a **[Course Setup](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst)** lesson to help you with setting up your developement environment. -Don't forget to star [star (🌟) this repo](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst) to find it easier later. +Don't forget to star [star (🌟) this repo](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars?WT.mc_id=academic-105485-koreyst) to find it easier later. -## 🧠 Ready to Deploy? -If you are looking for more advanced code samples, check out our [collection of Generative AI Code Samples](https://aka.ms/genai-beg-code) in both **Python** and **TypeScript**. +## 🧠 Ready to Deploy? -## 🗣️ Meet Other Learners, Get Support +If you are looking for more advanced code samples, check out our [collection of Generative AI Code Samples](https://aka.ms/genai-beg-code) in both **Python** and **TypeScript**. - Join our [official AI Discord server](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) to meet and network with other learners taking this course and get support. +## 🗣️ Meet Other Learners, Get Support -## 🚀 Building a Startup? +Join our [official AI Discord server](https://aka.ms/genai-discord?WT.mc_id=academic-105485-koreyst) to meet and network with other learners taking this course and get support. -Sign up for [Microsoft for Startups Founders Hub](https://aka.ms/genai-foundershub?WT.mc_id=academic-105485-koreyst) to receive **free OpenAI credits** and up to **$150k towards Azure credits to access OpenAI models through Azure OpenAI Services**. +## 🚀 Building a Startup? -## 🙏 Want to help? +Sign up for [Microsoft for Startups Founders Hub](https://aka.ms/genai-foundershub?WT.mc_id=academic-105485-koreyst) to receive **free OpenAI credits** and up to **$150k towards Azure credits to access OpenAI models through Azure OpenAI Services**. + +## 🙏 Want to help? + +Find spelling errors, code errors or have a suggestion? [Raise an issue](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst) or [Create a pull request](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst) -Find spelling errors, code errors or have a suggestion? [Raise an issue](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst) or [Create a pull request](https://github.com/microsoft/generative-ai-for-beginners/pulls?WT.mc_id=academic-105485-koreyst) ## 📂 Each lesson includes: - A short video introduction to the topic -- A written lesson located in the README -- Python and TypeScript Code Samples supporting Azure OpenAI and OpenAI API +- A written lesson located in the README +- Python and TypeScript Code Samples supporting Azure OpenAI and OpenAI API - Links to extra resources to continue your learning ## 🗃️ Lessons -| | Lesson Link | Description | Additional Learning | -| :--: | :--: | :--: | ---- | -| 00 | [Course Setup](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** How to Setup Your Development Environment | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 01 | [Introduction to Generative AI and LLMs](./01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** Understanding what Generative AI is and how Large Language Models (LLMs) work. | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 02 | [Exploring and comparing different LLMs](./02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** How to select the right model for your use case | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 03 | [Using Generative AI Responsibly](./03-using-generative-ai-responsibly/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** How to build Generative AI Applications responsibly | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 04 | [Understanding Prompt Engineering Fundamentals](./04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** Hands-on Prompt Engineering Best Practices | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 05 | [Creating Advanced Prompts](./05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** How to apply prompt engineering techniques that improve the outcome of your prompts. | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 06 | [Building Text Generation Applications](./06-text-generation-apps/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** A text generation app using Azure OpenAI | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 07 | [Building Chat Applications](./07-building-chat-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** Techniques for efficiently building and integrating chat applications. | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 08 | [Building Search Apps Vector Databases](./08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** A search application that uses Embeddings to search for data. | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 09 | [Building Image Generation Applications](./09-building-image-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** A image generation application | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 10 | [Building Low Code AI Applications](./10-building-low-code-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** A Generative AI application using Low Code tools | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 11 | [Integrating External Applications with Function Calling](./11-integrating-with-function-calling/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** What is function calling and its use cases for applications | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 12 | [Designing UX for AI Applications](./12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** How to apply UX design principles when developing Generative AI Applications | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 13 | Securing Your Generative AI Applications | **Learn:** The threats and risks to AI systems and methods to secure these systems. | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 14 | The Generative AI Application Lifecycle | **Learn:** The tools and metrics to manage the LLM Lifecycle and LLMOps | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 15 | Retrieval Augmented Generation (RAG) and Vector Databases | **Build:** An application using a RAG Framework to retrieve embeddings from a Vector Databases | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 16 | Open Source Models and Hugging Face | **Build:** An application using open source models available on Hugging Face | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 17 | AI Agents and AutoGen | **Build:** An application using an AI Agent Framework | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | -| 18 | Fine-Tuning LLMs | **Learn:** The what, why and how of fine-tuning LLMs | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | - -### 🌟 Special thanks -Special thanks to [**John Aziz**](https://www.linkedin.com/in/john0isaac/) for creating all of the GitHub Actions and workflows - -## 🎒 Other Courses + +| | Lesson Link | Description | Additional Learning | +| :-: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------ | +| 00 | [Course Setup](./00-course-setup/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** How to Setup Your Development Environment | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 01 | [Introduction to Generative AI and LLMs](./01-introduction-to-genai/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** Understanding what Generative AI is and how Large Language Models (LLMs) work. | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 02 | [Exploring and comparing different LLMs](./02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** How to select the right model for your use case | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 03 | [Using Generative AI Responsibly](./03-using-generative-ai-responsibly/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** How to build Generative AI Applications responsibly | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 04 | [Understanding Prompt Engineering Fundamentals](./04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** Hands-on Prompt Engineering Best Practices | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 05 | [Creating Advanced Prompts](./05-advanced-prompts/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** How to apply prompt engineering techniques that improve the outcome of your prompts. | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 06 | [Building Text Generation Applications](./06-text-generation-apps/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** A text generation app using Azure OpenAI | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 07 | [Building Chat Applications](./07-building-chat-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** Techniques for efficiently building and integrating chat applications. | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 08 | [Building Search Apps Vector Databases](./08-building-search-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** A search application that uses Embeddings to search for data. | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 09 | [Building Image Generation Applications](./09-building-image-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** A image generation application | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 10 | [Building Low Code AI Applications](./10-building-low-code-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** A Generative AI application using Low Code tools | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 11 | [Integrating External Applications with Function Calling](./11-integrating-with-function-calling/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** What is function calling and its use cases for applications | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 12 | [Designing UX for AI Applications](./12-designing-ux-for-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** How to apply UX design principles when developing Generative AI Applications | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 13 | [Securing Your Generative AI Applications](./13-securing-ai-applications/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** The threats and risks to AI systems and methods to secure these systems. | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 14 | [The Generative AI Application Lifecycle](./14-the-generative-ai-application-lifecycle/README.md?WT.mc_id=academic-105485-koreyst) | **Learn:** The tools and metrics to manage the LLM Lifecycle and LLMOps | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 15 | [Retrieval Augmented Generation (RAG) and Vector Databases](<(./15-rag-and-vector-databases/README.md?WT.mc_id=academic-105485-koreyst)>) | **Build:** An application using a RAG Framework to retrieve embeddings from a Vector Databases | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 16 | Open Source Models and Hugging Face | **Build:** An application using open source models available on Hugging Face | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 17 | [AI Agents](./17-ai-agents/README.md?WT.mc_id=academic-105485-koreyst) | **Build:** An application using an AI Agent Framework | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | +| 18 | Fine-Tuning LLMs | **Learn:** The what, why and how of fine-tuning LLMs | [Learn More](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) | + +### 🌟 Special thanks + +Special thanks to [**John Aziz**](https://www.linkedin.com/in/john0isaac/) for creating all of the GitHub Actions and workflows + +## 🎒 Other Courses Our team produces other courses! Check out: