如何使用内部 AI 端点?

我在思考,在自托管的 Discourse 实例上使用内部 AI API 端点(例如 LiteLLM)的正确方法是什么。

我尝试启用了 Docker 网桥、容器 IP 以及正确终止 SSL 的端点(指向与 Discourse 相同的公共 IP),但都没有成功。我已经允许了内部主机访问,但在 Discourse 的 LLM-AI 界面进行测试时,仍然收到 500 错误。

这可能与我的配置有关,我知道自己可能犯了一些错误。因此,我希望得到社区大家的帮助来解决这个问题 :slight_smile:

我们的主要用例是尝试 Vertex AI (OpenAI) 端点,这些端点在 Discourse 中无法开箱即用,因为它们不受支持。但我们同时也希望保留 LiteLLM 为我们工作流增加的这一层功能。

日志:

FinalDestination::SSRFDetector::DisallowedIpError (FinalDestination: 所有解析的 IP 均被禁止)

如果您在同一台服务器上运行它,则需要通过 DISCOURSE_ALLOWED_INTERNAL_HOSTS 环境变量允许它。

我按照之前的一篇类似帖子中的方法在 UI 上进行了设置。我也尝试在 app.yml 文件中配置该变量,但仍然遇到错误。

如果我的凭据是正确的,并且可以在主机上使用该 API 端点,那么可能出了什么问题?我能进一步调试吗?

你究竟是怎么把它加到 app.yml 里的?它需要的是 IP 地址或主机名。

好吧,我在 Discourse(应用容器)中使用 SSL 测试了该端点,它是可以工作的,但在 Discourse AI 的 UI 测试中却无法运行。

我使用的是“OpenAI”提供商,URL 为 ‘https://llm.mydomain.tld/v1/chat/completions’。凭据没有问题:

/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' 

这很奇怪,我已经尝试解决这个问题好几周了。