トピックの要約が機能しない 😢

皆さん、こんにちは。

これはセルフホストインスタンスに関するものです。

Discourse AI プラグインを有効にしたのですが、いくつか問題が発生しました。
エンタープライズ環境で作業しており、AI アクセスは追加の認証を伴う内部エンドポイントを経由する必要があります。
AWS API Gateway エンドポイントと Lambda を実装し、必要な認証情報でヘッダーをエンリッチし、OPENAI 互換の内部エンドポイントにリクエストを渡すようにしました。

LLM テストでは、

という結果になり、これで完了だと思いました。
API Gateway の呼び出しに関する関連する呼び出しも CloudWatch ログで確認できます。

次に、要約ペルソナ(「Summarization」と「… (short form)」)をこの LLM に関連付け、トピック要約を有効にしました。

しかし、現在表示されているのは、期待していたものではありませんでした :smiley:

そして、これは変化しません :frowning:
最も奇妙なのは、要約を試みた際の CloudWatch ログにリクエストが表示されないことです。

再度、何をしたかをまとめます。

  • AI を有効化
  • API Gateway エンドポイントを使用して vLLM を作成
  • 2 つのペルソナ(上記参照)を作成し、LLM 設定に関連付け
  • 要約を有効にし、そこでペルソナ(両方試しました)を関連付け

次に何を試すべきか分かりません :frowning:

皆さん、ありがとうございます。JP より

テストエンドポイントは少し誤解を招くものであり、これは修正したい点です。

現在、「非ストリーミング」エンドポイントのみをテストしています。「ストリーミング」はテストされていません。

LLMでストリーミングを無効にすると、すべて機能しますか?おそらく、プロキシで実装されていない可能性があります。

@sam

リクエストを渡す際に、LAMBDA でストリーミングを無効にしました(ハードコーディング)。

しかし、要約 API によって LAMBDA がトリガーされません(リクエストが確認できません)。

LLM テストは呼び出しを行いますが、トピック内の要約ボタンは行いません。

エラーは何もありません(DISCOURSE_LOG_LEVEL=debug でデバッグレベルをオンにしましたが、discourse ログにも、LAMBDA のログ(CloudWatch)にも何も表示されません)。

何も押していないかのようです :frowning:

よろしくお願いいたします。

Julian

OpenAI互換のエンドポイントである場合、プロバイダーがvLLMに設定されているのはなぜですか?

「いいね!」 1

こんにちは、

いろいろなエンジンを試してみました。申し訳ありません、スクリーンショットは誤解を招くものでした。OpenAIも試しました…

これは、Discourseインスタンスに1:1で送り返すエンドポイントからの回答です。
これでDiscourseで「Internal Server Error」が発生します(今朝までテストがうまくいっていたので、理由は不明です:smiley:)。

{
  "statusCode": 200,
  "headers": {
    "date": "Mon, 02 Jun 2025 05:57:44 GMT",
    "content-type": "application/json",
    "content-length": "1315",
    "x-content-type-options": "nosniff",
    "x-frame-options": "DENY",
    "strict-transport-security": "max-age=63072000; includeSubdomains; preload",
    "content-security-policy": "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'",
    "referrer-policy": "no-referrer",
    "x-xss-protection": "0",
    "x-request-id": "02d33931-1e29-418e-b9a7-4eba07710e8e",
    "x-accel-buffering": "no",
    "via": "1.1 google"
  },
  "body": {
    "id": "24c1474f-bd51-4542-b87a-8608fd90b5fb",
    "choices": [
      {
        "finish_reason": "stop",
        "index": 0,
        "logprobs": null,
        "message": {
          "content": "1 + 1 は 2 に等しいです。",
          "refusal": null,
          "role": "assistant",
          "annotations": [],
          "audio": null,
          "function_call": null,
          "tool_calls": null,
          "reasoning_content": null
        },
        "content_filter_results": {
          "hate": {
            "filtered": false,
            "severity": "safe"
          },
          "profanity": {
            "filtered": false,
            "detected": false
          },
          "protected_material_code": {
            "filtered": false,
            "detected": false
          },
          "protected_material_text": {
            "filtered": false,
            "detected": false
          },
          "self_harm": {
            "filtered": false,
            "severity": "safe"
          },
          "sexual": {
            "filtered": false,
            "severity": "safe"
          },
          "violence": {
            "filtered": false,
            "severity": "safe"
          }
        }
      }
    ],
    "created": 1748843864,
    "model": "openai/gpt-4o",
    "object": "chat.completion",
    "usage": {
      "prompt_tokens": 25,
      "completion_tokens": 9,
      "total_tokens": 34,
      "prompt_tokens_details": {
        "audio_tokens": 0,
        "cached_tokens": 0
      },
      "completion_tokens_details": {
        "accepted_prediction_tokens": 0,
        "audio_tokens": 0,
        "reasoning_tokens": 0,
        "rejected_prediction_tokens": 0,
        "cached_tokens": 0
      }
    },
    "cost": {
      "interaction": {
        "prompt_tokens": 0.0000688,
        "prompt_tokens_details": {
          "standard": 0.0000688,
          "cached": 0
        },
        "completion_tokens": 0.000099,
        "completion_tokens_details": {
          "standard": 0.000099,
          "reasoning": 0,
          "cached": 0
        },
        "total": 0.0001678,
        "currency": "USD"
      },
      "integrations": {},
      "total": 0.0001678,
      "currency": "USD"
    }
  }
}
```@ discourse logs:

サイトに戻る
DiscourseAi::Completions::Endpoints::Vllm: status: 502 - body: {“message”: “Internal server error”}
午前8:07
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:134:in block in error' activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in block in dispatch’
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in each' activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in dispatch’
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:134:in error' /var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:160:in block (2 levels) in perform_completion!’
net-http-0.6.0/lib/net/http.rb:2433:in block in transport_request' net-http-0.6.0/lib/net/http/response.rb:320:in reading_body’
net-http-0.6.0/lib/net/http.rb:2430:in transport_request' net-http-0.6.0/lib/net/http.rb:2384:in request’
rack-mini-profiler-3.3.1/lib/patches/net_patches.rb:19:in block in request_with_mini_profiler' rack-mini-profiler-3.3.1/lib/mini_profiler/profiling_methods.rb:50:in step’
rack-mini-profiler-3.3.1/lib/patches/net_patches.rb:18:in request_with_mini_profiler' /var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:158:in block in perform_completion!’
net-http-0.6.0/lib/net/http.rb:1632:in start' net-http-0.6.0/lib/net/http.rb:1070:in start’
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:129:in perform_completion!' /var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:374:in generate’
/var/www/discourse/plugins/discourse-ai/lib/configuration/llm_validator.rb:36:in run_test' /var/www/discourse/plugins/discourse-ai/app/controllers/discourse_ai/admin/ai_llms_controller.rb:128:in test’
actionpack-7.2.2.1/lib/action_controller/metal/basic_implicit_render.rb:8:in send_action' actionpack-7.2.2.1/lib/abstract_controller/base.rb:226:in process_action’
actionpack-7.2.2.1/lib/action_controller/metal/rendering.rb:193:in process_action' actionpack-7.2.2.1/lib/abstract_controller/callbacks.rb:261:in block in process_action’
activesupport-7.2.2.1/lib/active_support/callbacks.rb:121:in block in run_callbacks' /var/www/discourse/app/controllers/application_controller.rb:428:in block in with_resolved_locale’
i18n-1.14.7/lib/i18n.rb:353:in with_locale' /var/www/discourse/app/controllers/application_controller.rb:428:in with_resolved_locale’
activesupport-7.2.2.1/lib/active_support/callbacks.rb:130:in block in run_callbacks' activesupport-7.2.2.1/lib/active_support/callbacks.rb:141:in run_callbacks’
actionpack-7.2.2.1/lib/abstract_controller/callbacks.rb:260:in process_action' actionpack-7.2.2.1/lib/action_controller/metal/rescue.rb:27:in process_action’
actionpack-7.2.2.1/lib/action_controller/metal/instrumentation.rb:77:in block in process_action' activesupport-7.2.2.1/lib/active_support/notifications.rb:210:in block in instrument’
activesupport-7.2.2.1/lib/active_support/notifications/instrumenter.rb:58:in instrument' activesupport-7.2.2.1/lib/active_support/notifications.rb:210:in instrument’
actionpack-7.2.2.1/lib/action_controller/metal/instrumentation.rb:76:in process_action' actionpack-7.2.2.1/lib/action_controller/metal/params_wrapper.rb:259:in process_action’
activerecord-7.2.2.1/lib/active_record/railties/controller_runtime.rb:39:in process_action' actionpack-7.2.2.1/lib/abstract_controller/base.rb:163:in process’
actionview-7.2.2.1/lib/action_view/rendering.rb:40:in process' rack-mini-profiler-3.3.1/lib/mini_profiler/profiling_methods.rb:89:in block in profile_method’
actionpack-7.2.2.1/lib/action_controller/metal.rb:252:in dispatch' actionpack-7.2.2.1/lib/action_controller/metal.rb:335:in dispatch’
actionpack-7.2.2.1/lib/action_dispatch/routing/route_set.rb:67:in dispatch' actionpack-7.2.2.1/lib/action_dispatch/routing/route_set.rb:50:in serve’
actionpack-7.2.2.1/lib/action_dispatch/routing/mapper.rb:32:in `"


 Solve Remove Protect Copy Share
 Debug
 Info
 Warning
 Error
 Fatal
Search

 Clear logs

皆さん、こんにちは。

翻訳ツールとフォーラムヘルパーは現在動作していますが、要約ボタンを押しても何も起こりません。

DiscourseからリクエストがトリガーされたというCloudWatchのログには何も表示されていません。

要約機能は要約ペルソナで設定されており、そのペルソナは、このディスカッションで以前に言及したLLMエンドポイントを使用しています…

何かヒントはありますか?

どうもありがとうございます。

WS

新たな洞察:

要約できるトピックと、そうでないトピックがある…

新しいトピックは要約できるようです。
そしてもう一つの質問:トピックに画像が含まれていて、画像認識AIがない場合、これは問題になりますか?

それはあなた自身のエンドポイントからの502です :stuck_out_tongue:

トピックの長さかもしれません?

画像キャプションや投稿トリアージ自動化のような、画像関連のタスクには問題になります。

「いいね!」 1

承知しました @Falco

しかし、Discourse はリクエストを開始せず、その理由(ログなど)も示しません :frowning:
選択肢を絞り込むのが難しいです。

いいえ、そうではありませんでした。問題を見つけました(llm エンドポイントからのボディを JSON.stringify していませんでした。しかし、Discourse はこの 502 の理由についてもう少し詳しく教えてくれるかもしれません :-))。

ありがとうございます。

WS

「いいね!」 1