You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.3 KiB
4.3 KiB
修复 AI 生成结果保存时的元数据缺失问题
日期: 2026-02-13
类型: Bug 修复
影响范围: AI 生成结果保存服务
🐛 问题描述
发现问题
AI 生成任务完成后,写入业务表时发现关键字段为空:
影响表: storyboard_images, storyboard_videos
缺失字段:
ai_model- AI 模型名称(如dall-e-3)ai_prompt- 用户提示词ai_params- AI 生成参数(如resolution,aspectRatio)
问题原因:
取值逻辑错误,使用了 message.meta_data.get('generate', {}).get('model_id') 的嵌套取值,但实际上需要先提取 generate_config 对象。
🔧 修复方案
修改文件
server/app/services/ai_generation_result_service.py
修复逻辑
修复前 ❌
ai_model=message.meta_data.get('generate', {}).get('model_id'),
ai_prompt=message.content,
ai_params=message.meta_data.get('generate', {}).get('ai_params', {}),
修复后 ✅
# 先提取 generate_config
generate_config = message.meta_data.get('generate', {})
# 再使用 generate_config 取值
ai_model=generate_config.get('model_id'),
ai_prompt=message.content,
ai_params=generate_config.get('ai_params', {}),
影响方法
_save_storyboard_image()✅ 已修复_save_storyboard_video()✅ 已修复_save_project_resource()✅ 已修复
📊 修复效果
修复前
SELECT ai_model, ai_prompt, ai_params
FROM storyboard_images
ORDER BY created_at DESC LIMIT 1;
-- 结果
ai_model | ai_prompt | ai_params
----------|-----------|----------
| | {}
修复后(预期)
SELECT ai_model, ai_prompt, ai_params
FROM storyboard_images
ORDER BY created_at DESC LIMIT 1;
-- 结果
ai_model | ai_prompt | ai_params
----------|------------------|---------------------
dall-e-3 | 生成一个日落场景 | {"resolution": "1024", "aspectRatio": "16:9", "quality": "hd"}
🧪 验证方法
1. 重启服务
docker restart jointo-server-app
2. 触发一次新的生成
curl -X POST 'http://localhost:6160/api/v1/ai/conversations/{id}/messages' \
-H 'Authorization: Bearer {token}' \
-H 'Content-Type: application/json' \
-d '{
"content": "生成测试场景",
"generate": {
"generationType": "image",
"modelId": "dall-e-3",
"aiParams": {
"resolution": "1024",
"aspectRatio": "1:1"
}
}
}'
3. 等待任务完成,查询数据库
SELECT
image_id,
name,
ai_model,
ai_prompt,
ai_params
FROM storyboard_images
ORDER BY created_at DESC
LIMIT 1;
预期结果:
ai_model=dall-e-3ai_prompt=生成测试场景ai_params={"resolution": "1024", "aspectRatio": "1:1"}
📝 相关代码文件
修改文件
server/app/services/ai_generation_result_service.py_save_storyboard_image()- 修复元数据提取_save_storyboard_video()- 修复元数据提取_save_project_resource()- 修复元数据提取(存储在 meta_data 字段)
⚠️ 注意事项
1. 已有数据
修复不会影响已生成的数据,只对新生成的资源生效。
2. project_resources 表
project_resources 表没有独立的 ai_model, ai_prompt, ai_params 字段,这些信息存储在 meta_data 字段中:
{
"conversation_id": "...",
"ai_model": "dall-e-3",
"prompt": "生成一个日落场景",
"ai_params": {
"resolution": "1024",
"aspectRatio": "16:9"
}
}
3. ai_prompt_id 字段
ai_prompt_id 用于关联系统提示词模板,暂时不填充(业务未使用)。
✅ 验证清单
- 修复
_save_storyboard_image()元数据提取 - 修复
_save_storyboard_video()元数据提取 - 修复
_save_project_resource()元数据提取 - 重启服务
- 验证服务健康状态
- 触发新的生成任务测试
- 验证数据库记录正确
🎉 总结
修复了 AI 生成参数提取逻辑,确保关键元数据正确保存到业务表,方便后续审计和复现生成结果。
核心改进:
- ✅ 提前提取
generate_config,避免多次嵌套取值 - ✅ 统一处理逻辑,减少重复代码
- ✅ 完整记录生成上下文(模型、提示词、参数)