1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ServiceNow] とりあえずServiceNow PDIとJevとをAPIで繋いでみた (Build Agent)

1
Last updated at Posted at 2026-09-22

はじめに

AIを扱うITエンジニア界隈でここ数日、爆発的に流行っている TypeSafe AI の「Jev」をご存知でしょうか?

Jevは 「スマートなif文」 というコンセプトで、テキストを渡すと Yes/No判定・選択分類・スコアリング を構造化された確率分布付きで返してくれるAI評価APIです。従来の条件分岐(if文やDecision Table)や、最近のAgentic Workflowへの活用が期待されています。

「これ、ServiceNowのインシデント管理と組み合わせたら面白いのでは?」 と思い立ち、ServiceNow PDIで実際につなげてみました。

やっていることは「ServiceNowにJevのAPIを繋げただけ」で、それほど凝ったことはしていません。ただし、実装は全てServiceNow Build Agentにおまかせ です。外部APIの連携からテストデータの生成、そしてこの記事の骨子の作成までBuild Agentが担ってくれる——すごい時代になりました。

本記事は #BuildWithBuildAgentTokyo チャレンジ への参加記事です。

Jev とは? — 30秒でわかるまとめ

項目 内容
提供元 TypeSafe AI
モデル名 jev-latest
エンドポイント POST https://api.typesafe.ai/v1/systemone
認証 Bearer Token
APIドキュメント https://docs.typesafe.ai/api

Jevには 3つの質問タイプ(評価プリミティブ) があります。

タイプ 用途 返り値
Noul Yes/No判定 0〜1の確率値
Choice 選択肢から1つ選択 選択結果 + 各選択肢の確率分布
Score ルーブリックに沿った段階評価 加重平均スコア + 確率分布 + 信頼度

特徴的なのは、単なるラベル付けではなく 確率分布と信頼度 が返ってくる点。「80%の確率でNetworkカテゴリ、15%でSecurityカテゴリ」のように、判断の不確実性が定量化 されます。

何を作ったか — AI駆動インシデント自動トリアージ

新規インシデントが作成されると、非同期Business Rule がJev APIを呼び出し、インシデント内容をAIが自動評価します。

🎫 インシデント作成
  ↓
⚡ Async Business Rule 発火
  ↓
🌐 Jev API コール(3つの質問を1リクエストで送信)
  ↓
┌─────────────────────────────────────────────┐
│ 🔍 Choice: カテゴリ自動分類                    │
│    (Network / Software / Hardware /           │
│     Database / Security / Other)              │
│ ⚡ Noul: 緊急度判定 (0.0〜1.0の確率)           │
│    → 0.7超でurgencyを自動エスカレーション        │
│ 😤 Score: 顧客フラストレーション分析 (5段階)     │
│    → 高スコア時にエスカレーション判断材料に       │
└─────────────────────────────────────────────┘
  ↓
📝 インシデントのAIフィールド自動更新 + Triage Logに記録

Jevの3つの質問タイプをフル活用した構成です。

事前準備

TypeSafe AI の APIキーを取得

TypeSafe AIのコンソール からAPIキーを発行しておきます。

image.png

ServiceNow PDI(個人開発インスタンス)

developer.servicenow.com から無料のPDIを取得しておきましょう。

実装 — Build Agentとの対話でバイブコーディング

おなじみの ServiceNow Build Agent を使います。ログが見れるなど、現時点だとServiceNow StudioよりもServiceNow IDEの方が開発者としては使いやすいと思います(この辺りはServiceNow Studioの今後のアップデートに期待)。

Step 1: まずはJevを知ってるか聞いてみる

TypeSafe AIの「Jev」って知ってますか?
そのAPIを用いてServiceNow業務を効率化するソリューションを提案したい。作れる?

image.png

Build AgentのLLMの学習データにはJevの情報が入っていないので、「知らないよ!」 と正直に回答がありました。

ただし、 「APIドキュメントのURLを教えてくれれば作れるよ」 とのこと。さすがだぜBuild Agent!

Step 2: 情報を渡して作ってもらう

1.https://docs.typesafe.ai/api
2.おまかせ!
3.自動処理

image.png

Build AgentがJevのAPIドキュメントを Web Fetch で取得し、中身を読み取ってくれました。

image.png

JevのAPI特性を活かした 「AI駆動インシデント自動トリアージシステム」 を提案してくれたので、おまかせで進めます。

image.png

Step 3: 完成!

あっという間に完成しました。

image.png

Build Agentが自動で作成してくれたメタデータは以下の通りです。

メタデータ 説明
Incident Table 拡張 AI Category, Urgency Probability, Sentiment Score, Triage Status の4フィールドを incident テーブルに追加
Triage Log テーブル API呼び出し結果の詳細ログ(カテゴリ信頼度、トークン使用量等)
REST Message Jev SystemOne API — Bearer Token認証のPOSTエンドポイント定義
Script Include JevTriageClient — Jev APIラッパー(3つの質問を1リクエストで一括送信)
Business Rule Jev Auto Triage Incident — インシデント作成時に非同期実行
System Properties APIキー格納用(password2 / 非表示)、有効化フラグ(boolean)

APIキーの設定

Build Agentの指示に従い、System PropertyにJevのAPIキーを設定します。

セキュリティについて:今回はPDIでのお試し実装なので password2 型のSystem Propertyに格納しています。エンタープライズ環境での本番実装時には、Credential StoreやConnection Aliasの活用など、組織のセキュリティポリシーに従ってください。

System Properties<instance_name>_jev_incid.jev.api_key を検索し、ValueにJevのAPIキーを入力します。

image.png

image.png

動作確認

単体テスト — インシデント1件

早速インシデントを作成してみると、無事にJevが動いてますね!

画面項目の詳細は右ペインに表示されている Gemini in Chrome の説明を参照してください(便利な時代だ……)。

image.png

JevのAPI使用量を確認してみると……

< $0.0001 / 1 request

とにかく安い!

image.png

大量テスト — インシデント100件

さて、1件で動くのは確認できました。では 100件のインシデントを一気に流したらどうなるか?

これもBuild Agentに作ってもらいましょう!

実際に動かしたいので、インシデントを100件生成してください!

image.png

Build Agentが6カテゴリ × 多様な緊急度・感情トーンの 100件のリアルなインシデントデータ を含むScheduled Scriptを生成してくれました。

カテゴリ 件数
🌐 Network 20件
💻 Software 20件
🔧 Hardware 20件
🗄️ Database 15件
🔒 Security 15件
📋 Other 10件

image.png

では早速 Execute Now ボタンを押下! (。・ω・。)ノ凸"ポチッ

image.png

結果

インシデント一覧

無事に大量のインシデントが生成されています。Categoryは一律「Inquiry / Help」(ServiceNow側の初期値)。

image.png

Triage Log — Jevの判定結果

Jevの判定結果はカスタムテーブル「Triage Log」に格納されています。Category Result カラムを見ると、それなりにいい感じの分類ができている感じ Σd(・ω・*)

※今回はCategory Resultの値をインシデント側のCategoryに反映する処理は実装していません(面倒だったので……)

image.png

参考までに、Incidentテーブルに追加された4つのフィールド「AI Category」「AI Urgency Probability」「AI Sentiment Score」「AI Triage Status」への値の格納状況です。

これらを対応するフィールドに代入してやれば良いですね💡
image.png

気になるお値段

_人人人人人人人人人人人人_
> $0.0027 / 100 requests <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

や、安いっ Σ(・ω・ノ)ノ

100件のインシデントを3つの質問タイプ(Choice + Noul + Score)で評価して、たったの $0.0027(約0.4円)。1件あたり $0.000027、日本円で約0.004円。

image.png

これならプロダクション環境でインシデントが1日1,000件来ても、月額で数十円 程度。コスト面でのハードルはほぼ皆無と言っていいでしょう。

技術的な中身をちょっとだけ

Build Agentが作ってくれたコードの中で、特に面白い部分を紹介します。

Jev APIへのリクエスト構造

JevTriageClient Script Includeが構築するリクエストボディです。1回のAPIコールで3つの質問を同時に評価 できるのがJevの強みです。

var requestBody = {
    state: "Incident Summary: " + shortDesc + "\n\nFull Description: " + description,
    model: "jev-latest",
    questions: {
        // Choice: カテゴリ分類
        category: {
            type: "choice",
            instructions: "Classify this IT incident into the most appropriate category.",
            criteria: {
                network: "Issues related to network connectivity, DNS, VPN...",
                software: "Issues related to software applications, crashes...",
                hardware: "Issues related to physical equipment...",
                database: "Issues related to database performance...",
                security: "Issues related to security breaches...",
                other: "Issues that do not fit into the above categories"
            }
        },
        // Noul: 緊急度 Yes/No 判定
        urgency: {
            type: "noul",
            instructions: "Does this incident convey urgency or require immediate attention?",
            criteria: {
                true: "Critical or time-sensitive issue affecting business operations",
                false: "Routine, informational, or can be addressed during normal operations"
            }
        },
        // Score: フラストレーション5段階評価
        sentiment: {
            type: "score",
            instructions: "Rate the frustration or negative sentiment level...",
            criteria: [
                "Calm and neutral",
                "Slightly frustrated",
                "Moderately frustrated",
                "Very frustrated",
                "Extremely frustrated"
            ]
        }
    }
};

緊急度の自動エスカレーション

Business Ruleでは、Noulの確率値が0.7を超えた場合にインシデントのurgencyを自動的にHighに引き上げます。

if (result.urgencyProbability > 0.7) {
    var currentUrgency = parseInt(incGR.getValue('urgency'), 10);
    if (currentUrgency > 1) {
        incGR.setValue('urgency', '1'); // High
    }
}

確率が閾値を超えたら自動アクション」——まさにJevのコンセプト「スマートなif文」そのものですね。

プロジェクト構成

Build Agentが生成した最終的なファイル構成です。

src/
├── fluent/                              # Fluent DSL 定義ファイル
│   ├── business-rules/
│   │   └── auto-triage.now.ts           # 非同期BR定義
│   ├── properties/
│   │   └── api-config.now.ts            # APIキー・有効化フラグ
│   ├── rest-messages/
│   │   └── jev-api.now.ts               # REST Message定義
│   ├── scheduled-scripts/
│   │   └── generate-test-incidents.now.ts # テストデータ生成
│   ├── script-includes/
│   │   └── jev-triage-client.now.ts     # Script Include定義
│   └── tables/
│       ├── incident-augment.now.ts      # incidentテーブル拡張
│       └── triage-log.now.ts            # Triage Logテーブル
└── server/                              # サーバーサイドスクリプト
    ├── business-rules/
    │   └── auto-triage.server.js        # トリアージ処理本体
    ├── scheduled-scripts/
    │   └── generate-test-incidents.server.js # 100件生成スクリプト
    └── script-includes/
        └── jev-triage-client.js         # Jev APIラッパー

所感

Jev × ServiceNow の親和性

流行りのJevを使って何かできないかな、と思って試してみましたが、ServiceNowとの親和性は非常に高い と感じました。

  • Choice → インシデントカテゴリ、アサイングループの自動判定
  • Noul → 緊急度判定、エスカレーション要否、SLA違反リスクの検知
  • Score → 顧客満足度、対応品質の評価、優先度のスコアリング

ServiceNowには条件分岐を行う場面が無数にあります(Business Rule、Flow Designer、Assignment Ruleなど)。Jevの 「確率ベースのスマートなif文」 は、テキスト入力に対する柔軟な分岐ロジックとして、これらの仕組みを強力に補完できる可能性があると感じました。引き続き研究を続けます。

Build Agentの威力

そして何より驚いたのは、外部サービスとのAPI連携実装からテストデータ100件の生成、そしてこの記事の骨子の執筆までをBuild Agentが片づけてしまう ということ。

すごい時代になったよなぁ (((・ω・)))

※ AIで生成した文面を筆者が確認・修正してから投稿しています

image.png

📣 ServiceNow World Forum Tokyo 2026

🎪 ServiceNow World Forum Tokyo 2026 — 2026年10月27日(火)〜28日(水) @ グランドプリンスホテル新高輪

本記事で紹介したBuild Agentをはじめ、ServiceNowの最新テクノロジーを体験できるイベントです。会場内の 「Vibe Code ラウンジ」 では、#BuildWithBuildAgentTokyo チャレンジの優秀作品も展示予定!参加登録は無料です 👇

▶ World Forum Tokyo 2026 に参加登録する(無料)

参考リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?