内置组件
内置组件
相关源文件
本章引用的主要源码文件:
agent/component/data_operations.pyagent/component/docs_generator.pyagent/component/exit_loop.pyagent/component/invoke.pyagent/component/iteration.pyagent/component/iterationitem.pyagent/component/loop.pyagent/component/loopitem.pyagent/component/message.pyagent/component/string_transform.pyagent/component/variable_assigner.pyagent/tools/arxiv.pyagent/tools/duckduckgo.pyagent/tools/email.pyagent/tools/github.pyagent/tools/google.pyagent/tools/googlescholar.pyagent/tools/pubmed.pytest/testcases/test_web_api/test_canvas_app/test_invoke_component_unit.pytest/testcases/test_web_api/test_canvas_app/test_iteration_runtime_unit.pytest/testcases/test_web_api/test_canvas_app/test_iterationitem_unit.pyweb/src/components/jsonjoy-builder/components/schema-editor/json-schema-visualizer.tsxweb/src/components/jsonjoy-builder/hooks/use-monaco-theme.tsweb/src/components/memories-form-field.tsxweb/src/components/ui/checkbox.tsxweb/src/components/ui/tabs.tsxweb/src/components/webhook-response-status.tsxweb/src/hooks/use-memory-request.tsweb/src/interfaces/database/memory.tsweb/src/pages/agent/canvas/node/agent-node.tsxweb/src/pages/agent/canvas/node/begin-node.tsxweb/src/pages/agent/canvas/node/categorize-node.tsxweb/src/pages/agent/canvas/node/data-operations-node.tsxweb/src/pages/agent/canvas/node/index.tsxweb/src/pages/agent/canvas/node/message-node.tsxweb/src/pages/agent/canvas/node/retrieval-node.tsxweb/src/pages/agent/canvas/node/switch-node.tsxweb/src/pages/agent/debug-content/index.tsxweb/src/pages/agent/form-sheet/single-debug-sheet/index.tsxweb/src/pages/agent/form/begin-form/parameter-dialog.tsxweb/src/pages/agent/form/begin-form/webhook/response.tsxweb/src/pages/agent/form/components/dynamic-fom-header.tsxweb/src/pages/agent/form/components/output.tsxweb/src/pages/agent/form/components/query-variable-list.tsxweb/src/pages/agent/form/data-operations-form/index.tsxweb/src/pages/agent/form/doc-generator-form/index.tsxweb/src/pages/agent/form/doc-generator-form/use-values.tsweb/src/pages/agent/form/message-form/index.tsxweb/src/pages/agent/form/message-form/use-show-response-status.tsweb/src/pages/agent/form/string-transform-form/index.tsxweb/src/pages/agent/form/switch-form/index.tsxweb/src/pages/agent/run-sheet/index.tsx
本文档记录了 RAGFlow 画布工作流系统中可用的标准组件。这些组件作为构建 AI 智能体工作流的基础模块,涵盖从简单的大语言模型(LLM)调用到包含检索和条件路由的复杂多工具智能体编排。
组件概览
RAGFlow 提供了一套内置组件库,所有组件均继承自 ComponentBase agent/component/base.py:407-585。每个组件由一个参数类(继承自 ComponentParamBase agent/component/base.py:40-187)和一个提供 _invoke 或 _invoke_async 方法的实现类组成。
组件分类
内置组件分为以下几个功能类别:
| 类别 | 组件 | 用途 |
|---|---|---|
| 大语言模型交互 | LLM、Agent | 使用提示模板的直接大语言模型调用和工具增强的 ReAct 智能体。 |
| 信息检索 | Retrieval | 知识库搜索和上下文感知的内容生成。 |
| 控制流 | Categorize、Switch、Iteration | 条件分支和迭代执行。 |
| 集成 | Tool、Message、Invoke | 外部 API 调用、专用工具函数和用户通信。 |
| 数据处理 | DataOperations、StringTransform | JSON 操作、过滤和字符串操作(拆分/合并)。 |
| 输出生成 | DocGenerator | 从文本生成可下载的 PDF、Docx 或 Markdown 文件。 |
来源:agent/component/base.py:40-187, agent/component/llm.py:83-214, agent/component/message.py:69-70, agent/component/invoke.py:55-56, agent/component/data_operations.py:48-49, agent/component/docs_generator.py:70-71
LLM 组件
LLM 组件 agent/component/llm.py:83-214 提供对语言模型的直接访问,支持可配置的提示和生成参数。
组件结构
来源:agent/component/llm.py:34-81, agent/component/llm.py:83-110, agent/component/base.py:407-420
智能体组件
Agent 组件 agent/component/agent_with_tools.py:73-142 实现了 ReAct(推理+行动)循环,该循环迭代调用语言模型来规划行动、调用工具并反思结果。
架构
来源:agent/component/agent_with_tools.py:39-71, agent/component/agent_with_tools.py:73-111, agent/tools/base.py:22-30, agent/component/agent_with_tools.py:108-111
消息组件
Message 组件 agent/component/message.py:69-228 负责与最终用户的通信,支持流式输出和变量插值。它是将结果呈现回用户界面的主要方式。
逻辑流程
- 变量插值:使用正则表达式
variable_ref_patt查找占位符,并用画布中的实际值替换agent/component/message.py:171-216。 - 流式输出:实现异步生成器
_stream,在内容解析时逐块输出agent/component/message.py:166-228。 - 记忆集成:可以通过
queue_save_to_memory_task自动将消息保存到对话记忆agent/component/message.py:41, 228。 - 下载提取:识别值中的文档元数据(例如
doc_id、filename),以填充downloads输出agent/component/message.py:73-107。
来源:agent/component/message.py:44-66, agent/component/message.py:166-228, agent/component/message.py:73-76
Switch 组件
Switch 组件基于逻辑运算处理条件分支。在前端,它由 SwitchForm web/src/pages/agent/form/switch-form/index.tsx:153 表示。
配置和执行
- 条件:支持多个 "IF" 和 "ELSEIF" 分支,每个分支包含一个条件项数组
web/src/pages/agent/form/switch-form/index.tsx:158-176。 - 逻辑运算符:允许在单个分支内的多个条件项之间选择
AND或ORweb/src/pages/agent/form/switch-form/index.tsx:162。 - 比较运算符:支持标准运算符,如
=、≠、包含、以...开头和以...结尾agent/component/data_operations.py:147-155。
来源:web/src/pages/agent/form/switch-form/index.tsx:153-210, agent/component/data_operations.py:138-158
数据和字符串组件
DataOperations 组件
DataOperations 组件 agent/component/data_operations.py:47-49 对 JSON 数据执行结构性转换。
- 操作:包括
select_keys(选择键)、combine(合并)、filter_values(过滤值)、append_or_update(追加或更新)、remove_keys(移除键)和rename_keys(重命名键)agent/component/data_operations.py:43。 - 递归求值:可以使用
ast.literal_eval递归解析对象中字符串化的 JSON 字段agent/component/data_operations.py:95-112。
StringTransform 组件
StringTransform 组件 agent/component/string_transform.py:47-48 提供基本的文本操作。
- 拆分:根据指定的分隔符将字符串拆分为数组
agent/component/string_transform.py:76-91。 - 合并:将多个变量拼接为单个字符串,支持通过
SandboxedEnvironment使用 Jinja2 模板agent/component/string_transform.py:93-112。
来源:agent/component/data_operations.py:22-43, agent/component/string_transform.py:29-45, agent/component/string_transform.py:93-104
DocGenerator 组件
DocGenerator 组件 agent/component/docs_generator.py:70-71 允许智能体生成用户可以下载的正式文档。
技术实现
- 格式:支持
pdf、docx、txt、markdown和htmlagent/component/docs_generator.py:44。 - 存储:生成的文件使用系统的
STORAGE_IMPL(例如 MinIO)存储,并分配一个doc_idagent/component/docs_generator.py:119-120。 - 元数据:返回包含
doc_id、filename和base64数据的 JSON 对象,Message组件可以使用该对象显示下载链接agent/component/docs_generator.py:129-138。 - PDF 样式:使用 CJK 字体(例如 "Noto Sans CJK SC")以支持多语言文档生成
agent/component/docs_generator.py:75-77。
来源:agent/component/docs_generator.py:37-68, agent/component/docs_generator.py:88-152
Invoke 组件
Invoke 组件 agent/component/invoke.py:55-214 支持外部 HTTP 请求(GET、POST、PUT),以便与第三方 API 集成。
关键逻辑
- 变量注入:支持使用
{variable_name}语法将画布变量注入到 URL、请求头和请求体中agent/component/invoke.py:118-134。 - JSON 强制转换:自动尝试解析参数中字符串化的 JSON,以支持复杂的载荷
agent/component/invoke.py:59-91。 - HTML 清理:可选的
clean_html参数使用HtmlParser从响应中去除标签agent/component/invoke.py:44, 201-203。
来源:agent/component/invoke.py:31-53, agent/component/invoke.py:59-91, agent/component/invoke.py:189-214
组件基础逻辑
所有组件共享由 ComponentBase agent/component/base.py:407-585 管理的通用生命周期。
输出和错误处理
组件使用 set_output(key, value) agent/component/base.py:458-461 存储结果。特殊输出键包括:
_ERROR:捕获执行错误agent/component/base.py:463。_elapsed_time:跟踪执行耗时agent/component/base.py:418。
异常路由
组件可以通过 ComponentParamBase agent/component/base.py:47-50 配置对失败的自动响应:
- Method:定义出错时的行为(例如重试逻辑)。
- Goto:出错时跳转到特定组件
agent/component/base.py:575-582。
来源:agent/component/base.py:40-58, agent/component/base.py:407-470