调用多模态模型应用API ,文字图片的顺序以及消息体结构对问答的影响
例行检查
- [x] 我已确认目前没有类似 features
- [x] 我已确认我已升级到最新版本
- [x] 我已完整查看过项目 README,已确定现有版本无法满足需求
- [x] 我理解并愿意跟进此 features,协助测试和提供反馈
- [x] 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 features 可能会被无视或直接关闭
功能描述
目前在使用多模态应用的 API 时,会通过 content 以有序数组格式传输图片与文字信息,这样能保持文字与图片的联系,但是传入 fastgpt 后,会自动将所有图片放在前面,然后将 content 内的多段 text 合并成一段文字。这样会导致图片与文字失去联系,影响到模型的回复效果。
对于多张图片与文字的组合,claude 官方文档有详细的说明。 https://docs.anthropic.com/claude/docs/vision#3-example-multiple-images-with-a-system-prompt
举个实际的🌰: 调用 API 的原 messages :
[
{
"role": "user",
"content": [
{ "text": "小明: 你最近怎么样,去哪玩了 \n", "type": "text" },
{ "text": "小红:我去三亚玩了一周 \n", "type": "text" },
{ "text": "小红发了一张图片\n", "type": "text" },
{
"type": "image_url",
"image_url": {
"url": "data:image/webp;base64,xxxxx"
}
},
{ "text": "小明:真漂亮,我也去大理玩了几天 \n", "type": "text" },
{ "text": "小明发了一张图片\n", "type": "text" },
{
"type": "image_url",
"image_url": {
"url": "data:image/webp;base64,xxxxx"
}
},
{ "text": "总结一下小红发的图片内容", "type":"text"}
]
}
]
fastgpt 内部转化后:
[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "data:image/webp;base64,image1111"
}
},
{
"type": "image_url",
"image_url": {
"url": "data:image/webp;base64,image222"
}
},
{ "text": "小明: 你最近怎么样,去哪玩了 \n小红:我去三亚玩了一周 \n小红发了一张图片\n小明:真漂亮,我也大理玩了几天 \n小明发了一张图片\n总结一下小红发的图片内容", "type": "text" },
]
}
]
很明显转化后的信息已经完全丢失了 图片与文字的联系,这种场景会很大程度的 影响到模型的回答效果。
还有发现 在消息体中传输 assistant 角色的消息时,会被 fastgpt 自动过滤掉,这里我不清楚是否有 fastgpt 系统设计时的考虑,我认为这个是不应该过滤的,这本来就是大模型开放的功能,assistant 的消息也应该能被用户自定义,比如需要预定义历史记录或需要实现Few-shot 也需要对 assistant 角色的定义,claude 文档中也有提到:https://docs.anthropic.com/claude/reference/messages-examples#multiple-conversational-turns
The Messages API is stateless, which means that you always send the full conversational history to the API. You can use this pattern to build up a conversation over time. Earlier conversational turns don't necessarily need to actually originate from Claude — you can use synthetic
assistantmessages.
我觉得在调用外部 API 时,如果是工作流中首次直接调用大模型的场景,应该将原消息体传大模型。 应用场景
相关示例
@c121914yu
应用api,如果能跟gpt保持一致就好了