本地LLM平台部署工具

一个部署本地LLM平台的工具,支持RAG和MCP功能,适用于IT基础设施管理。

  • by giuliolibrando
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 giuliolibrando/llm-rag-mcp-example

使用说明

自述文件

此存储库包含Medium文章中使用的代码
“利用RAG和MCP的力量:本地AI如何管理您的整个IT基础设施”:
https://medium.com/@giulio.librand/auggles-the power of rag and mcp-how-on-premise-ai-manager-your轮胎it基础设施-5d204649aeee

概述

该堆栈部署了一个具有RAG(检索增强生成)和MCP功能的本地LLM平台。它包括:

  • 任何事情LLM:用于多用户聊天的Web UI
  • 奥利玛(3个复制品):LLM推理(此设置中仅限CPU)
  • Nginx路由器:跨Ollama副本的负载平衡
  • Qdrant:用于存储嵌入的矢量数据库
  • RAG英格斯托:从Redmine和Wiki.js提取数据、嵌入数据并将其推送到Qdrant的Python脚本
  • Nginx代理管理器(NPM):简单的反向代理和TLS终止

目录结构

.
├─ docker-compose.yml
├─ .env
├─ router/
│   └─ nginx.conf
├─ npm/
│   ├─ data/              (created by NPM)
│   └─ letsencrypt/       (created by NPM)
└─ rag-ingestor/
    ├─ requirements.txt
    ├─ run_cron.sh
    ├─ rag_common.py
    ├─ ingest_redmine.py
    └─ ingest_wikijs.py

环境变量

这 .env 文件定义配置。例子:

TZ=Europe/Rome
ALLM_JWT_SECRET=replace_with_long_random_string

# Qdrant
QDRANT_API_KEY=

# Redmine
REDMINE_URL=https://redmine.local
REDMINE_TOKEN=xxxxxxxx
REDMINE_PROJECTS=infra,platform
REDMINE_LOOKBACK_DAYS=14
REDMINE_COLLECTION=redmine

# Wiki.js
WIKIJS_URL=https://wiki.local
WIKIJS_TOKEN=yyyyyyyy
WIKIJS_SPACES=*
WIKIJS_COLLECTION=wikijs

# Embeddings
EMBEDDING_MODEL=intfloat/e5-large-v2

# RAG Ingestor
STATE_DIR=/app/state
UPSERT_BATCH=64
HTTP_TIMEOUT=40
DEFAULT_SCHEDULE=*/30 * * * *

备注

  • ALLM_JWT_SECRET:必填。生成一个长随机字符串。
  • REDMINE_TOKEN:Redmine的API密钥。
  • WIKIJS_TOKEN:Wiki.js中的API令牌。
  • REDMINE_PROJECTS:以逗号分隔的要索引的项目列表。
  • *_COLLECTION:Qdrant中的集合名称,可以更改。
  • QDRANT_API_KEY:除非在Qdrant中启用API密钥保护,否则保留为空。

首次运行

  1. 创建 .env 具有适当的值。
  2. 启动堆栈:
    docker compose up -d
    
  3. 等待容器装满(docker ps).

Ollama的拉模型

内部 ollama1 集装箱、拉式模型:

docker exec -it ollama1 bash -lc "ollama pull llama3.1:8b-instruct-q4_K_M"
docker exec -it ollama1 bash -lc "ollama pull qwen2.5:7b-instruct-q4_K_M"

复制品 ollama2 和 ollama3 首次使用时将下载模型。

使用系统

  • 通过您配置的域或IP路径访问AnythingLLM。
  • 登录并创建工作区。
  • 确保矢量数据库设置为Qdrant(http://qdrant:6333 Docker网络内部)。
  • RAG Ingestor将定期运行(默认情况下每30分钟运行一次,或根据 # SCHEDULE= 脚本中的指令),并用Redmine和Wiki.js内容填充Qdrant。

验证

检查Qdrant集合:

curl http://<VM_IP>:6333/collections

检查进气管日志:

docker logs -f rag-ingestor

检查AnythingLLM API:

curl http://<VM_IP>:3001/ --head

检查Ollama路由器:

curl http://<VM_IP>:11434/api/tags

数据持久层

  • ./npm/data 和 ./npm/letsencrypt:Nginx代理管理器配置和证书
  • ./ollama*:Olama模型和缓存
  • ./qdrant_storage:Qdrant数据库
  • ./anythingllm_data:任何LLM工作空间存储
  • ./rag-ingestor/state:ETL作业的增量状态

安全

  • 更改所有默认凭据(NPM、AnythingLLM)。
  • 保护NPM仪表板(:81)使用防火墙或VPN。
  • 仅暴露VM的端口80/443/81。
  • 如果可能的话,使用公司CA的内部DNS名称和证书。