关于 nemo-relay-instrument-context-isolation
nemo-relay-instrument-context-isolation 是指导并发应用管理 NeMo Relay scope stack 的技能,适用于处理请求、工作池、异步任务或多个 Agent 的开发者。它强调每项独立工作应拥有自己的栈,以避免事件层级和局部中间件互相影响。
主要功能
- 01为独立请求创建独立栈
- 02说明 scope 层级与事件父子关系
- 03管理作用域内注册项生命周期
- 04提供多语言栈管理建议
- 05排查并发上下文常见故障
适用场景
- 01隔离并发请求的事件树
- 02避免请求间中间件泄漏
- 03向异步任务传播活动作用域
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ nvidia/ skills --skill nemo-relay-instrument-context-isolation安装后在 Claude Code 中输入/nemo-relay-instrument-context-isolation确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
BENCHMARK.mdskill-card.mdskill.oms.sigevals/evals.json详细介绍
使用上下文隔离
当应用运行并发请求、工作线程池、异步任务、goroutine,或在同一进程中运行多个 Agent 时,使用此技能。 将作用域栈的所有权视为请求边界的一部分。
核心规则
每个独立请求、Agent 或工作流都需要自己的作用域栈。除非希望共享祖先关系和作用域本地中间件,否则不要让无关的并发工作共享同一个可变栈。
嵌入式作用域模型
- 根作用域始终存在,推入的作用域会在其下方形成父子树。
- 作用域层级决定事件的父子关系、生命周期边界,以及作用域本地中间件和订阅者的可见性。
- 标准作用域类型包括
Agent、Function、Tool、Llm、Retriever、Embedder、Reranker、Guardrail、Evaluator、Custom和Unknown。 - 当作用域代表请求、任务或有意义的结果边界时,作用域开始和结束事件可以携带语义化的
input和output负载。 - 拥有作用域关闭时,其作用域本地注册项也会消失;对于不应超出请求或 Agent 运行生命周期的行为,请使用这些注册项。
- 对于重试、检查点、中断和并非完整跨度的重要状态转换,标记事件很有用。
各语言默认做法
- Python:通过
get_scope_stack()和contextvars依赖任务本地行为;若工作离开当前执行上下文,则显式传递上下文 - Rust core:当集成需要显式管理栈所有权时,使用
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
评论
支持 Markdown