ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于 gpt-image 模型构建图像生成应用:从文本到插画与安全防护实战

基于 gpt-image 模型构建图像生成应用:从文本到插画与安全防护实战 基于 gpt-image 模型构建图像生成应用从文本到插画与安全防护实战【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners导读大语言模型LLM的能力远不止文本生成它们同样能把自然语言描述变成图像。本文围绕 generative-ai-for-beginners 第 9 课的内容系统讲解基于 OpenAIgpt-image模型家族在 Microsoft Foundry / Azure OpenAI 与 OpenAI 平台上均可使用构建图像生成应用的完整流程从原理认知、环境配置、Python 程序编写到图像编辑mask 修复与基于 metaprompt 的安全边界设计。读完本文你将掌握一套可复制的文本 → 图像 → 安全可控的实战方案并能对照仓库内的 Python、TypeScript、.NET 多语言示例自行扩展。学习目标完成本文的学习后你将能够解释什么是图像生成以及它在哪些业务场景中有价值理解gpt-image模型家族并说清它与已弃用的 DALL·E 2/3 的差异用 Python 从零构建一个图像生成应用并了解 TypeScript / .NET 的对应实现使用images.edit对已有图像进行局部编辑mask inpainting使用 metaprompt 为生成内容设置安全边界防止产出不当内容。什么是图像生成图像生成模型根据一段文本提示词prompt直接产出图片。以gpt-image为代表的现代模型底层结合了Transformer 与扩散diffusion两类技术模型在训练阶段学习文本与图像之间的语义关联推理时给定提示词后从随机噪声出发经过迭代式去噪denoise过程逐步把噪声清洗成与描述匹配的图像。目前业界有两类广为人知的图像模型家族gpt-imageOpenAI——当前主流一代也是本文使用的模型。它同时支持文生图text-to-image与图像编辑带 mask 的局部重绘 / inpaintingMidjourney——流行的第三方模型拥有独立的订阅服务与基于 Discord 的工作流。⚠️ 注意OpenAI 早期的图像模型DALL·E 2与DALL·E 3均已进入遗留legacy状态。DALL·E 3 已不再支持新部署而create_variation这类接口只存在于 DALL·E 2。新项目一律推荐使用gpt-image模型家族。如何选择gpt-image模型在 Microsoft Foundry 平台上以下模型已正式发布Generally Available模型说明gpt-image-2最新、能力最强的图像模型——默认推荐选择。gpt-image-1.5已正式发布以更低成本提供不错的生成质量。gpt-image-1-mini已正式发布最快、成本最低的选项。gpt-image-1仅限预览Preview使用。部署前请以 Foundry 平台的模型清单为准确认目标模型的可用性与区域支持。关键差异返回 base64 而非 URL重要gpt-image模型将生成的图像以base64字符串b64_json字段返回而不是图片 URL。你的代码需要把 base64 字符串解码为字节并落盘保存——不存在可下载的图片地址。这一点与 DALL·E 时代的实现有本质区别也是编写代码时最容易踩的坑。环境准备创建资源、配置密钥、安装依赖你可以选择面向Microsoft Foundry / Azure OpenAI示例文件以aoai-*命名或OpenAI 平台示例文件以oai-*命名运行本文的示例。1. 创建并部署模型在 Azure 门户中创建一个 Microsoft Foundry 资源资源创建向导然后在资源内部署一个图像模型推荐选择gpt-image-2。部署名称deployment name请记录下来后续代码与配置中都会用到。2. 配置.env文件在项目根目录创建.env内容如下AZURE_OPENAI_ENDPOINTyour endpoint AZURE_OPENAI_API_KEYyour key AZURE_OPENAI_DEPLOYMENTgpt-image-2这三个值可以在 Foundry 门户中你所属资源的Deployments部署页面找到。仓库中的示例如 aoai-app.py均通过dotenv.load_dotenv()加载该文件密钥不直接写死在代码里。3. 安装依赖库创建requirements.txt内容与仓库 09-building-image-applications/requirements.txt 保持一致python-dotenv openai pillow requestspython-dotenv强烈推荐用于把密钥放在.env中与代码隔离openai与 OpenAI API 交互的官方 SDKpillowPython 图像处理库用于打开与展示生成的图片requestsoai-app.py等示例中可能用到的 HTTP 库可选依赖。然后创建并激活虚拟环境再安装依赖python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt构建你的第一个图像生成应用Python新建app.py写入以下代码。它会生成一张图片并保存为 PNG 文件import os import base64 from openai import AzureOpenAI from PIL import Image import dotenv dotenv.load_dotenv() # 将客户端指向你的 Azure OpenAIMicrosoft Foundry资源。 # 图像模型需要较新的 API 版本——请查阅 Foundry 文档确认你的模型所需的版本。 client AzureOpenAI( api_keyos.environ[AZURE_OPENAI_API_KEY], api_version2025-04-01-preview, azure_endpointos.environ[AZURE_OPENAI_ENDPOINT], ) deployment os.environ[AZURE_OPENAI_DEPLOYMENT] # 例如 gpt-image-2 result client.images.generate( modeldeployment, promptBunny on a horse, holding a lollipop, on a foggy meadow where it grows daffodils, size1024x1024, # 也支持 1536x1024横版、1024x1536竖版或 auto n1, ) # gpt-image 模型返回 base64b64_json而不是 URL——需要解码为字节。 image_bytes base64.b64decode(result.data[0].b64_json) os.makedirs(images, exist_okTrue) image_path os.path.join(images, generated-image.png) with open(image_path, wb) as f: f.write(image_bytes) Image.open(image_path).show()运行python app.py后PNG 文件会保存到images/目录并调用系统默认图片查看器展示。逐段理解这段代码导入依赖os、base64、OpenAI SDK、Pillow、dotenv加载环境变量dotenv.load_dotenv()读取.env初始化客户端用AZURE_OPENAI_API_KEY、AZURE_OPENAI_ENDPOINT与api_version2025-04-01-preview构造AzureOpenAI客户端图像模型需要较新的 API 版本调用生成接口client.images.generate(...)传入模型部署名、提示词、尺寸与数量解码并保存gpt-image模型把图片放在data[0].b64_json用base64.b64decode解码为字节后写入images/generated-image.png展示Image.open(image_path).show()打开图片。仓库中的完整版 aoai-app.py 还补充了工程化细节用try/finally包裹调用并在finally中打印完成状态、通过result.model_dump_json()序列化响应、手动创建images目录os.mkdir等可作为你封装生产代码的参考。images.generate参数详解prompt生成图像所用的文本提示词。示例中为 Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils提示词描述越具体生成结果越可控size生成图像的尺寸支持1024x1024方形、1536x1024横版、1024x1536竖版或auto自动n一次生成的图片数量示例为n1model你的图像模型部署名例如gpt-image-2。 提示每次调用images.generate都会对相同提示词产生不同的图像——图像模型没有temperature参数那是文本生成的控制项。想要更多样化就再次调用 API想减少变化就让提示词更具体。多语言实现TypeScript 与 .NET本课的仓库同时提供了其他语言的对照实现便于你在不同技术栈中落地。TypeScriptAzure OpenAI参考 image-generation-app/src/main.tsimport { AzureOpenAI } from openai; import * as dotenv from dotenv; import * as fs from fs; dotenv.config(); const endpoint process.env.AZURE_OPENAI_ENDPOINT || ; const apiKey process.env.AZURE_OPENAI_API_KEY || ; const deployment process.env.AZURE_OPENAI_DEPLOYMENT || gpt-image-2; const apiVersion 2025-04-01-preview; const promptImage captain with a parrot on his shoulder; export async function main() { try { const client new AzureOpenAI({ endpoint, apiKey, deployment, apiVersion }); const imageGenerations await client.images.generate({ model: deployment, prompt: promptImage, n: 1, size: 1024x1024, }); for (const image of imageGenerations.data) { // gpt-image 模型返回 base64b64_json而不是 URL const buffer Buffer.from(image.b64_json ?? , base64); fs.writeFileSync(generated-image.png, buffer); console.log(Saved generated-image.png); } } catch (error) { console.log(The sample encountered an error: , error); } } main();TypeScript 版与 Python 版的核心逻辑完全一致Buffer.from(b64_json, base64)负责解码fs.writeFileSync负责落盘。项目依赖openai、dotenv与启动方式可参考 package.json。.NETAzure OpenAI仓库提供了 .NET Interactive notebookDIB格式的示例 notebook-azure-openai.dib关键调用如下AzureOpenAIClient azureClient new(new Uri(endpoint), new ApiKeyCredential(key)); ImageClient imageClient azureClient.GetImageClient(deployment); GeneratedImage image await imageClient.GenerateImageAsync( captain with a parrot on his shoulder, new ImageGenerationOptions() { Size GeneratedImageSize.W1024xH1024, }); // gpt-image 模型以字节返回图像DALL-E 模型返回的是 URL。 if (image.ImageUri is not null) { Console.WriteLine(image.ImageUri); } else { string path generated_image.png; await File.WriteAllBytesAsync(path, image.ImageBytes.ToArray()); Console.WriteLine($Image saved to {path}); }注意代码中特意区分了两种返回形态ImageUriDALL·E 时代的 URL 返回与ImageBytesgpt-image的字节返回同样印证了base64/字节 vs URL这一关键差异。OpenAI 平台版本oai-*如果不使用 Azure仓库还提供了面向 OpenAI 平台的 oai-app.py。它的差异点在于使用OpenAI客户端而非AzureOpenAI密钥为OPENAI_API_KEY并且代码开头显式校验 API Key 是否存在缺失即抛出ValueError异常捕获也使用了更细粒度的OpenAIError。该文件中还保留了client.images.create_variation(...)的调用片段——这正是文档中强调的仅存在于 DALL·E 2 的遗留接口阅读时可将其视为反面教材新项目不要照搬。图像编辑用 mask 对已有图片做局部重绘gpt-image模型不仅能生成新图还能编辑已有图片提供原始图片、一张可选的mask蒙版标记需要修改的区域以及描述修改内容的提示词即可。与生成一样编辑结果同样以 base64 返回。result client.images.edit( modeldeployment, imageopen(sunlit_lounge.png, rb), maskopen(mask.png, rb), promptA sunlit indoor lounge area with a pool containing a flamingo, ) image_bytes base64.b64decode(result.data[0].b64_json) with open(images/edited-image.png, wb) as f: f.write(image_bytes)仓库 09-building-image-applications/python/aoai-assignment.ipynb 中给出了另一个编辑示例给兔子戴上帽子提示词为 An image of a rabbit with a hat on its head并指出底图只有兔子最终图像中兔子头顶多了一顶帽子用来直观说明 mask 重绘的效果。下面三张图展示了编辑流程的完整闭环——左为原始图片阳光充足的室内休息区中为蒙版 mask标记待修改区域右为按提示词含火烈鸟的泳池编辑后的结果用 metaprompt 设置安全边界能生成图像之后还需要为应用加上安全护栏guardrails避免模型产出不安全或不符合品牌调性的内容。metaprompt元提示词就是在用户提示词前拼接的一段约束文本用来限定模型的输出范围。仓库 aoai-solution.py 给出了一个面向儿童教育场景的完整示例disallow_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} Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on. 这段 metaprompt 做了三件事角色设定声明你是为儿童设计图像的助手设计师从源头约束生成基调输出约束明确要求工作安全、适合儿童、彩色、横版、16:9 宽高比把构图与安全要求写进指令负面清单把disallow_list中的禁词武器、暴力、血腥、裸露、成人内容等注入提示词指示模型忽略任何不安全的输入。组装好prompt后把它传给client.images.generate(...)即可result client.images.generate( modelmodel, promptprompt, # 即 meta_prompt 用户任务 size1024x1024, n1, )这样每一张生成的图片都会落在 metaprompt 划定的边界内。实际生产中可以把它与 Microsoft Foundry 内置的内容过滤器content filters叠加使用形成纵深防御defense in depth在应用层与平台层双重兜底。实战任务为学生生成纪念碑插图回到课程的虚构背景初创公司Edu4All正在构建学习工具学生们需要用于作业与测验的插图。请你完成以下任务构建一个应用为 Edu4All 的学生生成**纪念碑monuments**插图选哪些纪念碑由你决定并把这些纪念碑置于不同的创意场景中——例如黄昏时分的著名地标旁边有一个眺望的孩子。建议先自己动手实现再对照仓库中的参考解法PythonAzure任务答案aoai-solution.py内含完整的 metaprompt 边界 凯旋门示例PythonAzure完整生成应用aoai-app.pyPythonOpenAI 平台oai-app.pyTypeScriptAzuretypescript/image-generation-app.NETAzuredotnet/notebook-azure-openai.dib。同时可以配合 python/aoai-assignment.ipynbAzure与 python/oai-assignment.ipynbOpenAI两本 Notebook 逐格运行、边学边练。总结原理gpt-image类模型基于 Transformer 扩散技术把随机噪声迭代去噪为与提示词匹配的图像选型新项目默认选gpt-image-2追求低成本可选gpt-image-1-miniDALL·E 2/3 已弃用返回形态gpt-image返回b64_jsonbase64必须解码后保存不存在可下载的 URL生成client.images.generate(model, prompt, size, n)一次调用即可出图无temperature参数编辑client.images.edit配合 mask 可对图片局部重绘结果同样为 base64安全通过 metaprompt角色设定 输出约束 负面清单划定边界并与 Foundry 内置内容过滤器叠加形成纵深防御。至此你已经掌握了从零构建图像生成应用、进行图像编辑以及设置安全边界的完整链路可以基于 generative-ai-for-beginners 第 9 课继续深入探索后续课程。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表