GPT Academic 图片生成实战:DALL·E 2/3 绘图、Nano Banana 扩展与 DALL·E 2 局部修改全流程
【免费下载链接】gpt_academic为GPT/GLM等LLM大语言模型提供实用化交互接口,特别优化论文阅读/润色/写作体验,模块化设计,支持自定义快捷按钮&函数插件,支持Python和C++等项目剖析&自译解功能,PDF/LaTex论文翻译&总结功能,支持并行问询多种LLM模型,支持chatglm3等本地模型。接入通义千问, deepseekcoder, 讯飞星火, 文心一言, llama2, rwkv, claude2, moss等。项目地址: https://gitcode.com/GitHub_Trending/gp/gpt_academic
在 GPT Academic 中,图片生成功能让你无需离开学术工作环境,仅凭一段文字描述就能调用 OpenAI 的 DALL·E 2 / DALL·E 3 模型生成概念图、示意图或创意配图,还可以基于 DALL·E 2 的编辑接口对已上传图片的局部区域进行重绘。本文以 图片生成文档 为主体,结合 crazy_functions/Image_Generate.py 与 crazy_functions/Image_Generate_Wrap.py 的源码实现,完整覆盖前置条件、界面操作、参数配置、提示词撰写技巧、图片修改流程与常见问题排查,并解释每个参数在底层是如何被组装进 API 请求的。
前置条件:API Key、GPT 系列模型与代理
图片生成功能依赖 OpenAI 的图像生成 API,使用前必须满足三个条件:
- 已配置 OpenAI API Key:在 config.py 或
config_private.py中配置有效的API_KEY。config.py 中API_KEY支持同时填写多个密钥,用英文逗号分隔(例如同时填 OpenAI、api2d 等中转服务的 key),运行时由select_api_key按当前模型挑选对应密钥。 - 切换到 GPT 系列模型:在界面左上角的模型下拉菜单中选择任意 GPT 系列模型(如
gpt-3.5-turbo或gpt-4o)。这一要求不是界面摆设,而是底层实现决定的——从源码看,Image_Generate.py 中的gen_image函数直接取当前聊天模型的endpoint(即https://api.openai.com/v1/chat/completions),再把路径中的chat/completions替换成images/generations得到绘图端点。因此只有 GPT 系列模型(其 endpoint 指向 OpenAI)才能正确推导出图像 API 地址;若当前是通义千问、智谱等国产模型,端点推导出的将是错误的接口,调用必然失败。 - 网络连接正常:如在国内使用,需在 config.py 中把
USE_PROXY置为True并正确填写proxies(格式为[协议]://[地址]:[端口])。gen_image内部通过get_conf('proxies')读取代理,发起请求与回传图片下载两步都会带上该代理。
注意:图片生成必须使用 GPT 系列模型。如果当前选择的是国产模型,请先切换,否则调用图像 API 时会失败。
此外,若你在 config.py 中配置了API_URL_REDIRECT将 OpenAI 端点重定向到中转服务(参见 request_llms/bridge_all.py 的端点重定向逻辑),图像端点会随聊天端点一并重定向,这意味着中转服务本身也需要支持images/generations接口。
基本使用流程与插件界面
使用图片生成只需三步:
第一步,输入图像描述。在输入框中输入想要生成的图像内容,描述越具体、细节越丰富,结果越接近预期,例如:
A futuristic city skyline at sunset, with flying cars and neon lights reflecting off glass skyscrapers, cyberpunk style第二步,点击插件按钮。在函数插件区的对话分类中找到🎨图片生成(DALLE2/DALLE3, 使用前切换到GPT系列模型)按钮。该插件的注册信息定义在 crazy_functional.py 中,除了挂载旧的函数接口图片生成_DALLE2外,还注册了新一代插件类ImageGen_Wrap。
点击后弹出的配置面板由 Image_Generate_Wrap.py 的define_arg_selection_menu方法定义,包含以下控件:
| 控件 | 类型 | 可选项 / 默认值 | 作用 |
|---|---|---|---|
| 输入图片描述 | 文本框 | 自动从输入框同步 | 图像生成的 prompt |
| 模型 | 下拉框 | Nano Banana(默认)/DALLE3 | 选择生成后端 |
| 分辨率 | 下拉框 | 1K(默认)/2K | Nano Banana 为1K/2K;DALLE3 映射为1024x1024或1792x1024 |
| 横纵比例 | 下拉框 | 1:1/16:9(默认)/3:4 | 仅 Nano Banana 使用 |
| 质量(仅 DALLE3 生效) | 下拉框 | standard(默认)/hd | DALL·E 3 专属 |
| 风格(仅 DALLE3 生效) | 下拉框 | vivid(默认)/natural | DALL·E 3 专属 |
从源码的execute分发逻辑(Image_Generate_Wrap.py)可以看到三条路径:
- 选Nano Banana:调用
图片生成_NanoBanana,使用resolution(1K/2K)与横纵比例; - 选DALLE3:把界面参数拼成
advanced_arg字符串——2K解析为1792x1024,否则为1024x1024,再追加-质量-风格后缀(如1024x1024-standard-vivid),交给图片生成_DALLE3处理; - DALLE2 路径固定使用
1024x1024分辨率。
第三步,等待生成完成。生成的图像直接显示在对话区,同时自动保存到本地供下载。
配置参数详解:分辨率、质量与风格
DALL·E 3 的复合参数解析
DALL·E 3 插件把「分辨率-质量-风格」压缩进一个以连字符分隔的字符串,再在 Image_Generate.py 中解析:
resolution_arg = plugin_kwargs.get("advanced_arg", '1024x1024-standard-vivid').lower() parts = resolution_arg.split('-') resolution = parts[0] # 解析分辨率 quality = 'standard' # 质量与风格默认值 style = 'vivid' for part in parts[1:]: if part in ['hd', 'standard']: quality = part elif part in ['vivid', 'natural']: style = part由此可以确认各参数的语义与默认值:
| 参数 | 说明 |
|---|---|
| 模型 | 选择 DALL·E 2 或 DALL·E 3,对比见下节 |
| 分辨率 | 生成图像尺寸,不同模型支持的选项不同;DALL·E 3 默认1024x1024,可升为1792x1024 |
| 质量(仅 DALL·E 3) | standard标准质量(默认)或hd高清质量 |
| 风格(仅 DALL·E 3) | vivid生动风格——更鲜艳、戏剧性(默认),或natural自然风格——更真实、柔和 |
只有当quality/style非None时,它们才会被写入最终请求体(Image_Generate.py),所以 DALL·E 2 请求不会携带这两个字段。
底层请求是怎么发出的
gen_image的完整请求组装逻辑(Image_Generate.py)值得细看,它是理解所有参数去向的关键:
data = { 'prompt': prompt, 'n': 1, 'size': resolution, 'model': model, # 'dall-e-2' 或 'dall-e-3' 'response_format': 'url' # 要求 API 返回图片 URL } if quality is not None: data['quality'] = quality if style is not None: data['style'] = style response = requests.post(url, headers=headers, json=data, proxies=proxies)要点:
- 认证头使用
Authorization: Bearer {api_key},api_key由select_api_key(llm_kwargs['api_key'], llm_kwargs['llm_model'])按模型选择; response_format固定为url,即 OpenAI 返回一个临时图片地址;- 若响应中取不到
data[0].url,函数会把原始响应内容作为RuntimeError抛出——这就是界面提示 API 错误时能看到具体报错信息的来源。
DALL·E 2 与 DALL·E 3 对比
两个版本的 DALL·E 各有特点,可以根据需求选择:
| 特性 | DALL·E 2 | DALL·E 3 |
|---|---|---|
| 图像质量 | 良好 | 优秀,细节更丰富 |
| 提示词理解 | 基础 | 优秀,能理解复杂描述 |
| 支持分辨率 | 256×256、512×512、1024×1024 | 1024×1024、1792×1024、1024×1792 |
| 生成速度 | 较快 | 稍慢 |
| API 费用 | 较低 | 较高 |
| 额外参数 | 无 | 支持质量和风格调节 |
选择建议:
- 如果只是快速验证想法或对质量要求不高,DALL·E 2 经济实惠;
- 如果需要高质量图像用于正式用途,推荐 DALL·E 3;
- 需要非正方形图像(如横版海报、竖版手机壁纸)时,DALL·E 3 是 OpenAI 体系下的选择(横版对应
1792x1024),或者使用下文介绍的 Nano Banana 模型直接指定横纵比例。
补充:Nano Banana 图像生成路径
从源码结构看,除 DALL·E 外,当前仓库还内置了走 Gemini 图像接口的Nano Banana生成路径(Image_Generate.py 的gen_image_banana与图片生成_NanoBanana),其特点包括:
- 独立取密钥:优先读取
GEMINI_API_KEY与GEMINI_BASE_URL,在开启REROUTE_ALL_TO_ONE_API时改走ONE_API_URL/ONE_API_KEY(见 config.py 中相关配置项); - 支持分辨率档位
1K、2K以及多种横纵比例(1:1、16:9、9:16、4:3、3:4、2:3、3:2、4:5、5:4、21:9),比例非法时自动回退1:1; - 支持「文生图 + 参考图」:会先检查会话中是否有近期上传的图片文件(
have_any_recent_upload_image_files),用 request_llms/bridge_chatgpt.py 的make_multimodal_input把图片编码为 base64 一并送入请求,实现以图生图; - 返回的 base64 图像同样落盘到
gpt_log/下的image_gen/目录,并把路径写入session_file_storage供后续环节复用。
撰写有效的图像描述
图像生成的效果很大程度取决于描述质量,以下是提升生成效果的技巧。
使用英文描述
虽然系统支持中文输入,但 DALL·E 模型对英文的理解更准确。如果中文描述生成的结果不理想,尝试用英文重新描述往往效果更好——这一点也被写进了插件的界面提示语(“如果中文 Prompt 效果不理想,请尝试英文 Prompt”)。
描述要具体
模糊的描述会得到模糊的结果。与其说“画一只猫”,不如写:
A fluffy orange tabby cat sitting on a windowsill, looking out at a rainy day, soft natural lighting, photorealistic style指定风格
明确说明期望的艺术风格会让结果更符合预期,常用风格描述:
photorealistic— 照片级写实oil painting style— 油画风格watercolor— 水彩画digital art— 数字艺术anime style— 动漫风格minimalist— 极简风格cyberpunk— 赛博朋克
描述构图和光线
专业的图像往往有讲究的构图和光线,可以在描述中加入:
..., golden hour lighting, dramatic shadows, shot from below, wide angle lens图片修改功能:DALL·E 2 局部重绘
除了从零生成,GPT Academic 还提供基于 DALL·E 2 的图片修改功能(🎨图片修改_DALLE2插件,注册于 crazy_functional.py)。它让你上传一张图片,把需要修改的区域涂白后,由 AI 根据描述重绘该区域。
使用步骤(多轮交互状态机)
从源码看,图片修改_DALLE2基于ImageEditState(继承自GptAcademicState)实现了一个三步状态机(Image_Generate.py),每次点击插件都会按当前状态索取下一项材料:
- 准备图片:将需要修改的区域用纯白色(RGB 255,255,255)涂抹覆盖,保存为 PNG 格式,然后上传到系统。状态机的第一项
get_image_file校验输入是否为存在的.png文件(支持直接给文件,也支持给目录后自动取其中第一个 PNG); - 输入分辨率:只能填
256x256、512x512、1024x1024三选一,get_resolution会做白名单校验; - 输入修改需求:
get_prompt要求不少于 5 个字符,且不能与分辨率、图片路径格式冲突,建议使用英文提示词。
三项材料收集齐后,插件锁定执行,调用edit_image完成修改,并通过unlock_plugin解锁以便再次使用。
上传前的图像预处理管线
edit_image(Image_Generate.py)在把图片交给images/edits接口前,会做三步本地预处理,这正是「白色涂抹」约定能生效的原因:
make_transparent(image_path, image_path+'.tsp.png') # 白色像素 → 全透明 make_square_image(image_path+'.tsp.png', image_path+'.tspsq.png') # 补黑边成正方形 resize_image(image_path+'.tspsq.png', image_path+'.ready.png', max_size=1024) # 最长边压到 1024 内make_transparent:遍历 RGBA 像素,凡 RGB 恰为 (255,255,255) 的像素 alpha 置 0——涂白区域变成透明「掩码」,模型据此识别待重绘位置;make_square_image:以长边为基准新建黑色底图,将原图居中粘贴,保证输出正方形;resize_image:超过max_size=1024时按比例缩放。
随后以 multipart 表单上传(字段为image、prompt、n、size,注意该路径不上传mask字段,掩码信息靠透明像素传递),端点同样由聊天端点chat/completions → images/edits替换得到。
分辨率限制:图片修改功能仅支持 256×256、512×512 和 1024×1024 三种分辨率,上传的图片会被自动调整为正方形。
输出结果与本地保存
生成完成后,对话区会显示两部分内容(见 Image_Generate.py 的回复组装):
- 中转网址预览:OpenAI 返回的临时图片链接,以
<img src>形式直接展示; - 本地文件预览:系统立即通过
requests.get(image_url, proxies=proxies)把图片下载回本地并展示。
保存逻辑(gen_image/edit_image尾部一致):
file_path = f'{get_log_folder()}/image_gen/' os.makedirs(file_path, exist_ok=True) file_name = 'Image' + time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) + '.png' with open(file_path+file_name, 'wb+') as f: f.write(r.content)即图片统一落在日志根目录(config.py 中PATH_LOGGING默认gpt_log)下按用户划分的image_gen/子目录,文件名格式为Image{年-月-日-时-分-秒}.png,便于按时间检索。get_log_folder的实现见 toolbox.py。
常见问题排查
提示“请切换到 GPT 系列模型”图片生成功能必须使用 OpenAI 的 API 端点。请在界面左上角的模型下拉菜单中切换到任意 GPT 系列模型(如gpt-3.5-turbo、gpt-4o等)后重试。原因见前文:图像端点是从当前模型的聊天端点推导出来的。
生成的图片与描述不符可能的原因和解决方法:
- 描述过于模糊:增加具体细节,如颜色、风格、光线等;
- 使用了中文:尝试用英文重新描述;
- 描述过长或过于复杂:简化描述,突出关键元素;
- 模型局限性:某些概念模型可能无法准确理解,尝试换一种表达方式。
调用失败,提示 API 错误请检查:
- API Key 是否有效且有足够额度(可借助
select_api_key的多密钥机制核对所选模型对应的 key); - 网络连接是否正常,国内用户需配置代理(
USE_PROXY与proxies),且确认代理在连接 OpenAI 时生效; - 是否超出了 API 调用频率限制。 出错时界面展示的报错文本正是
gen_image抛出的RuntimeError内容(即 API 原始响应体),可直接据此判断是鉴权、限流还是参数问题。
DALL·E 3 的分辨率选项为何没有小尺寸?这是 OpenAI 的设定:DALL·E 3 专注于生成高质量图像,仅支持 1024 像素及以上的分辨率。如果需要较小的图片,可以使用 DALL·E 2 或自行缩放 DALL·E 3 生成的图片。
生成的图片能商用吗?根据 OpenAI 的政策,使用其 API 生成的图像版权归创建者所有,可以商用。但建议在使用前阅读 OpenAI 最新的使用条款,并确保生成的内容符合相关法规。
相关文档
- OpenAI 接入 — 配置 OpenAI API Key
- 基础操作 — 了解模型切换等基础操作
- 配置详解 — 代理和网络配置
【免费下载链接】gpt_academic为GPT/GLM等LLM大语言模型提供实用化交互接口,特别优化论文阅读/润色/写作体验,模块化设计,支持自定义快捷按钮&函数插件,支持Python和C++等项目剖析&自译解功能,PDF/LaTex论文翻译&总结功能,支持并行问询多种LLM模型,支持chatglm3等本地模型。接入通义千问, deepseekcoder, 讯飞星火, 文心一言, llama2, rwkv, claude2, moss等。项目地址: https://gitcode.com/GitHub_Trending/gp/gpt_academic
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考