내부 OpenAI API를 사용한 Discourse AI 설정

안녕하세요 여러분,

저희는 Discourse 포럼 내에서 사용자가 탐색, 기능, 카테고리, 주제 및 일반 포럼 관련 질문에 대한 도움을 받을 수 있도록 대화형 어시스턴트를 제공하기 위해 Discourse AI를 검토하고 있습니다.

저희 조직은 GPT와 Claude를 위한 자체 LLM API에 접근할 수 있으며, 이러한 모델이 Discourse AI 내에서 프로바이더로 설정되는 방법을 이해하고자 합니다. 저희의 목표는 LLM 기능을 활용하여 Discourse 내에서 더 문맥에 맞는 대화형 어시스턴트를 구축하는 것입니다.

현재 LLM 구성

현재 저희는 OpenAI 호환 내부 API 엔드포인트에 접근할 수 있습니다:

엔드포인트:

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

모델:

gpt-5.5

저희는 OpenAI의 공개 API를 직접 사용하는 것이 아니라 기업용/내부 OpenAI 호환 API 게이트웨이와 함께 Discourse AI를 구성해 본 경험이 있는 분들의 조언에 특히 관심이 있습니다.

구성 예시나 권장 사항이 있다면 큰 도움이 될 것입니다.

미리 감사드립니다!

openai를 제공자로 선택하고, 보유 중인 URL로 설정하세요.

OpenAI를 제공자로 선택해 보았지만, 여전히 설정이 되지 않습니다.

다른 방법이나 추천 사항이 있을까요?

저도 이 API를 사용 중입니다. 제 모델 ID는 gpt-5.6-sol이며, 현재 정상적으로 작동하고 있습니다.

설정을 어떻게 했는지 알려주실 수 있나요? 모든 정보를 입력했는데도 제 환경에서는 실행이 안 됩니다.

관리자 화면의 AI-LLM-미설정 LLM 템플릿에서 GPT-5.6 Sol을 선택한 다음, 제3자 API에서 제공한 두 가지 정보를 입력하세요:

**호스팅된 모델 서비스의 URL: 예) **ai.com/v1/responses

호스팅된 모델 서비스의 API 키: 제3자가 제공한 키

아래의 “테스트 실행” 버튼을 클릭할 수 있으며, 실패하는 경우 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 등으로 변경해 보시기 바랍니다.