虽然gpt4.1接口表现非常棒,但纯文字的聊天总感觉缺少点什么……最近捣鼓出了 聊天过程中生成图片的功能,来分享一下!
。
我期望的是:能根据用户当前对话,识别用户生图意愿,然后自动调用生图函数,返回结果。再把返回的结果 发给聊天agent,“假装”图片是自己为用户生成的。就继承了连贯和真实感~
1.生成图片
其实,gpt本身的生图操作,其实是很简单的。python代码如下:
import openai
client = openai.OpenAI()

此方法,会默认返回图片url数组(n=1 则只生成一张图片),可以通过“image_url = [img.url for img in response.data]” 来获取。
。
2.修改图片
然后,为了能在聊天过程中修改图片。或者根据对应风格重绘,我尝试了修改图片的写法:

需要传一个二进制图片流,和mask(模板),表示可以修改的图片位置。在这里……为了兼容修改/重绘,mask默认了全部图片内容皆可修改。
注意:image_bytes 并非图片url,可以先获取公网url,再进行转换得来:
import httpx
from io import BytesIO

User-agent 可以打开自己浏览器的f12,找到对应字段复制粘贴即可。
因为本人开发gpt接口对接QQ机器人,故Referer为QQ地址,方便获取qq图片url
然后,已经得到二进制图片流,可以通过如下方式,得到mask:

自此,调用gpt 创建/修改 图片的代码已经完成。
。
3.在什么时候创建图片?
理想情况下,应该是判断用户“生图意愿”,自动调用创建图片函数。这里……传统的固定逻辑编程,显然无法满足这个需求。此时,需要使用agent来进行智能判断!
可以创建一个CreateImage Agent。核心提示词:判断用户生图意愿,返回final_output为“无” 或“优化后的提示词” 。
在每次把用户对话 发送给聊天agent前,先发送给CreateImage agent,判断其返回值是否为“无” 且长度<5(为防止偶然的返回空字符串或False 等字符)。
由程序自行 根据返回值 调用生图函数。
个人做了一点小小的优化:当调用生图函数时,当前prompt+"【extra】: 本次消息包含图片内容,为上游生图模型创作,假装是自己画的,然后重点响应图片相关话题"
没有调用生图函数,但用户有发过来图片时,当前prompt+"【extra】: 本次消息包含图片内容,为用户发你的图片,重点响应图片相关话题"
个人的提示词部分原文如下(因为考虑到agent 更契合英语提示词,所以目前的提示词 都会让AI帮我翻译成英语,更精准表达,让agent更加服从指令):“Note: Image generation consumes significantly higher resources, so directly return '无' when no explicit creation intent is detected.
[OUTPUT RULE]
- If no image‑generation intent → output exactly: 无
- If intent is clear → output only the refined English prompt (one line, no extra characters).
Do **not** add code, explanations, JSON, or line breaks.
[STRICTNESS]
Any deviation from the two allowed outputs will break downstream logic.
Follow these steps every turn.”
。
4.几点经验和思考
4.1 原本想过,直接用agent调用function tool来实现生图,agent自己返回 生成后的图片url。但实际测试过……agent在返回url时,会出现很高的错误率!往往不能精准的返回一长串url,故采用 判断生图意愿,由程序判断agent返回值,再自行调用的方式。
4.2 其实,图片url本身传给gpt 并不会消耗更多token,会直接以文字长度计数。所以……实际情况下,发送图片url给gpt是非常划算的事情!
所以,我个人的方式是:生图之后,把图片url+用户prompt 一起发送给聊天agent,让聊天agent“假装”是自己生成的图片,再来生成文字响应内容。图片url发给gpt,几乎不会占用更多的token。
将url发送给gpt的代码如下:
from agents import Agent, Runner

4.3 生图成本较高!比单纯文字要贵好多。dell-E-2一张图$0.02,特别是dell-E-3 每次生图$0.08 高质量$0.12 。大概5~7毛钱一张图了。还不如网页版的gpt-image-1 效果好。而gpt-image-1 需要授权的组织才可以使用,个人还无法调用,只能网页版使用…… 所以,,目前玩玩就好,聊天中自动生成图片,更多的是图一乐,增加聊天过程中的情趣。而很难真用于绘画和生产。如果感兴趣或者有高技术的大佬,可以试试调用stable diffution接口。
所以,最推荐的反倒是冲个plus 白嫖网页版的gpt-image-1.可以无限生图,质量还非常高!!!
。
我期望的是:能根据用户当前对话,识别用户生图意愿,然后自动调用生图函数,返回结果。再把返回的结果 发给聊天agent,“假装”图片是自己为用户生成的。就继承了连贯和真实感~
1.生成图片
其实,gpt本身的生图操作,其实是很简单的。python代码如下:
import openai
client = openai.OpenAI()

此方法,会默认返回图片url数组(n=1 则只生成一张图片),可以通过“image_url = [img.url for img in response.data]” 来获取。
。
2.修改图片
然后,为了能在聊天过程中修改图片。或者根据对应风格重绘,我尝试了修改图片的写法:

需要传一个二进制图片流,和mask(模板),表示可以修改的图片位置。在这里……为了兼容修改/重绘,mask默认了全部图片内容皆可修改。
注意:image_bytes 并非图片url,可以先获取公网url,再进行转换得来:
import httpx
from io import BytesIO

User-agent 可以打开自己浏览器的f12,找到对应字段复制粘贴即可。
因为本人开发gpt接口对接QQ机器人,故Referer为QQ地址,方便获取qq图片url
然后,已经得到二进制图片流,可以通过如下方式,得到mask:

自此,调用gpt 创建/修改 图片的代码已经完成。
。
3.在什么时候创建图片?
理想情况下,应该是判断用户“生图意愿”,自动调用创建图片函数。这里……传统的固定逻辑编程,显然无法满足这个需求。此时,需要使用agent来进行智能判断!
可以创建一个CreateImage Agent。核心提示词:判断用户生图意愿,返回final_output为“无” 或“优化后的提示词” 。
在每次把用户对话 发送给聊天agent前,先发送给CreateImage agent,判断其返回值是否为“无” 且长度<5(为防止偶然的返回空字符串或False 等字符)。
由程序自行 根据返回值 调用生图函数。
个人做了一点小小的优化:当调用生图函数时,当前prompt+"【extra】: 本次消息包含图片内容,为上游生图模型创作,假装是自己画的,然后重点响应图片相关话题"
没有调用生图函数,但用户有发过来图片时,当前prompt+"【extra】: 本次消息包含图片内容,为用户发你的图片,重点响应图片相关话题"
个人的提示词部分原文如下(因为考虑到agent 更契合英语提示词,所以目前的提示词 都会让AI帮我翻译成英语,更精准表达,让agent更加服从指令):“Note: Image generation consumes significantly higher resources, so directly return '无' when no explicit creation intent is detected.
[OUTPUT RULE]
- If no image‑generation intent → output exactly: 无
- If intent is clear → output only the refined English prompt (one line, no extra characters).
Do **not** add code, explanations, JSON, or line breaks.
[STRICTNESS]
Any deviation from the two allowed outputs will break downstream logic.
Follow these steps every turn.”
。
4.几点经验和思考
4.1 原本想过,直接用agent调用function tool来实现生图,agent自己返回 生成后的图片url。但实际测试过……agent在返回url时,会出现很高的错误率!往往不能精准的返回一长串url,故采用 判断生图意愿,由程序判断agent返回值,再自行调用的方式。
4.2 其实,图片url本身传给gpt 并不会消耗更多token,会直接以文字长度计数。所以……实际情况下,发送图片url给gpt是非常划算的事情!
所以,我个人的方式是:生图之后,把图片url+用户prompt 一起发送给聊天agent,让聊天agent“假装”是自己生成的图片,再来生成文字响应内容。图片url发给gpt,几乎不会占用更多的token。
将url发送给gpt的代码如下:
from agents import Agent, Runner

4.3 生图成本较高!比单纯文字要贵好多。dell-E-2一张图$0.02,特别是dell-E-3 每次生图$0.08 高质量$0.12 。大概5~7毛钱一张图了。还不如网页版的gpt-image-1 效果好。而gpt-image-1 需要授权的组织才可以使用,个人还无法调用,只能网页版使用…… 所以,,目前玩玩就好,聊天中自动生成图片,更多的是图一乐,增加聊天过程中的情趣。而很难真用于绘画和生产。如果感兴趣或者有高技术的大佬,可以试试调用stable diffution接口。
所以,最推荐的反倒是冲个plus 白嫖网页版的gpt-image-1.可以无限生图,质量还非常高!!!