简介:本文提供基于Ollama+AnythingLLM的本地RAG知识库搭建方案,涵盖环境配置、模型部署、知识库构建及优化全流程。通过分步指导,帮助开发者实现数据完全私有化、零依赖云服务的AI知识库系统,适用于企业知识管理、个人学习助手等场景。
用户请求 → API网关 → 检索模块(AnythingLLM)↓ ↑向量数据库 模型推理(Ollama)↑ ↓文档处理器 响应生成
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 4核8线程 | 8核16线程 |
| 内存 | 16GB | 32GB DDR5 |
| 存储 | 50GB SSD | 1TB NVMe SSD |
| GPU(可选) | 无 | RTX 3060 12GB |
# 基础环境安装(Ubuntu示例)sudo apt update && sudo apt install -y \docker.io docker-compose \python3.11 python3-pip \build-essential# 创建虚拟环境python3 -m venv rag_envsource rag_env/bin/activatepip install --upgrade pip
# 下载Ollama(支持Linux/macOS/Windows)curl -fsSL https://ollama.ai/install.sh | sh# 常用模型列表ollama pull llama3:7b # 70亿参数基础模型ollama pull mistral:7b-instruct # 指令优化版ollama pull phi3:3.8b # 微软小型高效模型# 自定义模型配置(~/.ollama/models/custom.json){"name": "custom-llm","parameters": {"model": "llama3","temperature": 0.7,"top_p": 0.9}}
ollama run llama3:7b --fp16启用半精度运算export OLLAMA_ORIGINAL_MODEL=false禁用原始模型加载--num-gpu参数限制GPU使用量
# config.yaml 示例配置rag_config:embeddings:model: "all-MiniLM-L6-v2" # 轻量级嵌入模型device: "cpu" # 可选"cuda"retriever:top_k: 3 # 返回结果数量chunk_size: 512 # 文档分块大小llm:endpoint: "http://localhost:11434" # Ollama API地址max_tokens: 512
文档预处理:
from anythingllm import DocumentLoaderloader = DocumentLoader(file_paths=["docs/*.pdf"],split_method="recursive")documents = loader.load()
向量存储:
from anythingllm import VectorStorestore = VectorStore(store_type="chroma",persist_dir="./db")store.add_documents(documents)
检索增强:
from anythingllm import Retrieverretriever = Retriever(store)query = "如何优化模型推理速度?"context = retriever.retrieve(query)
# 图片理解扩展(需安装额外依赖)pip install pillow transformersfrom anythingllm.multimodal import ImageProcessorprocessor = ImageProcessor(model="vit-base-patch16-224")image_embedding = processor.encode("image.jpg")
访问控制:Nginx反向代理配置示例
server {listen 80;server_name rag.local;location / {proxy_pass http://localhost:3000;auth_basic "Restricted";auth_basic_user_file /etc/nginx/.htpasswd;}}
数据加密:使用cryptography库加密敏感文档
from cryptography.fernet import Fernetkey = Fernet.generate_key()cipher = Fernet(key)encrypted = cipher.encrypt(b"敏感内容")
# 使用locust进行压力测试pip install locustlocust -f load_test.py
# prometheus配置示例scrape_configs:- job_name: 'anythingllm'static_configs:- targets: ['localhost:9090']metrics_path: '/metrics'
| 错误现象 | 解决方案 |
|---|---|
| Ollama启动失败 | 检查端口占用netstat -tulnp |
| 向量检索返回空结果 | 调整chunk_overlap参数 |
| 模型响应延迟过高 | 启用量化或切换更小模型 |
# 自动模型更新脚本#!/bin/bashCURRENT_VERSION=$(ollama list | grep llama3 | awk '{print $2}')LATEST_VERSION=$(curl -s https://api.ollama.ai/models | jq -r '.[] | select(.name=="llama3").versions[-1]')if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; thenollama pull llama3:$LATEST_VERSIONfi
本文提供的完整代码包与配置模板可在GitHub获取(示例链接),建议开发时遵循”小步快跑”原则,先实现基础检索功能,再逐步添加高级特性。通过本地化部署,企业可节省约85%的云服务成本,同时确保数据100%可控。