
1. 项目背景与核心价值最近在帮客户部署一套完全离线的智能问答系统时选择了MaxKB作为知识库前端搭配Ollama管理的本地大模型。这种组合特别适合对数据隐私要求高的场景比如企业内部知识管理、涉密资料查询等。整个部署过程踩了不少坑今天就把这套方案的完整实施过程记录下来。离线部署大模型最大的优势就是数据不出内网完全规避了API调用可能带来的隐私泄露风险。MaxKB提供了友好的知识库管理界面而Ollama则让大模型的本地部署变得异常简单。两者配合使用相当于拥有了一个完全自主可控的ChatGPT企业版。2. 环境准备与基础配置2.1 系统环境要求建议使用CentOS 7.9最小化安装配置要求根据模型大小而定7B参数模型至少16GB内存 20GB磁盘空间13B参数模型32GB内存 40GB磁盘空间显卡不是必须的但如果有NVIDIA GPU推荐RTX 3090以上可以显著提升推理速度重要提示部署前务必关闭SELinux并配置防火墙规则否则后续服务可能无法正常通信# 永久关闭SELinux sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config setenforce 0 # 防火墙放行必要端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent # MaxKB默认端口 firewall-cmd --zonepublic --add-port11434/tcp --permanent # Ollama默认端口 firewall-cmd --reload2.2 基础依赖安装需要先安装一些基础工具和开发环境yum install -y git docker docker-compose make gcc gcc-c python3-devel systemctl enable docker systemctl start dockerPython环境建议使用Miniconda管理wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 echo export PATH/opt/miniconda3/bin:$PATH /etc/profile source /etc/profile3. Ollama部署与模型管理3.1 Ollama服务安装Ollama提供了非常简洁的安装方式curl -fsSL https://ollama.com/install.sh | sh安装完成后启动服务systemctl enable ollama systemctl start ollama验证服务状态curl http://localhost:11434 # 正常应返回Ollama的版本信息3.2 大模型下载与加载Ollama支持的主流模型包括Llama2、Mistral等。这里以中文优化版的Llama2-Chinese-13B为例ollama pull llama2-chinese:13b模型下载完成后会自动保存在~/.ollama/models目录。可以通过以下命令测试模型运行ollama run llama2-chinese:13b 你好模型下载可能耗时较长13B模型约25GB建议使用screen或tmux保持会话3.3 性能优化配置编辑Ollama配置文件/etc/ollama/config.json{ num_ctx: 4096, num_gpu_layers: 32, num_thread: 8 }关键参数说明num_ctx上下文长度越大能记住的对话历史越多num_gpu_layers使用GPU加速的层数如有GPUnum_threadCPU线程数建议设置为物理核心数4. MaxKB知识库系统部署4.1 Docker方式部署MaxKBMaxKB提供了官方Docker镜像部署非常方便mkdir -p /opt/maxkb cd /opt/maxkb cat docker-compose.yml EOF version: 3 services: maxkb: image: 1panel/maxkb container_name: maxkb ports: - 8080:8080 volumes: - ./data:/var/lib/postgresql/data environment: - MAXKB_PORT8080 restart: always EOF docker-compose up -d等待约2分钟后访问http://服务器IP:8080即可进入安装向导。4.2 初始配置步骤设置管理员账号建议使用复杂密码数据库选择PostgreSQL默认在模型设置中选择Ollama填写Ollama地址http://localhost:11434选择已下载的模型如llama2-chinese:13b4.3 知识库创建与管理创建知识库的实用技巧使用Markdown格式上传文档保留更好的格式对于长文档建议拆分为多个小于500KB的文件启用自动分段功能设置分段长度为512 tokens批量导入脚本示例import os from maxkb_api import MaxKBClient client MaxKBClient(base_urlhttp://localhost:8080, usernameadmin, passwordyour_password) knowledge_base_id client.create_knowledge_base(技术文档) for file in os.listdir(/path/to/docs): if file.endswith(.md): client.upload_document(knowledge_base_id, f/path/to/docs/{file}, file_typemarkdown)5. 系统集成与API调用5.1 MaxKB API对接MaxKB提供了完善的REST API获取API Key的位置登录后台 - 个人中心 - API密钥点击生成新密钥基础查询示例curl -X POST http://localhost:8080/api/v1/chat/completions \ -H Authorization: Bearer your_api_key \ -H Content-Type: application/json \ -d { query: 如何配置防火墙规则, knowledge_base_id: your_kb_id }5.2 与企业微信/钉钉集成通过Python中间件实现机器人对接from flask import Flask, request, jsonify import requests app Flask(__name__) MAXKB_URL http://localhost:8080/api/v1/chat/completions API_KEY your_maxkb_api_key app.route(/wecom, methods[POST]) def wecom_bot(): data request.json query data.get(text, ).strip() response requests.post( MAXKB_URL, headers{Authorization: fBearer {API_KEY}}, json{query: query} ) return jsonify({ msgtype: text, text: {content: response.json()[answer]} }) if __name__ __main__: app.run(host0.0.0.0, port5000)6. 运维监控与问题排查6.1 服务监控方案推荐使用PrometheusGrafana监控关键指标Ollama监控指标添加到prometheus.ymlscrape_configs: - job_name: ollama static_configs: - targets: [localhost:11434]MaxKB监控看板应包含请求响应时间知识库命中率错误率统计Token消耗量6.2 常见问题解决方案问题1模型响应速度慢检查num_thread参数是否设置正确如有GPU确认CUDA版本与驱动兼容降低num_ctx值建议从2048开始测试问题2MaxKB上传文档失败检查文件大小建议5MB确认文件编码为UTF-8查看Docker日志docker logs maxkb问题3Ollama内存不足添加swap空间dd if/dev/zero of/swapfile bs1G count16 chmod 600 /swapfile mkswap /swapfile swapon /swapfile在/etc/fstab中添加/swapfile swap swap defaults 0 07. 安全加固建议HTTPS配置# 使用Lets Encrypt获取证书 yum install -y certbot certbot certonly --standalone -d your.domain.com # 配置Nginx反向代理 server { listen 443 ssl; server_name your.domain.com; ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; } }访问控制配置MaxKB的IP白名单定期轮换API密钥启用MaxKB的审计日志功能数据备份方案# 每日备份知识库 0 2 * * * docker exec maxkb pg_dump -U postgres maxkb /backups/maxkb_$(date \%Y\%m\%d).sql这套方案在我们多个客户的生产环境中已经稳定运行超过半年。最大的体会是离线模型虽然响应速度不如云服务但在数据安全敏感的场景下是不可替代的。建议初次部署时从7B模型开始测试熟悉后再升级到更大模型。