| 名称 | nemo-relay-instrument-context-isolation |
| 描述 | 当并发请求、异步任务、线程、工作器、协程或智能体需要独立的NeMo Relay作用域栈以及正确的祖先传播时,使用此技能。 |
| 开源协议 | Apache-2.0 metadata: |
| 作者 | NVIDIA 公司及其附属公司 |
使用上下文隔离
当应用程序在同一进程中运行并发请求、工作池、异步任务、线程、协程或多个智能体时,请使用此技能。将作用域栈的所有权视为请求边界的一部分。
核心规则
每个独立的请求、智能体或工作流都需要自己的作用域栈。除非您希望共享祖先和共享的作用域局部中间件,否则不要在无关的并发工作之间共享一个可变的栈。
嵌入式作用域模型
- 根作用域始终存在,推入的作用域在其下方形成父-子树。
- 作用域层级决定事件的父子关系、生命周期边界以及作用域局部中间件和订阅者的可见性。
- 标准作用域类型包括
Agent、Function、Tool、Llm、Retriever、Embedder、Reranker、Guardrail、Evaluator、Custom和Unknown。 - 当作用域表示请求、任务或有意义的结果边界时,作用域开始和结束事件可以携带语义化的
input和output载荷。 - 作用域局部注册在所属作用域关闭时消失;使用它们来获得不应超过请求或智能体运行期的行为。
- 标记事件对于重试、检查点、中断以及不是完整跨度的重要状态转换非常有用。
各语言默认行为
- Python:通过
get_scope_stack()和contextvars依赖任务局部行为,或者在工作离开当前执行上下文时显式传播。 - Rust 核心:当集成需要显式栈所有权时,使用运行时辅助函数,如
create_scope_stack()、current_scope_stack()和set_thread_scope_stack(...)。 - Go:使用
NewScopeStack()和ScopeStack.Run(...)实现 goroutine 安全的用法。 - Node.js:使用
createScopeStack()和setThreadScopeStack(...)为当前执行路径显式创建并设置作用域栈。
常见错误
- 来自不同请求的事件出现在同一个根 UUID 下。
- 作用域局部中间件在请求之间泄漏。
- 工作线程工作在没有预期活动作用域的情况下运行。
- 集成在未显式初始化栈的情况下激活 NeMo Relay。
- 在跨越异步任务、goroutine 或 JS 工作器边界后,依赖线程局部栈。
相关技能
nemo-relay-instrument-callsnemo-relay-plugin-observabilitynemo-relay-debug-runtime-integration