はじめに
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キーを発行しておきます。
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業務を効率化するソリューションを提案したい。作れる?
Build AgentのLLMの学習データにはJevの情報が入っていないので、「知らないよ!」 と正直に回答がありました。
ただし、 「APIドキュメントのURLを教えてくれれば作れるよ」 とのこと。さすがだぜBuild Agent!
Step 2: 情報を渡して作ってもらう
1.https://docs.typesafe.ai/api
2.おまかせ!
3.自動処理
Build AgentがJevのAPIドキュメントを Web Fetch で取得し、中身を読み取ってくれました。
JevのAPI特性を活かした 「AI駆動インシデント自動トリアージシステム」 を提案してくれたので、おまかせで進めます。
Step 3: 完成!
あっという間に完成しました。
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キーを入力します。
動作確認
単体テスト — インシデント1件
早速インシデントを作成してみると、無事にJevが動いてますね!
画面項目の詳細は右ペインに表示されている Gemini in Chrome の説明を参照してください(便利な時代だ……)。
JevのAPI使用量を確認してみると……
< $0.0001 / 1 request
とにかく安い!
大量テスト — インシデント100件
さて、1件で動くのは確認できました。では 100件のインシデントを一気に流したらどうなるか?
これもBuild Agentに作ってもらいましょう!
実際に動かしたいので、インシデントを100件生成してください!
Build Agentが6カテゴリ × 多様な緊急度・感情トーンの 100件のリアルなインシデントデータ を含むScheduled Scriptを生成してくれました。
| カテゴリ | 件数 |
|---|---|
| 🌐 Network | 20件 |
| 💻 Software | 20件 |
| 🔧 Hardware | 20件 |
| 🗄️ Database | 15件 |
| 🔒 Security | 15件 |
| 📋 Other | 10件 |
では早速 Execute Now ボタンを押下! (。・ω・。)ノ凸"ポチッ
結果
インシデント一覧
無事に大量のインシデントが生成されています。Categoryは一律「Inquiry / Help」(ServiceNow側の初期値)。
Triage Log — Jevの判定結果
Jevの判定結果はカスタムテーブル「Triage Log」に格納されています。Category Result カラムを見ると、それなりにいい感じの分類ができている感じ Σd(・ω・*)
※今回はCategory Resultの値をインシデント側のCategoryに反映する処理は実装していません(面倒だったので……)
気になるお値段
_人人人人人人人人人人人人_
> $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円。
これならプロダクション環境でインシデントが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で生成した文面を筆者が確認・修正してから投稿しています
📣 ServiceNow World Forum Tokyo 2026
🎪 ServiceNow World Forum Tokyo 2026 — 2026年10月27日(火)〜28日(水) @ グランドプリンスホテル新高輪
本記事で紹介したBuild Agentをはじめ、ServiceNowの最新テクノロジーを体験できるイベントです。会場内の 「Vibe Code ラウンジ」 では、#BuildWithBuildAgentTokyo チャレンジの優秀作品も展示予定!参加登録は無料です 👇

















