ANIDIAGRAM / SOURCE-BACKED CASE STUDY   源码解读稿 · 待独立复核

从文档到答案,
Dify 的三层如何协作?

上传文件不等于完成知识库索引,在线问答也不一定经过任务队列。
把两条路径放回真实服务与存储边界,看看每一步由谁负责。

文档入库在线问答共享接口

同一份架构与源码证据,仅改变视觉表现。

Dify 三层架构。接入层为 Web 控制台、Nginx 和 API 调用方;执行层为 API 服务、索引 Worker 和 Plugin Daemon;数据层为文件存储、Redis、SQL 数据库和向量库。索引经 Redis 任务队列交给 Worker;基础 Chat 在 API 内处理检索和模型调用。
10 个节点 · 13 条选定关系 · 三个逻辑层,不是三个部署服务。交互图可切换「文档入库 / 在线问答」;窄屏请打开后放大。箭头表示调用或任务交付,非完整时序。
静态 SVG

异步的是文档索引,不是这里的全部问答。

本例的基础 CHAT 在 API 进程的新线程中检索知识、组织上下文并调用模型;文档索引则由 Celery Worker 提取、分段、向量化并写入索引。

源码固定:Dify 1.17.0 · 09a855d
这是基于源码阅读的架构试稿。源码引用校验不等于语义准确性证明;独立语义复核待完成,未运行 Dify 或调用真实模型。

这张图画了什么,又没有画什么?
把这个案例交给其他 Agent 复核
用 AniDiagram 分析 langgenius/dify 的固定提交
09a855dcef24c0edc7431c46c0cfaa494481daf5(1.17.0)。
核对本地文本文件的 high_quality paragraph 索引,以及基础 CHAT
在已选中内部知识库时的 semantic_search 与回答生成。
检查:文档何时提交与投递任务?Chat 的工作线程属于哪个进程?
文件、SQL、Redis、向量库分别存什么?Embedding 缓存命中怎样改变模型调用?
分清模块与独立服务;不要把所有问答都画进 Celery 队列。
每条关键边给出固定 SHA 的源码依据。先审计语义,再评价视觉效果。

完整源码索引与构建命令 · 事实检查报告 · 语义 Plan