自托管生成式AI研究加速平台:LLM-in-a-Box技术解析

本文详细介绍LLM-in-a-Box模板项目,这是一个集成了OpenWebUI聊天界面、docling文档提取、litellm模型路由和Ollama模型服务器的自托管解决方案,支持通过Docker Compose快速部署,为研究和教育提供私有化、可复现的AI工作流。

LLM in a box 模板

此模板提供了一个易于部署、可自托管的堆栈,使生成式AI生态系统更易于研究和教育使用。它通过灵活的聊天UI和单一API端点统一了对商业和本地模型(通过Ollama)的访问,实现了私有、可复现和自主的AI工作流。

此模板项目包含:

  • 灵活的聊天UI OpenWebUI
  • 通过docling进行文档提取以优化RAG
  • 模型路由器 litellm
  • 模型服务器 ollama
  • 状态存储在PostgreSQL中

此模板使用cruft构建,便于更新。此外,使用sops和age管理密钥。我们使用traefik作为反向代理。

发布

此项目是Complexity Science Hub的贡献,根据Apache License 2.0发布。此模板项目发布在JOSE(开源教育期刊)上。DOI请参见:<> 出版物的源代码可在docs/paper.md文件中找到。

使用模板

我们打算最终搭建更多部署流程。但这通常对特定组织相当具体。因此,我们从docker compose开始。可能稍后会添加一些用于Kubernetes与fluxcd的内容。您可能希望自定义生产级部署以处理SSL和SSO。但我们希望这能给您一个好的起点。请参阅QUICKSTART.md获取深入的快速入门指南。

先决条件

您需要安装可用的pixi。请参见https://pixi.sh/latest/ 安装。简而言之:

  • osx/linux: curl -fsSL https://pixi.sh/install.sh | sh
  • windows: powershell -ExecutionPolicy ByPass -c "irm -useb https://pixi.sh/install.ps1 | iex"

此外,您必须安装某种容器运行时。例如:

应用模板

Docker(简单)

目前我们假设您使用docker。

注意:Pixi将引导大多数所需工具,即git

1
2
3
4
5
6
7
8
9
pixi shell -e dev
git clone git@github.com:complexity-science-hub/llm-in-a-box-template.git
cd llm-in-a-box-template

pixi run tpl-init

# 或者:
# pip install cruft jinja2-ospath
# cruft create git@github.com:complexity-science-hub/llm-in-a-box-template.git

确保您已检出vllm(之后):

1
git clone --branch v0.9.2 --depth 1 https://github.com/vllm-project/vllm.git services/model-server/vllm

现在在.env文件中设置您的密钥。参见下面的模板。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ROOT_DOMAIN=llminabox.geoheil.com
CLOUDFLARE_IPS=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22
LOCAL_IPS=127.0.0.1/32,10.0.0.0/8,192.168.0.0/16,172.16.0.0/12
TZ=Europe/Vienna

# 每个使用 openssl rand -hex 32
LLM_ROUTER_DB=llm_router_db
LLM_ROUTER_DB_USER=llm_router_db_user
LLM_ROUTER_DB_PASSWORD=somepassword
LITELLM_MASTER_KEY=somepassword
LITELLM_SALT_KEY=somepassword
LITELLM_UI_USERNAME=admin
LITELLM_UI_PASSWORD=somepassword

ROUTER_OPENAI_API_KEY=sk-sometoken
ROUTER_ANTHROPIC_API_KEY=sk-someothertoken

CHAT_UI_DB=chat_ui_db
CHAT_UI_DB_USER=chat_ui_db_user
CHAT_UI_DB_PASSWORD=somepassword
CHAT_UI_SECRET_KEY=somepassword

QDRANT__SERVICE__API_KEY=somepassword

最后,启动服务

1
2
3
4
5
6
7
# cpu
docker compose --profile llminabox --profile ollama-cpu --profile docling-cpu --profile vectordb-cpu up -d

# gpu
docker compose --profile llminabox --profile ollama-gpu --profile docling-gpu --profile vectordb-cpu up -d

docker compose logs -f

最后在浏览器中导航到:

连接到模型服务器(通过docker的ollama)

从https://ollama.com 选择合适的模型 拉取它 docker exec -it ollama ollama pull gemma3:4b 验证它在这里 docker exec -it ollama ollama ls

设置模型路由器,可在 http://llm.llminabox.geoheil.com/ui 使用

使用上面.env文件中设置的凭据登录 注册模型:确保

  • model_name: “gemma3:4b” litellm_params: model: “ollama_chat/gemma3:4b” api_base: “http://ollama:11434”

可能修改其他模型注册

确保您有所需模型的所有API密钥 Openai Claoude Gemini VertexAI:确保设置正确的Google云项目

停止并重新启动模型路由器 转到 http://llm.llminabox.geoheil.com/ui 在UI中验证模型被检测到 创建新的API密钥(我们稍后将在聊天UI中使用)

name: llminabox 选择所需的模型(即现在全部) 可能添加一些限制,如预算、速率限制、过期等。

验证所需模型在llm playground中工作 http://llm.llminabox.geoheil.com/ui/?page=llm-playground

现在让最终用户可用。我们使用Openwebui作为聊天UI:http://chat.llminabox.geoheil.com

创建用户(使用更合理的凭据)

admin admin@example.com test

默认未设置邮件传递 - 您必须根据自己组织的需求进行设置。 在管理设置中 确保正确定义了模型连接 - 参见 http://chat.llminabox.geoheil.com/admin/settings/connections 在openai兼容下 - 创建新连接

connection URL: http://llmrouter:4000/v1 api key: 上面创建的密钥 确保默认的openai API被禁用 - 所有流量都通过模型路由器

Litelm模型路由器:llm.llminabox.geoheil.com

Kubernetes(高级)

这是一个更高级的设置。我们使用fluxcd和k3s。详情请参见高级设置。

TODO:这是一个进行中的工作。将来会更新。目前,只有基于docker-compose的设置可用。

贡献

欢迎贡献 - 问题甚至更好的拉取请求都受欢迎。

开发模板

要渲染项目实例:

1
pixi run render-dev

参见rendered-template/* 了解项目可能的外观示例。

1
2
# 快速启动CPU模板
pixi run start-template
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计