はじめに

現在、弊社ではチャットボットの開発・運用を行っています。

チャットボットを運用する上で最も避けたいのは、「ユーザーが不満を感じているのに、それに気づけないこと」です。ユーザーがネガティブな反応(怒りや失望など)を示した瞬間を捉えることができれば、プロンプトの改善やUXの見直しに役立ちます。

そこで今回は、Datadog LLM Observability の感情分析機能を活用し、ユーザー入力が「Negative」と判定された瞬間にSlackへアラートを飛ばす仕組みを構築しました。

実現したいこと

  • ユーザーがチャットボットにメッセージを送信する。
  • アプリケーションコードからDatadogへトレース(ユーザー入力)を送信する。
  • Datadog側で入力を自動解析し、感情スコア(Sentiment)を付与する。
  • 「Negative」判定が出た場合、即座にSlackの専用チャンネルに通知する。

前提環境

  • チャットボットアプリがDatadogへトレースを送信していること。
  • Datadog LLM Observability が有効化されていること。
  • Datadog Slack Integration が設定済みであること。

実装ステップ

1. アプリケーションコードへの実装(トレース送信)

まず、アプリケーション側でユーザーの入力をDatadogに送信する部分を実装します。
Pythonの ddtrace ライブラリを使用している場合の例です。ここで重要なのは、LLMObs.annotate を使ってユーザーの入力(Input)を明示的に記録することです。

from ddtrace.llmobs import LLMObs

def chat_with_bot(user_input):
    # LLM Observabilityのトレースを開始
    with LLMObs.llm(model="gpt-4", name="conversation") as span:

        # 1. ユーザーの入力を注釈として記録(これが感情分析の対象になります)
        LLMObs.annotate(
            input_data=user_input
        )

        # ... ここでLLM呼び出し処理 ...
        llm_output = call_llm_api(user_input)

        # 2. AIの回答も記録
        LLMObs.annotate(
            input_data=user_input,
            output_data=llm_output,
        )

        return response

このように input_data として渡されたテキストが、Datadog側での感情分析の対象となります。

2. Datadog側での設定

トレースの送信設定ができたら、
Datadogが送られてきたテキストデータを自動的に評価(Evaluation)するように設定します。
以下の手順で有効化します。

  1. Datadogメニューの LLM Observability > 対象のサービスを開きます。
  2. Create Evaluations > Sentiment を選択して設定を行います。

これで、Datadogに送信されたユーザープロンプトに対して、自動的に Positive / Neutral / Negative のラベル付けが行われるようになります。

3. 現状の確認

データが流れ始めたら、Datadog上で正しく判定されているか確認します。

4. Slack通知の準備

通知先のSlackチャンネル(例: #llm-negative-alerts)を用意し、Datadogアプリを招待しておきます。
これを忘れると、後の設定画面でチャンネル候補に出てきません。

5. モニター(アラート)の作成

Datadogの Monitors > New Monitor からアラートを作成します。

A. モニタータイプの選択とスコープ定義

LLM Observability 専用のモニタータイプを使用します。

  1. Choose a monitor typeEvaluations を選択します。
  2. Define the monitor scope を以下のように設定します。
  • For traces submitted to [チャットボットのサービス名]
  • that have been evaluated on Input Sentiment
  • compute the count of spans with the value negative
  • Query: @ml_app:[チャットボットのサービス名] @evaluations.input_sentiment:negative

B. アラート条件

1件でも発生したら即座に検知したいので、閾値を「0」に設定します。

  • Trigger when the count is: above 0
  • Alert window: last 5 minutes
    ※直近5分間に1件でもあれば発火させる設定です。

6. 通知メッセージの作成

Slackで連携されたリンクに飛ぶだけで状況がわかるようにテンプレートを作成しました。

Message Body:

{{#is_alert}}
🚨 チャットボットの入力からネガティブな感情を検知しました。

👇 詳細をDatadogで確認
[Datadog Trace](https://app.datadoghq.com/llm/traces?query=%40ml_app%3A{service-name}%20%40event_type%3Aspan%20%40parent_id%3A%2A%20%40evaluations.input_sentiment%3Anegative)

@slack-llm-alerts
{{/is_alert}}

7. 動作確認

設定完了後、実際にチャットボットに対してネガティブな言葉(テスト用)を投げかけてみます。
例えば、以下のようなプロンプトを入力します。

「全然答えになってないんだけど。もっとちゃんと調べて回答してよ」

すると、数分以内にSlackへ以下のような通知が届きました。

担当者はこのリンクをクリックするだけで、Datadogの対象トレース画面にジャンプできます。
そこでユーザーの入力内容やAIの回答、前後の文脈を確認することで「単なる誤検知なのか」「システムエラーによる不満なのか」「プロンプト改善が必要なのか」を判断でき、改善やUXの見直しに繋がります。

まとめ

Datadog LLM Observabilityを使えば、ログを個別に解析するコードを書かなくても、簡単な設定と少しのコード実装だけで高度な感情分析アラートを実現できました。

チャットボットの開発を進める中で、こうした「運用監視」の視点も取り入れることで、プロダクトの品質を継続的に向上させていきたいと思います。