| 名称 | nemo-relay-instrument-calls |
| 描述 | “当应用程序拥有工具或LLM/提供者调用点,并需要用NeMo Relay作用域和托管执行API包装它们以处理生命周期事件、中间件或护栏时,使用此技能。” |
| 开源协议 | Apache-2.0 metadata: |
| 作者 | NVIDIA Corporation and Affiliates |
对工具和LLM调用进行插桩
当应用已经有工具函数或模型/提供者调用,并需要通过NeMo Relay正确运行时,使用此技能。 保持原始可调用行为稳定,同时添加Relay生命周期捕获。
默认指南
- 在自然的代理、请求、工作流或图边界周围放置作用域。
- 优先使用托管执行API:
- Rust:
tool_call_execute(ToolCallExecuteParams::builder()...),llm_call_execute(LlmCallExecuteParams::builder()...) - Python:
tools.execute(...),llm.execute(...) - Node.js:
toolCallExecute(...),llmCallExecute(...) - Go:
tools.Execute(...),llm.Execute(...)或顶层包装器
- Rust:
- 仅当宿主框架无法被托管执行辅助函数包装时,才使用手动生命周期API。
嵌入式运行时语义
- 托管工具和LLM执行首先对原始输入运行条件执行护栏。如果被拒绝,运行时会发出独立的标记事件,并且不会运行请求拦截或可调用对象。
- 请求拦截在条件护栏之后运行,并重写到达执行拦截和回调的实际输入。
- 净化请求护栏仅影响发出的开始事件负载。它们不会重写调用者可见的请求或参数。
- 执行拦截使用中间件
next模式包装回调,并且可以通过返回自己的结果来短路。 - 净化响应护栏仅影响发出的结束事件负载。返回给应用程序代码的值仍然是原始回调或执行拦截结果。
- 如果在开始事件发出后执行失败,运行时仍会发出没有语义输出负载的结束事件。
- 工具调用是命名操作,具有JSON兼容的参数和结果。让原始工具可调用负责业务逻辑;让NeMo Relay负责生命周期事件、中间件和元数据。
- LLM调用使用由元数据加内容组成的
LLMRequest。当模型名称和稳定调用标识符对跟踪导出或诊断很重要时,请传递它们。 - 手动生命周期API适用于已经拥有执行的框架适配器。如果使用它们,每个启动调用都需要匹配的结束或错误路径,并显式提供相关的语义负载。
- 部分中间件API,如
request_intercepts(...)和conditional_execution(...),适用于需要手动调用提供程序之前获取一个中间件系列的高级适配器。 - 流式LLM包装器收集块并在流结束时最终确定响应;提前丢弃流可能会阻止终结器和订阅者看到完整的输出。
检查清单
- [ ] 在第一次工具或LLM调用之前选择作用域边界
- [ ] 现有的工具函数被包装,而不丢失其原始参数/结果
- [ ] 现有的LLM/提供者调用在正确的抽象层被包装
- [ ] 在有帮助的地方附加可选的元数据、属性或模型名称
- [ ] 如果调用跨线程或异步任务,处理上下文传播
何时使用其他技能
当任务需要相邻工作流时,选择其他技能:
- 使用
nemo-relay-plugin-observability进行跟踪、ATIF或导出设置。 - 使用
nemo-relay-debug-runtime-integration调试缺少的事件或加载失败。 - 使用
nemo-relay-instrument-context-isolation获取每个请求隔离或工作池指南。 - 使用
nemo-relay-plugin-build实现可复用、配置激活的运行时行为。
相关技能
将这些技能用于相邻工作流:
- 从
nemo-relay-get-started开始入门。 - 使用
nemo-relay-instrument-typed-wrappers添加类型化包装器。 - 使用
nemo-relay-plugin-observability配置导出。 - 使用
nemo-relay-plugin-build打包可复用行为。