好的,我们来到了本系列规范拆解的最后一站——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 API和Table 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的处理逻辑,重点关注性能和弹性:
-
定义Controller方法,监听
POST /naf-inference/v1/subscriptions。 -
将请求体反序列化为
InferEventSubsc对象。 -
核心业务逻辑 - 任务受理与调度:
a. 快速验证订阅参数。关键验证:
InferEventSubsc中引用的modelId是否存在于“天穹智脑”的模型仓库中,且模型状态为“可用”。b. 生成唯一的
subscriptionId。c. 将订阅信息持久化到高性能存储中。
d. 解析报告要求 (
reportingInformation):* 如果要求立即报告 (`immRep=true`),则**同步**调用推理引擎,并将结果填充到响应体中。 * 如果要求周期报告,则将一个定时任务提交到后台的分布式任务调度器(如Celery, Quartz)。 * 如果要求事件触发,则将订阅注册到内部的事件总线或消息队列中,监听相应的触发事件。 -
构建
201 Created响应,设置Location头,并返回确认信息。 -
如果模型不存在或不可用,返回
404 Not Found或409 Conflict,并在ProblemDetails中说明。
2.3 6.4.3.3 Resource: Individual AF Inference subscriptions - 推理任务的动态管理
这部分的操作语义与Naf_VFLInference服务完全一致,我们在此重点突出其在“音乐节”场景下的应用。
-
PUT/PATCH /{subscriptionId}: 动态调整“问题”。- 场景: 音乐节进入高潮,NWDAF决定将告警阈值从80%调低到70%,并增加两个入口处的小区到监控列表。它发送一个
PATCH请求,只更新events和reportingInformation字段。“天穹智脑”的后台任务调度器需要能够“热更新”正在运行的推理任务,无缝应用新的参数。
- 场景: 音乐节进入高潮,NWDAF决定将告警阈值从80%调低到70%,并增加两个入口处的小区到监控列表。它发送一个
-
DELETE /{subscriptionId}: “结束咨询”。- 场景: 音乐节结束,OAM和NWDAF发送
DELETE请求。“天穹智脑”必须确保所有相关的后台定时任务、事件监听器都被彻底清理,释放所有计算资源。
- 场景: 音乐节结束,OAM和NWDAF发送
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_Training和Naf_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 | 终止原因。 |
深度解读:
inferRes和termCause的互斥性: 规范附注中提到,inferRes和termCause必须提供其中之一。这意味着,一次通知要么是成功的,提供了推理结果;要么是失败或终止的,提供了原因。
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中的modelReference和Naf_Training通知中的modelReference是同一个东西吗?
A2:是的,它们是同一个逻辑概念,是连接训练和推理两个服务的**“接力棒”。Naf_Training服务的Notify消息中包含了新生成模型的modelReference(一个URI),这是生产环节的输出。而Naf_Inference服务的Subscribe请求中,消费者将这个URI填入InferAnaSub的modelReference字段,这是消费环节**的输入。通过这个URI的传递,就构成了“先训练,后使用”的完整工作流。
Q3:如果Naf_Training训练出了一个新版本的模型model-music-fest-v2.0,正在使用V1.0模型的消费者会自动切换吗?
A3:不会自动切换。订阅是与一个特定的modelReference绑定的。如果一个订阅是基于V1.0创建的,那么它会一直使用V1.0,直到这个订阅被修改或删除。要切换到V2.0,消费者(如OAM)需要:
-
首先通过
Naf_Training的通知或其他带外方式,获知V2.0模型的存在及其modelReference。 -
然后,向
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文件是“可执行的规范”。你可以:
-
直接生成代码: 使用OpenAPI Generator等工具,直接从YAML文件生成客户端和服务端的代码骨架。
-
生成交互式文档: 使用Swagger UI等工具,将YAML渲染成漂亮的、可在线测试的API文档。
-
自动化测试: Postman等工具可以导入YAML文件,自动创建完整的API测试用例。
-
-
总结: 正文部分(第4、5、6章)用人类语言描述了API的逻辑和流程,而附录A则用机器语言(YAML)提供了API的精确、无歧义的定义。两者结合,才是对一份Stage 3规范的完整理解。