DeepSeek+RAGFlow:30分钟搭建本地智能知识库完整指南
如果你正在为如何让AI大模型准确回答专业问题而头疼或者厌倦了每次都要重复解释业务背景那么今天这个组合方案可能正是你需要的。DeepSeekRAGFlow的组合正在改变个人和小团队构建专属知识库的游戏规则。过去想要搭建一个能理解你专业领域的AI助手要么需要昂贵的商用API要么面临复杂的技术门槛。但现在通过DeepSeek的开源大模型能力和RAGFlow的文档处理流水线你可以在本地环境用30分钟搭建起属于自己的智能知识库系统。这不仅仅是技术演示而是真正能投入使用的生产力工具。本文将从零开始手把手带你完成整个部署过程。无论你是想为团队构建内部知识库还是为个人学习打造专属AI助手这套方案都能提供稳定可靠的支持。更重要的是整个过程完全免费数据始终掌握在你手中。1. 为什么需要DeepSeekRAGFlow组合在AI应用开发中我们经常遇到一个核心矛盾大模型虽然知识渊博但对特定领域的专业知识了解有限。传统的微调方案成本高昂且不够灵活而简单的提示词工程又难以保证回答的准确性。RAGRetrieval-Augmented Generation技术正是解决这一问题的关键。它通过检索相关文档片段来增强大模型的生成能力确保回答基于你提供的知识库。而RAGFlow作为开源RAG引擎相比其他方案有几个明显优势智能文档解析支持PDF、Word、Excel等多种格式能准确识别文本、表格甚至手写内容可视化工作流拖拽式界面让非技术人员也能轻松构建知识库流水线完全本地化数据不出本地满足企业安全要求DeepSeek集成与国产优秀大模型深度适配成本效益突出DeepSeek模型以其出色的中文理解和代码能力著称结合RAGFlow的文档处理能力形成了完整的本地知识库解决方案。2. 环境准备与系统要求在开始部署前需要确保你的系统满足以下要求。这套方案对硬件要求相对友好适合个人开发者和小团队使用。2.1 硬件配置建议CPU4核以上推荐Intel i5或同等性能的AMD处理器内存16GB起步32GB为佳运行大模型需要较大内存存储至少50GB可用空间用于存储文档和向量数据库GPU非必须但有NVIDIA GPU8GB显存以上可显著提升推理速度2.2 软件环境要求操作系统Ubuntu 18.04、CentOS 7、Windows 10/11、macOS 10.15Docker版本20.10Docker Compose版本1.29Python3.8-3.11如需要二次开发2.3 网络要求由于需要下载Docker镜像和模型文件请确保网络连接稳定。如果下载速度较慢可以考虑配置国内镜像源。3. Docker环境安装与配置RAGFlow推荐使用Docker部署这种方式可以避免复杂的依赖问题保证环境一致性。下面以Ubuntu系统为例演示完整的安装过程。3.1 安装Docker引擎# 更新软件包索引 sudo apt-get update # 安装必要的依赖 sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 添加Docker仓库 echo deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io # 启动Docker服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 将当前用户添加到docker组避免每次使用sudo sudo usermod -aG docker $USER # 需要重新登录或执行以下命令生效 newgrp docker3.2 安装Docker Compose# 下载Docker Compose二进制文件 sudo curl -L https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose # 赋予执行权限 sudo chmod x /usr/local/bin/docker-compose # 创建符号链接 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 验证安装 docker-compose --version3.3 配置国内镜像加速可选如果下载Docker镜像速度较慢可以配置国内镜像源# 创建或修改Docker配置目录 sudo mkdir -p /etc/docker # 配置镜像加速器 sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ] } EOF # 重启Docker服务 sudo systemctl daemon-reload sudo systemctl restart docker4. RAGFlow部署与初始配置完成Docker环境准备后我们就可以开始部署RAGFlow了。RAGFlow提供了官方Docker镜像部署过程相对简单。4.1 创建项目目录结构首先创建一个清晰的项目目录便于后续管理# 创建项目根目录 mkdir -p ~/ragflow-deepseek cd ~/ragflow-deepseek # 创建必要的子目录 mkdir -p data/documents # 存储上传的文档 mkdir -p data/database # 数据库文件 mkdir -p configs # 配置文件4.2 编写Docker Compose配置文件创建docker-compose.yml文件这是部署的核心配置文件# docker-compose.yml version: 3.8 services: ragflow: image: infiniflow/ragflow:v0.26.4-slim container_name: ragflow ports: - 9380:9380 environment: - RAGFLOW_SERVER_PORT9380 - RAGFLOW_DB_TYPEsqlite - RAGFLOW_DB_NAMEragflow.db - RAGFLOW_SECRET_KEYyour-secret-key-here volumes: - ./data/documents:/app/ragflow/resource - ./data/database:/app/ragflow/database restart: unless-stopped healthcheck: test: [CMD, curl, -f, http://localhost:9380/health] interval: 30s timeout: 10s retries: 3 # 如果需要使用MySQL替代SQLite可以取消注释以下配置 # mysql: # image: mysql:8.0 # container_name: ragflow-mysql # environment: # MYSQL_ROOT_PASSWORD: ragflow123 # MYSQL_DATABASE: ragflow # MYSQL_USER: ragflow # MYSQL_PASSWORD: ragflow123 # volumes: # - ./data/mysql:/var/lib/mysql # restart: unless-stopped4.3 启动RAGFlow服务使用Docker Compose启动服务# 进入项目目录 cd ~/ragflow-deepseek # 启动服务后台运行 docker-compose up -d # 查看服务状态 docker-compose ps # 查看实时日志 docker-compose logs -f ragflow4.4 验证部署结果服务启动后通过以下方式验证部署是否成功# 检查容器状态 docker ps # 测试API接口 curl http://localhost:9380/health # 或者直接在浏览器访问 # http://你的服务器IP:9380如果一切正常你将看到RAGFlow的健康检查返回成功信息。首次访问Web界面时需要设置管理员账户。5. DeepSeek模型本地部署接下来我们需要部署DeepSeek模型。这里提供两种方案使用Ollama快速部署或直接使用DeepSeek API。5.1 方案一使用Ollama部署DeepSeek推荐Ollama简化了本地大模型的部署过程特别适合初学者。# 安装Ollama curl -fsSL https://ollama.ai/install.sh | sh # 拉取DeepSeek模型选择适合你硬件配置的版本 ollama pull deepseek-coder:6.7b # 或者使用更小的版本 # ollama pull deepseek-coder:1.3b # 启动模型服务 ollama serve5.2 方案二直接使用DeepSeek API如果你希望获得更好的性能可以使用DeepSeek的官方API# 创建API配置文件 api_config.py DEEPSEEK_API_CONFIG { api_key: your-deepseek-api-key, # 从DeepSeek官网获取 base_url: https://api.deepseek.com/v1, model: deepseek-chat, # 或者 deepseek-coder temperature: 0.1, max_tokens: 4096 }5.3 验证模型服务创建测试脚本验证模型是否正常工作# test_model.py import requests import json def test_deepseek_local(): 测试本地Ollama部署的DeepSeek模型 url http://localhost:11434/api/generate payload { model: deepseek-coder:6.7b, prompt: 用Python写一个Hello World程序, stream: False } try: response requests.post(url, jsonpayload) if response.status_code 200: result response.json() print(模型响应测试成功) print(回答, result.get(response, )) return True else: print(f请求失败状态码{response.status_code}) return False except Exception as e: print(f测试失败{e}) return False if __name__ __main__: test_deepseek_local()运行测试脚本python test_model.py6. RAGFlow与DeepSeek集成配置现在我们需要将部署好的RAGFlow和DeepSeek模型连接起来这是构建知识库的核心步骤。6.1 配置RAGFlow的LLM设置登录RAGFlow管理界面http://localhost:9380进入模型配置页面# 创建模型配置文件 llm_config.yaml llm_providers: deepseek_local: type: openai base_url: http://localhost:11434/v1 # Ollama的OpenAI兼容接口 api_key: ollama # Ollama固定值 models: - name: deepseek-coder:6.7b context_length: 4096 dimensions: 4096 # 或者使用DeepSeek官方API deepseek_cloud: type: openai base_url: https://api.deepseek.com/v1 api_key: your-actual-api-key models: - name: deepseek-chat context_length: 32768 dimensions: 51206.2 创建知识库应用在RAGFlow中创建你的第一个知识库应用# create_knowledge_base.py import requests import json class RAGFlowClient: def __init__(self, base_urlhttp://localhost:9380): self.base_url base_url self.session requests.Session() # 这里需要替换为你的实际登录凭证 self.login() def login(self): 登录RAGFlow首次使用需要注册 login_data { username: admin, password: admin123 } response self.session.post(f{self.base_url}/api/v1/login, jsonlogin_data) if response.status_code 200: print(登录成功) else: print(登录失败请检查凭证) def create_knowledge_base(self, name, description): 创建知识库 kb_data { name: name, description: description, llm_config: { provider: deepseek_local, model: deepseek-coder:6.7b, temperature: 0.1, max_tokens: 2048 } } response self.session.post(f{self.base_url}/api/v1/knowledge-bases, jsonkb_data) if response.status_code 201: kb_info response.json() print(f知识库 {name} 创建成功ID: {kb_info[id]}) return kb_info else: print(f创建知识库失败: {response.text}) return None # 使用示例 if __name__ __main__: client RAGFlowClient() kb client.create_knowledge_base( name我的技术文档库, description存储个人学习笔记和技术文档 )6.3 配置文档解析参数不同的文档类型需要不同的解析策略# parsing_config.yaml document_parsing: pdf: extract_tables: true extract_images: false ocr_enabled: true word: extract_comments: true preserve_formatting: true excel: extract_sheets: true header_detection: true text: encoding: utf-8 chunk_size: 1000 chunk_overlap: 200 chunking_strategy: method: semantic # 语义分块 max_chunk_size: 512 overlap: 507. 知识库构建实战演示现在让我们通过一个完整的示例演示如何构建一个可用的知识库。7.1 准备示例文档首先创建一些测试文档# 创建示例文档目录 mkdir -p ~/ragflow-deepseek/demo_docs # 创建技术文档示例 cat ~/ragflow-deepseek/demo_docs/python_basics.md EOF # Python编程基础 ## 变量和数据类型 Python是动态类型语言变量不需要声明类型。 python # 基本数据类型 name 张三 # 字符串 age 25 # 整数 height 1.75 # 浮点数 is_student True # 布尔值函数定义使用def关键字定义函数def greet(name): 向指定的人问好 return f你好, {name}! # 调用函数 print(greet(李四))异常处理使用try-except处理异常try: result 10 / 0 except ZeroDivisionError: print(不能除以零) EOF # 创建API文档示例 cat ~/ragflow-deepseek/demo_docs/api_guide.md EOF # REST API设计指南 ## 基本原则 - 使用名词复数形式/users 而不是 /user - HTTP方法明确GET获取POST创建PUT更新DELETE删除 - 返回合适的HTTP状态码 ## 示例端点GET /api/v1/users # 获取用户列表 POST /api/v1/users # 创建新用户 GET /api/v1/users/{id} # 获取特定用户 PUT /api/v1/users/{id} # 更新用户信息 DELETE /api/v1/users/{id} # 删除用户## 响应格式 统一使用JSON格式 json { success: true, data: {...}, message: 操作成功, code: 200 }EOF### 7.2 上传文档到知识库 使用Python脚本批量上传文档 python # upload_documents.py import os import requests from pathlib import Path class DocumentUploader: def __init__(self, ragflow_urlhttp://localhost:9380, kb_idNone): self.ragflow_url ragflow_url self.kb_id kb_id self.session requests.Session() self.session.headers.update({Content-Type: multipart/form-data}) def upload_document(self, file_path, chunk_strategysemantic): 上传单个文档 if not os.path.exists(file_path): print(f文件不存在: {file_path}) return False with open(file_path, rb) as file: files {file: (os.path.basename(file_path), file, application/octet-stream)} data { knowledge_base_id: self.kb_id, chunk_strategy: chunk_strategy } response self.session.post( f{self.ragflow_url}/api/v1/documents, filesfiles, datadata ) if response.status_code 200: print(f文档上传成功: {file_path}) return True else: print(f上传失败 {file_path}: {response.text}) return False def upload_directory(self, directory_path): 上传目录下所有文档 supported_extensions [.pdf, .doc, .docx, .txt, .md, .xlsx, .pptx] uploaded_count 0 for file_path in Path(directory_path).rglob(*): if file_path.suffix.lower() in supported_extensions: if self.upload_document(str(file_path)): uploaded_count 1 print(f总共上传了 {uploaded_count} 个文档) return uploaded_count # 使用示例 if __name__ __main__: # 替换为你的知识库ID kb_id your-knowledge-base-id uploader DocumentUploader(kb_idkb_id) uploader.upload_directory(~/ragflow-deepseek/demo_docs)7.3 配置检索策略优化检索效果的关键配置# retrieval_config.yaml retrieval_strategy: method: hybrid # 混合检索 components: - type: vector # 向量检索 weight: 0.7 parameters: top_k: 5 similarity_threshold: 0.7 - type: keyword # 关键词检索 weight: 0.3 parameters: top_k: 3 reranking: enabled: true model: bge-reranker-base top_k: 8 chunk_processing: min_chunk_size: 50 max_chunk_size: 512 overlap: 508. 测试与使用知识库完成文档上传后让我们测试知识库的实际效果。8.1 简单的问答测试# test_qa.py import requests import json class KnowledgeBaseTester: def __init__(self, ragflow_urlhttp://localhost:9380, kb_idNone): self.ragflow_url ragflow_url self.kb_id kb_id self.session requests.Session() def ask_question(self, question, historyNone): 向知识库提问 payload { knowledge_base_id: self.kb_id, question: question, history: history or [], stream: False } response self.session.post( f{self.ragflow_url}/api/v1/chat, jsonpayload ) if response.status_code 200: result response.json() return result else: print(f提问失败: {response.text}) return None def run_test_questions(self): 运行一系列测试问题 test_questions [ Python中如何定义函数, REST API设计的最佳实践是什么, 如何处理Python中的除零错误, API响应应该使用什么格式 ] for question in test_questions: print(f\n问题: {question}) result self.ask_question(question) if result: print(f回答: {result.get(answer, )}) print(f参考文档: {result.get(sources, [])}) # 使用示例 if __name__ __main__: tester KnowledgeBaseTester(kb_idyour-knowledge-base-id) tester.run_test_questions()8.2 验证回答准确性创建验证脚本来评估知识库的回答质量# evaluate_answers.py import json from datetime import datetime class AnswerEvaluator: def __init__(self): self.evaluation_results [] def evaluate_answer(self, question, expected_keywords, actual_answer): 评估回答质量 score 0 found_keywords [] for keyword in expected_keywords: if keyword.lower() in actual_answer.lower(): score 1 found_keywords.append(keyword) accuracy score / len(expected_keywords) if expected_keywords else 0 result { question: question, expected_keywords: expected_keywords, found_keywords: found_keywords, accuracy: accuracy, timestamp: datetime.now().isoformat() } self.evaluation_results.append(result) return result def generate_report(self): 生成评估报告 total_accuracy sum(r[accuracy] for r in self.evaluation_results) avg_accuracy total_accuracy / len(self.evaluation_results) if self.evaluation_results else 0 report { summary: { total_questions: len(self.evaluation_results), average_accuracy: avg_accuracy, evaluation_date: datetime.now().isoformat() }, details: self.evaluation_results } # 保存报告 with open(evaluation_report.json, w, encodingutf-8) as f: json.dump(report, f, ensure_asciiFalse, indent2) return report # 测试用例 test_cases [ { question: Python中如何定义函数, expected_keywords: [def, 函数, return] }, { question: REST API设计原则, expected_keywords: [HTTP, JSON, 端点, 状态码] } ] evaluator AnswerEvaluator() for test_case in test_cases: # 这里需要实际调用知识库获取回答 # actual_answer get_answer_from_kb(test_case[question]) actual_answer 示例回答 # 替换为实际回答 result evaluator.evaluate_answer( test_case[question], test_case[expected_keywords], actual_answer ) print(f问题: {result[question]}, 准确率: {result[accuracy]:.2f}) report evaluator.generate_report() print(f平均准确率: {report[summary][average_accuracy]:.2f})9. 高级功能与优化配置基础功能运行稳定后可以进一步优化知识库的性能和功能。9.1 配置缓存机制# cache_config.yaml caching: query_cache: enabled: true ttl: 3600 # 缓存1小时 max_size: 1000 embedding_cache: enabled: true ttl: 86400 # 缓存24小时 model_response_cache: enabled: false # 谨慎开启可能影响回答新鲜度9.2 设置监控和日志# monitoring_config.py import logging from prometheus_client import start_http_server, Counter, Histogram # 配置日志 logging.basicConfig( levellogging.INFO, format%(asctime)s - %(name)s - %(levelname)s - %(message)s, handlers[ logging.FileHandler(ragflow_deepseek.log), logging.StreamHandler() ] ) # 定义监控指标 QUERY_COUNT Counter(knowledge_base_queries_total, Total queries to knowledge base) QUERY_DURATION Histogram(query_duration_seconds, Query duration in seconds) ERROR_COUNT Counter(query_errors_total, Total query errors) class MonitoringMiddleware: def __init__(self): self.logger logging.getLogger(__name__) def log_query(self, question, response_time, successTrue): 记录查询日志 QUERY_COUNT.inc() if success: QUERY_DURATION.observe(response_time) self.logger.info(fQuery: {question}, Time: {response_time:.2f}s) else: ERROR_COUNT.inc() self.logger.error(fFailed query: {question}) # 启动监控服务器 start_http_server(8000)9.3 实现增量更新知识库需要定期更新增量更新可以避免全量重建的成本# incremental_update.py import hashlib import os from datetime import datetime class DocumentManager: def __init__(self, document_dir): self.document_dir document_dir self.processed_files self.load_processed_files() def load_processed_files(self): 加载已处理文件记录 try: with open(processed_files.json, r) as f: return json.load(f) except FileNotFoundError: return {} def save_processed_files(self): 保存处理记录 with open(processed_files.json, w) as f: json.dump(self.processed_files, f, indent2) def get_file_hash(self, file_path): 计算文件哈希值 hasher hashlib.md5() with open(file_path, rb) as f: for chunk in iter(lambda: f.read(4096), b): hasher.update(chunk) return hasher.hexdigest() def check_file_changes(self): 检查文件变化 changed_files [] for root, dirs, files in os.walk(self.document_dir): for file in files: file_path os.path.join(root, file) file_hash self.get_file_hash(file_path) # 检查是否新文件或已修改 if file_path not in self.processed_files or self.processed_files[file_path] ! file_hash: changed_files.append(file_path) self.processed_files[file_path] file_hash if changed_files: self.save_processed_files() return changed_files def process_incremental_update(self): 处理增量更新 changed_files self.check_file_changes() if changed_files: print(f发现 {len(changed_files)} 个文件需要更新) for file_path in changed_files: # 调用RAGFlow API更新文档 self.update_document_in_kb(file_path) else: print(没有发现文件变化)10. 常见问题与解决方案在实际部署和使用过程中可能会遇到各种问题。这里总结了一些常见问题及其解决方法。10.1 部署阶段问题问题1Docker容器启动失败症状docker-compose up 后容器立即退出 排查查看日志 docker-compose logs ragflow 解决检查端口冲突、权限问题或镜像下载是否完整问题2RAGFlow无法访问# 检查端口占用 netstat -tulpn | grep 9380 # 检查防火墙设置 sudo ufw status sudo ufw allow 9380 # 检查容器状态 docker ps -a docker logs ragflow问题3Ollama模型加载失败# 检查模型是否下载完整 ollama list # 重新拉取模型 ollama rm deepseek-coder:6.7b ollama pull deepseek-coder:6.7b # 检查GPU支持如果有GPU ollama run deepseek-coder:6.7b --gpu10.2 运行阶段问题问题4文档解析失败可能原因文档格式不支持或损坏 解决方案 1. 确认文档格式在支持列表中 2. 尝试将文档转换为PDF格式 3. 检查文档编码特别是文本文件问题5回答质量不佳优化策略表格问题现象可能原因优化方案回答不相关检索策略不当调整检索权重增加关键词检索比例回答不准确文档分块过大减小chunk_size增加chunk_overlap回答不完整上下文长度不足增加max_tokens优化提示词回答重复重复文档清理知识库去重文档问题6性能问题# 性能优化配置 performance_optimization.yaml performance: max_concurrent_queries: 10 query_timeout: 30 cache_ttl: 3600 embedding: batch_size: 32 model: bge-small-zh # 更小的嵌入模型 llm: temperature: 0.1 max_tokens: 1024 # 限制生成长度 timeout: 3010.3 安全配置建议# security_config.yaml security: authentication: enabled: true jwt_expiry: 24h rate_limiting: enabled: true requests_per_minute: 60 cors: allowed_origins: - http://localhost:3000 allowed_methods: [GET, POST] data_encryption: enabled: true algorithm: AES-256-GCM11. 生产环境部署建议当知识库准备投入生产环境使用时需要考虑更多运维方面的因素。11.1 高可用架构对于生产环境建议采用高可用部署方案# docker-compose.prod.yaml version: 3.8 services: ragflow: image: infiniflow/ragflow:v0.26.4-slim deploy: replicas: 2 restart_policy: condition: any delay: 5s max_attempts: 3 ports: - 9380:9380 environment: - RAGFLOW_SERVER_PORT9380 - RAGFLOW_DB_TYPEmysql - RAGFLOW_DB_HOSTmysql - RAGFLOW_DB_NAMEragflow - RAGFLOW_DB_USERragflow - RAGFLOW_DB_PASSWORD${DB_PASSWORD} depends_on: - mysql volumes: - ragflow_data:/app/ragflow/resource networks: - ragflow_network mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ragflow MYSQL_USER: ragflow MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - mysql_data:/var/lib/mysql networks: - ragflow_network healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] timeout: 10s retries: 3 nginx: image: nginx:alpine ports: - 80:80 volumes: - ./nginx.conf:/etc/nginx/nginx.conf depends_on: - ragflow networks: - ragflow_network volumes: ragflow_data: mysql_data: networks: ragflow_network: driver: bridge11.2 备份策略定期备份知识库数据至关重要#!/bin/bash # backup_script.sh # 配置变量 BACKUP_DIR/backup/ragflow DATE$(date %Y%m%d_%H%M%S) RETENTION_DAYS7 # 创建备份目录 mkdir -p $BACKUP_DIR/$DATE # 备份数据库 docker exec ragflow-mysql mysqldump -u ragflow -p${DB_PASSWORD} ragflow $BACKUP_DIR/$DATE/database.sql # 备份文档数据 docker cp ragflow:/app/ragflow/resource $BACKUP_DIR/$DATE/documents # 备份配置文件 docker cp ragflow:/app/ragflow/config $BACKUP_DIR/$DATE/config # 压缩备份 tar -czf $BACKUP_DIR/ragflow_backup_$DATE.tar.gz -C $BACKUP_DIR/$DATE . # 清理临时文件 rm -rf $BACKUP_DIR/$DATE # 清理旧备份 find $BACKUP_DIR -name *.tar.gz -mtime $RETENTION_DAYS -delete echo 备份完成: ragflow_backup_$DATE.tar.gz11.3 监控告警设置监控系统及时发现问题# prometheus.yml scrape_configs: - job_name: ragflow static_configs: - targets: [ragflow:9380] metrics_path: /metrics - job_name: mysql static_configs: - targets: [mysql:3306] - job_name: node static_configs: - targets: [server:9100] # alertmanager.yml route: group_by: [alertname] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: web.hook receivers: - name: web.hook webhook_configs: - url: http://your-webhook-url/alert通过本文的完整指南你应该已经成功搭建了基于DeepSeek和RAGFlow的个人知识库系统。这个方案的优势在于完全本地化部署数据安全可控同时具备企业级的知识库管理能力。在实际使用过程中建议先从小的知识库开始逐步优化检索策略和提示词工程。随着文档数量的增加定期评估回答质量并调整配置参数。这个系统不仅可以用于技术文档管理还可以扩展至客服问答、内部培训等多种场景。记得定期更新RAGFlow和DeepSeek模型版本以获取最新的功能改进和性能优化。

相关新闻

2026年6月广州市南沙区二手房价格深度分析

2026年6月广州市南沙区二手房价格深度分析

一、报告概述本报告基于2026年6月广州市南沙区多个典型二手房小区的实际成交数据,从成交价格、户型结构、区域分布、市场趋势等维度进行深度分析,旨在为购房者、投资者及行业从业者提供真实、客观的市场参考。数据来源:广州市住房和城乡建设局…

2026/7/29 6:31:43阅读更多 →
EtherCAT从站PDO动态映射实现与优化

EtherCAT从站PDO动态映射实现与优化

1. EtherCAT从站开发中的PDO映射机制解析在工业自动化领域,EtherCAT因其卓越的实时性能被广泛应用。作为开发者,我们经常需要处理对象字典中的0x1600和0x1A00索引,这两个关键区域定义了过程数据对象(PDO)的映射关系。传统固定映射方式虽然简单…

2026/7/29 6:31:43阅读更多 →
ARM汇编入门:从C语言到硬件调试的底层编程指南

ARM汇编入门:从C语言到硬件调试的底层编程指南

1. 从C到汇编:为什么我们需要理解ARM汇编如果你已经写过一些ARM平台上的C语言程序,可能会觉得用高级语言开发已经足够方便了。编译器帮我们处理了所有底层细节,我们只需要关心业务逻辑。这种想法在大多数应用开发场景下是成立的,但…

2026/7/29 6:31:43阅读更多 →
精细化运营时代来临,十克助教助力中小教培机构打通全数字化管理

精细化运营时代来临,十克助教助力中小教培机构打通全数字化管理

随着教育培训行业监管持续规范化,市场竞争由粗放扩张转向精细化运营比拼。大量中小型培训机构、连锁艺术校区、素质教育工作室普遍面临共同难题:教务流程繁琐、排课考勤容易出错、招生线索难以沉淀、家校沟通碎片化、财务账目缺乏统一管理。依靠 Excel 台…

2026/7/29 7:40:56阅读更多 →
月球远古磁场揭秘:从阿波罗岩石到行星发电机理论

月球远古磁场揭秘:从阿波罗岩石到行星发电机理论

1. 项目概述:一次对月球远古磁场的深度解构最近在翻阅一些行星科学的前沿资料时,一个来自麻省理工学院的研究结论让我这个天文爱好者兼技术博主眼前一亮:“35亿年前月球内核曾是超级发电机”。这听起来像科幻小说的设定,但它背后是…

2026/7/29 7:40:56阅读更多 →
基于ESP32与传感器打造情感互动装置:从状态机到拟人化反馈

基于ESP32与传感器打造情感互动装置:从状态机到拟人化反馈

1. 从“被表白”到“被治愈”:一个互动装置的诞生记情人节快到了,满大街都是鲜花、巧克力和成双成对的身影。作为一个常年与代码、传感器和亚克力板打交道的装置艺术家,我总觉得这个节日缺了点什么。缺的不是浪漫,而是一种更普适、…

2026/7/29 7:40:56阅读更多 →
OpenAI API接口设计演进:从Chat Completions到Responses

OpenAI API接口设计演进:从Chat Completions到Responses

1. 从Chat Completions到Responses:OpenAI接口设计的演进之路最近OpenAI的API接口设计迎来了重大更新,其中最引人注目的就是从Chat Completions到Responses的转变。作为一名长期使用OpenAI API的开发者,我亲历了这次接口设计的迭代过程&#…

2026/7/29 7:40:56阅读更多 →
百度网盘解析工具:轻松获取高速下载地址的3步指南

百度网盘解析工具:轻松获取高速下载地址的3步指南

百度网盘解析工具:轻松获取高速下载地址的3步指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘下载速度慢而烦恼吗?baidu-wangpan-pa…

2026/7/29 7:38:51阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →