news 2026/9/11 10:37:39

基于 Azure OpenAI 构建图像生成应用:从 DALL-E 原理到 gpt-image-1 与元提示实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 Azure OpenAI 构建图像生成应用:从 DALL-E 原理到 gpt-image-1 与元提示实战

基于 Azure OpenAI 构建图像生成应用:从 DALL-E 原理到 gpt-image-1 与元提示实战

【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners

本指南以 translations/ko/09-building-image-applications/README.md(韩文版第 9 课)为核心骨架,结合仓库中 09-building-image-applications 的 Python / TypeScript 源码与配置进行纵深扩充,面向需要在业务中落地文本生成图像的开发者。

生成式 AI 的能力远不止文本生成,从文本描述生成图像同样是 LLM 生态的核心模态。本篇技术指南将带你完整走通"图像生成应用"的构建全流程:先理解 DALL-E 与 Midjourney 的工作原理,再基于 Azure OpenAI 的gpt-image-1模型(仓库当前推荐部署的 Azure 图像模型)用 Python 亲手搭建第一个图像生成应用,随后深入图像编辑、变体生成、温度(temperature)参数调优,最后用元提示(metaprompt)为应用定义内容边界。读完本文,你将掌握一套可复制、可运行的图像生成应用实战方案,并能在仓库源码基础上继续扩展。

为什么构建图像生成应用

图像生成应用是探索生成式 AI 能力边界的绝佳载体,其典型价值集中在两个方面:

  • 图像编辑与合成(image editing and synthesis):既可以纯文本生成全新图像,也可以基于已有图像做局部修改、合成,覆盖内容生产、设计辅助等大量场景。
  • 跨行业适用性:MedTech(医疗科技)、建筑、旅游、游戏开发等众多行业都能通过"文本 → 图像"的模态降低成本、加速创意验证。

认识两大主流图像生成模型:DALL-E 与 Midjourney

DALL-E 与 Midjourney 是当前最流行的两类图像生成模型,它们的共同点是:使用文本提示(prompt)驱动图像生成

DALL-E:CLIP + 扩散注意的组合

DALL-E 是 OpenAI 推出的、能从文本描述生成图像的生成式 AI 模型,其技术内核是两种模型的组合:

  • CLIP:负责从图像与文本中生成嵌入(embeddings)——即数据的数值化表示。它把"语言"与"视觉"映射到同一语义空间,是模型理解"文本描述了什么样的图像"的关键。
  • 扩散注意(diffused attention):负责从嵌入(embeddings)反向生成图像。DALL-E 在图文配对数据集上训练,因此能根据"戴帽子的猫""莫霍克发型的狗"这类文本描述产出对应图像。

底层原理:自回归 Transformer

从架构上看,DALL-E 基于 Transformer 架构,采用自回归 Transformer(autoregressive transformer):模型从文本描述生成图像时一次生成一个像素,再利用已生成的像素预测下一个像素,逐层穿过神经网络的多层结构,直到整张图像完成。

这一机制决定了模型对生成图像中的属性、对象、特征等元素具备控制力;而 DALL-E 2、DALL-E 3 以及 Azure 上当前的gpt-image-1代际,对生成结果的控制能力进一步提升。需要说明的是:本仓库英文版 README 明确指出,gpt-image-1是 Azure OpenAI 当前的图像模型,DALL-E 3 属于 legacy 模型,新部署不再可用(参见 09-building-image-applications/README.md),TypeScript 示例 src/main.ts 的注释也印证了这一点。

Midjourney

Midjourney 与 DALL-E 工作方式类似,同样从文本提示生成图像,可响应"戴帽子的猫""莫霍克发型的狗"等提示。两者定位相近,但本文后续的工程化示例将聚焦 OpenAI / Azure OpenAI 的 API 体系。

场景:Edu4All 教育创业公司

课程的贯穿场景是一家名为Edu4All的教育创业公司:学生需要为自己的评估作业生成图像——例如给自创童话配插图、为故事设计新角色、或把抽象概念可视化。当学生在课堂上学习纪念碑时,可以用如下提示生成配图:

"Dog next to Eiffel Tower in early morning sunlight"(晨光中的埃菲尔铁塔旁的一只狗)

这个场景贯穿全文:最后的作业正是让学生用元提示约束模型,为自己的纪念碑评估作业生成合规的图像。

环境准备:库、密钥与虚拟环境

构建图像生成应用需要四个库(与 requirements.txt 完全一致):

作用
python-dotenv将密钥从代码中剥离,存入.env文件
openai与 OpenAI / Azure OpenAI API 交互的核心 SDK
pillowPython 端处理图像的库(打开、显示生成结果)
requests发起 HTTP 请求,用于下载生成的图像 URL

创建并部署 Azure OpenAI 模型

按 Microsoft Learn 的 Azure AI Foundry 指引创建 Azure OpenAI 资源与模型部署,选择gpt-image-1作为模型(当前代际的 Azure OpenAI 图像模型)。部署成功后,从 Foundry Portal 的 "Deployments" 区域获取端点(endpoint)、密钥(key)与部署名。

编写.env配置文件

创建.env文件,内容如下(端点与密钥替换为你自己的值):

AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="gpt-image-1"

收集依赖并创建虚拟环境

创建requirements.txt

python-dotenv openai pillow requests

创建并激活虚拟环境、安装依赖(macOS / Linux):

python3 -m venv venv source venv/bin/activate pip install -r requirements.txt

Windows 下的等价命令:

python3 -m venv venv venv\Scripts\activate.bat

第一个图像生成应用:app.py全解

app.py中写入以下代码(与英文版 README 及仓库 python/aoai-app.py 的实现一致):

import openai import os import requests from PIL import Image import dotenv from openai import OpenAI, AzureOpenAI # import dotenv dotenv.load_dotenv() # configure Azure OpenAI service client client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-10-21" ) try: # Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] ) # Set the directory for the stored image image_dir = os.path.join(os.curdir, 'images') # If the directory doesn't 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() # catch exceptions except openai.BadRequestError as err: print(err)

代码逐段拆解

① 导入所需库——OpenAI SDK、dotenv、requests、Pillow:

import openai import os import requests from PIL import Image import dotenv

② 加载.env环境变量

dotenv.load_dotenv()

③ 配置 Azure OpenAI 客户端——从环境变量读取端点与密钥。注意api_version需与你部署的模型兼容,仓库源码统一使用"2024-10-21"(源码注释提示以 Microsoft Foundry 文档当前要求的 API 版本为准):

client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-10-21" )

④ 调用图像生成 API

generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] )

该调用返回一个 JSON 对象,其中包含生成图像的 URL。之后用requests下载该 URL 的字节内容并写盘为 PNG 文件。

⑤ 打开并显示图像

image = Image.open(image_path) image.show()

值得补充的工程细节:仓库中的 python/aoai-app.py 还展示了更健壮的写法——用json.loads(result.model_dump_json())序列化响应,并以finally: print("completed!")保证流程收尾;而 python/oai-app.py(面向 OpenAI 官方平台)则额外对下载请求设置了timeout=30raise_for_status()并对缺失的OPENAI_API_KEY主动抛错,这些都是生产化时值得借鉴的防御性编程习惯。

生成参数详解:prompt / size / n / temperature

聚焦client.images.generate的核心参数:

参数含义示例
prompt用于生成图像的文本提示'Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils'(雾气弥漫、长满水仙的草地上,兔子骑在马上、手持棒棒糖)
size生成图像的尺寸(像素)'1024x1024'
n一次生成的图像数量n=1
temperature控制输出随机性的参数,取值 0~1;0 表示确定性输出,1 表示随机输出,默认值 0.7temperature=0

图像生成的进阶能力:编辑与变体

几行 Python 代码即可完成"从零生成图像",但图像模态还有更多玩法。

执行图像编辑(edit)

通过提供已有图像 + 掩码(mask)+ 文本提示来修改图像,例如给兔子图像加一顶帽子:提供原始图像、标识待修改区域的掩码、描述修改动作的提示即可。注意:DALL-E 3 不支持此能力,但当前 Azure 图像模型gpt-image-1支持,示例如下:

response = client.images.edit( model="gpt-image-1", image=open("sunlit_lounge.png", "rb"), mask=open("mask.png", "rb"), prompt="A sunlit indoor lounge area with a pool containing a flamingo" ) image_url = response.data[0].url

基线图像只有带泳池的休息室,最终图像则加入了火烈鸟:

生成变体(variation)

对已有图像请求生成变体:提供图像并指定数量与尺寸即可。该能力目前仅 OpenAI 的 DALL-E 2 模型支持,gpt-image-1不支持

response = client.images.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response.data[0].url

仓库中的 python/aoai-app-variation.py 与 python/oai-app-variation.py 分别给出了 Azure 与 OpenAI 平台上的变体生成完整流程:读取之前生成的generated-image.png,调用create_variation后下载 URL 存为generated_variation.png并显示。

温度(temperature)实战:从随机到确定性输出

temperature 控制生成式模型输出的随机性:0 为确定性输出,1 为完全随机,默认 0.7。同一提示执行两次,验证结果不会完全相同:

提示:"Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils"

第一次运行结果:

第二次运行同一提示:

可以看到两张图相似但绝不相同。若想让输出更接近,把temperature设为 0:

generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here size='1024x1024', n=2, temperature=0 )

此时两张结果的相似度明显提高——这正是"随机性"与"确定性"之间权衡的直观演示。需要指出:temperature 并非所有图像模型都开放给用户(例如部分代际的图像 API 仅由服务端固定采样),实际可用性以你所部署模型的 API 文档为准。

用元提示(metaprompt)定义应用的边界

演示代码已经能为客户生成图像,但真实应用需要边界约束:比如不生成不适合工作环境或儿童的内容。元提示(metaprompt)正是为此而生——它是用于控制生成式 AI 模型输出的文本提示,位于用户文本提示之前,二者封装为单一文本提示,随应用一起嵌入以约束模型输出。

元提示如何工作

元提示本质上是一段"指令前缀",通过角色设定 + 约束条件 + 禁入词表(disallow list)限定模型的生成空间。一个典型示例:

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)

在 demo 中接入元提示

disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult" meta_prompt =f"""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. {disallow_list} """ prompt = f"{meta_prompt} Create an image of a bunny on a horse, holding a lollipop" # TODO add request to generate image

可见所有生成图像都会遵循元提示的约束:儿童友好、工作环境安全、彩色、横向、16:9 宽高比,并对禁入词表中的内容一概不予采纳。这一步把"技术能力"升级为"产品合规边界",是图像生成应用从 demo 走向生产的关键一环。

作业与参考答案:让学生生成纪念碑评估图像

结合开篇的 Edu4All 场景,作业是:让学生为包含纪念碑的评估作业生成图像,纪念碑由学生自选,并要求发挥创意将纪念碑置于不同情境中。仓库中的 python/aoai-solution.py 给出了完整参考实现,核心思路是把元提示拼接进最终 prompt

disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult" meta_prompt = f"""You are an assistant designer that creates images 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. """ result = client.images.generate( model=model, prompt=prompt, # Enter your prompt text here size='1024x1024', n=1 )

之后的下载与展示逻辑与第一个应用完全一致(结果保存为ch9-sol-generated-image.png)。这道题的实质是:把"元提示约束 + 图像生成调用 + 结果落盘"三件事组合成一条完整流水线

多语言实现对照:Python 与 TypeScript

该课程在仓库中提供了多语言实现,方便不同技术栈的读者对照学习:

  • Python(Azure OpenAI):python/aoai-app.py、python/aoai-app-variation.py、python/aoai-solution.py
  • Python(OpenAI 官方平台):python/oai-app.py、python/oai-app-variation.py
  • TypeScript(Azure OpenAI):typescript/image-generation-app/src/main.ts,通过npm run build编译、npm start(nodemon + ts-node)运行;其package.json依赖openai@^4.77.0dotenv@^16.3.1

TypeScript 版的核心调用同样简洁:new AzureOpenAI({ endpoint, apiKey, deployment, apiVersion })后直接调用client.images.generate({ model, prompt, n, size }),并从imageGenerations.data中逐个打印图片 URL——与 Python 版的调用链一一对应,适合作为跨语言移植的模板。

小结

从 DALL-E 的 CLIP + 扩散注意原理、自回归 Transformer 的逐像素生成机制,到基于 Azure OpenAIgpt-image-1的完整应用搭建、参数调优、编辑与变体能力、温度控制,再到用元提示为应用划出安全边界——本文覆盖了图像生成应用的完整知识闭环。你可以直接复用仓库中的 aoai-app.py 与 aoai-solution.py 作为起点,把"文本到图像"的能力快速接入自己的产品。下一课将探讨如何用低代码方式构建 AI 应用,见 10-building-low-code-ai-applications。

【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 10:36:12

CMS系统架构解析与开发实战指南

1. 信息发布内容管理系统CMS概述信息发布内容管理系统&#xff08;Content Management System&#xff0c;简称CMS&#xff09;是现代网站开发的核心基础设施之一。作为一个从业十余年的全栈开发者&#xff0c;我见证了CMS从早期的简单文章发布系统&#xff0c;逐步演变为如今功…

作者头像 李华
网站建设 2026/9/11 10:35:56

今日头条a_bogus签名逆向分析:从抓包定位到环境补全实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 10:35:39

OpenMetadata源码解析:从MySQL到元数据管理,完整采集链路拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 10:35:02

Ubuntu 22.04 LTS与OpenStack私有云部署实战指南

1. OpenStack与Ubuntu 22.04 LTS的黄金组合 OpenStack作为开源云计算平台的标杆&#xff0c;与Ubuntu Server的长期支持版本&#xff08;LTS&#xff09;结合&#xff0c;构成了企业级私有云部署的经典方案。Ubuntu 22.04 LTS代号"Jammy Jellyfish"提供了5年的标准支…

作者头像 李华
网站建设 2026/9/11 10:30:37

5分钟上手G-Helper:华硕笔记本性能调优完整指南

5分钟上手G-Helper&#xff1a;华硕笔记本性能调优完整指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertbo…

作者头像 李华
网站建设 2026/9/11 10:27:27

Android WebView版本升级与兼容性优化实践

1. 为什么需要关注WebView版本升级&#xff1f;在Android应用开发中&#xff0c;WebView组件的重要性不言而喻。作为系统内置的浏览器引擎&#xff0c;它承载着应用内网页展示、混合开发框架运行等关键功能。但很多开发者往往忽视了WebView版本管理的重要性&#xff0c;直到遇到…

作者头像 李华