犀牛鸟 2026 研究笔记 estelledc.github.io

Ch16: Dify 架构精读——工作流编排与 RAG 模块

Part 3 续:平台专章 前置:Ch07 四大平台总览 后续:Ch17: RAGFlow 完整精读:精读: Dify


结论先行:Dify 的护城河是 Workflow Engine + Model Runtime + Agent Framework,RAG 是标准双路混合(BM25+向量),深度不及 WeKnora,但 「Dify 编排 + WeKnora 检索」 是生产界常见组合。改 WeKnora 时,应向 Dify 学的是:可视化 DAG、条件分支、HTTP 节点集成外部检索。

调研元信息

项目
仓库 langgenius/dify
Stars ~144K
Python Flask + Celery + Next.js
许可 Apache-2.0(含反 SaaS 竞品条款)
RAG 定位 能力模块之一,非核心差异化

一、设计哲学:低代码 LLM 应用工厂

三个层面:

  1. 拖拽即开发——产品经理搭「检索 → 判分 → 分支 → 生成」无需写代码。
  2. 模型即配置——100+ Provider 统一 invoke(),换模型不改业务。
  3. 生态即壁垒——插件市场形成网络效应。

代价:RAG 深度让位于广度——无图谱第三路、无 RRF、分块较粗、六组件部署重。


二、六组件微服务架构

Web(Next.js) ──► API Server(Flask) ──► PostgreSQL
                      │
                      ├── Celery Worker(文档摄入、Embedding 异步)
                      ├── Redis(队列/缓存/会话)
                      └── Nginx

核心引擎层(api/core/)四子系统:

子系统 职责 关键路径
Workflow Engine DAG 执行、13 种节点 core/workflow/
RAG Pipeline 摄入、分块、混合检索 core/rag/
Model Runtime 多模型适配 core/model_runtime/
Agent Framework ReAct / Function Calling core/agent/

三、Workflow Engine:13 种节点

节点以 JSON DSL 存储,数据传递:{{#node_id.output_key#}}

节点 RAG 场景用途
知识检索 内置 BM25+向量
LLM 生成答案
条件分支 检索分数低于阈值 → 改写 query
HTTP 请求 调用 WeKnora API 替代内置检索
迭代 多文档批处理
问题分类器 路由到不同知识库
代码执行 自定义后处理

限制:无原生循环(防死循环),复杂 Agentic 需迭代节点或 Agent 模式。

半 Agentic 工作流示例(概念)

开始 → 问题分类器 → [技术FAQ] 知识检索(WeKnora HTTP)
                  → [闲聊] 直接 LLM
       → LLM 生成 → 条件分支(faithfulness?) 
                  → [低] 参数提取(子问题) → 迭代检索 → LLM
                  → [高] 结束

四、RAG Pipeline 四模式

模式 机制 适用
向量 纯 embedding 概念问答
全文 BM25 错误码、参数名
混合 可调权重 BM25+向量 + 可选 Rerank 默认推荐
经济 先关键词过滤再向量 大库降本

与 WeKnora 差距:加权融合 vs RRF;单 Rerank vs 复合三信号;无双路外的图谱路。


五、Agent Framework

模式 特点 何时用
ReAct 思考-行动可解释 调试、复杂工具链
Function Calling 结构化 tool call 模型能力强、要低延迟

Agent 可挂载知识库 Tool——本质是封装检索节点。与 Ch12 Agentic RAG 对照:Dify 把 Agent 产品化,WeKnora 通过 MCP 暴露 Tool 给外部 Agent。


六、Dify + WeKnora 集成模式

# Dify HTTP 节点配置示意
method: POST
url: https://weknora.example/api/v1/search
headers:
  Authorization: Bearer ${WEKNORA_KEY}
body:
  query: "{{#start.query#}}"
  top_k: 5

工作流内可对 score 做条件分支,实现 WeKnora 裸 API 难表达的 检索质量门控


七、贡献与学习路径

目标 建议
学编排 本地 Docker Compose 搭 Dify,复现「检索-分支-生成」
改 WeKnora 借鉴条件分支与 HTTP 集成文档,非 fork Dify
犀牛鸟 WeKnora 为主;Dify 作竞品分析引用

章末自检


延伸阅读