Skip to content

feat: 为evaluation示例新增pytest配置,增加阈值失败兜底逻辑#219

Open
CongkeChen wants to merge 1 commit into
mainfrom
internal_pipeline_test
Open

feat: 为evaluation示例新增pytest配置,增加阈值失败兜底逻辑#219
CongkeChen wants to merge 1 commit into
mainfrom
internal_pipeline_test

Conversation

@CongkeChen

Copy link
Copy Markdown
Contributor

feat: 为evaluation示例新增pytest配置,增加阈值失败兜底逻辑

@CongkeChen CongkeChen closed this Jul 22, 2026
@CongkeChen CongkeChen reopened this Jul 22, 2026
@helloopenworld

Copy link
Copy Markdown
Contributor

AI Code Review

下面是审查结论。我已结合 trpc_agent_sdk/evaluation/_agent_evaluator.pyevaluate / _EvalExecuter.evaluate / _run 的实现以及各 example 测试调用方式做了验证。

发现的问题

⚠️ Warning

  • examples/evaluation/conftest.py:43-46:autouse 兜底会静默吞掉所有阈值失败,削弱示例测试的回归信号

    • _ignore_threshold_failuresautouse,对 examples/evaluation/ 下全部测试生效,任何 _EvaluationCasesFailedAssertionError 子类)都被捕获后仅 print 并返回 None。这意味着即便所有 eval case 失败(如 SDK 评测逻辑回归、agent 配置失效),示例测试也会通过,开发者不会在本地/CI 收到失败信号。建议至少在 swallowed 前用 pytest.skip 或基于环境变量(如 EXAMPLES_STRICT=1)决定是否真正放行,而非无条件静默通过。
  • examples/evaluation/conftest.py:45:对 AgentEvaluator.evaluatestaticmethod 替换可工作但脆弱,且与 _EvalExecuter.evaluate 补丁存在双重包裹

    • AgentEvaluator.evaluate 内部会调用 executer.evaluate()(见 _agent_evaluator.py:360),两层 patch 同时生效时 _EvaluationCasesFailed 总是先被内层 _safe_executer_evaluate 捕获,外层 _safe_agent_evaluate 的 try/except 实际永不触发——逻辑无害但属于冗余路径,易在后续重构(例如 evaluate 改为不经过 _EvalExecuter.evaluate)后产生行为偏差。建议只保留对 _EvalExecuter.evaluate 的兜底,或加注释说明双重包裹的依赖关系。

💡 Suggestion

  • examples/evaluation/conftest.py:43:该 conftest 仅在以 examples/evaluation 为 rootdir 运行 pytest 时生效(仓库 pyproject.tomltestpaths=["tests"]、CI 仅跑 tests/,见 .github/workflows/ci.yml:78),示例测试并不在 CI 路径中。建议在 examples/evaluation/README 或 conftest 注释中注明“本兜底仅用于本地示例冒烟,不参与 CI”,避免后续误以为示例有 CI 保护。

总结

无 Critical 问题:patch 机制(staticmethod 替换、方法替换、_result 在抛异常前已设置使 get_result() 仍可用)经核对均正确,不会破坏 pass_at_k 等用 get_executer 的测试。主要风险是 autouse 兜底把阈值失败静默化为通过,削弱了示例测试的回归信号,建议改为显式可控的放行策略。

测试建议

  • 建议补一条用例验证兜底可被关闭(如设置 strict 环境变量后,构造一个必然触发 _EvaluationCasesFailed 的 evalset,断言测试会失败/跳过),以避免兜底逻辑本身在后续重构中失效却无人察觉。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants