Настройка Discourse AI с внутренними API OpenAI

Всем привет,

Мы изучаем возможности Discourse AI, чтобы внедрить чат-бота в наш форум на базе Discourse. Этот помощник будет помогать пользователям ориентироваться на форуме, объяснять функционал, категории, темы и отвечать на общие вопросы, связанные с работой форума.

У нас есть доступ к собственным LLM API для GPT и Claude нашей организации, и мы хотим понять, как можно настроить эти модели как провайдеры в Discourse AI. Наша цель — использовать возможности LLM для создания более контекстно-ориентированного чат-бота внутри нашего Discourse.

Текущая конфигурация LLM

В настоящее время у нас есть доступ к внутреннему API-эндпоинту, совместимому с OpenAI:

Эндпоинт:

https://genai-nexus.api.corpinter.net/openai/deployments/gpt-5.5/chat/completions?api-version=2024-10-21

Модель:

gpt-5.5

Нас особенно интересует опыт тех, кто настраивал Discourse AI с использованием корпоративного/внутреннего API-шлюза, совместимого с OpenAI, а не напрямую через публичный API OpenAI.

Будем очень благодарны за любые примеры конфигурации или рекомендации.

Заранее спасибо!

Выберите openai в качестве провайдера и настройте URL, указав тот, который у вас есть.

Я пробовал выбрать openAI в качестве провайдера, но всё равно не могу настроить.

Есть ли другой способ или какие-нибудь рекомендации?

Я тоже использую этот API, идентификатор моей модели — gpt-5.6-sol, в настоящее время всё работает нормально.

Не могли бы вы объяснить, как вы всё настроили? У меня не запускается, даже после того как я ввёл все данные.

В панели управления в разделе AI-LLM-Не настроенные шаблоны LLM выберите GPT-5.6 Sol, а затем введите две информации, предоставленные сторонним API:

URL сервиса, размещающего модель: например ai.com/v1/responses

API-ключ сервиса, размещающего модель: предоставленный третьей стороной

Ниже можно нажать кнопку «Выполнить тест». Если он не удался, возможно, причина в неправильном формате введенного URL.

Да, после предоставления всей этой информации я получаю сообщение об ошибке сервера.

Я протестировал ваш URL, и он не вернул информацию об этом изображении. На какой странице находится информация об этом изображении?

Результат теста без ввода API-ключа: запрос без потоковой передачи не удался: {“message”:“Unauthorized”}

Похоже, вам нужно сделать скриншот всей страницы настроек.


Это

Есть ли более подробная информация об ошибке в логах по адресу forum.example.com/logs?

Если вы используете свой внутренний IP-адрес, вам необходимо добавить домен в фильтр безопасности в DISCOURSE_ALLOWED_INTERNAL_HOSTS

image

Вот логи

plugins/discourse-ai/lib/completions/dialects/dialect.rb:217:in 'DiscourseAi::Completions::Dialects::Dialect#trim_messages'
plugins/discourse-ai/lib/completions/dialects/dialect.rb:140:in 'DiscourseAi::Completions::Dialects::Dialect#translate'
plugins/discourse-ai/lib/completions/endpoints/base.rb:126:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion!'
plugins/discourse-ai/lib/completions/endpoints/open_ai.rb:54:in 'DiscourseAi::Completions::Endpoints::OpenAi#perform_completion!'
plugins/discourse-ai/lib/completions/llm.rb:439:in 'DiscourseAi::Completions::Llm#generate'
plugins/discourse-ai/lib/configuration/llm_validator.rb:36:in 'DiscourseAi::Configuration::LlmValidator#run_test'
plugins/discourse-ai/app/controllers/discourse_ai/admin/ai_llms_controller.rb:159:in 'DiscourseAi::Admin::AiLlmsController#test'
actionpack (8.0.4) lib/action_controller/metal/basic_implicit_render.rb:8:in 'ActionController::BasicImplicitRender#send_action'
actionpack (8.0.4) lib/abstract_controller/base.rb:215:in 'AbstractController::Base#process_action'
activesupport (8.0.4) lib/active_support/callbacks.rb:120:in 'block in ActiveSupport::Callbacks#run_callbacks'
app/controllers/application_controller.rb:442:in 'block in ApplicationController#with_resolved_locale'
i18n (1.14.7) lib/i18n.rb:353:in 'I18n::Base#with_locale'
app/controllers/application_controller.rb:442:in 'ApplicationController#with_resolved_locale'
actionpack (8.0.4) lib/action_dispatch/routing/route_set.rb:908:in 'ActionDispatch::Routing::RouteSet#call'
lib/middleware/omniauth_bypass_middleware.rb:35:in 'Middleware::OmniauthBypassMiddleware#call'
lib/middleware/crawler_hooks.rb:11:in 'Middleware::CrawlerHooks#call'
rack (2.2.23) lib/rack/tempfile_reaper.rb:15:in 'Rack::TempfileReaper#call'
rack (2.2.23) lib/rack/conditional_get.rb:27:in 'Rack::ConditionalGet#call'
rack (2.2.23) lib/rack/head.rb:12:in 'Rack::Head#call'
actionpack (8.0.4) lib/action_dispatch/middleware/cookies.rb:706:in 'ActionDispatch::Cookies#call'
actionpack (8.0.4) lib/action_dispatch/middleware/callbacks.rb:31:in 'block in ActionDispatch::Callbacks#call'
activesupport (8.0.4) lib/active_support/callbacks.rb:100:in 'block in ActiveSupport::Callbacks#run_callbacks'
actionpack (8.0.4) lib/action_dispatch/middleware/debug_exceptions.rb:31:in 'ActionDispatch::DebugExceptions#call'
actionpack (8.0.4) lib/action_dispatch/middleware/show_exceptions.rb:32:in 'ActionDispatch::ShowExceptions#call'
logster (2.20.1) lib/logster/middleware/reporter.rb:40:in 'Logster::Middleware::Reporter#call'
lib/middleware/default_headers.rb:13:in 'Middleware::DefaultHeaders#call'
railties (8.0.4) lib/rails/rack/logger.rb:41:in 'Rails::Rack::Logger#call_app'
railties (8.0.4) lib/rails/rack/logger.rb:29:in 'Rails::Rack::Logger#call'
lib/middleware/enforce_hostname.rb:23:in 'Middleware::EnforceHostname#call'
rack (2.2.23) lib/rack/method_override.rb:24:in 'Rack::MethodOverride#call'
actionpack (8.0.4) lib/action_dispatch/middleware/executor.rb:16:in 'ActionDispatch::Executor#call'
rack (2.2.23) lib/rack/sendfile.rb:127:in 'Rack::Sendfile#call'
rack-mini-profiler (4.0.1) lib/mini_profiler.rb:191:in 'Rack::MiniProfiler#call'
message_bus (4.4.1) lib/message_bus/rack/middleware.rb:60:in 'MessageBus::Rack::Middleware#call'
lib/middleware/request_tracker.rb:321:in 'Middleware::RequestTracker#call'
actionpack (8.0.4) lib/action_dispatch/middleware/remote_ip.rb:96:in 'ActionDispatch::RemoteIp#call'
lib/middleware/overload_protections.rb:22:in 'Middleware::OverloadProtections#call'
lib/middleware/processing_request.rb:14:in 'Middleware::ProcessingRequest#call'
railties (8.0.4) lib/rails/engine.rb:535:in 'Rails::Engine#call'
railties (8.0.4) lib/rails/railtie.rb:226:in 'Kernel#public_send'
railties (8.0.4) lib/rails/railtie.rb:226:in 'Kernel#method_missing'
rack (2.2.23) lib/rack/urlmap.rb:74:in 'block in Rack::URLMap#call'
rack (2.2.23) lib/rack/urlmap.rb:58:in 'Array#each'
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in 'Unicorn::HttpServer#process_client'
unicorn (6.1.0)

Есть ли у вас какие-либо предложения или рекомендации по поводу логов, которыми я поделился, и о том, что делать дальше?

В моей ситуации попробуйте изменить значение Context window, например, на 200000 или 128000.