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.
 

3.1 KiB

剧本解析切换回 GPT-4o Mini 模型

日期: 2026-02-09
类型: 配置调整
影响范围: 剧本解析 AI 任务

背景

在尝试使用 Gemini 2.5 Flash 进行剧本解析时,发现 Gemini 模型返回的是自然语言解释而非 JSON 格式数据,导致解析失败。

问题表现

AI 返回内容:
好的,我将根据您提供的剧本内容,将其拆解为结构化的 JSON 格式场景和镜头信息。
由于剧本中没有明确的镜头细节(如景别、运镜、时长),我将根据剧本描述和电影叙事惯例进行合理推断和补充...

错误信息:

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

根本原因

  1. Gemini 模型不支持 OpenAI 的 response_format={'type': 'json_object'} 参数
  2. Gemini 倾向于返回自然语言解释,即使在 System Prompt 中要求 JSON 格式
  3. 需要针对 Gemini 模型进行专门的 Prompt 优化和响应处理

解决方案

临时方案:切换回 GPT-4o Mini 模型

  • GPT-4o Mini 支持 response_format 参数,能够强制返回 JSON 格式
  • 稳定可靠,已经过充分测试
  • 性价比高,适合剧本解析任务

长期方案(待实施):

  1. 优化 AIHubMix Provider,针对 Gemini 模型:

    • 在 System Prompt 中添加更强的 JSON 格式约束
    • 实现响应后处理,提取 JSON 内容
    • 添加重试机制
  2. 优化 AI Skill Prompt:

    • 在 Prompt 开头和结尾都强调"只返回 JSON,不要任何解释"
    • 提供 JSON 示例
    • 使用更明确的格式要求

修改内容

1. 修改剧本解析 API 默认模型

文件: server/app/api/v1/screenplays.py

# 修改前
model='gemini-2.5-flash',  # 使用 Gemini 2.5 Flash(性价比最高,支持结构化输出)

# 修改后
model='gpt-4o-mini',  # 使用 GPT-4o Mini(稳定可靠,JSON 格式输出)

2. 重启服务

docker restart jointo-server-app

测试验证

测试步骤

  1. 上传剧本文件
  2. 触发剧本解析
  3. 验证 AI 返回 JSON 格式数据
  4. 验证元素和分镜正确创建

预期结果

  • AI 返回标准 JSON 格式
  • 角色、场景、道具正确提取
  • 分镜正确生成
  • scene_countcharacter_count 正确更新

后续计划

  1. 短期(1-2 周):

    • 监控 GPT-4o Mini 的解析质量和成本
    • 收集用户反馈
  2. 中期(1 个月):

    • 实现 Gemini 模型的专门优化
    • 添加模型选择功能(让用户选择使用哪个模型)
  3. 长期(2-3 个月):

    • 实现多模型对比测试
    • 根据任务类型自动选择最优模型
    • 实现模型降级和重试机制

相关文档

技术债务

  • 实现 Gemini 模型的 JSON 格式优化
  • 添加模型选择 UI
  • 实现多模型对比测试框架
  • 优化 AI Skill Prompt 以支持更多模型