# 极智·智能体开发和应用平台 参考

> 本文件基于对 `https://szrh.cetccity.com:10503/` 平台的实际访问，并配合对前端 JS bundle（`/workflow-web/assets/index-2e3277ca.js`，约 7.4MB）的源码反查，整理出 26 个工作流节点的完整权威 schema（`initialData` 默认值、`outputVariables` 输出结构、`allowedConnections` 连接方向等），供本仓库后续做工作流引擎、节点 schema 等功能时直接对照落地。
>
> 探索日期：2026-08-02。节点字段均来自前端注册表 `Y9e` 与各节点面板组件源码，**非推断**。

---

## 1. 平台总览

| 项 | 值 |
| --- | --- |
| 平台名称 | 极智·智能体开发和应用平台（JIZHI · AGENT DEVELOPMENT AND APPLICATION PLATFORM） |
| 入口 | `https://szrh.cetccity.com:10503/` |
| 登录方式 | 手机号 + 密码（亦支持验证码登录） |
| 主菜单 | 概览、智能体、自动化、数据源、模型、知识库、标签管理、其他管理（标签 / 模型 / 错误模式）、系统管理 |
| 鉴权 Token | 登录成功后写入 `localStorage["Admin-Token"]`，并伴随 `Admin-Refresh-Token` / `Admin-Token-Expire-At` / `xSessionId` / `cryptKeys` / `cryptConf` 等 |
| API 前缀 | `/jizhiApi/...`（请求体/响应体使用 `cryptConf` 中协商的密钥做加密，仅传 `Admin-Token` 不足以直接调用业务接口） |

> 注：直接用 `fetch('/jizhiApi/...')` 调用业务接口会返回 `{"msg":"当前请求会话中不存在加密秘钥","code":521}`，需要先在浏览器内由前端 SDK 完成密钥协商。如需调试，请在浏览器控制台中复用前端已发出的请求而不是新造一个。

---

## 2. 自动化（Automation）模块

入口：左侧菜单"自动化"，对应路由 `/automation`。

### 2.1 列表与创建入口

页面顶部提供两个创建入口：

- **自动创建**：通过自然语言描述生成自动化任务（向导式）。
- **手动创建**：弹出对话框直接配置。

### 2.2 手动创建对话框字段

打开"手动创建"对话框后，需要填写的字段如下（截图：`automation-manual-create.png`）：

| 字段 | 类型 | 是否必填 | 说明 |
| --- | --- | --- | --- |
| 任务名称 | 文本 | 是 | 自动化任务的展示名称 |
| 任务类型 | 单选 | 是 | `Agent` 或 `工作流`，决定后续执行入口 |
| 目标 | 下拉选择 | 是 | 选择具体的智能体或工作流（依"任务类型"动态过滤） |
| 模型 | 下拉选择 | 否 | 执行时使用的默认大模型 |
| 执行计划 | 单选 + 高级 | 是 | `每天` / `每周` / `每月` / `每小时` / `间隔` / `高级`，每种选项会进一步展开时间设置（如每周需选择星期几、每天需选择具体时刻） |
| 时区 | 下拉选择 | 是 | 默认 `Asia/Shanghai` |
| 启用 | 开关 | 否 | 创建后是否立即启用 |
| 文本问题 | 文本域 | 是 | 自动化运行时输入给智能体/工作流的问题内容 |
| 附件 | 文件上传 | 否 | 上传文件作为输入 |

> "高级"执行计划支持类 cron 表达式配置（具体表达式 UI 未在探索中展开）。

---

## 3. 智能体管理（Agent Management）

入口：左侧菜单"智能体"，对应路由 `/agent-management`。

## 3.1 智能体创建表单（基础信息）

点击"新增智能体"后弹出对话框，包含两个 Tab：**基础信息** 与 **Agent配置**（仅当应用类型为 Agent 时显示）。

### 基础信息 Tab 字段（截图：`agent-create-form.png`）

| 分组 | 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- | --- |
| 基础信息 | 智能体名称 | 文本 | 是 | 显示名称 |
| 基础信息 | 智能体图标 | 图标选择 | 否 | 20 个内置预设图标 + 自定义上传 |
| 基础信息 | 应用类型 | 单选 | 是 | `工作流` / `Agent`；切换后会重置后续 Tab |
| 基础信息 | 排序号 | 数字 | 否 | 在列表中的排序权重 |
| 基础信息 | 是否启用 | 开关 | 否 | 默认开启 |
| 工作流（仅工作流类型显示） | 注册为子图 | 开关 | 否 | 开启后该工作流可被其他工作流通过"子图"节点调用 |
| 分享设置 | 权限类型 | 单选 | 是 | 当前版本仅 `私有` |
| 分享设置 | 匿名分享 | 开关 | 否 | 关闭（探索期间未开启） |
| 内容引导 | 开场白 | 文本域 | 否 | 对话开始时显示的欢迎语 |
| 内容引导 | 功能介绍 | 文本域 | 否 | 智能体能力说明 |
| 内容引导 | 初始问题 | 列表 | 否 | 推荐问题列表，可多条添加 |

---

## 3.2 Agent 类型专属配置（Agent配置 Tab）

应用类型为 `Agent` 时，"基础信息"提交后会出现 **Agent配置** Tab，包含 6 个子 Tab：

### 3.2.1 运行参数（截图：`agent-config-capabilities.png`）

| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| 默认模型 | 下拉选择 | 是 | 下拉列表来自"模型管理"中已配置的模型；可点击"刷新模型"重新拉取 |
| 多模态补充 | 单选 | 否 | `跟随系统默认` / `开启` / `关闭` |
| 默认工作路径 | 文本 | 是 | Agent 执行脚本/读写文件时的根目录 |
| 角色提示词 | 文本域 | 是 | System Prompt，决定 Agent 的角色与行为 |
| 对话记忆 | 开关 + 子项 | 否 | 启用后可选择"摘要模型" |
| 长期记忆 | 开关 | 否 | 启用后跨会话保留关键信息 |
| 子智能体 | 列表 | 否 | 可勾选"综合检索（系统内置）"或选择其他已创建的 Agent |

### 3.2.2 能力 Tab

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| 工作流调用 | 开关 | 允许 Agent 调用其他工作流 |
| 内置浏览器 | 开关 | 启用平台内置浏览器访问网页 |
| 客户端浏览器 | 开关 | 使用客户端本地浏览器（需客户端配合） |
| 工具检索 | 开关 | 启用后 Agent 会按需从工具池中检索并调用 |

### 3.2.3 工具 Tab

工具分为两类：

- **内建工具（10 个）**
  - 搜索类（5）：网页搜索、知识库搜索、图片搜索、视频搜索、新闻搜索
  - 文件类（2）：文件读取、文件写入
  - 数据库类（3）：SQL 查询、NoSQL 查询、向量检索
- **系统工具（13 个）**
  - 来源：员工考核系统对接的工具集（人事、考勤、绩效等相关接口）

### 3.2.4 技能 Tab

- 技能总开关：开启后 Agent 可使用已注册的技能（Skill）。
- 技能列表来自系统的"技能管理"模块，每个技能对应一个可独立执行的能力包。

### 3.2.5 MCP Tab

- 探索期间显示"暂无可绑定 MCP 服务"。MCP（Model Context Protocol）服务在系统管理中先注册后才能在此绑定。

### 3.2.6 插件 Tab

5 个内建插件分组：

| 分组 | 插件 |
| --- | --- |
| 文档与 Office | Word/Excel/PPT 生成与解析 |
| 命令执行 | Shell / Python 沙箱命令执行 |
| 图表 | 柱状图 / 折线图 / 饼图等可视化生成 |
| 文件 | 文件转换、压缩、解压 |
| 基础和交互 | 时间、计算器、单位换算、提醒等 |

---

## 4. 工作流编排

### 4.1 入口与编排器架构

应用类型为"工作流"的智能体，在卡片或编辑页可进入"工作流编排"。系统提供两种编排器：

| 编排器 | 路由 / URL | 实现 | 当前状态 |
| --- | --- | --- | --- |
| 工作流编排（默认 Tab） | `/agent-management/edit/{sceneId}/workflow-arrange` | 通过 iframe 嵌入 `/workflow-web/design/{graphId}?returnTo=...&sceneId={sceneId}`，底层为 **React Flow** | 主要使用，功能完整 |
| 工作流编排(Vue3) | `/workflow-vue3/design/{id}` | Vue3 + Vue Flow 实现 | 部分场景报"工作流不存在"，疑似与 graphId/sceneId 不同步 |

> **权限**：只有创建人可以查看和编辑工作流详情；非创建人访问会得到"只有创建人可以查看工作流详情"提示。

### 4.2 编排器顶层控件

| 区域 | 说明 |
| --- | --- |
| 顶部 Tab | 对话 / 编辑 / 工作流编排 / 工作流编排(Vue3) / 接口详情 |
| 左侧节点列表 | 支持搜索；按 6 个分类分组（详见 4.3） |
| 中部画布 | React Flow 画布；支持撤销/重做、缩放、小地图、导入/导出配置、添加注释 |
| 右侧节点配置面板 | 选中节点后展开，字段依节点类型而异 |
| 底部状态栏 | "上次发布 / 上次保存" 时间戳；按钮：`保存`、`发布 vX`、`历史`、`预览`、`配置校验`（带未修复校验数角标） |

### 4.3 节点类型注册表（来源：前端 `Y9e` 元数据 + 分类常量 `Z9e`）

下表列出全部 26 个用户可见节点类型，按 6 类分组。`type` 列为节点在序列化配置中的唯一标识（即 React Flow `node.type`）。

| 分类 | type | 显示名 | 配色 | 描述 |
| --- | --- | --- | --- | --- |
| 基础节点 | `llm` | 大模型 | pink | 调用大语言模型，根据提示词生成文本回复。 |
| 基础节点 | `answer` | 回复 | purple | 将处理结果回复给用户，支持文本和文件输出。 |
| 基础节点 | `retrieval` | 知识库检索 | orange | 从知识库中检索相关文档，支持语义和关键词混合搜索。 |
| 基础节点 | `table_retrieval` | 表格知识库检索 | yellow | 从表格知识库中检索结构化数据，支持向量、全文和 NL2SQL 混合检索。 |
| 基础节点 | `graph_retrieval` | 图谱知识库检索 | green | 从图谱知识库中检索实体与关系，返回子图及上下文摘要。 |
| 基础节点 | `agent` | Agent | teal | 自主推理并调用工具完成任务的智能体节点。 |
| 基础节点 | `subgraph` | 子图 | blue | 嵌入已发布的子工作流，实现流程复用和模块化编排。 |
| 问题处理 | `classifier` | 意图识别 | purple | 利用大模型识别用户意图，将输入分类到预设类别。 |
| 问题处理 | `param_ext` | 参数提取 | purple | 从用户输入中提取结构化参数，如日期、地点、数量等。 |
| 问题处理 | `query_rewriter` | 问题改写 | purple | 结合上下文对用户问题进行改写，以提高检索准确率。 |
| 问题处理 | `query_expansion` | 关键词提取 | purple | 从用户问题中提取关键词，用于后续检索或分析。 |
| 逻辑 | `ifelse` | 条件分支 | orange | 根据条件表达式判断，将流程路由到不同分支。 |
| 逻辑 | `loop` | 迭代 | orange | 对列表数据逐项或并行迭代处理，支持内嵌子图。 |
| 工具 | `list_operation` | 列表操作 | teal | 对列表执行筛选、排序、截取和字段提取等操作。 |
| 工具 | `http` | HTTP 请求 | teal | 发送 HTTP 请求并获取响应，支持重试和超时配置。 |
| 工具 | `human` | 人工确认 | teal | 暂停流程等待人工审核或输入，支持多种交互方式。 |
| 工具 | `tool` | 工具调用 | teal | 调用已注册的外部工具，按 Schema 传参并获取结果。 |
| 工具 | `auto_db_query` | 数据自动查询 | teal | 由大模型自动生成 SQL 并查询数据库，适合自然语言提问。 |
| 工具 | `db_query` | 数据查询 | teal | 手动编写 SQL 查询数据库，支持多任务并发执行。 |
| 文件 | `file_download` | 文件下载 | yellow | 从指定 URL 下载文件，支持单文件和批量模式。 |
| 文件 | `file_upload` | 文件上传 | yellow | 将文件上传到存储服务，返回访问 URL。 |
| 文件 | `doc_ext` | 文档提取器 | yellow | 解析单个文件或文件列表，输出文件名与内容。 |
| 文件 | `official_doc` | 公文生成 | yellow | 按标准格式生成通知、纪要等公文文档。 |
| 转换 | `var_override` | 变量覆盖 | pink | 创建或覆盖变量的值，用于在节点间传递数据。 |
| 转换 | `var_transform` | 变量转换 | pink | 将复杂数据结构拆分或转换为独立变量。 |
| 转换 | `code` | 代码执行 | pink | 执行自定义 Python 或 JavaScript 代码片段。 |

> 另有两个**隐藏节点** `toolretrieval`（工具检索，hidden=true）、`plugin`（插件，hidden=true），不在用户节点列表中，本文档不展开。`llmtool`（LLM 工具）作为 tool 的特殊形态，在面板序列化逻辑中出现，但未单独列入注册表。

### 4.4 节点通用字段与异常处理

#### 4.4.1 通用基础字段（所有节点共享）

下列字段由节点渲染器统一处理，不属于各节点的 `initialData`：

| 字段 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| `id` | string | 自动生成 `${type}_${n}` | 节点唯一 ID，例如 `llm_1`、`answer_2` |
| `type` | string | — | 节点类型 key（见 4.3） |
| `position` | `{x, y}` | 自动布局 | 画布坐标 |
| `data.label` | string | 默认显示名 + 序号 | 节点标题，可重命名 |
| `data.width` | number | 节点默认 | 节点宽度（部分节点为 280） |
| `data.height` | number | 节点默认 | 节点高度 |
| `data.selected` | boolean | false | 是否选中 |
| `data.join_enabled` | boolean | false | "汇聚执行"：入边数 ≥ 2 时可开启，开启后等待所有上游到达再执行 |
| `data.error_policy` | object | `{mode:"none", max_retries:0, ...}` | 异常处理策略（见 4.4.2） |

#### 4.4.2 异常处理（`error_policy`）

面板底部统一渲染的异常处理区块。**注意**：以下 7 类节点禁用 "默认值" 模式，仅支持 "无 / 异常分支"：`file_download`、`file_upload`、`doc_ext`、`official_doc`、`var_override`、`var_transform`、`code`。

| 字段 | 类型 | 取值 / 默认 | 说明 |
| --- | --- | --- | --- |
| `error_policy.mode` | enum | `none` / `default_value` / `error_branch` | 处理方式：异常时停止 / 走默认值 / 走异常分支 |
| `error_policy.default_output` | any | — | mode=`default_value` 时使用的兜底输出 |
| `error_policy.fallback_action` | enum | `stop` | mode=`error_branch` 时若异常分支也未成功，最终动作（停止） |
| `error_policy.max_retries` | number | `0` | 最大重试次数 |
| `error_policy.routes` | array | — | mode=`error_branch` 时定义异常分支连线 |
| （classifier 专属）`error_policy.default_category` | string | — | 当 classifier+default_value 时，配置"默认分类" |

---

### 4.5 节点 schema 详情

> 下文按 4.3 表格顺序逐个列出每个节点的完整字段。每节包含：
> - **基础属性**：display / color / 描述 / 连接方向（`sources` = 出边方向，`targets` = 入边方向，`*` 表示任意方向）
> - **initialData**：节点 `data` 中的可配置字段（来自面板序列化白名单 + `Y9e[type].initialData` 默认值）
> - **inputVariables**：可作为子图输入的变量声明
> - **outputVariables**：节点输出变量及其类型（部分为函数动态计算，标注 `动态`）
>
> 表格中"中文标签"列取自面板组件源码（`label:"..."` 模式直接匹配）。所有未列出的基础字段（`label`、`width`、`height`、`error_policy` 等）默认存在，不再重复。

#### 4.5.1 大模型（`llm`）

| 属性 | 值 |
| --- | --- |
| display | 大模型 |
| colorScheme | pink |
| sources / targets | `[left, right]` / `[left, right]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `model_id` | string | `""` | 模型（必填，下拉来自模型管理；带"刷新模型列表"按钮） |
| `model_name` | string | `""` | 模型名（前端展示用，跟随 model_id） |
| `temperature` | number | `0.1` | 温度（范围 0.0–1.0，步进 0.1） |
| `system_prompt` | string | `""` | 系统提示（多行，placeholder：输入系统提示，可留空） |
| `user_prompt` | string | `"{{global.query}}"` | 用户输入（必填，模板表达式） |
| `stream` | boolean | `true` | 流式输出 |
| `memory_enabled` | boolean | `false` | 短期记忆（开启后展开记忆配置） |
| `memory_type` | enum | — | 记忆类型（仅 memory_enabled=true 时显示） |
| `memory_window` | number | `3` | 最大记忆轮数（1–100） |
| `json_output` | boolean | `false` | JSON 输出（helpTip：开启后强制模型输出 JSON 格式） |
| `json_output_type` | enum | `"object"` | 输出类型：`object`(Object 对象) / `array`(Array 数组)（仅 json_output=true 且 stream=false 时显示） |
| `thinking_mode` | enum | `"default"` | 思考模式：默认(跟随前端) / 开启 / 关闭 / 忽略(不传思考参数) |
| `thinking_level` | enum | — | 思考级别：默认 / low(轻度) / medium(标准) / high(深度) / xhigh(扩展) / max(极深) / 忽略(不传思考级别) |

**outputVariables**（动态：依赖 `json_output` / `stream` / `json_output_type`）

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `response` | 模型回复 | String（默认）；当 `json_output && !stream`：`json_output_type=array` → Array，否则 Object |

#### 4.5.2 回复（`answer`）

| 属性 | 值 |
| --- | --- |
| display | 回复 |
| colorScheme | purple |
| sources / targets | `[right]` / `[left]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `input_schema` | string | `""` | 输出内容（模板表达式文本域，支持"插入变量" + 全屏编辑） |
| `output_files` | array | `[]` | 文件输出（可添加；每项是文件变量引用） |

**outputVariables**（动态：依赖 `output_files`）

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `response` | 回复内容 | String |
| `files` | 输出文件 | Array[File]（仅当 output_files 非空） |

#### 4.5.3 知识库检索（`retrieval`）

| 属性 | 值 |
| --- | --- |
| display | 知识库检索 |
| colorScheme | orange |
| sources / targets | `[right]` / `[left]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `query` | string | `"{{global.query}}"` | 意图查询（必填，用于检索召回和重排序） |
| `queries` | array | `[]` | 检索查询（多路召回查询条件，可不填） |
| `kb_ids` | array | `[]` | 知识库（多选，不填则查询全部） |
| `kb_ids_var` | string | — | 知识库变量引用（如 `{{节点.kb_ids}}`） |
| `kb_ids_mode` | enum | `"select"` | 知识库选择模式：`select`(下拉) / `variable`(变量) |
| `tags` | array | undefined | 标签过滤 |
| `tags_var` | string | — | 标签变量引用 |
| `tags_mode` | enum | `"select"` | 标签选择模式 |
| `search_mode` | enum | `"hybrid"` | 检索方式：`hybrid`(混合检索) / `vector`(向量检索) / `keyword`(分词检索) |
| `size` | number | `5` | 最大召回数量 |
| `enable_reranker` | boolean | `false` | 开启重排 |
| `knn_score_threshold` | number | `0.8` | 召回阈值（向量相似度阈值，0–1） |
| `rerank_score_threshold` | number | `0.5` | 重排阈值 |
| `enable_citation` | boolean | `true` | 输出引用 |
| `return_full_file_content` | boolean | `false` | 返回文件全文 |
| `return_to_frontend` | boolean | — | 是否直接回前端 |
| `connect_timeout` | number | — | 连接超时（秒，高级设置） |
| `read_timeout` | number | — | 读取超时（秒） |
| `write_timeout` | number | — | 写入超时（秒） |
| `retry` | object | — | 失败重试：`{enable, count, interval_ms}` |

**outputVariables**

| 变量 | 标签 | 类型 | 说明 |
| --- | --- | --- | --- |
| `retrieval_result` | 检索结果(JSON) | Array | 详见下方 schema |
| `formatted_result` | 格式化结果(Text) | String | |

`retrieval_result` schema（每项字段）：`unique_id`(本次检索唯一ID)、`page_content`(文档内容 LangChain 原始字段)、`content`(内容块完整内容)、`matched_content`(匹配的检索块内容)、`file_name`、`file_title`、`file_type`、`kb_id`(知识库ID)、`source_id`(来源ID 文件ID)、`score`(综合得分)、`recall_source`(召回来源: BM25/VECTOR/HYBRID)、`page_number`(页码)、`chunk_index`(内容块序号)、`meta`(结构化元数据 标题 条文等)、`extra_info`(元数据前缀文本)、`metadata`(LangChain 原始 metadata)。

#### 4.5.4 表格知识库检索（`table_retrieval`）

| 属性 | 值 |
| --- | --- |
| display | 表格知识库检索 |
| colorScheme | yellow |
| sources / targets | `[right]` / `[left]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `query` | string | `"{{global.query}}"` | 查询问题（必填，自然语言描述要查询的数据） |
| `kb_ids` / `kb_ids_var` / `kb_ids_mode` | — | `[]` / — / `"select"` | 同 4.5.3 |
| `size` | number | `10` | 最大召回量（限制明细数据的返回条数，不影响统计结果） |
| `search_mode` | enum | `"hybrid_sql"` | 检索模式：`hybrid`(混合检索) / `sql`(SQL检索) / `hybrid_sql`(混合检索+SQL检索) |
| `knn_score_threshold` | number | `null` | 召回阈值（不设置则使用默认值） |
| `enable_citation` | boolean | `true` | 输出引用 |
| `connect_timeout` / `read_timeout` / `write_timeout` / `retry` | — | — | 同 4.5.3 |

**outputVariables**

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `retrieval_result` | 检索结果(JSON) | Array |
| `formatted_result` | 格式化结果(Text) | String |

`retrieval_result` schema：`unique_id`(唯一ID)、`table_name`(表名)、`table_id`(表ID)、`row_data`(行数据 Object)、`columns`(列定义 Array)、`source_route`(命中来源)。

#### 4.5.5 图谱知识库检索（`graph_retrieval`）

| 属性 | 值 |
| --- | --- |
| display | 图谱知识库检索 |
| colorScheme | green |
| sources / targets | `[right]` / `[left]` |

> 受 feature flag `G9e` 控制，未开启时该节点从基础节点列表中过滤掉（`X9e.filter(e=>"graph_retrieval"!==e)`）。

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `query` | string | `"{{global.query}}"` | 意图查询 |
| `kb_ids` / `kb_ids_var` / `kb_ids_mode` | — | `[]` / — / `"select"` | 知识库（图谱）选择 |
| `tags` | string | `""` | 标签过滤（多标签逗号分隔） |
| `tags_mode` | enum | `"select"` | 标签选择模式 |
| `enable_citation` | boolean | `true` | 输出引用 |
| `max_hops` | number | `4` | 查询深度（跳数） |
| `max_edges` | number | `200` | 最大边数 |
| `max_entities` | number | `60` | 最大实体数 |

**outputVariables**

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `retrieval_result` | 检索结果(JSON) | Array |
| `formatted_result` | 格式化结果(Text) | String |

`retrieval_result` schema：`unique_id`(唯一ID)、`file_name`(来源文件)、`kb_name`(知识库)、`entities`(实体列表 Array)、`relations`(关系列表 Array)。

#### 4.5.6 Agent（`agent`）

| 属性 | 值 |
| --- | --- |
| display | Agent |
| colorScheme | teal |
| sources / targets | `[left, right]` / `[left, right]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `model_id` | string | `""` | 模型（必填） |
| `system_prompt` | string | `""` | 系统提示 / 系统提示词 |
| `user_prompt` | string | `"{{global.query}}"` | 用户输入 |
| `stream` | boolean | `true` | 流式输出（helpTip：开启后 Agent 的回复将实时流式返回） |
| `reply_result` | boolean | `true` | 回复结果 |
| `agent_type` | enum | — | Agent 类型 |
| `thinking_mode` | enum | `"default"` | 思考模式 |
| `thinking_level` | enum | — | 思考级别 |
| `multimodal_supplement_enabled` | boolean\|null | `null` | 多模态补充 |
| `multimodal_supplement_model_id` | number | `-1` | 多模态补充模型（默认 -1 = 跟随主 Agent） |
| `multimodal_supplement_image_model_id` | number | `-1` | 多模态图片模型 |
| `multimodal_supplement_audio_model_id` | number | `-1` | 多模态音频模型 |
| `multimodal_supplement_video_model_id` | number | `-1` | 多模态视频模型 |
| `tools` | array | — | 工具（多选） |
| `mcp_server_codes` | array | `[]` | MCP 服务 |
| `plugin_package_ids` | array | `[]` | 插件包 |
| `enable_skills` | boolean | `false` | Skill 模式（开启后展开"绑定技能"） |
| `skill_names` | array | `[]` | 绑定技能（未绑定时使用所有有权限的技能） |
| `browser_usage_enabled` | boolean | `false` | 浏览器使用（beta） |
| `user_memory_enabled` | boolean | `false` | 长期记忆 |
| `conversation_memory_enabled` | boolean | `false` | 对话记忆 |
| `conversation_memory_summary_model_id` | string | — | 摘要模型 |
| `subagents` | array | `[]` | 子智能体 |
| `system_subagents` | array | 见下 | 系统内置子智能体（默认含两条系统模板，enabled=false） |
| `subagents_enabled` | boolean | `true` | 子智能体清单 |

`system_subagents` 默认值：

```js
[
  { template_id: "sys.retrieval_grounder",       enabled: false },
  { template_id: "sys.jizhi_system_steward",     enabled: false }
]
```

**outputVariables**

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `response` | Agent回复 | String |

#### 4.5.7 子图（`subgraph`）

| 属性 | 值 |
| --- | --- |
| display | 子图 |
| colorScheme | blue |
| sources / targets | `[right]` / `[left]` |
| inputVariables | `["Input"]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `subgraph_id` | string | `""` | 子工作流 ID |
| `subgraph_name` | string | `""` | 子工作流名称 |
| `subgraph_wf_id` | string | `""` | 子工作流 wf_id |
| `input` | string | `""` | 子图输入（映射到子图开始节点） |
| `input_params` | object | `{}` | 输入参数映射 |
| `user_files` | string | `""` | 用户文件传递 |
| `_startNodeInputs` | array | — | （运行时）子图开始节点输入声明 |
| `_publishedOutputVariables` | array | — | （运行时）子图已发布输出变量 |
| `_publishedOutputVariablesLoaded` | boolean | — | （运行时）加载标志 |
| `_endNodeOutputs` | array | — | （运行时）子图结束节点输出 |

**outputVariables**（动态：优先取 `_startNodeInputs` + `_publishedOutputVariables`，否则取 `_endNodeOutputs`，最后 fallback 为 `response:子图输出`）

#### 4.5.8 意图识别（`classifier`）

| 属性 | 值 |
| --- | --- |
| display | 意图识别 |
| colorScheme | purple |
| sources / targets | `[*]` / `[input]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `input_schema` | string | `"{{global.query}}"` | 输入（待分类文本） |
| `model_id` / `model_name` | string | `""` | 模型（带刷新按钮） |
| `categories` | array | 见下 | 分类列表（每项 `{category_id, category_name}`，支持"添加分类"） |
| `memory_enabled` | boolean | `false` | 短期记忆 |
| `memory_type` | enum | — | 记忆类型 |
| `memory_window` | number | `3` | 最大记忆轮数 |
| `thinking_mode` | enum | `"default"` | 思考模式 |
| `thinking_level` | enum | — | 思考级别 |
| `system_prompt` | string | `""` | 系统提示词（提示词配置，可"恢复默认"） |
| `user_prompt` | string | `""` | 用户提示词 |

`categories` 默认值：

```js
[
  { category_id: "category_1",       category_name: "分类1" },
  { category_id: "others_category",  category_name: "其他情况" }
]
```

**outputVariables**（动态：当 error_policy.mode=default_value 时追加两个异常输出）

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `class_name` | 识别结果 | String |
| `all_classes` | 分类列表 | Array[String] |
| `default_value` | 异常默认值 | Any（仅 default_value 模式） |
| `raw_output` | 异常默认原始值 | String（仅 default_value 模式） |

#### 4.5.9 参数提取（`param_ext`）

| 属性 | 值 |
| --- | --- |
| display | 参数提取 |
| colorScheme | purple |
| sources / targets | `[right]` / `[left]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `instruction` | string | `""` | 指令（输入提取指令） |
| `input_schema` | string | `""` | 输入内容 (Input Schema，待提取文本) |
| `model_id` / `model_name` | string | `""` | 模型 |
| `parameters` | array | `[]` | 参数列表（详见下方） |
| `memory_enabled` / `memory_type` / `memory_window` | — | — | 同 4.5.8 |
| `thinking_mode` / `thinking_level` | — | — | 思考模式 / 级别 |
| `system_prompt` | string | `""` | 系统提示词 |
| `user_prompt` | string | `""` | 用户提示词 |

`parameters` 数组每项结构为 `{ [paramName]: { type, description, required, ... } }`，参数 schema 编辑器支持的字段：

| 子字段 | 说明 |
| --- | --- |
| 参数名称 | key（如 `user_name`） |
| 中文名 | label |
| 类型 | `String` / `Number` / `Array` / `Boolean` / `Object` 等 |
| 数组元素类型 | 当 type=Array 时的元素类型 |
| 描述 | description |
| 必填 | required |

**outputVariables**（动态：根据 `parameters` 列表生成）

每个 parameter 生成一个输出变量：`{name=paramName, label=description||paramName, type=映射后的类型}`。
类型映射：`str → String`、`number → Number`，其他保持。

#### 4.5.10 问题改写（`query_rewriter`）

| 属性 | 值 |
| --- | --- |
| display | 问题改写 |
| colorScheme | purple |
| sources / targets | `[right]` / `[left]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `model_id` / `model_name` | string | `""` | 模型 |
| `input_schema` | string | `"{{global.query}}"` | 输入（待改写内容） |
| `stream` | boolean | `false` | 流式输出 |
| `memory_enabled` / `memory_type` / `memory_window` | — | — | 短期记忆 |
| `thinking_mode` / `thinking_level` | — | — | 思考模式 / 级别 |
| `system_prompt` | string | `""` | 系统提示词 |
| `user_prompt` | string | `""` | 用户提示词 |

**outputVariables**

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `output` | 改写结果 | String |

#### 4.5.11 关键词提取（`query_expansion`）

| 属性 | 值 |
| --- | --- |
| display | 关键词提取 |
| colorScheme | purple |
| sources / targets | `[right]` / `[left]` |

**initialData**：与 `query_rewriter` 完全一致（同字段集合，不同语义）。

**outputVariables**

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `output` | 提取结果 | String |

#### 4.5.12 条件分支（`ifelse`）

| 属性 | 值 |
| --- | --- |
| display | 条件分支 |
| colorScheme | orange |
| sources / targets | `[]` / `[left]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `cases` | array | `[]` | 分支条件列表（详见下方） |

`cases` 每个分支结构：

```ts
{
  case_id: string,       // 分支 ID
  label: string,         // 分支名（默认"分支 N"）
  conditions: Array<{    // 条件列表（AND 关系）
    variable: string,    // 比较变量（来自上游变量选择）
    operator: enum,      // 操作符：=, ≠, >, <, ≥, ≤, 包含, 不包含, 开始于, 结束于, 为空, 不为空
    value: string        // 比较值
  }>,
  logical_operator: "AND" | "OR"  // 多条件间的逻辑关系
}
```

UI 操作：每分支一个出口连线；"添加分支"按钮新增 case；"添加条件"在分支内新增 condition。

**outputVariables**

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `result` | 判断结果 | String |

> 画布上每个分支还会产生一个独立的输出把手（handle），通过 `error_policy.routes`/`cases` 路由。

#### 4.5.13 迭代（`loop`）

| 属性 | 值 |
| --- | --- |
| display | 迭代 |
| colorScheme | orange |
| sources / targets | `[right]` / `[left]` |
| inputVariables | `["Input"]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `input_variable` | string | `""` | 输入列表变量（必填，选择要迭代的列表变量） |
| `input_variables` | array | `[]` | 多输入列表 |
| `is_parallel` | boolean | `false` | 并发运行 |
| `concurrency` | number | — | 并发度（并行执行的线程数量 1–16） |
| `outputs` | array | `[]` | 输出变量配置（详见下方） |
| `subgraph_config` | object | — | 内嵌子图配置（包含 `nodes`/`edges` 等子图完整定义） |

`outputs` 每项：

```ts
{
  name: string,    // 变量名
  label: string,   // 中文名
  type: string     // 类型（如 String、Number、Array[Object] 等）
}
```

UI 提供"添加输出"按钮配置 outputs；提示文案："下游节点可通过变量引用迭代内部节点的输出（聚合为数组）"。

**outputVariables**（动态：基于 `outputs` + 内部子图节点输出聚合）

至少包含：

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `response` | 循环响应 | String |
| `results` | 循环结果 | Array |

随后追加每个 `outputs` 项（type 自动包装为 `Array[...]`）+ 内部节点输出（聚合为 `Array`，name 形如 `${nodeId}.${varName}`）。

#### 4.5.14 列表操作（`list_operation`）

| 属性 | 值 |
| --- | --- |
| display | 列表操作 |
| colorScheme | teal |
| defaultWidth | 280 |
| sources / targets | `[right]` / `[left]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `input_variable` | string | `""` | 输入变量（要操作的列表） |
| `input_variables` | array | `[]` | 多输入列表 |
| `input_type` | string | `""` | 输入类型（运行时根据上游推导，如 `Array[File]`、`Array[Object]`） |
| `filter_type` | enum | `"all"` | 过滤匹配模式：`all`(全部满足) / `any`(任一满足) |
| `enable_filter` | boolean | `false` | 启用过滤 |
| `conditions` | array | `[]` | 过滤条件列表（结构同 ifelse.conditions） |
| `enable_sort` | boolean | `false` | 启用排序 |
| `sort_by` | string | `""` | 排序字段 |
| `sort_order` | enum | `"asc"` | 排序方向：`asc` / `desc` |
| `enable_limit` | boolean | `false` | 启用截取 |
| `limit` | number | `0` | 截取数量 |
| `limit_type` | enum | `"top_n"` | 截取模式：`top_n`(前 N 条) / `bottom_n`(后 N 条) |
| `enable_extract` | boolean | `false` | 启用字段提取 |
| `extract_field` | string | `""` | 提取字段（单字段模式） |
| `extract_fields` | array | `[]` | 提取字段列表（每项 `{field, type, label}`） |

**outputVariables**（动态：依赖 `extract_fields` / `extract_field` / `input_type`）

基础输出（始终存在）：

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `result` | 过滤结果 | Array（type 与 extract 配置相关） |
| `first_record` | 第一条记录 | Any / Object |
| `last_record` | 最后一条记录 | Any / Object |

当 `input_type` 为 `Array[File]`/`File[]` 且未启用 extract 时，追加：

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `result_info` | 过滤结果信息 | Array[FileInfo] |
| `first_record_info` | 第一条记录信息 | FileInfo |
| `last_record_info` | 最后一条记录信息 | FileInfo |

#### 4.5.15 HTTP 请求（`http`）

| 属性 | 值 |
| --- | --- |
| display | HTTP 请求 |
| colorScheme | teal |
| sources / targets | `[left, right]` / `[left, right]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `url` | string | `""` | API 地址 |
| `method` | enum | `"GET"` | 请求方法：`GET` / `POST` / `PUT` / `DELETE` / `PATCH` / `HEAD` |
| `headers` | object | `{}` | 请求头（键值表） |
| `params` | object | `{}` | 请求参数（query 键值表） |
| `body` | string | `""` | 请求体（按 body_type 切换形态） |
| `body_type` | enum | `"none"` | 请求体类型：`none` / `form-data` / `JSON` / `raw` / `binary` |
| `body_form_data` | array | — | body_type=form-data 时的键值表（含 File 类型支持） |
| `body_urlencoded` | object | — | body_type=urlencoded 时的键值表 |
| `body_json` | object | — | body_type=JSON 时的对象（placeholder: `{ 'key': 'value' }`） |
| `body_raw` | string | — | body_type=raw 时的原始内容 |
| `body_binary` | string | — | body_type=binary 时的文件变量引用 |
| `http2` | boolean | — | 协议：`HTTP/1.1` / `HTTP/2` |
| `ssl_verify` | boolean | `true` | SSL 验证 |
| `timeout_connect` | number | `5` | 连接超时（秒） |
| `timeout_read` | number | `30` | 读取超时（秒） |
| `timeout_write` | number | `30` | 写入超时（秒） |
| `retry` | object | `{enable:false, count:3, interval:1000}` | 失败重试配置（启用重试 / 重试次数 / 重试间隔 ms） |

**outputVariables**

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `status_code` | 状态码 | Number |
| `body` | 响应体 | String |
| `headers` | 响应头 | Object |
| `files` | 文件列表 | Array[File] |
| `files_info` | 文件信息列表 | Array[FileInfo] |

#### 4.5.16 人工确认（`human`）

| 属性 | 值 |
| --- | --- |
| display | 人工确认 |
| colorScheme | teal |
| sources / targets | `[*]` / `[left]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `interaction_type` | enum | `"context_input"` | 交互类型：`context_input`(上下文输入) / `external_system`(外部系统处理) |
| `title` | string | `""` | 标题（如：需要用户确认订单信息） |
| `reason` | string | `""` | 原因 (reason)，向用户说明需要介入的原因 |
| `question` | string | `""` | 问题 (question)，向用户提出的具体问题 |
| `questions` | array | `[]` | 结构化问题（每项详见下方；空数组时执行页显示自由输入框） |
| `output_variables` | array | `[]` | 输出变量配置（每项 `{name, label, type, scope}`） |
| `external_system` | object | — | 外部系统配置（系统名称、系统地址） |
| `routes` | array | `[]` | 输出分支（如：已完成 / 未完成） |

`questions` 每项结构：

```ts
{
  id: string,              // 兼容 ID（可选）
  tab_title: string,       // Tab 标题
  content: string,         // 问题内容
  options?: Array<{        // 预置选项（空时该问题仅展示补充说明输入）
    name: string,          // 选项名称
    description: string,   // 选项说明
  }>,
  allow_multiple: boolean, // 允许多选
  allow_supplement: boolean // 允许补充
}
```

**outputVariables**（动态：依赖 `interaction_type` / `questions` / `output_variables`）

基础输出（始终存在）：

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `action` | 操作类型 | String |
| `data` | 操作数据 | Any |

`interaction_type=context_input` 且 `questions.length>0` 时追加：

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `response` | 人工回复 | String |
| `answers` | 结构化答案 | Object |
| `supplements` | 补充说明 | Object |

`interaction_type=external_system` 时追加 `result`(处理结果, String)。否则追加 `output_variables` 配置的每个变量（type=String）。

#### 4.5.17 工具调用（`tool`）

| 属性 | 值 |
| --- | --- |
| display | 工具调用 |
| colorScheme | teal |
| sources / targets | `[left, right]` / `[left, right]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `tool_id` | string | `""` | 工具 ID（选择工具，搜索框：名称/ID/分类/描述） |
| `tool_title` | string | `""` | 工具中文名（跟随 tool_id） |
| `inputs` | object | `{}` | 工具入参（按工具 input schema 动态生成的表单） |
| `inputs_mode` | enum | `"form"` | 输入模式：`form`(表单) / 其他 |
| `output_schema` | object\|string | — | 工具输出 schema（来自工具定义，JSON Schema） |
| `input_schema` | object\|string | — | 工具输入 schema（用于推导文件类型入参） |
| `thinking_mode` | enum | `"default"` | 思考模式 |
| `thinking_level` | enum | — | 思考级别 |
| `llm_params_enabled` | boolean | `false` | LLM 参数模式开关 |
| `llm_model_id` | string | `""` | LLM 模型（llm_params_enabled=true 时） |
| `llm_prompt` | string | `""` | LLM 提示词 |
| `llm_retry_max` | number | `3` | LLM 最大重试 |

**outputVariables**（动态：基于 `output_schema` JSON Schema 递归生成，深度上限 5）

默认 fallback：`[{name:"result", label:"执行结果", type:"String"}]`。

支持识别 file / array[file] / object / array[object] 类型，自动展开 `result` + `file_info` / `files` + `files_info` 等配套输出。

#### 4.5.18 数据自动查询（`auto_db_query`）

| 属性 | 值 |
| --- | --- |
| display | 数据自动查询 |
| colorScheme | teal |
| sources / targets | `[left, right]` / `[left, right]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `datasource_code` | string | `""` | 数据源（必填，下拉来自 `getDatasourceList()`） |
| `selected_tables` | array | `[]` | 表选择（多选） |
| `execute_until` | enum | `"schema_only"` | 执行到：`schema_only`(仅生成 schema) / `generate_sql`(生成 SQL) / `execute_all`(执行到底) |
| `step_generate_sql` | boolean | `false` | 分步：生成 SQL |
| `step_execute_query` | boolean | `false` | 分步：执行查询 |
| `model_id` | string | `""` | 模型 |
| `system_prompt` | string | `""` | 系统提示 |
| `user_prompt` | string | `""` | 用户输入 |
| `user_requirements` | string | `""` | 自然语言问题（用户的查询需求） |
| `max_rows` | number | `0` | 最大返回行数（0=不限制） |
| `timeout` | number | `0` | 超时（秒，0=不限制） |
| `thinking_mode` | enum | `"default"` | 思考模式 |
| `thinking_level` | enum | — | 思考级别 |

**outputVariables**（动态：依赖 `execute_until` / `step_generate_sql` / `step_execute_query`）

| 变量 | 标签 | 类型 | 出现条件 |
| --- | --- | --- | --- |
| `table_schemas` | 表结构信息 | Array[Object] | 始终 |
| `generated_sql` | 生成的SQL | Object（schema: `{sql, explanation}`） | step_generate_sql 或 execute_until ∈ {generate_sql, execute_all} |
| `query_result` | 查询结果 | Object（schema 见下） | step_execute_query 或 execute_until=execute_all |

`query_result` schema：`columns`(列信息 Array[{name, label, type}])、`rows`(数据行 Array[Object])、`total`(总行数 Number)、`executionTime`(执行耗时 Number)。

`table_schemas` 元素 schema：`tableName`/`table_name`(表名)、`tableComment`/`comment`(表注释)、`columns`(列信息 Array[{name, columnName, type, dataType, nullable, ableBeNull, comment, columnComment}])。

#### 4.5.19 数据查询（`db_query`）

| 属性 | 值 |
| --- | --- |
| display | 数据查询 |
| colorScheme | teal |
| sources / targets | `[left, right]` / `[left, right]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `datasource_code` | string | `""` | 数据源（必填） |
| `tasks` | array | `[]` | 任务列表（详见下方） |
| `concurrent` | boolean | `false` | 并发执行 |
| `concurrency_limit` | number | `1` | 并发任务数上限 |
| `timeout` | number | `0` | 超时（秒） |

`tasks` 每项结构：

```ts
{
  name: string,            // 任务名
  sql: string,             // SQL 文本
  output_variable: string  // 输出变量名（默认 task_${name}）
}
```

**outputVariables**（动态：每个 task 生成一个输出）

每任务输出：

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `${output_variable}` | 任务结果: `${name}` | Object |

每输出 schema：`columns`(列信息 Array[{name, type, label}])、`rows`(数据行 Array[Object])、`total`(总行数)、`executionTime`(执行耗时)、`error_message`(错误说明)。

#### 4.5.20 文件下载（`file_download`）

| 属性 | 值 |
| --- | --- |
| display | 文件下载 |
| colorScheme | yellow |
| sources / targets | `[left, right]` / `[left, right]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `download_urls` | string | `""` | 下载链接（必填，多行，支持变量如 `{{node_id.url}}`） |
| `output_mode` | enum | `"single"` | 输出模式：`single`(单个文件) / `multiple`(文件数组) |
| `timeout_connect` | number | `30` | 连接超时（秒） |
| `timeout_read` | number | `30` | 读取超时（秒） |
| `timeout_write` | number | `30` | 写入超时（秒） |

**outputVariables**（动态：依赖 `output_mode`）

| 模式 | 变量 | 标签 | 类型 |
| --- | --- | --- | --- |
| single | `file` | 文件 | File |
| single | `file_info` | 文件信息 | FileInfo |
| multiple | `files` | 文件数组 | Array[File] |
| multiple | `files_info` | 文件信息数组 | Array[FileInfo] |

`FileInfo` schema：`url`、`fileName`、`filePath`、`size`、`mimeType`、`extension`。

#### 4.5.21 文件上传（`file_upload`）

| 属性 | 值 |
| --- | --- |
| display | 文件上传 |
| colorScheme | yellow |
| sources / targets | `[left, right]` / `[left, right]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `files_input` | string | `""` | 文件输入（必填，选择文件或文件列表变量） |
| `upload_mode` | enum | `"single"` | 上传模式：`single`(单文件) / `batch`(批量) |
| `timeout` | number | `60` | 超时时间（秒） |

**outputVariables**（动态：依赖 `upload_mode`）

| 模式 | 变量 | 标签 | 类型 |
| --- | --- | --- | --- |
| single | `url` | 文件URL | String |
| single | `file_info` | 文件信息 | FileInfo |
| single | `result` | 上传结果 | Object |
| batch | `urls` | URL数组 | Array[String] |
| batch | `files_info` | 文件信息数组 | Array[FileInfo] |
| batch | `results` | 上传结果 | Array[Object] |

#### 4.5.22 文档提取器（`doc_ext`）

| 属性 | 值 |
| --- | --- |
| display | 文档提取器 |
| colorScheme | yellow |
| sources / targets | `[right]` / `[left]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `input_file` | string | `""` | 输入文件（必填，选择文件或文件列表变量） |
| `prefer_html_table` | boolean | `true` | 偏好HTML表格 |
| `input_type` | string | `""` | 输入类型（运行时推导：单文件 / Array[File] 等） |
| `connect_timeout` | number | — | 连接超时（秒） |
| `read_timeout` | number | — | 读取超时（秒） |
| `write_timeout` | number | — | 写入超时（秒） |

**outputVariables**（动态：依赖 `input_type`）

| 输入类型 | 输出 |
| --- | --- |
| 单文件 | `file_name`(文件名 String)、`file_content`(文件内容 String)、`error`(错误信息 String) |
| Array[File] | `result`(解析结果 Array[Object]，schema 同单文件三字段) |

#### 4.5.23 公文生成（`official_doc`）

| 属性 | 值 |
| --- | --- |
| display | 公文生成 |
| colorScheme | yellow |
| sources / targets | `[left, right]` / `[left, right]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `documentType` | enum | `"tongzhi"` | 文种类型（详见下方枚举） |
| `category` | enum | `"standard"` | 公文分类：`standard`(标准文 下行文) / `upstream`(上行文) / `other`(其他) |
| `issueOrg` | string | `""` | 发文机关名称（必填） |
| `issueNumber` | string | `""` | 发文字号 |
| `copyNumber` | string | `""` | 份号（可选） |
| `secretLevel` | enum | `""` | 密级：`""`/`secret`(秘密)/`confidential`(机密)/`top_secret`(绝密) |
| `secretPeriod` | string | `""` | 保密期限 |
| `urgencyLevel` | enum | `""` | 紧急程度：`""`/`urgent`(加急)/`very_urgent`(特急) |
| `signers` | string | `""` | 签发人（多人逗号分隔） |
| `title` | string | `""` | 标题（必填） |
| `mainRecipient` | string | `""` | 主送机关 |
| `content` | string | `""` | 正文内容（必填，支持变量引用） |
| `attachments` | string | `""` | 附件名称（多个附件逗号分隔） |
| `issueOrgName` | string | `""` | 发文机关署名 |
| `issueDate` | string | `""` | 成文日期（如：2024年1月1日） |
| `attendees` | string | `""` | 出席人员 |
| `observers` | string | `""` | 列席人员（可选） |
| `ccOrgs` | string | `""` | 抄送机关 |
| `printOrg` | string | `""` | 印发机关 |
| `printDate` | string | `""` | 印发日期 |
| `showIssueNumber` | boolean | `true` | 显示发文字号 |
| `showMainRecipient` | boolean | `true` | 显示主送机关 |
| `showSigners` | boolean | `true` | 显示签发人 |
| `showIssueOrgName` | boolean | `true` | 显示发文机关署名 |
| `showIssueDate` | boolean | `true` | 显示成文日期 |
| `showAttendees` | boolean | `true` | 显示出席人员 |

`documentType` 枚举（15 种）：`tongzhi`(通知)、`tongbao`(通报)、`baogao`(报告)、`qingshi`(请示)、`pifu`(批复)、`yijian`(意见)、`jueyi`(决议)、`jueding`(决定)、`gongbao`(公报)、`gonggao`(公告)、`tonggao`(通告)、`mingling`(命令/令)、`yian`(议案)、`jiyao`(纪要)、`gonghan`(函)。

UI 分组：版头信息、落款信息、纪要专用（仅纪要文种显示）、版记信息。

**outputVariables**

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `files` | 文件数组 | Array[File] |
| `files_info` | 文件信息数组 | Array[FileInfo] |

#### 4.5.24 变量覆盖（`var_override`）

| 属性 | 值 |
| --- | --- |
| display | 变量覆盖 |
| colorScheme | pink |
| defaultWidth | 280 |
| sources / targets | `[right]` / `[left]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `variables` | array | `[]` | 变量配置列表（详见下方；支持"添加变量"） |
| `width` | number | `280` | 节点宽度 |

`variables` 每项结构：

```ts
{
  target: string,       // 变量名 (Key)
  label: string,        // 变量名称（展示用）
  type: string,         // 变量类型：String / Number / Boolean / Object / Array / File / FileInfo 等
  value: any,           // 变量值（支持变量引用 {{...}}）
  required: boolean,    // 必填
  options: string[],    // 下拉选项（type=enum 时）
  allowed_types: string[] // 允许的文件类型（type=File 时）
}
```

**outputVariables**（动态：根据 `variables` 列表生成）

每个 `variables` 项生成一个输出变量 `{name=target, label=label||target, type}`。
当 type 为 `File` / `Array[File]` / `FileInfo` / `Array[FileInfo]` 时，额外追加 `${target}_info` 配套 FileInfo 输出。

#### 4.5.25 变量转换（`var_transform`）

| 属性 | 值 |
| --- | --- |
| display | 变量转换 |
| colorScheme | pink |
| defaultWidth | 280 |
| sources / targets | `[right]` / `[left]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `input_variable` | string | `""` | 输入变量（选择要展开的变量 Object 或 Array[Object]） |
| `input_type` | string | `""` | 输入类型（运行时推导） |
| `input_schema` | array | `[]` | 输入 schema（来自上游，每项 `{name, label, type}`） |
| `outputs` | array | `[]` | 输出变量结构（详见下方） |
| `flatten` | boolean | `false` | 平铺变量 |
| `width` | number | `280` | 节点宽度 |

`outputs` 每项：

```ts
{
  name: string,    // 字段名
  label: string,   // 中文名
  type: string     // 类型（可空，未指定时从 input_schema 推导）
}
```

UI 提供"添加"按钮新增输出，"选择字段"从上游 schema 拉取。

**outputVariables**（动态：依赖 `flatten` / `input_type` / `outputs`）

- `flatten=true`：直接平铺每个 output 为独立变量（type 自动包装为 `Array[...]`，当 input_type 是 Array 时）
- `flatten=false` 且 input_type 以 `Array` 开头：单个 `result`(展开结果, Array[Object]) 输出，schema 为 outputs 映射
- `flatten=false` 且 input_type 为 Object：每个 output 一对一输出（File 系追加 `_info` 配套）

#### 4.5.26 代码执行（`code`）

| 属性 | 值 |
| --- | --- |
| display | 代码执行 |
| colorScheme | pink |
| sources / targets | `[left, right]` / `[left, right]` |

**initialData**

| 字段 | 类型 | 默认值 | 中文标签 / 说明 |
| --- | --- | --- | --- |
| `language` | enum | `"python3"` | 语言：`python3`(Python) / `javascript`(JavaScript) |
| `code` | string | `""` | 代码正文（多行编辑器） |
| `args` | array | `[]` | 入参列表（每项 `{name, type}`，作为函数参数注入） |
| `outputs` | array | `[{name:"result", type:"String"}]` | 输出变量声明（每项 `{name, type, label?}`） |

**outputVariables**（动态：基于 `outputs`；若空则 fallback 为 `[{name:"result", label:"result", type:"String"}]`）

每个 `outputs` 项生成 `{name, label=label||name, type}` 输出。

#### 4.5.27 开始节点（`start`，系统节点）

| 属性 | 值 |
| --- | --- |
| display | 开始 |
| colorScheme | green |
| sources / targets | `[right]` / `[]`（无入边） |

不可删除，每张图有且仅有一个。无 `initialData`，但内置 `inputs` 数组（用户可在"基础信息 → 内容引导"配置额外的输入字段）。

**outputVariables**（系统注入的"全局变量"）

| 变量 | 标签 | 类型 |
| --- | --- | --- |
| `query` | 用户问题 | String |
| `token` | 用户Token | String |
| `retrieval_counter` | 检索计数器 | Integer |
| `files` | 用户文件 | Array[File]（schema: file_name, url, file_path, mime_type, extension, size） |
| `files_info` | 用户文件信息 | Array[FileInfo]（schema: url, fileName, filePath, size, mimeType, extension） |
| `user_id` | 用户ID | String |
| `dept_id` | 部门ID | String |
| `tenant_id` | 租户ID | String |

> 模板表达式中以 `{{global.query}}`、`{{global.files}}` 等方式引用。

#### 4.5.28 结束节点（`end`，系统节点）

| 属性 | 值 |
| --- | --- |
| display | 结束 |
| colorScheme | red |
| sources / targets | `[]`（无出边） / `[left]` |

不可删除，每张图有且仅有一个。无 `initialData` 默认字段，画布上默认显示"输出全部变量"。

**initialData**

| 字段 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| `output_variables` | array | `[]` | 显式声明输出；空数组 = 输出全部上游变量。每项 `{nodeId, name, label, type}` |

**outputVariables**：`[]`（结束节点不向下游输出，是流程终点）。

---

## 5. 关键 URL / 路由速查

| 用途 | URL |
| --- | --- |
| 登录 | `/login` |
| 自动化列表 | `/automation` |
| 智能体列表 | `/agent-management` |
| 智能体编辑（含 Tab） | `/agent-management/edit/{sceneId}/{tab?}`，`tab` 取值：`dialog`(对话) / `edit`(编辑) / `workflow-arrange`(工作流编排) / `interface`(接口详情) |
| 工作流编排 iframe | `/workflow-web/design/{graphId}?returnTo=...&sceneId={sceneId}` |
| Vue3 工作流编排 | `/workflow-vue3/design/{id}` |

> `{sceneId}` 是智能体 ID；`{graphId}` 是工作流图 ID，二者不一定相同（一个智能体可对应一个发布图与多个历史版本图）。

---

## 6. 探索方法与已知限制

### 6.1 节点 schema 数据来源

本文档 4.3 / 4.4 / 4.5 各节中的字段表来自 **前端 JS bundle 的静态分析**，并非 UI 截图推断：

1. 主 bundle `/workflow-web/assets/index-21045ea8.js`（~631KB）只是引导代码。
2. 真正的应用代码在按需加载的 chunk `/workflow-web/assets/index-2e3277ca.js`（~7.4MB，含 11657 个中文字符）中。
3. 在该 chunk 中可直接定位到 **节点元数据注册表 `Y9e`**（起始位置约 7213314，结束于约 7243000），其中按节点 type 顺序声明了每个节点的：
   - `display`（中文名）、`colorScheme`、`description`、`allowedConnections`（sources/targets）
   - `initialData`：默认配置对象（本文 4.5 各节"initialData"表的字段名与默认值即取自此处）
   - `inputVariables` / `outputVariables`：输入输出变量声明（部分为函数动态计算，函数源码完整保留在 bundle 中）
   - `properties`：字段校验器引用
4. 节点分类常量 `Z9e` 紧随其后（位置约 7243700），与 UI 左侧节点列表的 6 个分类完全一致。
5. 节点配置面板的中文表单标签（如"短期记忆""流式输出""输出引用"等）从各面板组件的 `label:"..."` JSX 属性中抽取，与 4.5 各节"中文标签"列对应。

> 因此 4.5 中所有字段名、默认值、输出变量 schema 均为**权威数据**，可直接用于后端 schema 建模。

### 6.2 已知限制

1. **业务接口需要密钥协商**：直接 `fetch('/jizhiApi/...')` 会返回 `{"msg":"当前请求会话中不存在加密秘钥","code":521}`；如需通过 API 获取已有工作流的节点配置作为参考，需要先在前端 SDK 完成 `cryptKeys` / `cryptConf` 协商，或在浏览器控制台中复用前端已发出的请求。
2. **Vue3 编排器对部分工作流报"工作流不存在"**：用新建工作流的 ID 进入 Vue3 编排器会失败，需使用默认的"工作流编排"Tab（React Flow）。
3. **拖拽添加节点不稳定**：在 headless 浏览器中通过 `page.mouse` / `frame.dragTo` 触发 React Flow 的 HTML5 DnD 事件不易成功（多种合成事件方案均未生效）。但本次通过 JS bundle 静态分析已绕开此限制。
4. **图谱检索节点的 feature flag**：`graph_retrieval` 节点受常量 `G9e` 控制；若生产环境未开启，该节点会从基础节点列表中过滤掉（`X9e.filter(e=>"graph_retrieval"!==e)`），但 `Y9e` 注册表中仍保留其完整定义。
5. **测试残留**：为获取完整编辑权限，本次探索在平台创建过一个名为 `node-fields-exploration` 的工作流（智能体 ID `7782`），探索完成后已按 `/agent-management → 我的 → 工作流筛选 → 卡片"更多管理" → 删除智能体` 流程清理完毕（删除后"我的"工作流列表显示"暂无智能体"）。

---

## 7. 与本仓库（agent-management）的对照建议

下表把平台能力映射到本仓库后端可能的实现模块，便于后续做工作流引擎与节点 schema 时对照：

| 平台能力 | 建议映射到本仓库的位置 |
| --- | --- |
| 智能体基础信息 + Agent 配置（运行参数 / 能力 / 工具 / 技能 / MCP / 插件） | `agent` 实体 + 配套的 `agent_capability` / `agent_tool_binding` 等关联表 |
| 自动化任务（cron / 间隔） | `automation_task` 表 + 调度器（Quartz / Spring Scheduling） |
| 工作流编排（节点 + 边 + 配置） | `workflow_graph` 表（存储 React Flow 序列化结果）+ 节点执行器（Strategy / Chain 模式） |
| 节点配置 schema | 每个节点类型对应一个 `NodeHandler` 实现，定义输入 / 输出变量声明与执行逻辑（参考 4.5 / 4.6 的字段表） |
| 节点异常处理 | `NodeExceptionConfig`（处理方式、最大重试次数），所有节点 Handler 共享 |
| 工作流版本管理 | `workflow_graph_version`（每次发布生成一份快照，运行时按版本号加载） |
| 子图 | `workflow_subgraph_binding`：节点 ID → 子工作流版本 ID |

> 本仓库中"错误模式管理"相关功能（已扩展为 25 条内置模式并支持模糊匹配）对应到平台"其他管理 → 错误模式"页面，二者命名一致，可直接对齐。
