[错误]: AWS-strands 模板的往返测试读回了 ContextManager,而它们设置了 'auto'
作者: NathanTarbert创建于 2026年9月15日更新于 2026年9月17日
标签bugIntegrationtests
AWS-strands-Python-latest 任务在 unit-Python-sdk.yml 中存在,用于捕获上游漂移:它运行 uv sync --locked,然后将 strands-agents 升级到 PyPI 上的最新版本,并重新运行套件。它正在做这件事。在 2026-09-15,它获取了 strands-agents 1.56.0,而锁文件被锁定在 1.18.0,并且 test_template_agent_propagation.py 中的两个案例返回为红色:
FAILED tests/test_template_agent_propagation.py::test_template_param_round_trips[context_manager]
AssertionError: context_manager: 设置了模板中的 'auto',但每个线程的关键字参数中包含
<strands._context_manager.context_manager.ContextManager object at 0x...>
FAILED tests/test_template_agent_propagation.py::test_template_param_reaches_thread_agent_kwargs[context_manager]
AssertionError: context_manager: 设置了模板中的 'auto',但每个线程的代理是在构建时使用的
<strands._context_manager.context_manager.ContextManager object at 0x...>该任务的其余部分通过了 - 1449 个通过,15 个跳过。锁定的 AWS-strands-Python 任务为绿色,因此没有人在 1.18.0 版本上出现问题。变化发生在 Strands 方面。 _distinguishable_sentinel 从 Agent.__init__ 注释中合成每个参数的值,对于 context_manager 则返回字面值 'auto'。更新的 Strands 在构建期间将该字符串解析为 ContextManager 实例,因此当 _extract_agent_kwargs 从模板中读取属性时,它获取的是解析的对象,而不是被传递的字符串,而 _same_value 将两者进行比较并失败。值得一提的是,转发本身看起来是正确的:每个线程的代理是在构建时使用 ContextManager,这是调用者所请求的设置。不是传播本身出现问题,而是 context_manager 的回程身份验证不再成立了。有两个方向,我对其中任何一个都没有明确的偏好:
- 向套件说明上游构造函数正常化的参数,以便比较
context_manager可以接受解析的值,而不是要求字面值的回传。 - 让合成器避免使用已知正常化的参数,并选择构建的
ContextManager作为哨兵,这使得身份验证保持有意义。 无论哪种方式,这都看起来像是测试端的更改,除非有人发现背后的实际传播差距。我很乐意被说服放弃这两种情况,如果有更清晰的读取方式。在运行 #2210 的 CI 过程中发现的。它与该分支无关 - 在这里注明,以便它不被读取为贡献者的问题。
内容来源: ag-ui-protocol/ag-ui