fix(ai): 修复 OpenAI 结构化输出解析问题并重构代码结构

- 修复 OpenAI structured output 的 properties 包装层解析问题
- 重构 parseCustomSchemaResult 函数,提高代码可维护性:
  - 拆分为多个职责单一的小函数
  - 消除重复的字段提取逻辑
  - 采用清晰的策略模式处理不同解析场景
- 增强测试用例,添加具体的数值和结构验证
- 保持完全向后兼容,所有现有测试通过

Fixes: TestQueryFunctionality/ComprehensiveAnalysis 测试失败问题
This commit is contained in:
lilong.129
2025-06-11 11:15:02 +08:00
parent caf75b087b
commit 50414ec74d
3 changed files with 131 additions and 95 deletions
+13
View File
@@ -183,6 +183,9 @@ func TestQueryFunctionality(t *testing.T) {
assert.NotNil(t, gameInfo)
assert.NotEmpty(t, gameInfo.Content)
assert.NotEmpty(t, gameInfo.Thought)
assert.Equal(t, 4, gameInfo.Rows)
assert.Equal(t, 3, gameInfo.Cols)
assert.Equal(t, 5, gameInfo.TotalIcons)
t.Logf("Custom Schema Query Result: %+v", gameInfo)
})
@@ -206,6 +209,16 @@ func TestQueryFunctionality(t *testing.T) {
assert.NotEmpty(t, result.Thought)
assert.NotNil(t, result.Data)
gameAnalysisResult, ok := result.Data.(*GameAnalysisResult)
assert.True(t, ok)
assert.NotNil(t, gameAnalysisResult)
assert.NotEmpty(t, gameAnalysisResult.Content)
assert.NotEmpty(t, gameAnalysisResult.Thought)
assert.NotEmpty(t, gameAnalysisResult.GameType)
assert.Equal(t, 4, gameAnalysisResult.Dimensions.Rows)
assert.Equal(t, 3, gameAnalysisResult.Dimensions.Cols)
assert.Equal(t, 12, len(gameAnalysisResult.Elements))
t.Logf("Comprehensive Analysis Result: %+v", result.Data)
})
}