全平台安装命令:
# Linux/macOS curl -fsSL https://ollama.com/install.sh | sh # Windows (PowerShell管理员模式) irm https://ollama.com/install.ps1 | iex
环境变量配置:
# 设置服务地址(允许远程访问) export OLLAMA_HOST=0.0.0.0 export OLLAMA_PORT=11434 # 持久化存储路径 export OLLAMA_MODELS=/data/ollama/models
模型下载与验证:
ollama run deepseek-r1:1.5b # 测试生成 >>> 中国的首都是哪里? >>> 北京是中国的政治和文化中心...
性能调优参数:
# ~/.ollama/config.yaml num_ctx: 4096 # 上下文长度 num_gpu: 1 # 使用GPU数量 maintain_memory: true # 持久化内存
docker-compose.yml核心配置:
version: '3' services: dify: image: langgenius/dify:latest ports: - "3000:3000" volumes: - ./data:/data environment: - DB_URL=postgresql://postgres:password@db:5432/dify - OPENAI_API_KEY=sk-xxx # DeepSeek API密钥 db: image: postgres:13 environment: POSTGRES_PASSWORD: password volumes: - pg_data:/var/lib/postgresql/data volumes: pg_data:
启动命令:
docker-compose up -d # 验证服务 curl http://localhost:3000/api/status
关键参数修改:
# app/config/settings.py # 知识库设置 KNOWLEDGE_BASE = { 'max_file_size': 500 * 1024 * 1024, # 500MB 'allowed_extensions': ['.pdf', '.docx', '.md'] } # 模型接入 DEEPSEEK_CONFIG = { 'api_base': 'http://ollama:11434', 'model_name': 'deepseek-r1:1.5b', 'temperature': 0.3, 'max_tokens': 2048 }
文档预处理流水线:
from langchain.document_loaders import PyMuPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter loader = PyMuPDFLoader("企业财报.pdf") docs = loader.load() text_splitter = RecursiveCharacterTextSplitter( chunk_size=512, chunk_overlap=64, separators=["\n\n", "\n", "。", "!"] ) splits = text_splitter.split_documents(docs)
向量化存储:
curl -X POST "http://localhost:3000/api/knowledge" \ -H "Content-Type: multipart/form-data" \ -F "file=@财报.pdf" \ -F "config={\"embedding_model\": \"bge-large-zh\", \"index_type\": \"HNSW\"}"
检索增强参数:
retrieval_config: top_k: 5 # 召回文档数 score_threshold: 0.75 # 相似度阈值 rerank_model: bge-reranker-large # 重排序模型 generation_config: temperature: 0.3 # 生成稳定性 top_p: 0.9 presence_penalty: 0.5 # 避免重复
效果测试案例:
用户问:公司第三季度净利润增长率是多少? 系统响应: 根据2024Q3财报第15页披露,本季度净利润为5.2亿元,同比增长23.5%。 (数据来源:财报.pdf-P15)
缓存策略:
from redis import Redis from functools import lru_cache redis_conn = Redis(host='localhost', port=6379, db=0) @lru_cache(maxsize=1000) def get_cached_answer(query): # 先查Redis result = redis_conn.get(query) if not result: result = generate_answer(query) redis_conn.setex(query, 3600, result) return result
负载均衡配置:
upstream dify_servers { server 10.0.0.1:3000 weight=3; server 10.0.0.2:3000; server 10.0.0.3:3000 backup; } location /api/ { proxy_pass http://dify_servers; proxy_set_header X-Real-IP $remote_addr; }
访问控制:
# config/security.yml auth: jwt_secret: your_secure_key rate_limit: enabled: true requests: 100 per: minute api_keys: - name: internal_system key: sk-xxx permissions: [read, write]
模型选型:DeepSeek-R1 1.5B在精度与效率的平衡
架构设计:Ollama+Dify的轻量级容器化方案
检索优化:混合检索策略(BM25+向量)提升召回率
性能优化目标:
部署检查清单:
Ollama服务端口开放(11434)
Docker内存≥16GB
知识库文档预处理完成
API密钥安全存储
压力测试通过(JMeter/Locust)
常见问题速查:
掌握本方案后,可进一步探索DeepSeek MoE架构与LlamaIndex高级检索等进阶技术,构建企业级知识中枢系统。