Wie verwendet man interne KI-Endpunkte?

Ich frage mich, welcher der richtige Ansatz ist, um interne KI-API-Endpunkte (wie LiteLLM) auf selbst gehosteten Discourse-Instanzen zu nutzen.

Ich habe versucht, Docker-Bridge, Container-IPs und ordnungsgemäß SSL-terminierte Endpunkte (zur gleichen öffentlichen IP, auf der Discourse gehostet wird) zu aktivieren, aber nichts funktioniert. Ich habe interne Hosts erlaubt, erhalte aber beim Testen in der LLM-AI-Benutzeroberfläche innerhalb von Discourse einen 500-Fehler.

Es hängt wahrscheinlich mit meiner eigenen Konfiguration zusammen, und ich weiß, dass ich wahrscheinlich einige Fehler gemacht habe. Ich hoffe also, dies mit Hilfe der Community zu lösen :slight_smile:

Unser Hauptanwendungsfall ist es, Vertex AI (OpenAI)-Endpunkte auszuprobieren, die auf Discourse nicht sofort funktioniert haben, weil sie nicht unterstützt werden. Aber wir möchten auch die Schicht, die LiteLLM zu unserem Workflow hinzufügt.

Logs:

FinalDestination::SSRFDetector::DisallowedIpError (FinalDestination: alle aufgelösten IPs waren nicht erlaubt)

Wenn Sie es auf demselben Server ausführen, müssen Sie es über die Umgebungsvariable DISCOURSE_ALLOWED_INTERNAL_HOSTS erlauben.

Ich habe es über die Benutzeroberfläche so gemacht, wie ich es in einem ähnlichen vorherigen Beitrag gesehen habe. Ich habe es auch mit der Variable in meiner app.yml-Datei versucht, bekomme aber weiterhin den Fehler.

Was könnte falsch sein, wenn meine Anmeldedaten in Ordnung sind und ich den API-Endpunkt auf dem Host nutzen kann? Kann ich weiter debuggen?

Wie genau hast du es in die app.yml eingefügt? Sie erwartet entweder eine IP-Adresse oder einen Hostnamen.

Nun, ich habe den Endpunkt mit SSL innerhalb von Discourse (App-Container) getestet, und er funktioniert, aber nicht im Test der Discourse AI-Benutzeroberfläche.

Ich verwende den Provider „OpenAI“ mit der URL „https://llm.mydomain.tld/v1/chat/completions“. Die Anmeldeinformationen sind korrekt:

/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:182:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/open_ai_shared.rb:28:in 'DiscourseAi::Completions::Endpoints::OpenAiShared#perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:214:in 'DiscourseAi::Completions::Llm#generate'

pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:46:in 'Pitchfork::SoftTimeout::Request#interrupt'
pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:94:in 'block (2 levels) in Pitchfork::SoftTimeout#create_timeout_thread'
pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:93:in 'Array#each'
pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:93:in 'block in Pitchfork::SoftTimeout#create_timeout_thread' 

Es ist seltsam, und ich versuche schon seit Wochen, das Problem zu lösen.


Bereits versucht:

EDIT 1: DISCOURSE_ALLOWED_INTERNAL_HOSTS: 172.16.X.X (LiteLLM-Container-IP, 127.0.0.1 und der SSL-terminierte LLM-Domain-Host, von dem ich verstehe, dass er hier nicht angegeben werden muss)

EDIT 2: Und ich sehe den gleichen 500-Fehler, wenn ich versuche, meinen MCP-Server zu konfigurieren (Konfiguration im Tab „MCP discourse-ai“).

Versuche es stattdessen mit DISCOURSE_ALLOWED_INTERNAL_HOSTS: llm.mydomain.tld.

Habe ich bereits gemacht, wie ich zuvor schrieb, nichts funktioniert und ich bitte höflich um Hilfe zur weiteren Fehlersuche, da es etwas Seltsames ist.

Dieser Endpunkt funktioniert innerhalb der Discourse-Container-App, aber nicht aus der Discourse-Benutzeroberfläche heraus.