你有没有遇到过这种情况:让AI画一张logo,第一轮效果还不错,你说"把蓝色改成红色",它却一脸茫然——"什么蓝色?我什么时候给你画过图?"
这不是你的提示词写得不好。是大多数AI代理框架根本记不住自己刚生成的图像。单轮生成没问题,一到多轮迭代就断片。想做个能反复修改的AI设计师?门儿都没有。
最近在折腾LlamaIndexTS的时候,我就被这个问题卡住了。
当时我在给这个TypeScript版LlamaIndex做贡献,发现图像生成工具只能玩单轮。用户想基于上一张图做变体、调细节、出多版本?系统完全不知道你在说哪张图。对于做logo迭代、图像编辑、批量生成这类工作流,这简直是致命伤。
我决定挖到底。
先复现问题。第一次调用OpenAI的图像生成API,一切正常,图片出来了。但仔细看返回的数据——image_id这个字段明明存在,却没有被提取出来,更没存进对话历史。后续消息自然找不到参照物,代理就像得了短期记忆丧失。
顺着工具调用流程、响应解析逻辑、消息存储机制一路追查,确认病根:OpenAI返回的image_id被整个漏掉了。不是API的问题,是框架没接。
修复方案很直接,但要改到每一处:
第一,给图像生成工具加上image_id参数,让它能接收和传递这个标识。
第二,重写响应解析逻辑,专门提取OpenAI返回的image_id并妥善存储。
第三,调整消息选项和工具配置,让后续请求能显式引用之前的图像。
第四,搭一个完整示例,演示从生成到修改再到变体的全流程。
PR很顺利就合进去了:feat: multi-turn image generation support #2106。现在开发者可以搭建真正的多轮图像创作代理,而不是每次都得从头描述。
这次踩坑给我提了个醒:流式传输+工具调用的时候,API返回的元数据很容易漏网。别只盯着预期的字段,得看模型实际吐了什么。响应解析里一个小细节,可能卡住一整个产品场景。
如果你也在做AI代理,尤其是涉及图像、工具链或者复杂工作流的,欢迎交流。这类核心交互循环的问题,越早修越早爽。
热门跟贴