はじめに
先日、SAP Buildに新たに Joule Studio が加わりました。これは、自然言語によってエンドユーザーの業務操作を支援する「Joule 」のカスタムスキルをノーコードベースで開発できるサービスです。このJoule Studioではカスタムスキルとカスタムエージェントの構築ができる予定ですが、現段階でリリースされている機能はカスタムスキルの構築のみです。
本記事では、SAP BTPで提供される開発フレームワークである CAP(Cloud Application Programming Model) で構築した書籍管理アプリケーションをベースに、Joule Studioを用いて「書籍IDから情報を取得するカスタムスキル」を構築するプロセスをご紹介します。
ゴールは下記のような形です。
ユーザーがJouleに「201番の本の詳細を教えて」と話しかけると、CAPアプリのODataエンドポイントから該当データを取得し、回答できるようにすること。
ステップ①:CAPアプリケーションの準備
プロジェクト作成とサンプル追加
まずは SAP Build Code にて、Full-Stack Cloud Applicationプロジェクトを作成します。
ターミナルを起動したのち、下記コマンドにより、Bookshopサンプル(Books, Authors, Genresなど)をプロジェクトに追加します。
cds add sample
これにより、BookShopアプリケーションで利用するデータモデルやロジック、サンプルデータなどがプロジェクトの中に追加されます。
MTA構成の有効化とサービス定義確認
次に、SAP BTP環境にデプロイを行うために、下記のコマンドを実行します。
cds add mta
これにより Multi Target Application(MTA)構成を追加することができます。ファイルとしては、mta.yamlなどが追加されます。
このアプリケーションのCatalogServiceとAdminServiceの定義を確認してみましょう。CatalogServiceではBookなどに関するデータの閲覧ができたり、注文発注の関数が定義されていたり、という構成が確認できます。
一方、AdminServiceの側にはロール制御(@requires: ‘admin’)が設定されています。これにより、BooksやAuthorsのデータモデルの編集処理はadminというロールを持ったユーザーのみが行えるように構成されています。
セキュリティとモックデータの準備
そして、そのロールは xs-security.json というファイルに定義されています。下記のコマンドを実行することで、Role TemplateがService定義に基づいて追加され、アプリケーションをデプロイした際に同時にロールが定義されてSAP BTP Cockpitから操作できるようになります。
cds compile srv/ –to xsuaa > xs-security.json
また、dataディレクトリの中にはモックデータも追加されています。このデータは、デプロイ時には SAP HANA Cloud へ自動的に初期データとして追加されます。
デプロイ前に、一度プレビューしてみましょう。cds watch というコマンドでプレビューサーバーを立ち上げることができます。
/odata/v4/catalog/Books
上記のODataエンドポイントにアクセスすると、データが返ってくることが確認できます。
問題なければ、ビルドを行いましょう。下記のコマンドで .mtar ファイルを作成します。
mbt build
ステップ②:SAP BTP環境へのデプロイと設定
アプリケーションのデプロイと確認
作成された .mtar ファイル を右クリックし、Deploy MTA Application ボタンをクリックします。
無事に Cloud Foundry環境にデプロイが完了すると、アプリケーションが正常に起動していることをSAP BTP Cockpit上で確認することができます。
XSUAAロールとDestinationの構成
同じく、アプリケーションのRoleタブを開くとデプロイされたロールも確認可能です。
定義済みのadminロールをカスタムで作成したロールコレクションに割り当て、権限を必要とする対象ユーザーに付与しておきましょう。ただし、今回は簡単な検証をするだけなのでこのロールベースアクセスは扱いません。
それでは次に、JouleのカスタムスキルからCAPにアクセスさせる際のDestinationを定義します。作成にあたり、CAPのアクセスに必要な認証情報(サービスキー)を作成します。
これに基づき、下記の通り OAuth2 Client Credentials方式でDestinationを構成します。
下記の通り、間違えのないように記載してください。
項目
値
URL
デプロイしたアプリケーションのURL + /odata/v4/catalog
Authentication
OAuth2ClientCredentials
Client ID
サービスキーのuaa.clientId
Client Secret
サービスキーのuaa.clientSecret
TokenService URL
サービスキーのuaa.url + /oauth/token
下記のプロパティも忘れずに設定するようにしてください。
プロパティ名
値
sap.processautomation.enabled
true
sap.applicationdevelopment.actions.enabled
true
sap.build.usage
CAP
それでは、ここからは SAP Build の設定に入ってきます。SAP Build側にもSAP BTP Cockpit 側で定義したDestinationをインポートし、API接続の準備を整えていきます。
ステップ③:CAP APIをJouleアクションとして公開
Actionの定義とデプロイ
それではJoule Studioで構築するカスタムスキル内で外部APIへの接続時に利用するActionを作成していきます。
アクション作成画面に入ると、CAPアプリケーションを選択します。その後、先ほど登録したCAPアプリのODataエンドポイント(BookShopSample_CatalogAPI)を選択します。これにより、CAPのODataのメタデータを自動的に読み取り、そのAPIに用意されたエンドポイントを自動で読み取ることができます。
必要なアクションを選択し、テスト → リリース → パブリッシュまでを行います。今回はBooksエンティティなどのアクションを選択しています。今回のブログの範囲では、この中でもBooksをIDに基づいて取得するアクションを使っていきます。
ここまでは今まで SAP Build からアクションを使って外部APIを呼び出す際には同じようにやっていたことですね。さて、ここからが新しくリリースされた部分になります!
ステップ④:Joule Skills の作成
スキルプロジェクトの作成と設定
「BookShopSample_Skills」というスキルプロジェクトを作成し、まずは getBookFromBookShopByID スキルを作成します。
(画像ではlistBooksスキルを作っていますが、よしなにスキルを作成してみてください)
他にも色々な形のスキルを追加してみてください。それぞれのスキルについて、デプロイ前に何かしらの処理が定義されていなければならないため、ミニマムでお試しされる方は getBookFromBookShopByID のみ定義すればOKです。
ステップ⑤:スキルの内部構成(Get Book by ID)
スキルにActionを組み込む
前ステップで公開したアクションプロジェクトから「Get entity from Books by key」アクションをスキル内に追加します。
BookID入力の受け取りと変換
次に、このアクションは本のIDを引数として要求するので、Joule Skillの入力引数を定義し、それをアクションに渡す設定を行います。この際に、現段階の仕様ではスキルの入力引数はText型に固定されているようなため、Formulaを用いて、アクションが受け付けるNumber型に変更する必要があります。
ユーザーへの応答構成
次に、ユーザーへ表示するコンポーネントを構成します。Send Message コンポーネントを追加し、アクションからの返り値を渡していきます。具体的には、取得した書籍データ(タイトル・価格・在庫)を「イラスト付きメッセージ」で視覚的に表示します。
ステップ⑥:スキルのデプロイとJouleからの呼び出し
お疲れさまでした、これで設定は完了です!それでは早速、このスキルをデプロイしていきましょう。
環境へのデプロイとDestinationマッピング
作成したスキルを任意のSAP Build Process Automationの環境(例:PlayGround1)にデプロイし、Destinationとの関連付けを行います。この際、サンセットが予定されているPublic環境はデプロイ先として指定できません。必ず新規に作成したShared環境を使うようにしてください。
なお、環境の詳細な情報や作成方法は下記SAP Help Portalをご参照ください。
動作検証(英語・日本語)
それでは、デプロイされたスキルを呼び出していきましょう。Joule Studioでは、カスタムスキルを検証するためのJouleが分離された形で用意されています。このJouleには、下記の通りアクセスすることが可能です。
Launch ボタンをクリックすると、全画面でJouleが表示されます。早速聞いてみましょう。
Joule に対して自然言語で 201番の本の詳細を教えて、などの内容を入力すると、正しく応答が返ってくることを確認できました。今回はIDからの詳細取得のみを実装していますが、同様にスキル定義を追加していくことで、様々な角度から詳細を取得していくことができるようになるはずです。
例えば、Send Message モジュールにも色々な形があり、例えばリストを扱うようなlistBooksを実装すると下記のようになります。
是非他にも色々と触ってみていただければと思います!
おわりに
今回の構成では、CAP で構築した OData API を SAP Build および Joule Studio と統合し、ユーザーが自然言語で業務処理を実行できる仕組みをノーコードで構築することができました。
今後は今回作成した「取得系」のスキルに加えて、「登録」「更新」「集計」などの対話型業務オペレーションを拡張していくことで、より実践的な業務アシスタントを構築できると考えられます。まだまだリリースされたばかりの機能ですが、今後の機能拡張に是非ご期待ください!
はじめに先日、SAP Buildに新たに Joule Studio が加わりました。これは、自然言語によってエンドユーザーの業務操作を支援する「Joule 」のカスタムスキルをノーコードベースで開発できるサービスです。このJoule Studioではカスタムスキルとカスタムエージェントの構築ができる予定ですが、現段階でリリースされている機能はカスタムスキルの構築のみです。本記事では、SAP BTPで提供される開発フレームワークである CAP(Cloud Application Programming Model) で構築した書籍管理アプリケーションをベースに、Joule Studioを用いて「書籍IDから情報を取得するカスタムスキル」を構築するプロセスをご紹介します。ゴールは下記のような形です。ユーザーがJouleに「201番の本の詳細を教えて」と話しかけると、CAPアプリのODataエンドポイントから該当データを取得し、回答できるようにすること。 ステップ①:CAPアプリケーションの準備プロジェクト作成とサンプル追加まずは SAP Build Code にて、Full-Stack Cloud Applicationプロジェクトを作成します。ターミナルを起動したのち、下記コマンドにより、Bookshopサンプル(Books, Authors, Genresなど)をプロジェクトに追加します。cds add sampleこれにより、BookShopアプリケーションで利用するデータモデルやロジック、サンプルデータなどがプロジェクトの中に追加されます。MTA構成の有効化とサービス定義確認次に、SAP BTP環境にデプロイを行うために、下記のコマンドを実行します。cds add mtaこれにより Multi Target Application(MTA)構成を追加することができます。ファイルとしては、mta.yamlなどが追加されます。このアプリケーションのCatalogServiceとAdminServiceの定義を確認してみましょう。CatalogServiceではBookなどに関するデータの閲覧ができたり、注文発注の関数が定義されていたり、という構成が確認できます。一方、AdminServiceの側にはロール制御(@requires: ‘admin’)が設定されています。これにより、BooksやAuthorsのデータモデルの編集処理はadminというロールを持ったユーザーのみが行えるように構成されています。セキュリティとモックデータの準備そして、そのロールは xs-security.json というファイルに定義されています。下記のコマンドを実行することで、Role TemplateがService定義に基づいて追加され、アプリケーションをデプロイした際に同時にロールが定義されてSAP BTP Cockpitから操作できるようになります。cds compile srv/ –to xsuaa > xs-security.jsonまた、dataディレクトリの中にはモックデータも追加されています。このデータは、デプロイ時には SAP HANA Cloud へ自動的に初期データとして追加されます。デプロイ前に、一度プレビューしてみましょう。cds watch というコマンドでプレビューサーバーを立ち上げることができます。/odata/v4/catalog/Books 上記のODataエンドポイントにアクセスすると、データが返ってくることが確認できます。問題なければ、ビルドを行いましょう。下記のコマンドで .mtar ファイルを作成します。mbt build ステップ②:SAP BTP環境へのデプロイと設定アプリケーションのデプロイと確認作成された .mtar ファイル を右クリックし、Deploy MTA Application ボタンをクリックします。無事に Cloud Foundry環境にデプロイが完了すると、アプリケーションが正常に起動していることをSAP BTP Cockpit上で確認することができます。XSUAAロールとDestinationの構成同じく、アプリケーションのRoleタブを開くとデプロイされたロールも確認可能です。定義済みのadminロールをカスタムで作成したロールコレクションに割り当て、権限を必要とする対象ユーザーに付与しておきましょう。ただし、今回は簡単な検証をするだけなのでこのロールベースアクセスは扱いません。それでは次に、JouleのカスタムスキルからCAPにアクセスさせる際のDestinationを定義します。作成にあたり、CAPのアクセスに必要な認証情報(サービスキー)を作成します。これに基づき、下記の通り OAuth2 Client Credentials方式でDestinationを構成します。下記の通り、間違えのないように記載してください。項目値URLデプロイしたアプリケーションのURL + /odata/v4/catalogAuthenticationOAuth2ClientCredentialsClient IDサービスキーのuaa.clientIdClient Secretサービスキーのuaa.clientSecretTokenService URLサービスキーのuaa.url + /oauth/token下記のプロパティも忘れずに設定するようにしてください。プロパティ名値sap.processautomation.enabledtruesap.applicationdevelopment.actions.enabledtruesap.build.usageCAPそれでは、ここからは SAP Build の設定に入ってきます。SAP Build側にもSAP BTP Cockpit 側で定義したDestinationをインポートし、API接続の準備を整えていきます。ステップ③:CAP APIをJouleアクションとして公開Actionの定義とデプロイそれではJoule Studioで構築するカスタムスキル内で外部APIへの接続時に利用するActionを作成していきます。アクション作成画面に入ると、CAPアプリケーションを選択します。その後、先ほど登録したCAPアプリのODataエンドポイント(BookShopSample_CatalogAPI)を選択します。これにより、CAPのODataのメタデータを自動的に読み取り、そのAPIに用意されたエンドポイントを自動で読み取ることができます。必要なアクションを選択し、テスト → リリース → パブリッシュまでを行います。今回はBooksエンティティなどのアクションを選択しています。今回のブログの範囲では、この中でもBooksをIDに基づいて取得するアクションを使っていきます。 ここまでは今まで SAP Build からアクションを使って外部APIを呼び出す際には同じようにやっていたことですね。さて、ここからが新しくリリースされた部分になります! ステップ④:Joule Skills の作成スキルプロジェクトの作成と設定「BookShopSample_Skills」というスキルプロジェクトを作成し、まずは getBookFromBookShopByID スキルを作成します。(画像ではlistBooksスキルを作っていますが、よしなにスキルを作成してみてください)他にも色々な形のスキルを追加してみてください。それぞれのスキルについて、デプロイ前に何かしらの処理が定義されていなければならないため、ミニマムでお試しされる方は getBookFromBookShopByID のみ定義すればOKです。ステップ⑤:スキルの内部構成(Get Book by ID)スキルにActionを組み込む前ステップで公開したアクションプロジェクトから「Get entity from Books by key」アクションをスキル内に追加します。BookID入力の受け取りと変換次に、このアクションは本のIDを引数として要求するので、Joule Skillの入力引数を定義し、それをアクションに渡す設定を行います。この際に、現段階の仕様ではスキルの入力引数はText型に固定されているようなため、Formulaを用いて、アクションが受け付けるNumber型に変更する必要があります。ユーザーへの応答構成次に、ユーザーへ表示するコンポーネントを構成します。Send Message コンポーネントを追加し、アクションからの返り値を渡していきます。具体的には、取得した書籍データ(タイトル・価格・在庫)を「イラスト付きメッセージ」で視覚的に表示します。 ステップ⑥:スキルのデプロイとJouleからの呼び出しお疲れさまでした、これで設定は完了です!それでは早速、このスキルをデプロイしていきましょう。環境へのデプロイとDestinationマッピング作成したスキルを任意のSAP Build Process Automationの環境(例:PlayGround1)にデプロイし、Destinationとの関連付けを行います。この際、サンセットが予定されているPublic環境はデプロイ先として指定できません。必ず新規に作成したShared環境を使うようにしてください。なお、環境の詳細な情報や作成方法は下記SAP Help Portalをご参照ください。https://help.sap.com/docs/build-process-automation/sap-build-process-automation/environments?locale=ja-JP動作検証(英語・日本語)それでは、デプロイされたスキルを呼び出していきましょう。Joule Studioでは、カスタムスキルを検証するためのJouleが分離された形で用意されています。このJouleには、下記の通りアクセスすることが可能です。Launch ボタンをクリックすると、全画面でJouleが表示されます。早速聞いてみましょう。Joule に対して自然言語で 201番の本の詳細を教えて、などの内容を入力すると、正しく応答が返ってくることを確認できました。今回はIDからの詳細取得のみを実装していますが、同様にスキル定義を追加していくことで、様々な角度から詳細を取得していくことができるようになるはずです。例えば、Send Message モジュールにも色々な形があり、例えばリストを扱うようなlistBooksを実装すると下記のようになります。是非他にも色々と触ってみていただければと思います!おわりに今回の構成では、CAP で構築した OData API を SAP Build および Joule Studio と統合し、ユーザーが自然言語で業務処理を実行できる仕組みをノーコードで構築することができました。今後は今回作成した「取得系」のスキルに加えて、「登録」「更新」「集計」などの対話型業務オペレーションを拡張していくことで、より実践的な業務アシスタントを構築できると考えられます。まだまだリリースされたばかりの機能ですが、今後の機能拡張に是非ご期待ください! Read More Technology Blog Posts by SAP articles
#SAP
#SAPTechnologyblog