DiscourseAIのためのオープンソースLLMのセルフホスティング

Discourse AIプラグインには、要約、AIヘルパー、AI検索、AIボットなど、LLM(大規模言語モデル)を有効にする必要がある多くの機能があります。サードパーティのAPI(OpenAIのAPIキーを設定AnthropicのAPIキーを設定など)を使用することもできますが、Discourse AIは初日からそれらに縛られないように構築されています。

HuggingFace TGI での実行

HuggingFaceは、すぐに利用を開始できる優れたコンテナイメージを提供しています。

例えば:

mkdir -p /opt/tgi-cache
docker run --rm --gpus all --shm-size 1g -p 8080:80 \
  -v /opt/tgi-cache:/data \
  ghcr.io/huggingface/text-generation-inference:latest \
  --model-id mistralai/Mistral-7B-Instruct-v0.2

これにより、ローカルホストのポート8080でMistral 7B Instructのローカルインスタンスが起動し、次のようにテストできます。

curl http://localhost:8080/ \
    -X POST \
    -H 'Content-Type: application/json' \
    -d '{"inputs":"\u003cs\u003e[INST] What is your favourite condiment? [/INST] Well, I'm quite partial to a good squeeze of fresh lemon juice. It adds just the right amount of zesty flavour to whatever I'm cooking up in the kitchen!\u003c/s\u003e [INST] Do you have mayonnaise recipes? [/INST]","parameters":{"max_new_tokens":500, "temperature":0.5,"top_p": 0.9}}'

vLLM での実行

Discourse AIがサポートするLLMの自己ホストのもう一つのオプションは、Apache Licenseの下でライセンスされている非常に人気のあるプロジェクトであるvLLMです。

モデルの使い始め方は次のとおりです。

mkdir -p /opt/vllm-cache
docker run --gpus all \
  -v /opt/vllm-cache:/root/.cache/huggingface \
  -e "MODEL=mistralai/Mistral-7B-Instruct-v0.2" \
  -p 8080:8000 --ipc=host vllm/vllm-openai:latest

これは次のようにテストできます。

curl -X POST http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.2",
"prompt": "\u003cs\u003e [INST] What was the latest released hero for Dota 2? [/INST] The latest released hero for Dota 2 was", "max_tokens": 200}'

Ollama での実行

Ollamaは、オープンソースモデルをローカルで実行するためのもう一つの人気のあるオプションです。モデル管理を簡素化し、OpenAI互換のAPIを提供します。

ollama pull mistral
ollama serve

これにより、http://localhost:11434でローカルサーバーが起動し、Discourse AIがOllamaプロバイダーを使用して接続できます。

Discourse インスタンスで利用可能にする

ほとんどの場合、GPU要件があるため、専用サーバーで実行することになります。その場合、リバースプロキシを実行し、TLS終了を行い、エンドポイントをDiscourseインスタンスからのみ接続できるように保護することを推奨します。

Discourse AI の設定

LLM接続は、サイト設定ではなく、管理UIから設定されるようになりました。/admin/plugins/discourse-ai/ai-llmsに移動し、新しいLLMを追加します。

  1. 新規をクリックしてモデルを追加します
  2. プロバイダーを選択します — 推論サーバーに応じて、vLLMHugging Face、またはOllamaを選択します
  3. 推論エンドポイントのURLを入力します(例:http://your-server:8080
  4. エンドポイントで必要な場合はAPIキーを入力します
  5. モデル名トークナイザー最大プロンプトトークン、その他のモデル詳細を入力します

LLMを追加したら、ai_default_llm_modelサイト設定でデフォルトとして設定するか、/admin/plugins/discourse-ai/ai-featuresで各機能のエージェント設定を通じて割り当てます。

「いいね!」 17

このトピックを検索している方へ:
#Llava-Api-keys

私もvLLMを使用しています。また、非常にパフォーマンスの高い7Bパラメータモデルであるopenchat v3.5 0106モデルもお勧めします。

実際、私はそれを4ビット量子化で実行しており、より高速に動作するようにしています。

このタスクをインターンに割り当てます。サインアップすべき特定のサービスについて、どなたか推奨事項はありますか?これはテスト用です。インターンは現在、OpenAIでテストを設定しており、問題なく動作しています。HuggingFace TGIを試したいと考えていますが、GPU搭載の専用サーバーを提供する必要があるようです。テストに必要な最小スペックはどれくらいですか?

インターンに渡せるリンクはありますか?

このプロジェクトにはまだ深く関わっていませんが、インターンがリソースを必要とするだろうと予測しており、リサーチのためにサービスに関する合理的な推奨事項をいくつか提供しようとしています。

こんにちは。オンプレミスのGPUボックスで自己署名証明書を使用してvllmコンテナを公開しているのですが、DiscourseコンテナにルートCAを追加して、このオンプレミスサービスにHTTPS経由で安全にアクセスできるようにする良い方法が見つかりませんでした。

例:

./launcher enter app
curl -L https://vllm.infra.example.com/v1/models
curl: (60) SSL証明書の問題: ローカル発行者の証明書を取得できません
詳細はこちら: https://curl.se/docs/sslcerts.html

curlはサーバーの正当性を検証できなかったため、安全な接続を確立できませんでした。この状況と修正方法の詳細については、上記のWebページをご覧ください。

コンテナイメージの更新後も有効な、自己署名ルートCA証明書をDiscourseコンテナに追加する良い方法はありますか?

私の知る限り、app.yml に追加する方法は

run:
  - exec: wget ... && update-ca-certificates

は、アプリのビルド/再ビルド時にのみうまく機能すると思われます。

何かヒントがあれば歓迎します。

14件の投稿が新しいトピックに分割されました:ローカルのOllamaでDiscourse AIを動作させる

Discourse AI のリクエストにカスタム HTTP ヘッダーを追加する方法はありますか?当社には、さまざまな目的で使用する GPU 搭載サーバーがあり、OpenAI 互換の API がありますが、セキュリティのため API Management ゲートウェイの背後に配置しています。このゲートウェイはカスタム HTTP ヘッダー(SubscriptionKey のようなもの)を必要とし、認証キーをここで提供します。

この認証キーは APIM を通過するためのものであり、OpenAI API のようなサービスに提供する API キーとは異なります。

admin/plugins/discourse-ai/ai-llms の設定ページで、各 LLM の設定にカスタムヘッダーを追加する方法があると素晴らしいです。このようなユースケースのために、‘Provider’ ドロップダウンに「カスタムオプション」を追加し、追加のオプションを提供するのはどうでしょうか?

「いいね!」 1

簡単な答えは、そのヘッダーを追加するためのプラグインです。回避策としては、Discourseからアクセスし、ヘッダーを追加してデータをDiscourseに転送するローカルプロキシサーバーが考えられます。信頼できない情報源によると、NGINXに次のような設定をさせることで、それを実現できる可能性があるとのことです。

server {
    listen 80;
    
    location / {
        proxy_pass https://api.example.com;
        proxy_set_header SubscriptionKey xyz;
        proxy_set_header Host $host;
    }
}

Discourseのnginx設定の秘密のパス(かつ、サーバーのみがリッスンするパス)に、それを追加する巧妙な方法があるかもしれません。

「いいね!」 1