チャットボットサービス

このサービスは、デモの AI アシスタントのチャットインターフェイスを提供します。 Gradio Web UI を配信し、ユーザーのメッセージを HTTP 経由でエージェントサービスに転送し、応答をレンダリングします。 フロントエンドプロキシの /chatbot を通じて公開されています。

チャットボットサービスのソースコード

計装ライブラリ

このサービスは opentelemetry-instrument ラッパーを通じて起動されません。 Dockerfile はスクリプトを直接実行し、計装はコード内でセットアップされます。

CMD ["python", "run.py"]

エージェントサービスや MCP サービスとは異なり、このサービスは Traceloop SDK ではなく OpenTelemetry SDK を直接使用します。 2つの HTTP クライアント計装ライブラリが有効化されています。

RequestsInstrumentor().instrument()
HTTPXClientInstrumentor().instrument()

エージェントへの呼び出しは requests で行われるため、opentelemetry-instrumentation-requests がそのクライアントスパンを生成し、送信リクエストにトレースコンテキストを注入します。 これにより、チャットインターフェイスがエージェントに、さらにエージェントが行う LLM やツール呼び出しに接続されます。

Gradio サーバー自体は計装されていないため、ブラウザからの受信リクエストはサーバースパンを生成しません。 このサービスのトレースは、エージェントへの送信呼び出しから始まります。

トレース

トレースの初期化

トレースは _configure_tracing で明示的に設定されており、run.py がインポート時に呼び出します。 このコードはトレーサープロバイダーを作成し、OTLP エクスポーターを備えたバッチスパンプロセッサーを追加し、計装ライブラリが使用できるようにプロバイダーをグローバルに登録します。

def _configure_tracing() -> None:
    provider = TracerProvider()
    provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter()))
    trace.set_tracer_provider(provider)

    RequestsInstrumentor().instrument()
    HTTPXClientInstrumentor().instrument()

エクスポーターは opentelemetry.exporter.otlp.proto.http.trace_exporter からインポートされるため、このサービスは OTLP/HTTP 経由でエクスポートします。 Docker Compose はこのサービスに対して OTEL_EXPORTER_OTLP_ENDPOINT を OpenTelemetry Collector の OTLP/HTTP ポートに設定していますが、他のほとんどのデモサービスは gRPC 経由でエクスポートします。 エクスポートエンドポイント、リソース属性、サービス名はすべて標準の OpenTelemetry 環境変数から取得されます。

新しいスパンの作成

このサービスは独自のスパンを作成しません。 トレーサーを取得せず、start_as_current_span を呼び出さず、set_attribute を使用してスパンを拡充することもありません。 すべてのスパンは requests および HTTPX 計装ライブラリから生成されます。

メトリクス

メータープロバイダーは設定されていません。 このサービスはトレースエクスポーターのみをインポートし、metrics.set_meter_provider を呼び出さないため、requests および HTTPX 計装ライブラリが出力可能なメトリクスは送信先がなく、エクスポートされません。 メトリクスカバレッジマトリクスを参照してください。

ログ

このサービスは Python 標準ライブラリのロガーのみを設定しています。

logging.basicConfig(level=logging.INFO)

エージェントへのリクエストとエラーは、chat_with_agent 内でこのロガーを通じて記録されます。

logging.info(f"Sending request {payload} to Agent")

LoggerProviderLoggingHandler が設定されていないため、これらのレコードは OTLP 経由でエクスポートされるのではなく、標準出力に出力されコンテナランタイムによって収集されます。 そのため、トレースとの相関はありません。 ログカバレッジマトリクスを参照してください。

環境変数の完全なリストとトラブルシューティング手順については、サービスの README を参照してください。