笔者之前的公众号文章,介绍了 AWS 和 Google 这两家大厂,为 SAP ABAP 开发人员提供的 SDK:
所谓 SDK - Software Development Kit,是开发者用来构建应用程序的一组工具和资源的集合。SDK 通常包括库文件、文档、代码示例、API、开发工具等,可以帮助开发者更快速、便捷地实现某些特定功能。
回到 AWS 和 Google 给 SAP ABAP 开发者提供的 SDK,目的就是降低 ABAP 开发人员使用这些云平台上的资源和服务的「使用门槛」,提高 AWS 和 Google Cloud 同 SAP ABAP 系统进行集成的开发效率。
作为目前欧洲市值最高的科技公司,SAP 也享受了这些业界巨头们,为其拥有的 ABAP 编程语言,单独创建定制开发包的特殊优待。
微软也加入了这一阵营。
目前在 Github 上微软有 6500 多个代码仓库:
其中之一便是 aisdkforsapabap:https://github.com/microsoft/aisdkforsapabap
显然,这又是微软为 SAP ABAP 开发人员,量身定制的一套能够快捷高效地消费微软旗下 AI 服务的开发包。
上图的仓库 Readme 文档里,提到了 Open AI 和 Azure OpenAI 这两套 AI 服务。可能有的朋友容易将二者搞混。
实际上,两者在核心技术上共享,但其定位和服务形式存在较大差异。
OpenAI 主要致力于人工智能的研究和技术突破,专注于开发具有通用能力的 AI 模型。而 Azure OpenAI 则是 OpenAI 技术的商业化落地平台,通过与微软 Azure 云服务的结合,将最先进的 AI 技术应用于企业级应用环境中。
微软的 AI SDK for ABAP 开发包,目前同时支持这两套 AI 引擎。
在没有 SDK 的时代,如果要用 ABAP 同 Google 和 AWS 等云平台上的服务集成,最常规的做法就是使用 CL_HTTP_CLIENT 或者 CL_REST_HTTP_CLIENT 等工具类,通过从 ABAP 系统向这些云平台发送 HTTP 请求,消费后者暴露的 Restful API.
因此在 ABAP 应用程序里,开发人员需要用 ABAP 代码操作 HTTP 协议层面的实体,比如 HTTP 头部字段,HTTP 请求负载和解析 HTTP 响应结构。
通用的流程就是,开发人员先在 Postman 等测试工具里,把集成场景跑通,然后再把 Postman 里配置的 HTTP 请求明细,迁移到 ABAP 代码中。
笔者的教程对这种开发方式有详细的介绍:
比如下图就是使用 ABAP 调用 SAP OData 创建 Opportunity 的代码片段。如绿色高亮区域所示,开发人员要手动设置 HTTP 请求类型为 POST,Content-Type 为 application/json, 指定 Cookie,拼装 HTTP 请求的负载,以及解析 OData 服务提供者返回的响应结构。
对于刚刚接触 OData 编程的开发者来说,可能觉得这种开发方式比较繁琐和低效,并且容易出错。
再来同 SAP 自己发布的 SDK 比较一下。
笔者之前的文章,SAP S/4HANA CLOUD SDK 入门介绍,里面提到了一些例子:
比如 OData 协议的 select 操作,只返回开发者指定的字段。
在 SAP S/4HANA Cloud SDK 里,对应了同名的 select 方法。
下面的代码,消费 SAP S/4HANA 的 Business Partner OData 服务,返回系统前 20 条数据的 Name,Full Name 字段和 TO_Customer 这个 association 的值。
可以看到 SDK 代码封装了 HTTP 操作,读起来更像自然语言,语义清晰,一目了然。
微软的 AI for SAP ABAP SDK 也是同样的思路,为 ABAP 开发人员封装了通过 HTTP 方式调用 OpenAI 所需的 HTTP 操作的技术细节。
在 SAPGUI 里,通过 ABAP 向 ChatGPT 发送一段 Prompt 并得到响应,只需要下面短短 15 行代码即可。
DATA:
chatcompl_input TYPE zif_peng_azoai_sdk_types=>ty_chatcompletion_input,
chatcompl_output TYPE zif_peng_azoai_sdk_types=>ty_chatcompletion_output.
sdk_instance->chat_completions( )->create(
EXPORTING
deploymentid = deployment_id
prompts = chatcompl_input
IMPORTING
statuscode = status_code
statusreason = status_reason
response = chatcompl_output
error = error
).
Github 帮助文档里提到的 ABAP Ready Data Types,意思就是上图 ZIF_XXX_SDK_TYPES 这种数据类型。SDK 已经将 ABAP 消费 OpenAI 所需的数据类型全部创建好了,真正做到了开箱即用。
在 ABAP 系统里配置和使用 OpenAI SDK for SAP ABAP
微软官网上有详细的步骤介绍:
https://microsoft.github.io/aisdkforsapabap/docs/intro
通过 ABAPGit 将 SDK 的源代码克隆到 ABAP 系统,生成对应的 ABAP Class 和 DDIC 数据类型并激活。
关于 ABAP 系统上使用 ABAPGit 的更多信息,请参阅笔者之前的文章:
克隆到本地 ABAP 系统的代码,除了 SDK 核心的工具类之外,还有一些用于演示和学习的 Demo 小程序,比如 ZP_MSAISDKDEMO_MODELS_OAI.
在 SE38 执行它,指定 OpenAI 的 endpoint 和自己的 app key,如下图所示:
如果一切配置正确,会在这个报表里,成功接收到 OpenAI 支持的 Model List 即模型列表:
另一个 Demo 程序名叫 ZP_AISDKDEMO_CHTCMPL_SMPL_OAI,演示了如何通过 ABAP 编程的方式,同 ChatGPT 进行聊天。
在 SAPGUI 里执行报表,指定指令如下:
You are an ABAP Programmer.
Write ABAP Code for Fetching Mara table...
得到了 ChatGPT 的响应。
笔者曾经在文章 SAP Joule 经过了超过 2.5 亿行 ABAP 代码的训练之后......里介绍过,SAP 官网放出了一张 ABAP Development Tool 里的预览版截图,如下图所示。
从预览版截图里看出,在 ABAP 代码生成向导界面,以前 开发人员需要选择不同类型的代码模版。如今取而代之的是输入 Prompt 即自然语言描述。
在 ABAP 开发人员等待 ABAP Development Tool 能直接通过自然语言生成 ABAP 代码的时候,也许微软这套 AI for SAP ABAP SDK 也是一个不错的替代方案。