执行摘要
该PR修复了test_function_call_specific测试用例的随机失败问题,通过为get_weather工具添加strict=True参数,确保在tool_choice指定具体函数时参数模式被强制约束。这是对PR #22586的补充修复,解决了因#21593引入的协议语义变更导致的测试不稳定性问题,将测试失败率从约30%降至0%,提高了CI可靠性。
功能与动机
问题根源:在PR #21593之后,tool_choice指定具体函数时,如果没有strict=True参数,系统只会保证生成工具调用,但参数生成是尽力而为的(没有参数模式的约束解码)。
具体表现:在Llama-3.2-1B模型上,当temperature=0.8时,这导致约30%的随机失败率,模型会生成空的{}参数,导致assertIn("city", args_obj)断言失败。
修复动机:PR #22586已经修复了test_function_call_required测试用例的类似问题,本PR是补充修复test_function_call_specific测试用例,确保测试稳定性。PR body提供了详细的证据:
- 在#21593之前:10/10通过
- 在#21593之后:7/10通过(30%失败)
- 本修复后:11/11通过
实现拆解
实现非常简单,仅修改了一个文件的一行代码:
| 文件路径 |
变更内容 |
影响 |
test/registered/openai_server/function_call/test_openai_function_calling.py |
在test_function_call_specific测试用例中,为get_weather工具定义添加"strict": True参数 |
确保参数模式被强制约束,防止模型生成空参数 |
关键代码片段:
{
"type": "function",
"function": {
"name": "get_weather",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"}
},
"required": ["city"],
},
"strict": True, # 新增行
},
}
评论区精华
review讨论非常有限,只有gemini-code-assist[bot]的自动评论:
"This pull request updates the test_openai_function_calling.py file by adding the 'strict': True parameter to a function definition schema within a test case. This modification ensures that the test covers the strict mode for OpenAI function calling."
从PR body和关联Issue可以看出,这个修复是基于PR #22586的相同模式,两者都针对#21593引入的协议语义变更导致的测试不稳定问题。
风险与影响
技术风险:
- 风险极低,仅修改测试文件,不影响生产代码
- 如果
strict=True参数的行为在未来发生变化,可能会影响测试的预期行为,但这种可能性很小
影响分析:
- 测试稳定性:修复后,
test_function_call_specific测试用例的随机失败率从约30%降至0%
- CI可靠性:提高了持续集成测试的可靠性
- 用户影响:对最终用户没有直接影响
- 系统影响:不改变系统功能或性能
关联脉络
与历史PR的关系:
- PR #22586:直接前驱,修复了同一个测试文件中的
test_function_call_required测试用例的相同问题
- PR #21593:根本原因,引入了协议语义变更,导致
tool_choice指定具体函数时,如果没有strict=True,参数生成变为尽力而为
演进趋势:
- 这反映了工具调用协议中
strict参数的重要性逐渐被认识
- 小模型在非严格模式下可能产生不符合参数模式的输出,需要通过测试约束来保证可靠性
- 测试用例需要与协议语义变更保持同步,避免因协议更新导致的测试不稳定
跨PR模式:
- 这是第二个修复工具调用测试随机失败的PR,表明团队正在系统性地解决#21593引入的测试回归问题
- 类似的修复模式(添加
strict=True)可能还需要应用到其他相关的测试用例中
参与讨论