好的,我们来到了本系列规范拆解的最后一站——N-af_Inference服务的API实现细节。这是“天穹智脑”所有智慧的最终出口,也是其价值变现的关键环节。

深度解析 3GPP TS 29.530:6.4 Naf_Inference Service API (中心化推理服务的实现蓝图)

本文技术原理深度参考了 3GPP TS 29.530 V1.0.0 (2025-09) Release 19 规范,我们将聚焦于第6.4章“Naf_Inference Service API”。本章是Naf_Inference服务的Stage 3协议实现指南,它将第5.5章中描述的“AI问询台”工作流程,转化为开发者可以逐行编码实现的具体API接口、资源和数据模型。

“天穹智脑”的开发项目已接近尾声。Team Gamma成功打造了强大的“AI模型工厂”(Naf_Training服务),并为“未来之声”音乐节生产出了高精度的负载预测模型model-music-fest-v1.0。现在,所有的目光都聚焦在Team Delta身上。他们的任务是构建“天穹智 अनान”面向全网的“智慧大脑API”——Naf_Inference服务。

首席架构师Dr. Evelyn Reed在Team Delta的最后一次技术评审会上强调:“这是我们所有努力的临门一脚。如果说训练服务是‘十年磨一剑’,那么推理服务就是‘剑气破长空’。它必须做到极致的稳定、极致的高效、极致的易用。第6.4章就是我们确保‘剑气’能够精准、可靠地命中每一个目标的最终保障。让我们确保每一个细节都完美无瑕。”


1. 6.4.1 & 6.4.2 - API的身份与通信协议

规范的开篇部分,依然是定义API的“身份标识”和“通信规则”,保持了SBA设计的高度一致性。

1.1 6.4.1 Introduction - API的统一资源标识符 (URI)

规范原文引用 (Clause 6.4.1 Introduction)

The Naf_Inference service shall use the Naf_Inference API.

The API URI of the Naf_Inference API shall be:

{apiRoot}/<apiName>/<apiVersion>

… with the following components:

  • The shall be “naf-inference”.
  • The shall be “v1”.

深度解读:

  • API身份 (apiName): Naf_Inference服务的apiName被明确指定为naf-inference。这个名称将作为该服务在5G网络中的唯一标识,出现在所有相关API的URI中。

  • 完整URI前缀: 因此,所有对此服务的API调用,其URL都将以{apiRoot}/naf-inference/v1为前缀。例如,一个创建推理订阅的完整请求URI将是https://brain.operator.com/naf-inference/v1/subscriptions

1.2 6.4.2 Usage of HTTP - 标准化的通信栈

本节再次确认了SBA的通用通信技术栈,与其他服务完全一致:

  • 协议: HTTP/2,并根据AF的可信度要求使用TLS。

  • 数据格式: application/json用于成功交互,application/problem+json用于错误报告。

Team Delta的负责人,资深系统工程师Maria,对团队说:“基础通信层是标准件,直接复用。我们的战场在第6.4.3节,在如何设计一个能够承载海量、高并发推理请求的资源模型上。”


2. 6.4.3 Resources - “AI问询台”的API骨架

本节是6.4章的核心,定义了“AI问询台”对外暴露的“咨询受理”接口。

2.1 6.4.3.1 Overview - 资源与方法总览

Figure 6.4.3.1-1: Resource URI structure of the Naf_Inference APITable 6.4.3.1-1: Resources and methods overview为我们描绘了API的功能地图。

资源URI结构:


{apiRoot}/naf-inference/<apiVersion>

    |

    +-- /subscriptions

        |

        +-- /{subscriptionId}

资源与方法概览表 (Table 6.4.3.1-1):

| Resource purpose/name | Resource URI (relative path after API URI) | HTTP method | Description (service operation) |

| :--- | :--- | :--- | :--- |

| AF Inference Subscriptions | /subscriptions | POST | Creates a new Individual AF Inference Subscription resource. |

| Individual AF Inference Subscription | /subscriptions/{subscriptionId} | PUT | Updates an existing Individual AF Inference Subscription identified by subresource {subscriptionId}. |

| | | PATCH | Modifies an existing Individual AF Inference Subscription identified by subresource {subscriptionId}. |

| | | DELETE | Deletes an Individual AF Inference Subscription identified by subresource {subscriptionId}. |

深度解读:

  • 高度一致性与细微差别: 资源结构再次沿用了经典的/subscriptions/{subscriptionId}模式。与Naf_VFLInference服务一样,单个成员资源上同样没有GET方法。这再次强化了推理服务的设计哲学:状态和结果由AF通过Notify主动推送,消费者不应、也无需主动轮询查询。

2.2 6.4.3.2 Resource: AF Inference subscriptions - 创建推理订阅 (“提交问题”)

本节详细定义了如何通过POST /subscriptions来提交一份新的推理任务订阅。

HTTP POST /subscriptions 请求与响应详解:

1. 请求 (Request)

  • Request Body: 请求体必须包含一个InferEventSubsc类型的数据结构。

Table 6.4.3.2.3.1-2: Data structures supported by the POST Request Body on this resource

| Data type | P | Cardinality | Description |

| :--- | :--- | :--- | :--- |

| InferEventSubsc | M | 1 | Contains the information required for the creation of a new Individual AF Inference Subscription resource. |

2. 响应 (Response)

  • 成功 (201 Created):

    • Response Body: 响应体中返回一个InferEventSubsc结构,其中可能包含立即返回的推理结果(如果请求中要求立即报告)。

    • Headers: 必须包含Location头,指向新创建订阅的URI。

场景实现 (Team Delta的代码逻辑):

后端工程师小张开始设计POST /subscriptions的处理逻辑,重点关注性能弹性

  1. 定义Controller方法,监听POST /naf-inference/v1/subscriptions

  2. 将请求体反序列化为InferEventSubsc对象。

  3. 核心业务逻辑 - 任务受理与调度:

    a. 快速验证订阅参数。关键验证: InferEventSubsc中引用的modelId是否存在于“天穹智脑”的模型仓库中,且模型状态为“可用”。

    b. 生成唯一的subscriptionId

    c. 将订阅信息持久化到高性能存储中。

    d. 解析报告要求 (reportingInformation):

    *   如果要求立即报告 (`immRep=true`),则**同步**调用推理引擎,并将结果填充到响应体中。
    
    *   如果要求周期报告,则将一个定时任务提交到后台的分布式任务调度器(如Celery, Quartz)。
    
    *   如果要求事件触发,则将订阅注册到内部的事件总线或消息队列中,监听相应的触发事件。
    
  4. 构建201 Created响应,设置Location头,并返回确认信息。

  5. 如果模型不存在或不可用,返回404 Not Found409 Conflict,并在ProblemDetails中说明。

2.3 6.4.3.3 Resource: Individual AF Inference subscriptions - 推理任务的动态管理

这部分的操作语义与Naf_VFLInference服务完全一致,我们在此重点突出其在“音乐节”场景下的应用。

  • PUT/PATCH /{subscriptionId}: 动态调整“问题”

    • 场景: 音乐节进入高潮,NWDAF决定将告警阈值从80%调低到70%,并增加两个入口处的小区到监控列表。它发送一个PATCH请求,只更新eventsreportingInformation字段。“天穹智脑”的后台任务调度器需要能够“热更新”正在运行的推理任务,无缝应用新的参数。
  • DELETE /{subscriptionId}: “结束咨询”

    • 场景: 音乐节结束,OAM和NWDAF发送DELETE请求。“天穹智脑”必须确保所有相关的后台定时任务、事件监听器都被彻底清理,释放所有计算资源。

3. 6.4.5 & 6.4.6 - “智慧答案”的推送与数据结构

这是将“天穹智脑”的计算结果转化为可行动的洞察,并交付给消费者的最终环节。

3.1 6.4.5 Notifications - 异步推送“推理洞察”

规范原文引用 (Clause 6.4.5.5 Inference notification)

The Inference Event Notification is used by the AF to report one or several observed Inference Events to a NF service consumer…

POST {notifUri} 详解:

  • 动作: “天穹智脑”根据订阅的报告策略,主动向消费者指定的notifUri发送POST请求。

  • 请求体: 包含一个InferNotif数据结构。

  • 响应: 消费者返回204 No Content确认收到。

3.2 6.4.6 Data Model - 数据的精确定义

本节定义了Naf_Inference服务所有核心数据结构的内部字段,这是构建可互操作API的基石。

Type: InferEventSubsc (推理订阅请求)

Table 5.4.6.4.2-1: Definition of type InferEventSubsc (注意:规范原文中章节号可能存在笔误,应为6.4.6.x.x) 定义了“推理任务委托书”的模板。

| Attribute name | Data type | P | Cardinality | Description |

| :--- | :--- | :- | :--- | :--- |

| notifUri | Uri | M | 1 | 接收推理结果的回调地址。 |

| notifCorreId | string | M | 1 | 通知关联ID。 |

| inferAnaSubs | array(InferAnaSub) | M | 1..N | 推理分析订阅。定义了要对哪个分析事件、使用哪个模型进行推理。 |

| reportInfo | ReportingInformation | O | 0..1 | 报告要求。定义了通知的触发策略。 |

| inferReq | InferReq | O | 0..1 | 推理要求,如推理的上下文。 |

| inferResults | array(InferResult) | O | 1..N | 仅当immRep=true时出现在POST响应中的首次推理结果。 |

Type: InferAnaSub (单个分析事件的推理订阅)

这是inferAnaSubs数组的核心元素,定义了“问什么,用什么模型问”。

| Attribute name | Data type | P | Cardinality | Description |

| :--- | :--- | :- | :--- | :--- |

| anaEvent | NwdafEvent | M | 1 | 要推理的分析事件,如LOAD。 |

| modelReference | Uri | M | 1 | 关键字段! 引用在Naf_Training服务中训练好的模型URI/ID,如"model-music-fest-v1.0"。 |

| tgtUe | TargetUeInformation | C | 0..1 | 推理的目标(区域、小区、用户群)。 |

| eventFilter | EventFilter | O | 0..1 | 推理事件的过滤器。 |

深度解读:

  • modelReference: 这个字段是连接Naf_TrainingNaf_Inference两个服务的关键纽带。消费者在Naf_Training的交付通知中获得这个URI,然后在这里使用它,精确地告诉“天穹智脑”:“请用你上次为我生产的那个模型来回答我的问题。”

Type: InferNotif (推理结果通知)

Table 5.4.6.4.5-1: Definition of type InferNotif (章节号可能笔误) 定义了“智慧答案”的格式。

| Attribute name | Data type | P | Cardinality | Description |

| :--- | :--- | :- | :--- | :--- |

| notifCorreId | string | M | 1 | 关联的订阅ID。 |

| inferResults | array(InferResult) | M | 1..N | 推理结果数组。 |

| termCause | InferTermCause | O | 0..1 | 如果订阅被终止,附上原因。 |

Type: InferResult (单个推理结果)

Table 5.4.6.4.7-1: Definition of type InferResult (章节号可能笔误) 定义了结果的具体内容。

| Attribute name | Data type | P | Cardinality | Description |

| :--- | :--- | :- | :--- | :--- |

| anaEvent | NwdafEvent | M | 1 | 结果所属的分析事件。 |

| anaMetaInfo | AnalyticsMetadataInfo | C | 0..1 | 聚合分析所需的元数据信息。 |

| inferRes | array(string) | C | 1..N | 推理结果。与VFL推理一样,是灵活的字符串数组。 |

| termCause | InferTermCause | C | 0..1 | 终止原因。 |

深度解读:

  • inferRestermCause 的互斥性: 规范附注中提到,inferRestermCause必须提供其中之一。这意味着,一次通知要么是成功的,提供了推理结果;要么是失败或终止的,提供了原因。

4. 总结:赋能全网的智慧中枢API

通过对第6.4章的庖丁解牛,Team Delta已经完全掌握了Naf_Inference服务的实现精髓。这个服务是“天穹智脑”所有前期努力(数据处理、模型训练)的最终价值出口,是其智慧赋能全网的“总开关”。

  • 服务化封装: 将复杂的模型加载、数据预处理、推理计算、结果后处理等一系列AI工作流,封装在了一个简洁、标准的RESTful API背后。

  • 按需与主动相结合: 通过灵活的订阅机制,既能满足消费者按需索取(immRep=true)的需求,又能通过异步通知,主动推送洞察,将“智慧”在最需要的时候送到最需要的地方。

  • 闭环的关键: Naf_Inference服务产生的inferResults,将直接作为NWDAF、OAM、PCF等网络功能进行自动化决策和行动的依据,是打通“感知-分析-决策-执行”智能闭环的最后一块拼图。

Dr. Reed在项目总结会上激动地说:“今天,我们完成了‘天穹智脑’四大核心服务的全部API蓝图解析。从VFL的协同,到中心的赋能;从模型的生产,到智慧的消费。我们已经拥有了一套完整的、标准化的、面向未来自动驾驶网络的AI服务框架。接下来的路,就是将这些蓝图,用最高质量的代码,浇筑成坚不可摧的现实。让我们一起,为5G网络点亮智能的灯塔!”


5. FAQ 环节

Q1:Naf_Inference API的实现对性能有什么特殊要求?

A1:有极高的要求。Naf_Inference是典型的低延迟、高并发(Low-Latency, High-Throughput)应用场景。

  • 低延迟: 许多推理请求(尤其是immRep=true或事件触发的告警)都要求在毫秒级完成响应。这要求AI模型本身经过优化,推理速度要快;同时,服务端的代码逻辑、模型加载、数据处理都必须高效。

  • 高并发: 一个运营商级的“天穹智脑”可能需要同时服务于成千上万个推理订阅。后端架构必须是分布式的、可水平扩展的,能够承受巨大的并发请求压力。

  • 高可用: 作为网络智能的核心,该服务必须达到电信级的99.999%可用性。这意味着需要有多实例部署、负载均衡、快速故障切换等高可用机制。

Q2:InferAnaSub中的modelReferenceNaf_Training通知中的modelReference是同一个东西吗?

A2:是的,它们是同一个逻辑概念,是连接训练和推理两个服务的**“接力棒”Naf_Training服务的Notify消息中包含了新生成模型的modelReference(一个URI),这是生产环节的输出。而Naf_Inference服务的Subscribe请求中,消费者将这个URI填入InferAnaSubmodelReference字段,这是消费环节**的输入。通过这个URI的传递,就构成了“先训练,后使用”的完整工作流。

Q3:如果Naf_Training训练出了一个新版本的模型model-music-fest-v2.0,正在使用V1.0模型的消费者会自动切换吗?

A3:不会自动切换。订阅是与一个特定modelReference绑定的。如果一个订阅是基于V1.0创建的,那么它会一直使用V1.0,直到这个订阅被修改或删除。要切换到V2.0,消费者(如OAM)需要:

  1. 首先通过Naf_Training的通知或其他带外方式,获知V2.0模型的存在及其modelReference

  2. 然后,向Naf_Inference服务发送一个PATCH请求,更新其已有订阅,将inferAnaSubs中的modelReference字段修改为V2.0的URI。

这种显式的更新机制保证了消费者对模型版本的完全控制,避免了因AF后台自动升级模型而导致的网络行为突变,保证了系统的稳定性和可预测性。

Q4:为什么规范中多处(如6.4.6.4)的章节号看起来有笔误(如5.4.6.4.x)?

A4:这是在阅读3GPP草案或早期版本规范时可能遇到的情况。规范的撰写和修订是一个复杂的过程,由来自全球各地的多家公司的专家共同协作完成。在文档的整合和编辑过程中,有时会出现章节号、引用、术语等的笔误或不一致。通常,这些问题会在后续的版本(如V1.0.1, V1.1.0等)中被勘误(Correction)和修正。作为读者,我们需要具备一定的“上下文理解”能力,根据逻辑关系来判断其真实意图。例如,在6.4.6节(Naf_Inference的数据模型)下出现的5.4.6.4.x的章节号,逻辑上显然应该隶属于6.4.6节,所以应理解为6.4.6.4.x

Q5:至此我们已经学习完了第4、5、6章,那么规范剩下的部分(如附录A)还有什么价值?

A5:附录A(Annex A)价值巨大,甚至是对于开发者来说最有价值的部分。

  • 附录A (normative): OpenAPI specification: 这是一个规范性的附录,意味着它和正文具有同等的法律效力。它包含了本规范定义的所有API的OpenAPI 3.0.0 (YAML) 描述文件

  • 对于开发者: 这份YAML文件是“可执行的规范”。你可以:

    1. 直接生成代码: 使用OpenAPI Generator等工具,直接从YAML文件生成客户端和服务端的代码骨架。

    2. 生成交互式文档: 使用Swagger UI等工具,将YAML渲染成漂亮的、可在线测试的API文档。

    3. 自动化测试: Postman等工具可以导入YAML文件,自动创建完整的API测试用例。

  • 总结: 正文部分(第4、5、6章)用人类语言描述了API的逻辑和流程,而附录A则用机器语言(YAML)提供了API的精确、无歧义的定义。两者结合,才是对一份Stage 3规范的完整理解。