去年年底公司要做一个内部AI问答助手,需求一句话就能说清楚:把散落在各部门文档、流程制度、项目总结里的经验知识统一管理起来,员工用自然语言提问,系统给答案,而且数据绝不能出内网。我调研了一圈开源方案,最后选型落在Dify社区版上,前后花了两周多,从部署、接模型、搭知识库到做检索调优,把整体流程完整跑通了。这篇文章就把这段实战过程整理出来,聊一聊Dify搭建企业私有AI知识库的思路、部署细节、参数调优和踩过的坑,给准备做类似事情的朋友一个可以直接参考的路线。
先说结论:Dify社区版完全可以扛起企业私有知识库的大梁。它把RAG(检索增强生成)里最繁琐的文档解析、分段、向量化、检索、引用溯源这些环节做成了可视化操作,技术团队不需要从零写代码,业务部门经过简单培训也能自己维护知识库。配合本地部署的Ollama大模型,整个链路完全内网闭环,既满足了数据合规要求,也避开了API调用成本随用量线性增长的问题。这套方案适合有基础Linux运维能力的团队,哪怕没有专职算法工程师,也能在1到2周内落地一个可用版本。
下面我把整个实战过程拆开讲,从方案选型聊到部署细节,再到知识库调优和问题排查,内容比较长,但每一步都是实际验证过的,照着走基本不会踩大坑。
1. 整体方案设计:为什么最终选择了Dify社区版
1.1 企业私有知识库到底要解决什么问题
很多团队一说做AI知识库就直接开写代码,结果做着做着发现工作量全埋在细节里。我的经验是先想清楚企业私有知识库和普通搜索引擎的区别。
企业内部知识库的核心诉求有三个。第一是语义检索,员工提问往往不是关键词匹配,比如问“年假没休完怎么办”,文档里可能写的是“未休年假处理规则”,关键词完全不同,但语义是相关的。第二是答案生成与溯源,检索到相关片段后,大模型要基于这些片段组织成自然语言答案,同时每条关键结论要能追溯到原始文档,方便员工核实。第三是权限和私密性,企业文档不能外传,模型推理也要在内网完成,这决定了我们不能直接调用公网API。
这三个诉求对应到技术栈上,就是RAG架构加上本地化部署。RAG的核心流程可以简单理解为三个步骤:把文档切块、转成向量存入向量数据库;用户提问时,把问题也转成向量,在向量库里做相似度检索;把检索到的相关片段拼接进Prompt,交给大模型生成最终答案。
1.2 为什么没有从零开发,也没有选LangChain这类框架
我一开始确实考虑过用LangChain或LlamaIndex自己搭一个RAG服务,但评估完工作量和维护成本就放弃了。企业知识库表面看是文档问答,实际上还牵扯到文档解析格式兼容、分段策略调整、Embedding模型管理、向量数据库运维、对话历史管理、引用标注、后台管理界面、用户权限、日志审计这些环节。这些如果用代码框架从零写,每个环节都要踩一遍坑,整个项目周期被拖得很长。
Dify这类应用开发平台的价值,恰恰是把这些环节都封装成了标准化模块。部署好之后,创建一个知识库只需要几步界面操作,上传文档后系统自动做分段和向量化,后续调整检索参数也是表单式配置。对团队来说,平台化工具降低的是长期维护成本,而不是一次性开发成本。
有朋友可能会问,FastGPT和Dify怎么选?我也简单对比过。FastGPT在知识库问答上也做得不错,交互体验好,但Dify的灵活性更强一些,比如工作流编排自由度更高、模型接入范围更广、插件机制更成熟。而且Dify社区版是开源的,后续如果想做二开或者深度集成企业现有系统,能操作的空间更大。实际跑下来,Dify社区版在多租户隔离、知识库管理和工作流编排上,确实更适合企业级落地场景。
1.3 整体架构:四层结构各司其职
整个方案我拆成了四个层面:
- 模型层:负责大模型推理和文本向量化。企业内网环境最合适的方案是Ollama本地部署开源模型,既能跑问答大模型,也能跑Embedding向量模型。
- 平台层:Dify应用平台,负责工作流编排、Prompt管理、知识库配置、API对外暴露。这一层也是我们日常主要操作的地方。
- 数据层:包含文档存储和向量数据存储。文档原始文件放在服务器磁盘或对象存储里,向量数据放在向量数据库中,Dify默认用Weaviate,也支持Qdrant、Milvus等。
- 应用层:面向最终用户的入口,可以是Dify自带的Web界面,也可以是企业微信、钉钉、OA系统通过API接入。
这样的分层好处是每一层都可以独立替换。比如今天用Ollama接Llama 3,明天模型市场出了更好的开源模型,在Dify后台切换模型配置就行;数据量大了把Weaviate迁移到Milvus集群,也只动数据层,不影响应用层。
2. 环境准备与模型层部署:把大模型和向量化能力跑在内网
2.1 服务器选型与基础环境配置
部署Dify的最低配置网上写的是2核4G,但那是开发和体验的底线,真要承载企业多人同时使用,配置不能这么抠。我的建议是问答模型和Embedding模型分开部署的话:
- 知识库规模在1万份文档以内的中小团队:CPU 8核、内存32G起步,最好有RTX 3090或A10级别的GPU,显存24G左右。这个配置可以流畅跑7B到14B参数量的量化模型。
- 知识库规模大、并发高的场景:CPU 16核以上、内存64G以上,GPU可以考虑A100或L20,模型直接上32B甚至70B的量化版本。
操作系统建议用Ubuntu 22.04 LTS或Debian 12,这两个系统的Docker生态和驱动兼容性最省心。CentOS 7那些老系统别用了,很多新版本镜像和内核模块在新系统上才跑得顺。
部署之前有几项基础配置一定要先做好:
# 更新系统并安装常用工具 sudo apt update && sudo apt upgrade -y sudo apt install -y curl git vim net-tools # 关闭swap或调低swappiness,避免内存交换导致推理性能严重下降 sudo sysctl -w vm.swappiness=10 # 确认Docker和Compose环境 docker --version docker compose versionDocker和Docker Compose插件是Dify部署的基础,我遇到过不少朋友卡在安装步骤上。建议直接通过Docker官方源安装,别用系统自带的老版本。
2.2 Ollama本地大模型部署详解
Dify本身不产模型,它需要的外部大模型可以来自三种地方:云端API、本地推理服务、私有化部署的推理框架。对企业私有不外传的需求来说,Ollama是当前最合适的选择,它把模型下载、量化管理、推理服务全部简化了,一条命令就能把模型跑起来。
安装Ollama很简单:
curl -fsSL https://ollama.com/install.sh | sh安装完成后先别急着拉模型,把服务配好。Ollama默认只监听127.0.0.1,要让局域网内的Dify容器访问到,需要修改服务配置:
sudo mkdir -p /etc/systemd/system/ollama.service.d sudo tee /etc/systemd/system/ollama.service.d/override.conf > /dev/null <<EOF [Service] Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_KEEP_ALIVE=24h" EOF sudo systemctl daemon-reload sudo systemctl restart ollama这里有两个环境变量非常关键。OLLAMA_HOST让服务监听所有网卡,Dify容器才能通过宿主机IP访问;OLLAMA_KEEP_ALIVE控制模型在内存中的驻留时间,默认5分钟不调用就卸载模型,如果Dify频繁发起请求,每次都要重新加载模型,响应会慢得让人抓狂,我直接设置成24小时。
接下来拉取模型。根据我跑企业知识库的经验,问答模型的选择要看团队对答案质量的要求和服务器显存大小:
- 轻量场景(4G以下显存):
qwen2.5:7b-instruct-q4_K_M,量化后体积约4.7G,中文问答能力在这个量级里算很能打的。 - 标准场景(8G以上显存):
qwen2.5:14b-instruct-q4_K_M,量化后约9G,逻辑推理和长文本理解明显提升。 - 高质量场景(24G以上显存):
qwen2.5:32b-instruct-q4_K_M,约20G,答案质量接近商用API的基础水平,对硬件要求也更高。
# 拉取问答模型,以Qwen2.5 14B为例 ollama pull qwen2.5:14b-instruct-q4_K_M # 拉取Embedding向量模型,用于知识库文档向量化 ollama pull nomic-embed-text这里有个关键点必须提醒:知识库的向量化模型和问答大模型是两个完全不同的模型,千万不能混用。向量化模型负责把文本转换成向量坐标,它输出的是高维数组,不是自然语言;问答模型负责把你检索到的片段组织成答案。Dify里这两个配置是分开的,很多人第一次部署时把同一个模型配到了两个位置,导致知识库检索出来的结果完全不对。
2.3 向量数据库选型与踩坑记录
Dify的docker-compose文件默认自带Weaviate作为向量数据库,很多人直接用默认配置,这是没问题的,中小规模知识库完全够用。但如果你面向的是知识库容量几个亿向量的场景,建议单独部署Milvus或Qdrant集群。
我这次项目使用的是Dify默认的Weaviate,原因是够用。Dify的知识库架构中,每个知识数据集对应Weaviate中的一个Class,文档分段后生成的向量会写入这个Class。Weaviate在单机模式下可以轻松支撑千万级别向量,再往上才需要考虑分布式方案。
如果你需要单独部署向量数据库,记得在Dify的环境变量中修改向量库类型:
VECTOR_STORE=weaviate WEAVIATE_ENDPOINT=http://your-weaviate-host:8080 WEAVIATE_API_KEY=your-api-key实测数据记录:我们知识库里有3000多份文档,分成约8万分段,用Weaviate单机模式检索的平均延迟在30到60毫秒之间,完全满足交互需求。所以前期真的不用过度设计向量数据库架构,等数据量真正上来再扩容也不迟。
3. Dify平台部署与初始化配置
3.1 Docker Compose方式安装Dify
Dify官方支持Docker Compose方式部署,这是社区版最常见的安装方式,升级也方便。部署步骤如下:
# 克隆Dify源码仓库 git clone https://github.com/langgenius/dify.git cd dify/docker # 复制环境变量模板 cp .env.example .env # 编辑.env,根据实际情况调整配置 vim .env.env文件里需要重点关注几个配置项:
# 版本号,建议固定版本而不是latest,方便日后升级控制 DIFY_IMAGE=langgenius/dify-api:1.10.0 # 密钥,生产环境务必改成随机字符串 SECRET_KEY=your-random-secret-key # 向量数据库类型,默认weaviate VECTOR_STORE=weaviate # 知识库文件存储方式,本地存储即可私有化 STORAGE_TYPE=local配置好之后启动服务:
docker compose up -d docker compose ps等所有容器状态变成healthy,就能通过http://服务器IP/install访问Dify初始化页面,设置管理员账号。
升级维护的心得:Dify社区版升级先别急着执行docker compose pull和docker compose up -d,一定要先看官方Release Notes里的Breaking Changes。比如1.10版本之后,知识库索引策略引入了新的选项,默认的高质量模式增加了Rerank模型选项,如果不了解这个变化直接升级,旧知识库的检索行为会跟升级前不一样。我的习惯是升级前用docker compose down停掉服务,导出整个docker目录的备份,再执行升级,出问题能快速回滚。
3.2 在Dify中接入Ollama模型
Dify部署完成后,第一步是把本地模型接入平台。进入后台后,依次点击右上角头像进入设置,然后选择“模型供应商”,在列表中找到Ollama并填入信息:
- 模型名称:填写你在Ollama中拉的模型名,比如
qwen2.5:14b-instruct-q4_K_M - 服务器URL:填写
http://宿主机IP:11434,注意不能填127.0.0.1,因为Dify跑在容器里,127.0.0.1指向的是容器自身,访问不到宿主机 - 模型类型:分别配置“LLM”和“Text Embedding”两类,LLM用问答模型,Text Embedding用
nomic-embed-text
配置完成后,Dify会做一次连接测试,连不上就检查Ollama的网络监听配置和防火墙规则。从Docker容器访问宿主机服务,最好直接用宿主机内网IP,不要用host.docker.internal,后者在Linux系统上默认不生效,需要额外加容器参数才行。
3.3 多租户与权限管理实践
Dify社区版从1.10版本开始加入了多租户支持,对企业内部不同部门的知识隔离很有帮助。按照热词里的关注点,我说一下多租户的实操。
Dify的权限模型分三个层级:工作空间、成员、应用。每个知识库归属于某个工作空间,可以批量添加成员并分配角色(普通用户只能浏览和提问,编辑者可以维护知识库,管理员能做系统配置)。实际使用中我建议按部门拆工作空间,比如“人力资源部知识库”“研发部知识库”“销售部知识库”分开管理,每个空间的文档、应用、成员独立管理,互不干扰。
需要注意,社区版的多租户是逻辑隔离而非物理隔离,底层向量数据库和文档存储还是共用的,如果你的场景要求强隔离(比如多个外部客户的数据绝对不能互通),那还是要上商业版或者做二次开发。
4. 知识库构建与检索调优实战
4.1 文档处理与分段策略优化
部署完成只是开始,真正决定知识库好不好用的,是文档处理策略和检索参数。这部分我从实际调优经验出发,讲几个关键点。
在Dify中创建知识库时,会要求选择索引方式。我强烈建议选高质量模式,这个模式会同时启用向量检索和全文关键词检索,两路结果做融合排序,准确率比单纯向量检索高很多。这个模式下需要配置Embedding模型,就是用我们刚才在Ollama里部署的nomic-embed-text。
文档分段是RAG效果好坏的第一道关卡。分段太大,检索到的片段包含太多无关内容,大模型容易被干扰;分段太小,语义不完整,检索到的片段可能只有半句话,难以理解。
我实测下来的分段策略是这样的:
| 文档类型 | 分段长度 | 分段重叠 | 原因 |
|---|---|---|---|
| 制度文档、规范文件 | 800-1000字 | 100-200字 | 条目化结构,需要保留完整条款 |
| 项目总结、经验文档 | 500-800字 | 50-100字 | 段落含义相对独立 |
| 技术手册、FAQ | 300-500字 | 50字 | 问答对形式,短分段检索更精准 |
| 扫描件PDF | 按标题层级切分 | 20-50字 | 依赖OCR质量,避免切出乱码片段 |
Dify里的分段功能支持自定义分隔符和最大分段长度。我建议开启“分段标识”里的###和##识别,让系统优先按标题切分,这样能最大程度保留文档的逻辑结构。对于Word和PDF混合的大文档,开启“自动清洗”里的多余空格和空行清理,可以显著降低向量化时的噪声。
一个容易忽略的点:文档上传后如果修改了分段设置,必须点击“重新分段”让系统重新处理,否则修改不生效。Dify在“文档”页面每条文档后面有个操作按钮,点开能找到“重新分段”选项。
4.2 检索参数:召回率与准确率的平衡
Dify知识库在应用配置里可以设置检索参数,这里有几个关键参数直接决定回答质量:
召回数量(Top K),也就是从向量库里捞多少个相关片段给大模型。我测试过不同K值的表现:
Top K=3:回答最简洁,速度快,但容易漏掉关键信息,适合答案集中在单篇文档里的FAQ类知识库Top K=5:均衡值,大部分场景适用,企业制度类知识库我推荐这个Top K=8:召回信息更全,但片段之间容易出现矛盾和冗余,大模型需要额外花精力做信息融合,回答时间明显变长
相关性分数阈值(Score Threshold),低于这个分数的片段会被过滤掉。默认是0.5,但我用nomic-embed-text做向量化时测试,0.5的阈值会放进来很多似是而非的内容。建议设置为0.6-0.7,刚开始可以用0.6,如果在测试中频繁出现答案跑偏、引用无关文档的情况,再往上调。
Rerank模型是提升检索质量的神器,Dify 1.10版本之后对Rerank的支持更完善了。Rerank的原理是对检索回来的候选片段做二次排序,把真正相关的排到前面。企业场景下我建议有条件就开启。如果本地部署Rerank模型,可以用bge-reranker-v2-m3通过Ollama或Xinference跑起来,Dify里选中Rerank模型后,检索准确率通常能提升10到15个百分点。
4.3 Prompt设计:决定回答风格与质量上限
Dify知识库应用背后是一个完整的Prompt工程体系。默认的Prompt模板可以直接用,但如果想让回答更贴合企业需求,我建议重写系统Prompt,把企业自己的规则注入进去。
一个比较成熟的系统Prompt结构是这样的:
你是{公司名}的智能知识助手,请严格基于提供的知识库内容回答员工问题。 回答规则: 1. 如果知识库中有明确答案,直接回答,并在回答末尾列出参考文档名称。 2. 如果知识库信息不足或没有相关内容,明确回复“当前知识库没有收录相关内容”,严禁编造。 3. 涉及制度条款时,引用原文关键表述,保留日期、金额、人员等关键信息。 4. 回答使用简洁的中文,分条列出要点,便于快速阅读。 5. 如果问题涉及多个方面,按主题分段落回答。 知识库内容: {{$context}} 员工问题: {{#sys.query#}}注意里面的{{$context}}和{{#sys.query#}}是Dify的变量占位符,分别代表检索到的上下文和用户当前问题,这两个占位符必须保留,否则答案生成就没有输入了。
调Prompt的时候我建议在Dify调试预览界面反复测试,重点关注三类问题:
- 知识库有答案但回答错误:多半是Prompt把回答引偏了,检查规则是否明确要求“严格基于知识库”
- 回答太冗长:在Prompt里加“简洁、分条、不超过3条”这类约束
- 知识库没答案但模型在编造:这是最严重的问题,必须在Prompt里加“信息不足时如实说明”,同时调高相关性分数阈值
4.4 从知识库走向Agent和工作流
Dify的价值不只是简单问答,它还能把知识库接入工作流和Agent。热词里很多人关注dify工作流,这里我给一个很实用的方向。
知识库问答可以做成一站式Agent:员工提问后,Agent先判断问题类型,制度类问题走知识库检索,报销流程问题走工作流表单,IT问题走工单系统API。Dify的Agent节点支持工具调用,通过自定义工具接入企业内部API,K8s部署的运维知识、销售CRM数据、HR系统人事制度都可以被Agent统一调度。
比如在Dify里创建一个“IT支持助手”,先用意图识别节点判断用户是想“查制度”还是“提交工单”,前者走知识库回复,后者调用工单系统的创建接口并返回工单号。这个能力对企业的价值远大于单纯问答。
不过工作流编排一定有排错成本。Dify工作流节点的变量传递是最容易出问题的环节,建议每个节点在调试面板里单独跑一遍,确认输入输出符合预期再串联起来,否则一长串流程中一个节点类型传错,排查起来很费劲。
5. 系统性能调优与常见问题排查
5.1 从JVM到Docker的资源参数调优
企业知识库上线后,性能问题集中在两个方面:模型推理延迟和平台本身的稳定性。前者由GPU和模型大小决定,后者可以通过参数调优来改善。
Dify后端是基于Python的Flask应用,它本身不依赖JVM,但在整套技术栈里,如果你使用了Elasticsearch或Doris做日志或分析型数据存储,或者企业内其他Java服务要走统一调优思路,JVM参数依然值得关注。特别是当我把Dify的日志和检索链路接入企业统一监控时,ES实例的堆设置、GC日志分析、连接池配置几乎每天都在接触。
JVM调优的核心参数有几个方向:-Xms和-Xmx设置初始堆和最大堆,建议设置成相同值,避免运行期频繁扩容;-XX:MaxMetaspaceSize控制元数据空间;-XX:+UseG1GC使用G1垃圾回收器;-Xlog:gc*开启GC日志方便排查Full GC。ES的JVM堆不建议超过物理内存的50%,留一半给操作系统做文件缓存。这些参数可以在jvm.options里调整,改完必须重启服务。
对于Dify本身的Docker容器,资源限制一定要设置,避免某个容器吃光宿主机内存导致整机崩溃。在docker-compose.yaml中给关键服务加上:
services: api: deploy: resources: limits: memory: 4G cpus: "2.0" worker: deploy: resources: limits: memory: 4G cpus: "2.0" weaviate: deploy: resources: limits: memory: 4G cpus: "2.0"数据库连接池也要调。Dify默认的PostgreSQL连接数在并发访问上来后会成为瓶颈,在.env里可以调整DB_POOL_SIZE和DB_MAX_OVERFLOW等参数。如果多人同时使用,建议把连接池适当调大,但也要结合数据库服务器的实际内存,连接数不是越大越好,每个连接都会占用内存。
5.2 常见问题速查表与排查思路
运行过程中我们积累了不少问题排查经验,整理成一张速查表方便大家按图索骥:
| 现象 | 可能原因 | 排查与解决方法 |
|---|---|---|
| Dify升级后无法保存知识库,修改时报Internal Server Error | 升级过程中数据库表结构未完全迁移,或旧浏览器缓存了过期的前端JS | 清浏览器缓存强制刷新;执行docker compose exec api flask db upgrade;检查api容器日志中具体的报错堆栈 |
| 知识库检索不到内容 | Embedding模型配置错误、分段后内容为空、向量库写入失败 | 检查Embedding模型是否与文档训练时一致;在文档列表查看分段数量;在Dify里手动测试检索,看是否有对比结果 |
| 回答质量差、引用不相关文档 | 相关性阈值过低、Rerank未开启、文档分段太大 | 调高Score Threshold到0.6-0.7;开启Rerank;重新分段并重新向量化 |
| Ollama模型加载很慢 | OLLAMA_KEEP_ALIVE默认值太短,模型被频繁卸载 | 设置OLLAMA_KEEP_ALIVE=24h;加大内存配额给Ollama容器 |
| 多用户并发时Dify响应缓慢 | API容器资源不足、数据库连接池耗尽、GPU显存不够 | 查看docker stats确认资源占用;调整Docker资源限制;扩容GPU或使用负载均衡 |
| 上传PDF后乱码或分段错乱 | PDF原始扫描件未做OCR、文档排版过于复杂 | 先用工具做OCR识别再上传;Dify对文本型PDF效果更好,扫描件PDF务必先转成文本 |
排查问题的通用思路,我总结为三步:先看容器状态,docker compose ps确认所有服务是否健康;再看日志,docker compose logs -f api定位具体报错;最后是配置比对,确认模型配置、向量库配置、环境变量是否前后一致。80%的问题都能在这三步里找到答案。
5.3 知识库自动化更新与批量导入方案
知识库上线后最怕的就是文档更新频率高,每次手动上传、重新分段、重新向量化太费人力。Dify提供了知识库的API接口,可以通过脚本实现自动化更新。
具体思路是这样的:企业内部文档往往集中在一个NAS或共享网盘上,可以写一个定时任务脚本,检测到文件新增或变更后,自动调用Dify的API删除旧文档、上传新文档、触发分段和索引。
Dify的API调用需要先在“API访问”页面创建API密钥,然后调用知识库文档管理接口。批量导入时的性能优化也有讲究:
- 批量上传比单篇上传更高效,Dify每处理一篇文档都会有分段和向量化的计算开销,批量提交能减少网络交互次数
- 同一批文档尽量类型相近,比如这批次全部是PDF,下一批次全是Word,避免了不断切换解析器的开销
- 文档量大时建议在低峰期操作,因为向量化过程会占用Ollama的Embedding模型资源,如果同时有用户在问答,会影响问答接口的响应速度
我实测过,300份500页左右的PDF文档,纯CPU环境下(32核)完成全部处理大约需要30到40分钟,GPU环境下能缩短到10分钟以内。所以如果知识库体量达到几千份文档的级别,建议给Embedding推理单独配一块GPU,不要让知识库维护的向量化任务和应用问答抢同一份资源。
5.4 知识库问答质量评估的笨办法
最后分享一个我们用来评估知识库效果的土办法,它虽然不优雅,但非常有效。每次调优后,我准备50个企业内部真实问题,这些问题覆盖制度类、流程类、数据类、常识类四种类型,然后用统一格式记录每个问题的回答情况:
- 答案正确且引用了正确的文档,计2分
- 答案基本正确但引用不完整,计1分
- 答案错误或没有引用,计0分
把50个问题的总分算出来,调优前后对比。这比任何模糊的“感觉变好了”都更有说服力。有一次我只是把Top K从3调到5,总分就提升了12分,因为有些问题的答案分散在两篇文档里,只取前3段根本捞不全。这种量化评估的方法让我调优时始终有依据,也方便向上汇报效果。
写在最后的一点个人体会
这套Dify企业私有AI知识库方案上线到现在运行了几个月,我感触最深的一点是,这类项目的成功与否,技术只占一半,另一半在内容治理。同一个Dify平台,有人用起来觉得回答精准,有人用起来觉得胡说八道,差距往往在文档分段的细致程度、知识库的更新频率和Prompt约束的严密性上。把制度文档按条款拆清楚,把过时内容及时下架,把“信息不足不要瞎编”反复写进Prompt,比换更大的模型带来的提升更直接。
如果你正准备上这套方案,我的建议是先别追求大而全,用一到两个高频业务场景起步,比如先做IT运维问答或者HR制度问答,把技术链路跑通、回答质量调到业务部门愿意用,再逐步扩大知识库范围。关于数据安全问题,内网部署Dify加Ollama的方案本身就是为私有化设计的,但也要注意服务器本身的访问控制、API密钥的保管和操作日志的留存,这些细节决定了这套系统能否真正长久稳定地跑在企业的生产环境里。