DiscourseAI를 위한 오픈소스 LLM 셀프호스팅

Discourse AI 플러그인은 요약, AI 헬퍼, AI 검색, AI 봇과 같이 LLM이 활성화되어야 하는 여러 기능을 제공합니다. OpenAI API 키 설정이나 Anthropic API 키 설정과 같은 제3자 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":"<s>[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!</s> [INST] Do you have mayonnaise recipes? [/INST]","parameters":{"max_new_tokens":500, "temperature":0.5,"top_p": 0.9}}'

vLLM으로 실행하기

Discourse AI가 지원하는 LLM 자체 호스팅의 또 다른 옵션은 vLLM입니다. vLLM은 Apache 라이선스 하에 제공되는 매우 인기 있는 프로젝트입니다.

모델로 시작하는 방법은 다음과 같습니다:

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": "<s> [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. 모델을 추가하려면 New(새로 만들기)를 클릭합니다.
  2. Provider(제공자)를 선택합니다 — 추론 서버에 따라 vLLM, Hugging Face, 또는 Ollama 중 하나를 선택합니다.
  3. 추론 엔드포인트의 URL을 입력합니다 (예: http://your-server:8080).
  4. 엔드포인트가 API 키를 요구하는 경우 API key(API 키)를 입력합니다.
  5. model name(모델 이름), tokenizer(토크나이저), max prompt tokens(최대 프롬프트 토큰 수) 및 기타 모델 세부 정보를 입력합니다.

LLM이 추가되면 ai_default_llm_model 사이트 설정을 통해 기본값으로 설정하거나, /admin/plugins/discourse-ai/ai-features의 에이전트 구성을 통해 특정 기능에 할당할 수 있습니다.

17개의 좋아요

For anyone searching this topic with/for:
#Llava-Api-keys

I’m using vLLM too. I also would recommend the openchat v3.5 0106 model, which is a 7B parameter model which performs very well.

I actually am running it in 4bit quantized so that it runs faster.

I am assigning this task to an intern. Are there recommendations from anyone on what specific service to sign up for? This is for a test. The intern currently has a test configured with OpenAI. It runs fine. They’re interested in trying the HuggingFace TGI, but it seems that I need to give them a dedicated server with GPU? What’s the minimal specs for a test?

Are there links I can give the intern?

I haven’t looked at this project in depth yet. I am just anticipating that the intern will need some resources and I am trying to make some reasonable recommendations on services for the intern in research.

Hey there, while exposing with a self-signed certificate vllm container on a GPU box on-prem, I did not find a good way to add the Root CA to the discourse container so it can access securely this on-prem service over https.

e.g.:

./launcher enter app
curl -L  https://vllm.infra.example.com/v1/models
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Is there a good way to add a self-signed root ca-certificate in the discourse container which would survive container image updates?

As far as I know adding it in the app.yml

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

would only work well while building/rebuilding the app.

Any hint welcomed.

14개의 게시물이 새 주제로 분리되었습니다: 로컬에서 Ollama와 함께 Discourse AI 작동시키기

Discourse AI 요청에 사용자 정의 HTTP 헤더를 추가할 방법이 있을까요? 다양한 용도로 사용하는 GPU가 탑재된 서버를 보유하고 있으며, OpenAI 호환 API를 제공합니다. 다만 보안상의 이유로 API Management 게이트웨이 뒤에 서버를 배치해 두었으며, 이 경우 SubscriptionKey와 같은 사용자 정의 HTTP 헤더가 필요하고, 여기에 인증 키를 공급하고 있습니다.

참고로, 이 인증 키는 APIM을 통과하기 위한 것이며, OpenAI API와 같은 서비스에 공급하는 API 키와는 다릅니다.

admin/plugins/discourse-ai/ai-llms 설정 페이지에서 각 LLM 설정 시 사용자 정의 헤더를 추가할 수 있는 기능이 있다면 좋겠습니다. ‘Provider’ 드롭다운 메뉴에 ‘Custom’ 옵션을 추가하고, 이러한 용도를 위한 추가 옵션을 제공하는 방식이 가능할까요?

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개의 좋아요

안녕하세요,

해당 설정을 찾을 수 없습니다:

Ollama 백엔드의 도움을 받아 AI 번역 기능을 시험해 보기 위한 제안이 있을까요?

/admin/plugins/discourse-ai/ai-llms/new?llmTemplate=none에서 새로운 LLM을 생성하고, Ollama가 OpenAI compatibility - Ollama 를 지원하므로 제공자를 OpenAI로 선택하세요.

1개의 좋아요

고맙습니다! AI 플러그인이 활성화되어 있을 때만 URL이 작동한다는 점도 제가 알아차렸어요 :person_facepalming:

신규 추가된 제공자에 대해, 다음 필수 설정에 무엇을 선택/설정해야 할지 제안이 있을까요?

  1. 토크나이저 (Tokenizer)
  2. 컨텍스트 윈도우 (Context window)

모델의 경우, stablelm2:1.6b 또는 https://ollama.com/library/translategemma:4b를 사용하려고 생각하고 있지만 아직 결정하지 못했습니다.
후자의 README에는 입력 프롬프트에 대한 설명이 있습니다. 번역 AI 기능이 Ollama로 전송하는 쿼리가 무엇인지 궁금합니다. /admin/plugins/discourse-ai/ai-agents/-28/edit 참고.

:sweat_smile:

선택할 모델에 가장 가까운 것을 선택해야 합니다. Gemma의 경우, Gemini용 토크나이저를 선택할 수 있습니다.

여기서 배포 환경의 최대 컨텍스트를 설정합니다.

그렇게 하지 마세요. 그 모델은 아주, 아주, 아주, 아주, 아주 오래되었습니다. 선택할 수 있는 최악의 선택지입니다.

그 모델은 한 세대 전의 모델이며, Discourse와 호환되지 않는 매우 엄격한 프롬프트 요구사항이 있습니다. 우리는 보다 표준적인 범용 LLM을 기대하고 있습니다.

해당 크기에서라면 Qwen 3.5 또는 Gemma 4를 권장합니다.

3개의 좋아요

다시 한번 감사합니다. 설정을 적용하고 모델을 가져온 후 에이전트를 조정했으며, 이제 AI 번역 기능을 시작했습니다. 어떤 결과가 나올지 지켜보겠습니다.

한 가지 더 질문이 있습니다. 이전에는 관대하게 제공된 LibreTranslate 인스턴스를 사용하여 번역기 플러그인을 사용했습니다. Discourse의 AI 번역 기능을 해당 LibreTranslate 엔드포인트에 연결하는 것이 불가능합니까? 결국, 진정한 LLM 기능이 없는 서버에서 Ollama 인스턴스를 호스팅해야 하는 것보다 훨씬 쉬울 것입니다.

그렇다면 계속 그걸 사용하면 안 될까요? 더 이상 업데이트하지는 않지만, 현재 상태로 계속 작동할 것입니다.

Discourse AI 번역은 원래의 Translator 플러그인과는 완전히 다른 제약 조건을 가지고 작동하므로, LLM 기반 번역이 이전의 ML 번역 API로 가능했던 것보다 더 우수하고 저렴해진 이 새로운 환경을 해결하기 위해 처음부터 구축했습니다.

1개의 좋아요