必须将Dify连接至外部独立Weaviate实例,禁用内置服务;配置WEAVIATE_ENDPOINT为宿主机IP(非localhost),确保网络可达、端口开放、绑定0.0.0.0,并正确设置API密钥与安全参数,否则知识库向量化失败、检索无结果且状态显示“disconnected”。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中使用本地自建的Weaviate向量数据库而非默认容器内嵌版本,必须切断Dify对内置Weaviate服务的依赖,改连外部独立部署的Weaviate实例,否则知识库向量化会失败、检索始终无结果,且系统状态页显示“weaviate (disconnected)”。
确认本地Weaviate服务已独立运行并可达
在宿主机或目标服务器上启动Weaviate(非Dify自带docker-compose.yml中的weaviate服务),确保其监听地址可被Dify容器网络访问。例如:执行weaviate start或通过docker run -p 8080:8080 semitechnologies/weaviate:1.24.5拉起单机版,验证curl http://localhost:8080/v1/meta返回正常JSON响应。
这一步不能跳过——Dify容器默认无法访问宿主机的localhost,若Weaviate仅绑定127.0.0.1:8080,Dify将永远连不上。必须将Weaviate绑定到0.0.0.0:8080或使用宿主机真实IP(如192.168.1.100:8080)。
检查Weaviate日志是否含GraphQL is available at /v1/graphql,说明服务已就绪;若看到no modules enabled警告,暂可忽略,Dify不强依赖模块。
修改Dify的.env配置文件指向外部Weaviate
进入Dify项目根目录,打开.env文件,定位到向量存储相关配置段。
将VECTOR_STORE=weaviate保持不变——这是启用Weaviate后端的开关,不可改为其他值。
找到并取消注释以下四行,填入你本地Weaviate的实际连接参数:
WEAVIATE_ENDPOINT=http://192.168.1.100:8080(替换成你的Weaviate真实IP+端口,【切勿写localhost或127.0.0.1】)
WEAVIATE_API_KEY=(若Weaviate启用了鉴权,则填入对应key;未启用则留空,但该字段必须存在)
WEAVIATE_SECURE=False(明文HTTP连接设为False;若用HTTPS且自签证书,需额外设WEAVIATE_VERIFY=False)
WEAVIATE_BATCH_SIZE=100(建议设为100,避免大文档解析时连接超时)
删除WEAVIATE_ENDPOINT行末尾所有空格和不可见Unicode字符,这类隐藏符号会导致Dify启动时解析.env失败并卡死在初始化阶段。
停用Dify原生Weaviate服务并重启
打开docker-compose.yml,找到weaviate:服务区块,在其上方添加#注释掉整段,或直接删去该服务定义。
同时检查depends_on:字段,确保api和worker服务不再依赖weaviate。
执行docker compose down && docker compose up -d重建服务。
等待约70秒,访问http://localhost:3000→右上角头像→「管理后台」→「系统状态」,确认「向量数据库」一栏显示weaviate (connected)。
若仍显示disconnected,请立即执行docker logs dify-api | grep -A3 -B3 weaviate,重点排查Connection refused(地址不通)、timeout(网络延迟过高)或401 Unauthorized(API key不匹配)三类错误。
创建知识库并触发首次向量化
第一步:登录Dify控制台,进入「知识库」→「新建知识库」,填写名称与描述,保存。
第二步:点击刚建好的知识库→「上传文件」,选择PDF/Markdown等格式文档,上传成功后状态显示「待处理」。
第三步:等待10–90秒(取决于文档长度与嵌入模型速度),状态变为「已完成」即表示向量化成功写入你本地的Weaviate实例。
第四步:在知识库页面点击「测试检索」,输入关键词(如“故障代码E102”),若返回相关文档片段,说明整个链路闭环完成。
注意:首次上传后若状态长期卡在「处理中」,大概率是WEAVIATE_ENDPOINT不可达或Weaviate未启用text2vec-transformers等嵌入模块——Dify不负责提供嵌入模型,它只把文本发给Weaviate,由Weaviate内部完成向量化。











