为 DiscourseAI 自托管一个开源 LLM

Discourse AI 插件有许多功能需要启用大型语言模型(LLM),例如摘要、AI 助手、AI 搜索、AI 机器人。虽然您可以使用第三方 API,例如配置 OpenAI 的 API 密钥配置 Anthropic 的 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,这是一个非常流行的项目,根据 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 连接现在通过管理界面进行配置,而不是通过站点设置。导航到 /admin/plugins/discourse-ai/ai-llms 并添加一个新的 LLM:

  1. 单击 New 以添加模型
  2. 选择一个 Provider — 根据您的推理服务器选择 vLLMHugging FaceOllama
  3. 输入推理端点的 URL(例如 http://your-server:8080
  4. 如果您的端点需要 API key,请输入它
  5. 填写 model nametokenizermax prompt tokens 和其他模型详细信息

添加 LLM 后,通过 ai_default_llm_model 站点设置将其设置为默认值,或通过 /admin/plugins/discourse-ai/ai-features 中其代理程序的配置将其分配给特定功能。

17 个赞

对于搜索此主题的任何人,包括/用于:
#Llava-Api-keys

我也在使用 vLLM。我还会推荐 openchat v3.5 0106 模型,这是一个 7B 参数模型,性能非常好。

我实际上是以 4 位量化方式运行它的,这样可以运行得更快。

我将此任务分配给一名实习生。有人推荐注册什么特定服务吗?这是为了测试。实习生目前已配置好 OpenAI 测试。运行正常。他们有兴趣尝试 HuggingFace TGI,但似乎我需要为他们提供专用的 GPU 服务器?测试的最低配置是什么?

我可以提供给实习生一些链接吗?

我还没有深入研究这个项目。我只是预计实习生将需要一些资源,并且我正在尝试为实习生的研究提供一些合理的建议。

您好,在使用本地 GPU 服务器上的自签名证书公开 vllm 容器时,我没有找到一种好方法将根 CA 添加到 discourse 容器中,以便它可以安全地通过 HTTPS 访问此本地服务。

例如:

./launcher enter app
curl -L https://vllm.infra.example.com/v1/models
curl: (60) SSL certificate problem: unable to get local issuer certificate
更多详情请参见:https://curl.se/docs/sslcerts.html

curl 无法验证服务器的合法性,因此无法建立安全连接。要了解有关此情况的更多信息以及如何解决,请访问上面提到的网页。

有没有一种好方法可以在 discourse 容器中添加自签名根 CA 证书,并且该证书能在容器镜像更新后继续存在?

据我所知,在 app.yml 中添加它

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

只在构建/重建应用程序时效果最好。

欢迎任何提示。

14 篇帖子已拆分为新主题:Getting discourse ai to work with ollama locally

是否可以在 Discourse AI 请求中添加自定义 HTTP 标头?我们有一个配备 GPU 的服务器,可用于各种目的,它具有与 OpenAI 兼容的 API,但出于安全考虑,我们将其置于 API 管理网关之后,这需要一个自定义 HTTP 标头(类似于 SubscriptionKey),我们在此处提供我们的授权密钥。

请注意,此授权密钥用于通过 APIM,它不同于您为 OpenAI API 等服务提供的 API 密钥。

如果可以在 admin/plugins/discourse-ai/ai-llms 设置页面中为每个 LLM 的设置添加自定义标头,那就太好了。也许在“提供商”下拉菜单中有一个“自定义选项”,并提供用于此类用例的附加选项?

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 个赞