Prhub

#22624 [Test] Fix flaky test_function_call_specific by adding strict=True

原始 PR 作者 JustinTong0323 合并时间 2026-04-12 16:22 文件变更 1 提交数 1 评论 3 代码增减 +1 / -0

执行摘要

修复工具调用测试的随机失败问题,通过添加 strict=True 确保参数模式强制约束。

PR body明确指出,在#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测试用例。

这是一个简单的测试修复,无需深入阅读。值得关注的是它揭示了工具调用协议中strict参数的重要性,以及小模型在非严格模式下可能产生不符合参数模式的输出。对于理解工具调用测试的设计和约束解码机制有一定参考价值。

讨论亮点

review讨论非常有限,只有gemini-code-assist[bot]的自动评论,指出这是一个确保测试覆盖严格模式的修改,但没有实质性的技术讨论。从PR body和关联Issue可以看出,这个修复是基于PR #22586的相同模式,两者都针对#21593引入的协议语义变更导致的测试不稳定问题。

实现拆解

实现非常简单,仅在test/registered/openai_server/function_call/test_openai_function_calling.py文件的test_function_call_specific测试用例中,为get_weather工具的定义添加了"strict": True参数。这个单行变更确保了在工具调用测试中,参数模式会被强制约束,防止模型生成不符合参数模式的空参数。

文件 模块 状态 重要度
test/registered/openai_server/function_call/test_openai_function_calling.py 测试 /OpenAI 服务器 modified 3.0

关键符号

test_function_call_specific

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

strict 参数对工具调用测试的影响 正确性

PR body 解释了为什么需要添加 strict=True:在 #21593 之后,tool_choice 指定具体函数时,如果没有 strict=True,参数生成是尽力而为的,没有约束解码,导致小模型可能生成空参数。

结论:添加 strict=True 确保参数模式被强制约束,修复了测试的随机失败问题。 · 已解决

与历史 PR 的关联 测试

本 PR 是 PR #22586 的补充修复,两者都针对 #21593 引入的协议语义变更导致的测试不稳定问题。

结论:遵循相同的修复模式,为工具定义添加 strict=True 参数。 · 已解决

风险与影响

风险极低。这是一个测试文件的单行修改,仅添加了一个strict=True参数,不会影响生产代码。变更范围非常有限,只影响特定的测试用例。主要风险是如果strict=True参数的行为在未来发生变化,可能会影响测试的预期行为,但这种可能性很小。

影响范围仅限于测试稳定性。修复后,test_function_call_specific测试用例的随机失败率从约30%降至0%,提高了CI的可靠性。对用户、系统或团队的其他方面没有直接影响。这是对测试基础设施的维护性改进。

测试覆盖不足

关联 Issue

#22586 [Test] Fix flaky `test_function_call_required` by adding `strict=True`

完整报告

参与讨论