ServiceNow Virtual Agent と ChatGPT を連携してみた
投稿者:クラウド事業本部ハイブリッドクラウド部 ServiceNow担当
目次
はじめに
皆さん、こんにちは。
生成AIが目覚ましい進化を遂げていますね。直近だとGoogleから「Gemini」が発表されたり、ほかにも生成AIを取り入れたサービスが増えていることから実際に生成AIに触れている方が多いのではないでしょうか。
弊社が扱っているServiceNowにもVancouverバージョンからリリースした、Now Assistという生成AIを活用したサービスが展開されています。
Now Assistの主な機能は以下となります。
- インシデントやケース、解決メモ、チャットの要約
- コードの自動生成
インシデントやケース、解決メモ、チャットが要約されることで後続のエージェントが最初から内容を見直す手間を省くことができます。
また、コードを自動生成することであっという間にスクリプトが完成するので生産性が高まるとのことです。
Now Assistの他機能や詳細についてはServiceNowの公式ドキュメントを参照してください。
実際にNow Assistを触ってみたかったのですが、残念ながらPersonal Developer Instances(以下、PDI)ではNow Assistを利用できませんでした。
代わりに無料の範囲内でServiceNowとOpenAIのChatGPTを連携し、ChatGPTを対話型のチャットボットとしてVirtual Agent上で利用できるように実装していきます。
そのためにもまずはChatGPTと連携する必要があるので、今回はServiceNowとChatGPTのAPI連携についてまとめます。
ServiceNowで設定した箇所やChatGPTのパラメーターについても説明するので、ServiceNowでのChatGPT連携やAPI連携に興味がある方はぜひ最後までご覧になってください。
検証内容
検証の内容について説明します。
今回の検証の目標はServiceNowのVirtual AgentでChatGPTとやり取りできることです。
具体的にはVirtual Agentからテキストを入力し、そのテキストをHTTPリクエストとしてOpenAI API(ChatGPT)へ送信します。そして、ChatGPTから生成されたテキストをレスポンスとしてServiceNowに返し、返ってきたレスポンスをVirtual Agentで表示されるように設定していきます。
設定の概要
この章では、目次「検証内容」を設定するための概要を説明します。
設定を大きく区切ると以下となります。
①ChatGPTとServiceNowのAPI連携
②HTTPリクエスト送信/レスポンス受信の設定
③Virtual Agentフローの作成
上記の①②③をもう少し細分化して説明します。
①HTTPリクエストに含めるリクエストボディやHTTPヘッダーを設定するためにServiceNow上でRest MessageとHTTP Methodを作成します。
②作成したRest MessageとHTTP Methodを呼び出し、レスポンスを受け取るScript Includeを作成します。
③Script Includeを呼び出すアクションをFlow Designerで作成し、Virtual Agent Designerで作成するフローにアクションを組み込みます。
設定の概要イメージは下図のようになります。
設定の詳細については目次「設定手順」以降で説明します。
前提条件
今回はバージョンがVancouver Patch 2 Hot Fix 1のPDIで実装していきます。
前提条件は以下の3つとなります。
- ServiceNowインスタンスにGlide Virtual Agent(com.glide.cs.chatbot)プラグインがインストールされていること
- OpenAIのアカウントが登録されていること
- OpenAI APIキーを取得していること
OpenAI APIキーの取得方法について説明します。
OpenAIのOverViewにログインし、画面左のメニューから「API Key」(南京錠のマーク)を選択します。
次に「Create new secret key」ボタンをクリックすることでOpenAI APIキーを取得できます。
※OpenAI APIキーを利用すると利用するモデルやトークン数などによって料金が発生します。
詳しい料金形態はOpenAI社のPricingを参照ください。
※OpenAIのアカウントを初回登録すると5ドル分のクレジットが貰えますが、有効期限が3か月なので注意してください。今回は初回クレジットの5ドル以内で検証をしています。
設定手順
この章では先述した3つの設定の手順を説明します。
①ChatGPTとServiceNowのAPI連携
Rest Messageの作成、HTTP Methodの作成、API連携のテスト
②HTTPリクエスト送信/レスポンス受信の設定
Script Includeの作成
③Virtual Agentフローの作成
アクションの作成、フローの作成
それでは設定手順の説明に入ります。
①ChatGPTとServiceNowのAPI連携
APIに接続するためにServiceNow上でRest MessageとHTTP Methodを作成し、API連携の接続を確認を実施します。
1.Rest Messageの作成
Rest Messageを作成することでエンドポイントに送信するリクエストの内容を定義することができます。
1-1.「ALL」>「System Web Services」>「Outbound」>「REST Message」を選択し、「New」ボタンをクリック
1-2.次のフィールドを入力する
フィールド | 値 |
---|---|
Name | ChatGPT |
Endpoint | https://api.openai.com/v1/completions |
今回、対話形式のチャット機能を実装したいためフィールド「Endpoint」には「https://api.openai.com/v1/completions」を入力しています。
実装したい機能によってEndpointは変わるので、詳細はOpenAI社のAPI referenceを参照してください。
1-3.HTTP RequestタブにあるHTTP Headersを作成する
ヘッダーとしてAuthorizationとContent-Typeを設定します。
OpenAI APIは認証にAPIキーを使用するのでAuthorizationには取得した自身のOpenAI APIキーを入力します。
OpenAI APIにはリクエストボディなどをJSON形式で送信することが求められるので、Content-Typeにはapplication/jsonを入力します。
Name | Value |
---|---|
Authorization | Bearer + APIキー入力 例:Bearer sk-xxxx |
Content-Type | application/json |
2.HTTP Methodの作成
HTTP MethodをPOSTで定義します。
2-1.HTTP Method ヘッダーを選択し、画面右の「New」ボタンをクリック
2-2.次のフィールドを入力する
テキストを生成するためサーバーに情報を送るのでHTTP MethodはPOSTを選択します。
EndpointはRest Messageと同様の値です。
フィールド | 値 |
---|---|
Name | POST |
HTTP Method | POST |
Endpoint | https://api.openai.com/v1/completions |
2-3.HTTP Requestタブをクリックし、HTTP Headersを作成する
1-3の設定値と同様です。
2-4.HTTP Query ParametersヘッダーのContentに以下を入力する
ここで定義した変数は、ChatGPTがテキストを生成するために必要なパラメーターに置き換えられます。
{
"model":"${model}",
"prompt":"${prompt}",
"temperature":${temp},
"max_tokens":${max_token}
}
ここで4つのパラメーターについて説明します。
・model:使用するChatGPTのモデルを指定します。
・prompt:ユーザーが入力する質問や要求が入ります。
・temperature:ChatGPTが生成するテキストの「創造性」を制御します。値は0から2までの浮動小数点数で2に近づくほど質問に対する回答はランダムになり、0に近づくほど質問に対して一貫性がある回答が返されます。
・max_tokens:ChatGPTが生成するテキストの最大トークン数を制御します。モデルによって指定できる最大トークン数は異なります。
2-5.関連リンクのAuto Generatice variablesをクリックする
HTTP Query ParametersのContentで定義された変数に対し、自動的に変数を生成します。
2-6.Auto Generatice variablesタブから次のフィールドを入力します
各レコードのフィールド「Test Value」に後続のAPI連携の接続を確認する手順で使用する値を入力します。
Name | Test Value | 説明 |
---|---|---|
max_token | 50 | 任意の数値 ※1 |
model | gpt-3.5-turbo-instruct | 使用するモデル名 |
prompt | Hi Chat GPT | ChatGPTへの質問 |
temp | 0.5 | 任意の数値 ※2 |
※1 ここでは接続が成功したかを確認するためmax_tokenを50に設定しています。
※2 ここでは接続が成功したかを確認するためtempを0.5に設定しています。
3.API連携の接続を確認
API連携の接続を確認する。
3-1.関連リンクからTestを実施します。HTTP statusが200になっていると正常に接続できています
HTTP statusが200ではない場合は、OpenAIの公式ドキュメントに記載されているエラーコードをご参照ください。
また、フィールド「Response」のtextのパラメーターを確認すると、ChatGPTからの回答が返ってきていることが分かります。
ここまででChatGPTとServiceNowのAPI連携が完了です。続いてはHTTPリクエスト送信/レスポンス受信の設定を行います。
②HTTPリクエスト送信/レスポンス受信の設定
作成したRest MessageとHTTP Methodを呼び出し、HTTPレスポンス受信後の設定をScript Includeで作成します。
1.Script Includeの新規作成
Rest MessageとHTTP Methodを呼び出し、レスポンスを受け取るScript Includeを作成します。
1-1.「ALL」>「Script Include」>「NEW」ボタンをクリックし、次のフィールドを入力します
フィールド「Name」に入力した値のクラスが自動的に作成されます。
対象フィールド | 値 |
---|---|
Name | ChatGPT |
1-2.フィールド「Script」に下記コードを入力する
var ChatGPT = Class.create();
ChatGPT.prototype = {
initialize: function() {
},
askChatGPT: function(message){
//作成したRest MessageとHTTP Methodを引数としてRESTMessageV2オブジェクトをインスタンス化
var request = new sn_ws.RESTMessageV2("ChatGPT", "POST");
var temperature = 0.5;
var max_tokens = 200;
//リクエストボディを作成
var requestBody = {};
requestBody.model = "gpt-3.5-turbo-instruct";
requestBody.prompt = message;
requestBody.temperature = temperature;
requestBody.max_tokens = max_tokens;
//リクエストボディをJSON形式に変換
request.setRequestBody(JSON.stringify(requestBody));
//REST Messageをエンドポイントに送信
var response = request.execute();
//レスポンスボディをJSON形式に変換し、textを取得
var responseBody = response.getBody();
var jsonResponse = JSON.parse(responseBody);
var answer = jsonResponse.choices[0].text;
return answer;
},
type: 'ChatGPT'
};
以上でRest Message、HTTP Methodを呼び出し、ChatGPTから生成されたレスポンスを受け取るScript Includeが作成されました。続いてはVirtual Agent上でChatGPTを利用するための設定を行います。
③Virtual Agentフローの作成
作成したScript IncludeをVirtual Agent上で呼び出すためのアクションをFlow Designerで作成します。
次に作成したアクションをVirtual Agent Designerで作成するフローに組み込みます。
1.アクションを作成
Flow DesignerでScript Includeを呼び出すアクションを作成する。
1-1.「ALL」>「Flow Designer」を開き、「Create new」ボタンからActionを新規作成する
1-2.Action propertiesのAction nameに任意のアクション名を入力する
1-3.Action Inputを設定する
アクションに使用する入力データを作成します。ChatGPTへの質問が入力データに入ります。
1-4.Script stepでInput Variablesを設定する
ChatGPTへの質問が入る変数を定義します。
1-5.Scriptを設定する
Script Includeで作成したChatGPTクラスをインスタンス化し、askChatGPTメソッドを呼び出します。
(function execute(inputs, outputs) {
outputs.answer = new ChatGPT().askChatGPT(inputs.prompt);
})(inputs, outputs);
1-6.Script stepでOutput Variablesを設定する
ChatGPTからの回答が入る変数を定義します。
1-7.Action Outputを設定する
アクションの終了後の出力データを作成します。ChatGPTからの回答が出力データとなります。
2.フローを作成
Virtual Agent上でChatGPTを利用するためにVirtual Agent Designerでフローを作成します。
※アクションはFlow Designerで作成しましたが、Virtual Agentのフローの作成はVirtual Agent Designerで行う必要があります。
章の最後に完成後のフローの画像があるのでそちらを確認してください。
2-1.「ALL」>「Virtual Agent」>「Designer」を開き、「Create」パネルをクリックし、トピックを作成する
Virtual Agent上でトピックを選択可能にするためTypeはTopicを選択します。
2-2.左のメニューである「Components」>「User Input」>「Text」をフロー内に追加し、Text inputを作成する
フィールド名 | 値 |
---|---|
Node name | user question |
Prompt | 下記コードを参照 |
Input format | Text |
Promptのコード
このコードではトピックを起動した際にVirtual Agentが最初に発するテキストを指定します。
今回はVirtual AgentとChatGPTの違いを明確にするために「私はChatGPTです。何をお手伝いしましょうか?」としています。
3行目のreturn文の””の中身を任意の文章に変更してください。
(function execute() {
if(JSUtil.nil(vaInputs.answer))
return "私はChatGPTです。何をお手伝いしましょうか?";
else
return trim(vaInputs.answer);
})()
2-3.左のメニューである「Components」>「Utilities」>「Decision」をフロー内に追加し、+ボタンをクリックする
「Decision」は会話を終了するか継続するかフローの分岐点として必要です。
2-4.左のメニューである「Components」>「Utilities」>「Action」をフロー内に追加し、Action utilityを作成する
Flow Designerで作成したアクションをVirtual Agentのフローに組み込むことでChatGPTとのやり取りができるようになります。
フィールド名 | 値 |
---|---|
Node name | askChatGPT |
Invoke Flow Designer object | Action |
Spoke | Global |
Action | askChatGPT(action) |
prompt(string) | Input variables→User Question |
2-5.End ConversationのConditionを追加する
会話を終了する条件を指定します。
2-6.Valid questionのConditionを追加する
会話を継続する条件を指定します。
2-7.「askChatGPT」から出ている矢印を「user question」につなげる
2-8.Flowをアクティブ化し、公開します
完成したフローは以下となります。
以上でVirtual Agent上でChatGPTを利用する設定は完了です。
実際にChatGPTをVirtual Agentで利用できるか試してみましょう。
結果
実際にChatGPTと連携できているかVirtual Agentで確認してみましょう。
Service Portalに移動し、Virtual Agentを起動します。
ChatGPTと会話するために「Show me everything」をクリックし、作成した「Start ChatGPT」を選択します。
フロー作成時に設定した「私はChatGPTです。何をお手伝いしましょうか?」が表示されたので、作成したフローが開始されたことが分かります。続けてServiceNowについて質問してみましょう。
ChatGPTから回答が返ってきました。追加の質問に対しても返答があり、Virtual Agent上でChatGPTとやり取りすることができました。
まとめ
今回はServiceNowとChatGPTをAPI連携し、ChatGPTを対話型のチャットボットとしてVirtual Agent上で利用できるよう実装しました。
ServiceNowとChatGPTをAPI連携したことで、Now Assistのような要約やコードの自動生成機能を実装できるのではないかと考えています。
例えばインシデントやケース、解決メモ、チャットの内容をChatGPTへ渡すアクションとChatGPTが要約した結果を返すアクションをVirtual Agentのフローに追加することで、要約機能を実装できそうなので機会があれば挑戦したいです。
今回のブログはServiceNowと他サービスとのAPI連携にも役立つ部分があるので皆さまの一助となれば幸いです。
弊社ではServiceNow社とのパートナー契約を結び、ServiceNowを活用したServiceNowを活用したソリューションも提供しています。
アラート対応の効率化や運用リソースを抑えたいなど運用に対するお悩みを解決するため、弊社としてはServiceNowのITOM分野にも注力しています。
導入事例を含めたITOMソリューションページやServiceNowを活用したソリューションの一つであるNI+C Multicloud MSPの紹介ページもありますので、一読していただけますと幸いです。
ServiceNowにご興味を持たれた方は、ぜひ日本情報通信へご相談ください。