mcpField
C
content-recommendation

content-recommendation

github.com/happy-technologies-llc生産性4141 回インストール2 日前に更新
リポジトリ

content-recommendation について

インシデント、カスタマーサービスケース、ユーザーの質問にナレッジ記事を推薦する ServiceNow スキルです。カテゴリ、キーワード、過去の解決実績、記事の品質指標を組み合わせ、レコードへの推薦登録も行えます。

主な機能

  1. 01インシデントやケースの文脈抽出
  2. 02カテゴリとキーワードによる記事検索
  3. 03類似する解決済みインシデントの記事特定
  4. 04評価、閲覧数、更新日による順位付け
  5. 05推薦記事と根拠のレコードへの記録

活用シーン

  1. 01対応中のインシデント向け記事の検索
  2. 02サービスケースへのナレッジ記事推薦
  3. 03記事推薦ワークフローの自動化

MCP 対応

SN-Query-Table と SN-Natural-Language-Search でインシデントや記事を検索し、SN-Update-Record または SN-Add-Work-Notes で推薦内容を記録します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/happy-technologies-llc/happy-platform-skills --skill content-recommendation

インストール後、Claude Code で/content-recommendationを入力して読み込まれたか確認します。

詳細

ナレッジコンテンツの推奨

概要

このスキルでは、ServiceNow で進行中のインシデント、ケース、またはユーザーからの問い合わせに関連するナレッジ記事を推奨するための体系的な方法を紹介します。効果的なナレッジの推奨により、解決までの時間を短縮し、初回問い合わせでの解決率を高め、セルフサービスの利用を促進できます。

このスキルでは、次のことができます。

  • インシデントやケースの説明からキーワードとコンテキストを抽出し、対象を絞った検索を作成する
  • カテゴリの照合、キーワードの一致、自然言語検索を使用してナレッジベースを検索する
  • 閲覧数、評価、更新時期、過去の解決パターンを使って、候補記事の関連性を順位付けする
  • 類似するインシデントの解決に以前使用された記事を特定する
  • コンテキストに応じた注記を添えて、推奨記事をインシデントまたはケースのレコードに添付する

使用する場面: インシデントやケースのトリアージまたは対応中、ユーザーが特定のトピックについて支援を求めたとき、あるいは推奨ワークフローを自動化するとき。

前提条件

  • ロール: 読み取りアクセスには、itil、sn_customerservice_agent、または knowledge ロールが必要です
  • アクセス権: kb_knowledge、incident、sn_customerservice_case、m2m_kb_task、kb_use、kb_feedback テーブルへの読み取りアクセス
  • プラグイン: com.glideapp.knowledge(Knowledge Management)が有効になっていること
  • ナレッジ: 組織のナレッジベースの構成、カテゴリ、タグ付け規則を理解していること

手順

ステップ 1:インシデントまたはケースからコンテキストを抽出する

問題のコンテキストを把握するために、インシデントまたはケースの詳細を取得します。

MCP を使用する場合:

Tool: SN-Query-Table
Parameters:
  table_name: incident
  query: number=INC0012345
  fields: sys_id,number,short_description,description,category,subcategory,cmdb_ci,assignment_group,impact,urgency,close_notes
  limit: 1

REST API を使用する場合:

GET /api/now/table/incident?sysparm_query=number=INC0012345&sysparm_fields=sys_id,number,short_description,description,category,subcategory,cmdb_ci,assignment_group,impact,urgency,close_notes&sysparm_limit=1

CSM ケースの場合:

Tool: SN-Query-Table
Parameters:
  table_name: sn_customerservice_case
  query: number=CS0045678
  fields: sys_id,number,short_description,description,product,category,account,contact,priority
  limit: 1
ステップ 2:カテゴリの一致でナレッジを検索する

インシデントのカテゴリとサブカテゴリを使用して、同じナレッジ領域の記事を検索します。

MCP を使用する場合:

Tool: SN-Query-Table
Parameters:
  table_name: kb_knowledge
  query: workflow_state=published^kb_category.label=Network^active=true
  fields: sys_id,number,short_description,kb_knowledge_base,kb_category,sys_view_count,rating,sys_updated_on,author
  limit: 15

REST API を使用する場合:

GET /api/now/table/kb_knowledge?sysparm_query=workflow_state=published^kb_category.label=Network^active=true&sysparm_fields=sys_id,number,short_description,kb_knowledge_base,kb_category,sys_view_count,rating,sys_updated_on,author&sysparm_limit=15
ステップ 3:キーワードの一致でナレッジを検索する

インシデントの短い説明と詳細な説明から重要な用語を抽出し、それらの用語を含む記事を検索します。

MCP を使用する場合:

Tool: SN-Query-Table
Parameters:
  table_name: kb_knowledge
  query: workflow_state=published^short_descriptionLIKEvpn^ORtextLIKEvpn^short_descriptionLIKEtimeout^ORtextLIKEtimeout^short_descriptionLIKEconnection^ORtextLIKEconnection
  fields: sys_id,number,short_description,text,kb_knowledge_base,kb_category,sys_view_count,rating
  limit: 15

REST API を使用する場合:

GET /api/now/table/kb_knowledge?sysparm_query=workflow_state=published^short_descriptionLIKEvpn^ORtextLIKEvpn^short_descriptionLIKEtimeout^ORtextLIKEtimeout^short_descriptionLIKEconnection^ORtextLIKEconnection&sysparm_fields=sys_id,number,short_description,kb_knowledge_base,kb_category,sys_view_count,rating&sysparm_limit=15
ステップ 4:類似するインシデントの解決に使用された記事を見つける

多対多の関連テーブルを検索し、一致するカテゴリを持つ解決済みインシデントに関連付けられていた記事を見つけます。

MCP を使用する場合:

Tool: SN-Query-Table
Parameters:
  table_name: m2m_kb_task
  query: task.category=network^task.subcategory=vpn^task.state=6
  fields: kb_knowledge,kb_knowledge.number,kb_knowledge.short_description,task,task.number,task.short_description
  limit: 20

REST API を使用する場合:

GET /api/now/table/m2m_kb_task?sysparm_query=task.category=network^task.subcategory=vpn^task.state=6&sysparm_fields=kb_knowledge,kb_knowledge.number,kb_knowledge.short_description,task,task.number,task.short_description&sysparm_limit=20
ステップ 5:記事の品質を示す指標を確認する

ステップ 2~4 で見つかった候補記事について、利用状況の指標とフィードバックを使って品質を評価します。

MCP を使用する場合:

Tool: SN-Query-Table
Parameters:
  table_name: kb_use
  query: article.numberINKB0010100,KB0010200,KB0010300
  fields: article,article.number,viewed,useful,not_useful
  limit: 20

REST API を使用する場合:

GET /api/now/table/kb_use?sysparm_query=article.numberINKB0010100,KB0010200,KB0010300&sysparm_fields=article,article.number,viewed,useful,not_useful&sysparm_limit=20

最近の否定的なフィードバックを確認します。

Tool: SN-Query-Table
Parameters:
  table_name: kb_feedback
  query: article.numberINKB0010100,KB0010200,KB0010300^sys_created_on>=javascript:gs.daysAgoStart(90)
  fields: article,article.number,rating,comments,sys_created_on
  limit: 20
ステップ 6:順位付けして上位の推奨記事を選択する

関連性スコアリングモデルを適用し、候補記事を順位付けします。

順位付けの基準:

要素重み説明
カテゴリの一致25%記事のカテゴリがインシデントのカテゴリと一致する
キーワードの重複30%タイトルと本文で一致するキーワードの数
過去の解決実績20%類似する過去のインシデントの解決に記事が使用された
記事の評価10%ユーザー評価の平均(高いほど良い)
更新時期10%更新日が新しい記事ほど高く評価する
閲覧数5%閲覧数が多いほど、一般的に有用であることを示す

スコアリングの指針:

  • 3 つ以上の基準に一致する記事は「強く推奨する記事」です
  • 2 つの基準に一致する記事は「推奨候補の記事」です
  • 過去 90 日以内に否定的なフィードバックがあった記事には、注意書きを付けます
ステップ 7:推奨記事をインシデントに添付する

最上位の記事をインシデントにリンクし、推奨内容を記録します。

MCP を使用する場合:

Tool: SN-Update-Record
Parameters:
  table_name: incident
  sys_id: [incident_sys_id]
  data:
    kb_knowledge: [recommended_article_sys_id]
    work_notes: "Knowledge Recommendation: Attached KB0010100 'VPN Connection Timeout Troubleshooting' based on category match (Network/VPN), keyword overlap (vpn, timeout, connection), and historical resolution of 12 similar incidents."

REST API を使用する場合:

PATCH /api/now/table/incident/{sys_id}
Content-Type: application/json

{
  "kb_knowledge": "[recommended_article_sys_id]",
  "work_notes": "Knowledge Recommendation: Attached KB0010100..."
}
ステップ 8:複数の記事を推奨する場合の記録

関連する記事が複数ある場合は、根拠を添えてすべての推奨記事を作業メモに追加します。

MCP を使用する場合:

Tool: SN-Add-Work-Notes
Parameters:
  sys_id: [incident_sys_id]
  work_notes: |
    === KNOWLEDGE RECOMMENDATIONS ===
    Based on: INC0012345 "VPN connection timeout when connecting remotely"

    1. KB0010100 - "VPN Connection Timeout Troubleshooting" (Score: 4.5/5)
       - Category match: Network/VPN
       - Used in 12 similar resolved incidents
       - Rating: 4.2/5, 890 views
       - RECOMMENDED: Primary article

    2. KB0010200 - "Corporate Network Access Guide" (Score: 3.2/5)
       - Keyword match: "corporate network", "connection"
       - Rating: 3.8/5, 456 views
       - SUPPLEMENTARY: General reference

    3. KB0010300 - "VPN Client Installation" (Score: 2.1/5)
       - Partial category match
       - May be relevant if client reinstallation needed
       - SITUATIONAL: Only if client is corrupt

ツールの使用

MCP ツールのリファレンス
ツール使用する場面
SN-Query-Tableインシデント、記事、利用データに対する構造化クエリ
SN-Natural-Language-Searchトピックに基づく記事の検索に使用する自然言語検索
SN-Update-Record推奨記事をインシデント/ケースに関連付ける
SN-Add-Work-Notes推薦理由を記録する
REST API リファレンス
エンドポイントメソッド目的
/api/now/table/incidentGETインシデントのコンテキストを取得する
/api/now/table/kb_knowledgeGETナレッジ記事を検索する
/api/now/table/m2m_kb_taskGET過去のインシデントに関連付けられた記事を見つける
/api/now/table/kb_useGET記事の利用状況指標を確認する
/api/now/table/kb_feedbackGET記事へのフィードバック品質を確認する
/api/now/table/incident/{sys_id}PATCH記事をインシデントに関連付ける

ベストプラクティス

  • 複数のキーワードを抽出する: インシデントの説明から意味のあるキーワードを少なくとも3~5個抽出します。ストップワードや一般的すぎる語句は避けます
  • 広く検索してから絞り込む: まず自然言語検索で幅広く検索し、その後カテゴリや品質指標で絞り込みます
  • 実績のある記事を優先する: 過去に解決したインシデントに関連付けられた記事は、検証されていない記事よりも重視します
  • 更新時期を確認する: 手順が変更されている可能性があるため、12か月以上更新されていない記事の優先度を下げます
  • 品質上の問題を明示する: 最も一致する記事に否定的なフィードバックがある場合は、その旨を記載し、注意点を添えて推奨することを検討します
  • 対象読者を考慮する: 記事の対象読者(ITスタッフまたはエンドユーザー)を状況に合わせます。セルフサービスの依頼には、ユーザー向けの記事が必要です
  • 推薦結果を追跡する: 推奨記事によって解決に至ったかを確認します。このフィードバックは今後の推薦の改善に役立ちます

トラブルシューティング

「インシデントのカテゴリに該当する記事が見つかりません」

原因: ナレッジベースにこのトピックの記事がないか、インシデントとKBでカテゴリラベルが異なっています
解決策: 厳密なカテゴリフィルターではなく、キーワードの一致を使用して検索範囲を広げます。これはナレッジの不足を示している可能性もあります。gap-analysis スキルを参照してください

「候補記事が多すぎます」

原因: 一般的すぎるキーワードが広範囲の記事に一致しています
解決策: より具体的なキーワードを追加するか、ナレッジベースで絞り込むか、CI/サービスで絞り込みます。カテゴリとキーワードのフィルターをAND条件で組み合わせます

「過去の解決データが少ないです」

原因: エージェントが解決時にKB記事をインシデントに関連付けていません
解決策: 代わりにキーワードとカテゴリの一致に重点を置きます。今後のデータを改善するため、KCSの実践を促進することを検討します

「記事の評価がすべてゼロです」

原因: フィードバックの収集が有効になっていないか、ユーザーが記事を評価していません
解決策: glide.knowman.show_feedback プロパティを確認します。代わりに閲覧数を品質指標として使用します

例

例1:VPN接続のインシデント

インシデント: INC0012345 - 「VPNに接続できません - 30秒後にタイムアウトエラーが発生します」

抽出したコンテキスト:

  • カテゴリ:ネットワーク、サブカテゴリ:VPN
  • キーワード:VPN、接続、タイムアウト、エラー
  • CI:Cisco AnyConnect VPN

検索結果:

  1. KB0010100 - 「VPN接続のタイムアウトに関するトラブルシューティング」(カテゴリ一致+キーワード一致+過去の解決事例12件)
  2. KB0010200 - 「Cisco AnyConnect設定ガイド」(CI一致+キーワード一致)
  3. KB0010450 - 「リモートアクセスFAQ」(キーワードが部分一致)

推奨: KB0010100を主記事、KB0010200を補足記事として推奨します

例 2:カスタマーサービスのケース

ケース: CS0045678 - 「購入後に製品ライセンスキーをアクティベートできない」

抽出されたコンテキスト:

  • 製品:Enterprise Suite
  • カテゴリー:ライセンス
  • キーワード:ライセンス、キー、アクティベート、購入

検索結果:

  1. KB0030100 - 「ライセンスのアクティベーションに関するトラブルシューティング」(カテゴリー+キーワード+ケース解決例 8 件)
  2. KB0030150 - 「Enterprise Suite のライセンスタイプ」(製品+キーワード)
  3. KB0030200 - 「交換用ライセンスキーのリクエスト方法」(キーワード一致)

推奨: 主な記事として KB0030100 を推奨します。キーがアクティベートできないのではなく、無効な場合は、KB0030200 も提案してください。

関連スキル

  • knowledge/gap-analysis - 該当する記事がないトピックを特定します
  • knowledge/duplicate-detection - 推奨を混乱させる重複記事を整理します
  • knowledge/article-generation - 関連するコンテンツがない場合に新しい記事を生成します
  • knowledge/gap-grouping - コンテンツが不足している領域をまとめて、記事を一括作成します

コメント