
构建图像生成应用实战基于 generative-ai-for-beginners 第 09 课掌握 Azure OpenAI 文生图与元提示词【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginnersgenerative-ai-for-beginnersGenerative AI for Beginners是一套面向初学者的生成式 AI 渐进式教程。其第 09 课「Building Image Generation Applications / 图像生成应用的构建」专门讲解如何用大语言模型LLM之外的能力——文生图Text-to-Image——从一句文字描述直接生成图片。本文以该课程英文主文档见 09-building-image-applications/README.md配套的芬兰语译文见 translations/fi/09-building-image-applications/README.md为核心脉络结合仓库中真实可运行的 Python / TypeScript 样例代码带读者从零搭建一个可落地、可扩展的图像生成应用并学会用元提示词metaprompt约束生成内容的边界。学完本文你将掌握 DALL·E / gpt-image-1 等模型的基本原理、images.generate的关键参数、图像编辑与变体玩法以及温度temperature参数对随机性的实际影响。一、为什么要构建图像生成应用LLM 的能力远不止文本生成。通过图像这一模态模型可以在医疗科技、建筑、旅游、游戏开发等大量行业发挥作用把抽象创意快速变成视觉草图帮助设计师、学生和业务人员更高效地沟通想法。图像生成应用也因此成为体验生成式 AI 能力边界的绝佳切入点典型用途包括图像编辑与图像合成Image editing and synthesis针对各类使用场景生成全新图片或在已有图片基础上做局部改造跨行业应用将生成能力接入医疗影像示意、旅游海报、游戏原画、课程插图等具体业务。贯穿全课的场景Edu4All 教育创业公司课程以虚构的创业公司Edu4All作为贯穿案例学生们需要用图片完成自己的评估作业图片内容由学生自行决定——可以是自编童话的插画、给故事新增的角色也可以是对某个想法与概念的视觉化表达。例如如果学生在课堂上学习「世界著名建筑」他们可以像下面这样围绕埃菲尔铁塔发挥创意配合的提示词prompt可以是Dog next to Eiffel Tower in early morning sunlight清晨阳光下、埃菲尔铁塔旁的一只狗二、两大主流文生图模型DALL·E 与 MidjourneyDALL·E 与 Midjourney 是当下最流行的两类文生图模型二者都允许用户通过自然语言提示词生成图片。DALL·EDALL·E 是由文本描述生成图像的生成式 AI 模型。从架构上说DALL·E 是CLIP与diffused attention两类模型的组合CLIP负责生成嵌入embeddings——即数据图像与文本的数值化表示它让模型能够理解“文字描述”与“图像内容”之间的对应关系Diffused attention负责从嵌入反向生成图像。DALL·E 在图文混合数据集上训练因此可以从文本描述生成图像例如“戴帽子的猫”或“莫霍克发型的狗”。MidjourneyMidjourney 的工作方式与 DALL·E 类似同样是接收文本提示词并输出图像也可以生成诸如“戴帽子的猫”或“莫霍克发型的狗”这类内容。工作原理自回归 Transformer从生成机制看DALL·E 基于 Transformer 架构内部采用自回归 Transformerautoregressive transformer模型一次只生成一个像素并把刚生成的像素作为输入去生成下一个像素如此逐层穿过神经网络的多个层级直至整幅图像完成。正是这一过程让 DALL·E 能够控制生成图像中的属性、物体、特征等内容。值得注意的是DALL·E 2 与 DALL·E 3 在生成控制力上更强而在当前仓库的英文主文档与源码中课程已进一步说明Azure OpenAI 的图像模型已演进为gpt-image-1DALL·E 3 属于旧一代新部署不再提供——这也是我们在下文搭建应用时直接采用的新一代接口。三、环境与依赖准备构建一个图像生成应用在仓库课程中需要以下几类 Python 库见 09-building-image-applications/requirements.txt库用途python-dotenv强烈推荐把 API Key 等敏感信息保存在.env文件中与代码解耦openai与 OpenAI / Azure OpenAI API 交互的官方客户端pillow在 Python 中处理打开、展示、保存图片requests发起 HTTP 请求用于把图片 URL 下载为本地文件创建并部署 Azure OpenAI 图像模型若尚未创建资源请先在 Azure AI Foundry / Azure OpenAI 门户中创建 Azure OpenAI 资源与模型部署。关于 API 版本与部署模型仓库里有两代写法的并存课程英文主文档与源码采用的新一代方案部署模型选择gpt-image-1客户端api_version使用2024-10-21见 09-building-image-applications/python/aoai-app.py 与 09-building-image-applications/typescript/image-generation-app/src/main.ts 中的注释说明较早的芬兰语译文仍保留 DALL·E 3 时代的写法部署名为dall-e-3、api_version 2024-02-01。阅读该译文时应注意按当前门户可用的模型为准。部署完成后需要在门户的Deployments部署区找到你的endpoint终结点与API Key稍后填入环境变量。四、搭建第一个图像生成应用第一步编写 .env 环境变量文件创建.env文件并写入以下内容部署名需与你实际部署一致AZURE_OPENAI_ENDPOINTyour endpoint AZURE_OPENAI_API_KEYyour key AZURE_OPENAI_DEPLOYMENTgpt-image-1第二步安装依赖把上文的四个依赖库收集到requirements.txt随后创建虚拟环境并安装python3 -m venv venv source venv/bin/activate pip install -r requirements.txtWindows 用户创建与激活虚拟环境的命令如下python3 -m venv venv venv\Scripts\activate.bat第三步编写 app.py在 09-building-image-applications/python/aoai-app.py 中仓库给出的可运行实现如下沿用官方 SDK 面向对象的AzureOpenAI客户端写法from openai import AzureOpenAI, BadRequestError import os import requests from PIL import Image import dotenv import json # import dotenv dotenv.load_dotenv() # Assign the API version (check the Microsoft Foundry docs for the current API version required by your model) client AzureOpenAI( api_keyos.environ[AZURE_OPENAI_API_KEY], # this is also the default, it can be omitted api_version 2024-10-21, azure_endpointos.environ[AZURE_OPENAI_ENDPOINT] ) model os.environ[AZURE_OPENAI_DEPLOYMENT] try: # Create an image by using the image generation API result client.images.generate( modelmodel, promptBunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils, size1024x1024, n1 ) generation_response json.loads(result.model_dump_json()) # Set the directory for the stored image image_dir os.path.join(os.curdir, images) # If the directory doesnt exist, create it if not os.path.isdir(image_dir): os.mkdir(image_dir) # Initialize the image path (note the filetype should be png) image_path os.path.join(image_dir, generated-image.png) # Retrieve the generated image image_url generation_response[data][0][url] # extract image URL from response generated_image requests.get(image_url).content # download the image with open(image_path, wb) as image_file: image_file.write(generated_image) # Display the image in the default image viewer image Image.open(image_path) image.show() finally: print(completed!)下面把这段代码拆解开来说明。1导入依赖并加载环境变量。导入 OpenAI 客户端、os、requests、Pillow 与 dotenv然后通过dotenv.load_dotenv()把.env中的密钥读入进程环境dotenv.load_dotenv()2配置 Azure OpenAI 服务客户端。从环境变量读取终结点与密钥并指定 API 版本。api_key参数其实是默认项可省略client AzureOpenAI( api_keyos.environ[AZURE_OPENAI_API_KEY], api_version 2024-10-21, azure_endpointos.environ[AZURE_OPENAI_ENDPOINT] )说明较旧课程译文芬兰语中展示的是azure_endpoint os.environ[AZURE_OPENAI_ENDPOINT], api_version2024-02-01与except openai.InvalidRequestError的写法仓库当前代码已统一为上述AzureOpenAI(...)model_dump_json()BadRequestError的新写法。若以gpt-image-1部署请务必使用2024-10-21及以后的 API 版本。3调用images.generate生成图像。返回的响应对象包含生成图片的 URL随后用requests下载并写入本地images/generated-image.png文件注意扩展名应为png。若目录不存在先os.mkdir创建image_url generation_response[data][0][url] generated_image requests.get(image_url).content with open(image_path, wb) as image_file: image_file.write(generated_image)4打开并展示图片。用 Pillow 打开文件并交给系统默认图片查看器image Image.open(image_path) image.show()运行成功后本地images/目录下就会出现generated-image.png。仓库的 09-building-image-applications/python/generated-image.png 就是该流程的一次真实输出样例。作为对照仓库还提供了仅用约 30 行代码的oai-app.py09-building-image-applications/python/oai-app.py演示连接OpenAI 官方接口的等价流程并包含timeout30与raise_for_status()等更稳妥的下载容错。深入解析 images.generate 的关键参数核心调用只有一行result client.images.generate( modelmodel, promptBunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils, size1024x1024, n1 )各参数含义如下prompt用于生成图像的文本提示词是决定画面内容的核心输入。示例提示词为“坐在马背上、举着棒棒糖、身处开满黄水仙的晨雾草甸上的兔子”。size生成图像的尺寸示例为1024x1024像素。不同模型支持的尺寸范围不同需以部署模型文档为准常见支持1024x1024等正方形规格。n一次生成的图像数量。需要澄清的是课程文档正文此处文字与代码略有出入正文称“生成两张图”而示例为n1以实际代码为准即n为生成数量、示例取 1 张需要多张时改为n2即可。model指向部署模型。仓库代码通常写成model os.environ[AZURE_OPENAI_DEPLOYMENT]也就是.env中的部署名gpt-image-1。temperature控制生成结果的随机性详见后文“六、温度参数”取值为 0 到 10表示输出更确定1表示输出更随机默认值 0.7。五、图像生成的进阶能力仅凭几行 Python 就能生成图片但这只是开始。课程还介绍了对已有图像的处理能力。图像编辑Edit图 掩码 提示词做法同时提供一张已有图片、一张掩码图mask标出要修改的区域和一段文本提示词即可局部改造图片——例如给兔子“戴上一顶帽子”。注意编辑功能并不被 DALL·E 3 支持需要使用支持编辑的模型示例采用gpt-image-1。以课程展示的 GPT Image 编辑为例原图只有带泳池的室内 lounge最终图片中多了一只火烈鸟。对应代码如下response client.images.edit( modelgpt-image-1, imageopen(sunlit_lounge.png, rb), maskopen(mask.png, rb), promptA sunlit indoor lounge area with a pool containing a flamingo ) image_url response.data[0].url原图、掩码与结果三张图片均存放在课程的09-building-image-applications/images/目录sunlit_lounge.png、mask.png、sunlit_lounge_result.png可直观对照“改前—遮罩区域—改后”的变化。创建变体Variation一图生出多张同主题变体做法拿一张现有图片让模型基于它生成多个变体。调用时只需传入图片与数量等参数response client.images.create_variation( imageopen(bunny-lollipop.png, rb), n1, size1024x1024 ) image_url response.data[0].url注意变体variation功能仅由 OpenAI 的 DALL·E 2 模型支持gpt-image-1不支持。这一点在英文主文档中被特别标注仓库里也有独立的变体演示脚本09-building-image-applications/python/aoai-app-variation.py 与 09-building-image-applications/python/oai-app-variation.py——前者读取前一步生成的generated-image.png通过create_variation产出generated_variation.png并再次展示。六、温度参数temperature实践把随机性握在手中温度是控制生成式 AI 输出随机性的参数取值 0 到 10 代表输出趋于确定1 代表输出趋于随机默认 0.7。为了直观感受它的作用课程设计了下面的对照实验。第一步用同一提示词运行两次默认温度下观察输出PromptBunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils第一次生成结果再次运行同样的提示词可以看到两张图相似但并不相同——事实上高随机性下甚至可能出现“第一张突出兔子、第二张突出马”这样差异较大的构图。这说明默认温度下模型的每次采样都具有明显的随机性。第二步把 temperature 调低/调为 0让结果更确定。课程先把生成参数调整为generation_response client.images.generate( promptBunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils, size1024x1024, n2, temperature0 )当temperature0时再次生成两张图可以发现两张结果明显更加接近。仓库 09-building-image-applications/images/ 目录下保存了这一系列对照产物v1-generated-image.png、v2-generated-image.png默认温度差异较大以及v1-low-temp-generated-image.png、v2-low-temp-generated-image.png低温和v1-temp-generated-image.png、v2-temp-generated-image.pngtemperature0最确定。对比这些图片即可直观理解温度越高 → 每次结果越随机、越富创意但可控性差温度越低 → 结果越稳定、越可复现适合需要一致输出的业务场景。在真实的文生图 API 使用中应结合产品诉求决定是否需要显式传入temperature部分新一代图像模型对温度的支持以平台文档为准。七、用元提示词metaprompt为应用划定边界demo 已经能为客户生成图片了但一个合格的生产级应用必须定义输出边界例如不能生成不适合工作场合或儿童的内容。课程给出的方案就是元提示词metaprompt。元提示词是什么、如何工作元提示词同样是文本提示词但它的目的不是描述画面而是约束和控制模型的输出。使用方式是把元提示词拼接在真正提示词的前面二者封装进同一个文本 prompt 后一起发给模型——应用由此把“内容安全策略”直接编码进每一次请求。一个典型的元提示词模板如下You are an assistant designer that creates images for children. The image needs to be safe for work and appropriate for children. The image needs to be in color. The image needs to be in landscape orientation. The image needs to be in a 16:9 aspect ratio. Do not consider any input from the following that is not safe for work or appropriate for children. (Input)可以看到它非常直白地声明了角色定位儿童插画设计师、安全要求工作场合安全、适合儿童、画面要求彩色、横向、16:9 画幅以及忽略下列不安全输入。在代码中落地黑名单 f-string 拼接课程将其落地为“可编程的”版本先用一个字符串disallow_list显式列出禁止主题黑名单再用 f-string 把规则与用户输入拼成最终 promptdisallow_list swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult meta_prompt fYou are an assistant designer that creates images for children. The image needs to be safe for work and appropriate for children. The image needs to be in color. The image needs to be in landscape orientation. The image needs to be in a 16:9 aspect ratio. Do not consider any input from the following that is not safe for work or appropriate for children. {disallow_list} prompt f{meta_prompt} Create an image of a bunny on a horse, holding a lollipop这样做的好处显而易见所有经由此模板发出的生成请求都会先“看到”并遵守内容边界从源头降低生成不安全内容的概率。这是一种轻量、易上手的提示词级安全手段——当然生产环境仍应叠加服务端的内容审核与人工抽查本课程第 3、13 课03-using-generative-ai-responsibly与13-securing-ai-applications对负责任 AI 与安全加固有更系统的讲解。八、随堂任务让学生们真正用起来含参考答案回到开头引入的 Edu4All现在需要把图像生成能力开放给学生用于完成他们的评估作业。任务要求学生为包含世界著名建筑/纪念碑的评估生成图片选哪些纪念碑由学生自己决定并被鼓励发挥创意、把纪念碑放进各种不同的情境中。课程提供了一个完整参考实现仓库中的可运行版见 09-building-image-applications/python/aoai-solution.py。其核心是把“元提示词 具体任务”拼成一个 prompt 后交给模型meta_prompt fYou are an assistant designer that creates images for children. The image needs to be safe for work and appropriate for children. The image needs to be in color. The image needs to be in landscape orientation. The image needs to be in a 16:9 aspect ratio. Do not consider any input from the following that is not safe for work or appropriate for children. {disallow_list} prompt f{meta_prompt} Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on. 随后与第一节的完整链路一致创建AzureOpenAI客户端 →client.images.generate(modelmodel, promptprompt, size1024x1024, n1)→ 把返回 URL 下载为images/ch9-sol-generated-image.png→ 用 Pillow 展示。脚本里还保留了被注释的create_variation片段供扩展练习。交互式练手版本分步填空式 Notebook见 09-building-image-applications/python/aoai-assignment.ipynb。九、仓库配套实现速览Python / TypeScript 双版本课程不只提供 Python 方案还配了 TypeScript 实现可作为不同技术栈团队的上手指南TypeScript 图像生成应用09-building-image-applications/typescript/image-generation-app/src/main.ts 使用openai官方 npm 包读取AZURE_OPENAI_ENDPOINT/AZURE_OPENAI_API_KEY/AZURE_OPENAI_DEPLOYMENT默认gpt-image-1与apiVersion2024-10-21随后调用client.images.generate({ model, prompt, n: 1, size: 1024x1024 })并在控制台打印图片 URL依赖与启动脚本定义在 package.jsonopenai^4.77.0、dotenv^16.3.1通过npm run start经 nodemon 运行。Python 全家族样例普通生成 aoai-app.py、变体生成 aoai-app-variation.py、作业参考解 aoai-solution.py以及面向 OpenAI 官方 API 的 oai-app.py 与 oai-app-variation.py。小结一下核心动作链读取 .env → 构建 AzureOpenAI 客户端 → images.generate() 拿到图片 URL → requests 下载 → Pillow 打开/展示。这三段代码在仓库每个 Python 样例中几乎一致构成可复用的最小模板。动手实践时建议按“先跑通生成 → 再试编辑/变体 → 最后封装元提示词并部署”的顺序推进并重点观察 temperature 对输出的影响。十、继续学习本课是图像生成应用的起点。继续沿着本仓库教程体系前进下一步可学习第 10 课「使用低代码方案构建 AI 应用」10-building-low-code-ai-applications/README.md若想深入了解 RAG、微调与 Agent 等方向仓库各章的 README 均配有相应代码与扩展练习可系统化地把生成式 AI 能力接入真实产品。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考