Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >干货 | 携程AI模型引擎设计与实践

干货 | 携程AI模型引擎设计与实践

作者头像
携程技术
发布于 2018-07-05 08:31:26
发布于 2018-07-05 08:31:26
1.6K0
举报
文章被收录于专栏:携程技术携程技术

作者简介

李媚,酒店数据智能组应用开发工程师。2016年加入携程,先后负责了酒店交叉推荐,优选频道个性化酒店排序等服务开发工作。

一、前言

近年来人工智能的发展成果在互联网行业得到了广泛的推崇和应用,各大巨头纷纷借助AI打造个性化、精细化服务, 加速扩张生态领域。从推荐系统到实时风控,从广告系统到图像处理,模型服务在携程各个业务领域发挥着日益重要的作用。然而回顾现有的模型上线模式,不难发现仍存在一定的缺陷:

1、训练数据准备工作需要手工完成。数据清洗和特征挖掘是模型训练的前期工作,既包括从原始数据清洗出特征数据,也包括对清洗出的特征进行处理。由于缺乏统一的特征管理平台,目前训练需要的原始数据仍需算法工程师自行收集、整理、清洗。

2、不少模型处于离线预测阶段。相对于离线预测,实时预测能够依据用户的实时行为和最新的数据信息作出下一步预测,有效提高预测的准确性。但实时数据存在复杂、多变等特性,以及实时预测对性能上的要求更加严苛,工程技术门槛高,不少团队选择了相对容易实现的离线预测方式。

3、实时模型服务的开发周期长。实时模型服务离不开实时特征准备、业务逻辑开发、模型调用开发等步骤。实时特征一般由各项目的开发工程师自行维护,不可避免地存在特征重复开发的现象,带来开发资源和存储资源的浪费。此外,一个预测场景一般由一个模型服务提供支持,新的模型服务需求需要完全从头开始开发,开发周期较长。

结合上述现状以及在酒店个性化推荐、信息与图片等领域积累的丰富的模型上线经验,携程数据服务组推出了模型引擎平台——旨在通过搭建一个综合性的模型服务平台减少模型上线过程中的重复工作,实现模型的快速上线迭代,健全线上模型的监控评估机制。

二、平台构建

设计目标

作为一个综合型的平台,模型引擎致力于提供从数据处理、模型训练到模型上线的全闭环服务,为此我们制定了如下目标:

1、服务于产品经理、数据科学家、开发工程师、测试工程师团队,通过服务全景图的形式串联各环节;

2、作为一个实时预测平台,模型引擎服务接受秒级延迟的实时数据,毫秒级地返回预测结果;

3、广泛地适用于携程各类业务场景,支持包括ABTesting、模型灰度上线、多模型融合等功能。

总体架构

针对上述设计目标,模型引擎设置了特征管理、工程管理、模型管理、产品管理四大模块,总体逻辑架构图如下:

1、特征管理

特征管理模块主要解决特征准备问题,对应了逻辑架构图中的特征库一层。

根据使用场景,特征分为离线特征和在线特征。离线特征主要在模型训练阶段使用,数据科学家对存储在Hdfs中的静态数据、落地的消息数据等尝试不同的样本选择、变换处理和组合等,再配合算法及参数进行模型训练。训练完成后,数据科学家将最终的特征方案交给开发工程师,再由开发工程师将离线特征搬移到在线环境,如Redis,ES,Aerospike等。

在线特征开发工作既包括将离线存储中的特征导入到实时存储,也包括对实时消息(Kafka、Qmq),例如用户点击、下单、酒店起价变化等进行处理,不断更新在线数据。

模型引擎维护了一个公共的特征库,支持算法工程师通过界面操作的方式添加离线特征,复用已有特征;同时也实现了通过配置自助导出离线特征到实时环境的功能和对流信息的实时处理功能,接入方借助提供的API就可以进行数据访问。

同时,对重要特征进行监控与有效性分析是保障模型服务质量的首要环节。相对于离线特征,实时特征有时效性和一致性等要求;而且实时特征一般以KV形式存储,不能简单地通过SQL语句进行统计。如果每个工程师单独为自己维护的特征开发监控Job,那么开发工作量就会大大加重。模型引擎由于维护了公共的特征库,可以对特征池中的特征建立了统一的长效监控机制,常见的监控指标,如缺失率、新鲜度、活跃度等,都可以通过模型引擎平台查看和增添。

2、工程管理

工程管理模块主要解决模型的工程实现问题,对应了逻辑架构图中的模型服务一层。在实时场景中,模型服务一般以SOA服务形式供使用方调用,包含了建立本地缓存、实现业务逻辑、调用模型、返回预测结果等步骤,如下图所示。

针对这些典型的开发步骤,模型引擎提供了通用的组件辅助开发工程师,降低工程实现难度。

在实时批量预测场景中一次调用需要用到大量的原始数据,从外部存储获取数据难以保证服务性能,因此工程师会选择建立本地缓存减少数据拉取时间。然而维护本地缓存会带来了不少额外负担,例如不同数据源对新鲜度的要求不同,本地缓存的更新机制要区分设计;本地缓存数据量大时,需要考虑JVM参数的配置,以避免频繁的Full GC和长时间的GC。为此,模型引擎开发了Feature Bus组件,通过统一的XML配置,支持自动构建本地缓存,同时也屏蔽了底层存储的读取细节,免去繁琐的本地缓存开发工作。

在调用模型方面,模型引擎提供了Code Gen服务,支持模型服务的自助生成。各模型采用的算法虽然林林总总,但在工程上调用的方式却不外乎几种,例如PMML、Python包、Xgboost等等。模型引擎对常用的调用方式进行了封装,供开发工程师在项目中直接使用。一方面开发工程师不再需要对没有接触过的模型调用方式进行摸索,另一方面对业务逻辑和模型调用进行了解耦,后续算法升级只需要简单地升级模型服务的版本。而且在生成的模型服务中嵌入了统一的监控,对线上模型服务的质量可以进行集中的管理。

此外,最终进入模型的待预测数据也是算法工程师所关心的。不少原始数据经过了开发工程师手动编码加工,在遇到模型预测效果与线下不一致时首先需要确定这部分数据的正确性。在模型服务中会收集这部分数据并上传,配合平台提供的可视化界面供算法工程师和测试工程师判断数据的健康情况。进一步地,也可以利用这些数据实时更新模型,实现自动化模型训练。

最后,模型拆分、多模型融合功能也在这一层支持。总之,开发工程师只需要将主要精力放在业务逻辑的实现上,以及借助组件串通完整流程。

3、模型管理

模型管理模块主要实现了模型文件的上传、关联特征、模型发布、迭代回退等功能,对应了逻辑架构图中的模型管理一层。

结合携程的文件服务系统,算法工程师可以在模型管理模块便捷地上传模型。在迭代模型时,为了减少再次测试、发布的环节,模型引擎平台支持算法工程师更替、回退模型文件,实现模型文件的实时生效。在操作的安全性方面,在上传新模型之后,平台会根据样本输入输出数据进行自动校验,确保模型文件的正确性;也会对模型的调用进行压测,符合预设结果的模型才可以进入部署阶段。此外,因为模型文件一旦发布就会即刻生效,为了避免误操作,由测试工程师进行最后的审核上线操作。

现有的机器学习中很多模型的使用都类似黑盒,尽管经过了离线数据的训练以及测试环境的验证,对于模型在实时环境中的预测效果依然难以预料。为此,模型管理模块提供了模型灰度上线功能,支持在正式对外发布前对模型进行内部验证。算法工程师只需要简单配置白名单和上传堡垒模型文件就可以在生产环境直观体验新模型的效果,既不需要开发工程师的介入,也不会影响外网用户。

4、产品管理

产品管理模块主要实现了场景的创建和管理。在模型引擎中一个具体的模型预测业务称为一个场景。项目一般由产品经理发起,所以由产品经理负责创建场景,填写项目信息,并关联相应的开发人员。创建完毕后,算法工程师和开发工程师登录平台就可以在模型管理和工程管理模块下进行操作,为场景实现添砖加瓦。

在模型引擎最初设计中,一个场景仅支持一个模型,根据实验版本不同上传不同的模型文件。然而随着预测业务精细化,在一些场景中,为了达到最优效果,会对模型进行进一步的细分,拆分出多个模型,这些模型的大部分业务逻辑和模型特征都相同,或者模型间存在着依赖关系,因此不适合将这些模型独立为各个场景。因为模型引擎中采用了子场景的概念来支持一个场景下多个模型的情况。其中子场景间的关联关系又分为并行、串行、融合、switch等多种类型,由此可以支持串行模型,多模型融合等。其中多模型融合的调用方式如下:

此外,产品管理模块还可以展示模型服务场景的全景图。为了帮助用户清晰地了解各个环节,产品管理关联了一个场景下的特征模块,模型模块,工程实现模块和监控模块,完整串联起了模型上线的整个生命周期,通过点击就可以跳转查看各个模块的明细信息和运行状态;尤其是多子场景的结构展示,可以方便地让相关人员了解整体结构和模型调用链路。

三、主要组件

Model Service

Model Service即CodeGen自助生成的模型服务,它支持主流机器学习算法的调用,如Pmml,Python包,XGB等,结构图如下。

当模型确定时,在工程中实现的方式也就确定了,此时开发工程师只需要根据模型的类型,生成对应的模型服务。出于性能上的考虑,目前的实现方式是将生成的服务包引用到工程中,在本地调用。在调用时,将处理好的待预测数据输入,就可以得到预测结果,支持单条或批量调用。当然,模型算法在不断演进中,模型引擎开发组也会负责升级模型服务,此时使用方只需要简单地升级版本即可。

同时,模型服务也封装了最新模型版本的获取功能,自动感知和下载最新的模型文件,实现模型文件更替的分钟级别生效,屏蔽特征不变场景下版本迭代的细节。此外,不同实验版本调用不同模型文件,内测人员和外网用户调用不同模型的支持也由模型服务控制,调用方只需将实验版本和用户ID传入即可。

对待预测数据、预测结果的记录上传和模型服务的监控也由模型服务统一负责。通过规则设定,对上传的数据进行实时判断,及时发现异常。当然开发可以根据各场景的调用量、调用耗时要求选择抽样记录部分数据,避免对存储造成压力。

除了传统意义上的模型,规则和公式也可以认为是广义上的模型。相对于狭义上的模型,公式和规则训练复杂度低,实现简单,在现阶段上线模型代价比较高昂的情况下,是不错的选择。为了支持公式、规则变更等能够实时生效,模型服务也会在后续的版本中增加对其的支持。

Feature Bus

Feature Bus组件可以协助开发人员自动构建本地缓存,托管数据加载问题,其结构图如下所示。

通过配置XML文件指定数据源的存储方式、存储格式、本地缓存格式,结合Feature Bus的jar包,开发工程师可以轻松地在服务中构建本地缓存。大批量数据缓存在本地容易产生FullGC,进而引起服务响应的暂停,因此Feature Bus采取了堆内缓存+堆外缓存的设计方式。堆外内存把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机),能够在一定程度上减少垃圾回收对应用程序造成的影响。对于不需要缓存的轻量级数据,也可以通过Feature Bus直接读取。通过统一的API方式,开发工程师不再需要为不同的存储方式编写不同的读取代码。

另外,在实时服务中,缓存数据需要保证数据的实时性和一致性。缓存数据的更新又分为批量更新和增量更新。批量更新一般适用于相对静态的数据,例如对酒店静态信息,需要一天更新一次。Feature Bus支持在XML中指定更新的频率,根据实际需求进行批量更新。增量更新数据一般以消息的形式存在,例如用户点击行为,酒店起价变动数据等。在模型引擎的设计中,对这部分数据处理的延迟要求是秒级。Feature Bus支持在XML中配置消息来源、Topic、格式,进而对指定的实时消息进行监听,实时更新本地缓存,有效地将延迟控制在1秒以内。不管是批量更新还是增量更新对使用方都是透明的,使用方只需要评估使用场景,进行合理的配置即可。

四、总结展望

模型引擎是携程数据服务组对日常开发工作经验的总结和升华,从最贴近实际的场景出发,为模型上线的各环节提供便利。同时,作为一个综合性平台,模型引擎也从特征质量监控、模型调用监控等方面完善了对模型服务质量的把控。

项目自2017年年底启动,已经打通了模型上传、审核上线、更新迭代流程,支持AB实验,模型灰度验证上线、多模型融合、模型特征在线诊断等功能,接入了酒店排序类、图像识别类、广告类项目等十个项目。

目前模引擎平台已经进入了二期迭代,将在丰富特征库、支持更多类型的模型、完善模型质量在线评估等方面继续发力,并积极推广到其他BU。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 携程技术中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
干货 | 携程酒店排序推荐广告高效可靠数据基座--填充引擎
yang,携程资深后端开发工程师,专注推荐系统架构、数据流批一体、系统稳定性、效率提升等领域;
携程技术
2024/02/27
2220
干货 | 携程酒店排序推荐广告高效可靠数据基座--填充引擎
干货 | 浅谈Node.js在携程的应用
潘斐斐,携程无线平台研发部高级研发工程师。2008年加入携程,目前负责携程Node.js技术栈的基础平台研发工作。
携程技术
2019/05/24
9460
干货 | 用户画像在携程商旅的实践
用户画像这一概念最早源于交互设计领域,由交互设计之父Alan Cooper提出。其指出用户画像是真实用户的虚拟代表,是建立在真实数据之上的目标用户模型。具体而言,在互联网用户分析领域,用户画像可以简单描述为用户信息标签化,即通过收集并分析用户的社会属性、生活习惯、消费偏好等各维度的数据,从而抽象出用户的全方位多视角的特征全貌,最终就是让用户画像比用户更了解自己。
携程技术
2020/07/20
2.6K0
Hadoop集群从180到1500,携程大数据实践之路
内容来源:2018 年 09 月 08 日,携程大数据平台技术总监张翼在“2018开源数据库论坛暨首届MariaDB中国用户者大会”进行《大数据平台在携程的实践》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。
IT大咖说
2018/10/23
8800
Hadoop集群从180到1500,携程大数据实践之路
干货 | 每天TB级数据处理,携程大数据高并发应用架构涅槃
互联网二次革命的移动互联网时代,如何吸引用户、留住用户并深入挖掘用户价值,在激烈的竞争中脱颖而出,是各大电商的重要课题。通过各类大数据对用户进行研究,以数据驱动产品是解决这个课题的主要手段,携程的大数据团队也由此应运而生;经过几年的努力,大数据的相关技术为业务带来了惊人的提升与帮助。 以基础大数据的用户意图服务为例,通过将广告和栏位的“千人一面”变为“千人千面”,在提升用户便捷性,可用性,降低费力度的同时,其转化率也得到了数倍的提升,体现了大数据服务的真正价值。 在新形势下,传统应用架构不得不变为大数据及新
携程技术
2018/03/16
3.1K0
干货 | 每天TB级数据处理,携程大数据高并发应用架构涅槃
干货 | 携程酒店推荐模型优化
当用户在线上浏览酒店时,作为旅行平台,如何挑选更合适的酒店推荐给用户,降低其选择的费力度,是需要考虑的一个问题。在携程APP中,一般会触发多种场景。在Figure 1中,我们列举了几种典型的场景:欢迎度排序,智能排序和搜索补偿推荐。
携程技术
2021/04/26
9710
干货 | 携程酒店推荐模型优化
干货 | 携程酒店实时数仓架构和案例
当前,企业对于数据实时性的需求越来越迫切,因此需要实时数仓来满足这些需求。传统的离线数仓的数据时效性通常为 T+1,并且调度频率以天为单位,无法支持实时场景的数据需求。即使将调度频率设置为每小时,也仅能解决部分时效性要求较低的场景,对于时效性要求较高的场景仍然无法优雅地支撑。因此,实时数据使用的问题必须得到有效解决。实时数仓主要用于解决传统数仓数据时效性较低的问题,通常会用于实时的 OLAP 分析、实时数据看板、业务指标实时监控等场景。
携程技术
2023/02/28
1.2K0
干货 | 携程酒店实时数仓架构和案例
干货 | AIOps在携程的探索与实践
徐新龙,携程技术保障中心资深SRE,复旦大学信号处理方向硕士研究生。负责携程多个AIOps项目的设计与研发,对人工智能、机器学习、神经网络及数学有浓厚的兴趣,对人工智能技术结合运维场景的实践有深入研究。
携程技术
2019/04/22
1.2K0
干货 | AIOps在携程的探索与实践
干货 | AIOps在携程的践行
作者简介 徐新龙,携程技术保障中心应用管理团队高级工程师,负责多个AIOps项目的设计与研发。信号处理专业硕士毕业,对人工智能、机器学习、神经网络及数学有浓厚的兴趣,对人工智能技术结合运维场景的实践有深入研究。 随着人工智能时代的到来,携程生产环境运维进入了新的运维时代——AIOps。通过两年多时间的技术投入与实践,AIOps在效率提升、可用性保障、成本优化等运维场景取得了显著的成果。 本文选取了几种典型的运维场景对AIOps在携程的践行展开了介绍,首先让我们从概念认识下AIOps。 一、AIOps的概念
携程技术
2018/07/05
1.5K0
干货 | 机器学习模型在携程海外酒店推荐场景中的应用
Louisa,携程算法工程师,热爱前沿算法和技术在个性化推荐和广告建模等业务的性能优化和落地。
携程技术
2020/08/18
1.5K0
干货 | 机器学习模型在携程海外酒店推荐场景中的应用
干货 | 携程国际化进程中,是怎么做站点多语言处理的?
祁劢,携程国际业务部内容研发团队Leader,目前主要负责信息类项目产品设计、技术架构与团队管理。CG爱好者,喜欢细致描绘世间百态的通俗小说,喜欢探索,乐于体验各地风土人情。
携程技术
2019/04/22
2.3K0
干货 | 携程国际化进程中,是怎么做站点多语言处理的?
干货 | 携程新风控数据平台建设
作者简介 刘丹青,携程信息安全部高级开发工程师。2014年加入携程,主要负责验证码、风控数据平台的开发设计工作,提供性能测试与性能优化的相关支持。 前言 近几年,随着电商和互联网金融的发展,各大互联网企业也在逐步加强风控体系的建设,为公司的运营保驾护航。在携程,各BU经常受到恶意注册、登录、恶意刷单、扫号等行为,所以建设了一套数据平台,希望能够从数据中挖掘出有用的信息,不仅可以为风控系统提供数据支持,还可以为其他服务提供支撑。 本文主要从架构和业务的角度介绍下携程信息安全团队的数据平台建设之路,以及如何为
携程技术
2018/03/16
1.1K0
干货 | 携程新风控数据平台建设
干货 | 携程鸿蒙应用开发实践
作者简介 Gordon,携程资深移动开发工程师,关注鸿蒙开发。 背景 作为全球领先的一站式旅游服务平台,携程始终坚持以技术创新为发展核心。自鸿蒙发布以来,我们便投入研发力量进行调研、开发,并成功落地了携程机票项目、服务卡片项目等。现将鸿蒙项目中相关经验整理分享,希望能给大家一些参考,也希望鸿蒙发展能越来越好。 一、鸿蒙系统简介 华为鸿蒙HarmonyOS系统是面向万物互联的全场景分布式操作系统,目前鸿蒙系统已从2.0升级更新至Beta 3.0,支持手机、平板、智能穿戴、智慧屏等多种终端设备运行,提供应用开
携程技术
2022/07/19
1.6K0
干货 | 携程鸿蒙应用开发实践
干货 | 携程机票数据仓库建设之路
华智,携程高级研发经理,现负责数据仓库技术架构、性能优化、数仓规范制定、数据模型设计以及数据应用开发。
携程技术
2020/02/26
1.5K0
干货 | 4小时上线一个接口,高效统一的携程酒店数据服务平台实践
作者简介 小丰,携程研发总监,专注于分布式数据库研究,大数据领域实时计算和大数据应用的系统架构设计。 背景 随着携程酒店数据的膨胀以及个性化需求的增多,每个数据接口个性化的排期开发,因为没有标准化,从需求讨论,数据准备、接口封装、上线调试到接口api说明,期间需要花费大量的时间。一个接口的实现到生产上线至少需要2天甚至更多时间,这个时间成本不得不依赖排期开发; 随着历史接口的迭代,已对外提供的700多数据接口中,其中500多个还在使用,并且每年的增量在100多,开发和维护成本高,特别是在追溯上游离线数据逻
携程技术
2022/07/12
1.1K0
干货 | 4小时上线一个接口,高效统一的携程酒店数据服务平台实践
干货 | 携程酒店AWS实践
随着携程海外酒店业务的发展,遍布全球的海外供应商与携程总部IDC之间的数据传输量快速增长。技术上,这种日益增长的数据量对跨境网络专线的带宽、延迟等提出了更高的要求;业务上,由于当前有限的跨境网络专线资源对业务处理效率及用户体验也造成了一定的影响;成本上,跨境网络专线作为一种昂贵的资源,通过单纯的专线扩容又会给IT成本造成巨大压力。所以我们开始思考是否可以通过公有云结合酒店直连的业务特性来解决日益增长的带宽压力和供应商接口延迟的问题。
携程技术
2021/09/10
1.3K1
干货 | 携程酒店AWS实践
干货 | 分布式数据库TiDB在携程的实践
携程自2014年左右开始全面使用MySQL数据库,随着业务增长、数据量激增,单机实例逐渐出现瓶颈,如单表行数过大导致历史数据查询耗时升高,单库容量过大导致磁盘空间不足等。为应对这些问题,我们采取了诸多措施如分库分表的水平拆分、一主多从读写分离、硬件SSD升级、增加前端Redis缓存等,但同时也使得整个业务层架构更加复杂,且无法做到透明的弹性,因此开始将目光转移到分布式数据库以解决这些痛点。
携程技术
2021/12/13
8960
干货 | 分布式数据库TiDB在携程的实践
干货 | 万字长文详解携程酒店订单缓存 & 存储系统升级实践
作者简介 荣华,携程高级研发经理,专注于后端技术项目研发管理。 军威,携程软件技术专家,负责分布式缓存系统开发 & 存储架构迁移项目。 金永,携程资深软件工程师,专注于实时计算,数据分析工程。 俊强,携程高级后端开发工程师,拥有丰富SQLServer使用经验。 前言 携程酒店订单系统的存储设计从1999年收录第一单以来,已经完成了从单一SQLServer数据库到多IDC容灾、完成分库分表等多个阶段,在见证了大量业务奇迹的同时,也开始逐渐暴露出老骥伏枥的心有余而力不足之态。基于更高稳定性与高效成本控制而设计
携程技术
2022/04/29
2.1K0
干货 | 万字长文详解携程酒店订单缓存 & 存储系统升级实践
Node.js在携程的落地和最佳实践
本文主要介绍在携程,Node.js 技术栈是如何从 0 到 1 进行技术落地的,以及在不断磨合的过程中,总结出来的最佳实践。
coder_koala
2019/12/06
7190
Node.js在携程的落地和最佳实践
干货 | 携程酒店搜索引擎AWS上云实践
作者简介 宮娴,携程高级后端开发工程师;Spike,携程高级后端开发专家。 随着携程国际化业务的快速推进,搜索引擎作为用户体验中至关重要的一环,上云变得志在必行。本文主要分享酒店搜索引擎迁移AWS的探索与实践过程,内容将涵盖一个HTTP请求的全链路处理过程:包括从APP发出请求到网关,再到内网错综复杂的微服务,最后到所依赖的各种持久化存储。 一、微服务架构带来的挑战 这次上云的是爆款业务,用户直观的感受是点击TRIP APP的Hotel搜索页的Hotel Staycation Deals。 携程采用主流
携程技术
2022/04/15
8200
干货 | 携程酒店搜索引擎AWS上云实践
推荐阅读
相关推荐
干货 | 携程酒店排序推荐广告高效可靠数据基座--填充引擎
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档