DataMeta管理智能体技术文档.md 34 KB

DataMeta 管理智能体技术文档

1. 概述

DataMeta 管理智能体是一个基于 n8n 构建的智能对话系统,用于管理元数据(DataMeta)和数据标签(DataLabel)的增删改查操作。该智能体采用主 Agent + 子 Agent的架构设计,通过自然语言交互实现元数据的全生命周期管理。

1.1 基本信息

属性
主工作流名称 DataMeta管理智能体
主工作流 ID 74AYpVBKwYt8fhjx7rMzc
子工作流名称 新增元数据子Agent
子工作流 ID Uv2FXcr80GtxBGxv
AI 模型 DeepSeek
API 基础地址 https://company.citupro.com:18183
访问地址 https://n8n.citupro.com/webhook/datameta-agent/chat

1.2 功能清单

功能 描述 处理节点
新增元数据 多轮对话引导收集信息并创建 子工作流 Add Metadata Agent
查询元数据列表 分页查询,支持筛选 CRUD Agent → list_datameta
获取元数据详情 按 ID 查询详细信息 CRUD Agent → get_datameta
更新元数据 修改现有元数据字段 CRUD Agent → update_datameta
删除元数据 按 ID 删除(需确认) CRUD Agent → delete_datameta
查看标签列表 获取可用标签 CRUD Agent → list_labels

2. 系统架构

2.1 整体架构图

221782da-259e-444c-a9fc-6815bf7ee507

2.2 意图分类与路由流程

flowchart LR
    subgraph Input
        direction LR
        UI["💬 用户消息"]
    end

    subgraph Classification
        direction LR
        IC["🧠 Intent Classifier"]
        MEM["📝 历史对话记忆"]
    end

    subgraph Routing
        direction LR
        SW{"🔀 Switch"}
    end

    subgraph Outputs
        direction LR
        O1["📤 新增元数据子流程"]
        O2["🤖 CRUD Agent"]
        O3["🤖 默认CRUD Agent"]
    end

    UI --> IC
    MEM --> IC
    IC -->|意图标签| SW
    SW -->|包含 add_metadata| O1
    SW -->|包含 other_operations| O2
    SW -->|其他/默认| O3

    style Input fill:#e3f2fd
    style Classification fill:#f3e5f5
    style Routing fill:#fff8e1
    style Outputs fill:#e8f5e9

2.3 新增元数据多轮对话流程

sequenceDiagram
    participant U as 👤 用户
    participant M as 🧠 主Agent
    participant S as 🤖 子Agent
    participant API as 🌐 后端API

    U->>M: "我想新增一个元数据"
    M->>M: Intent Classifier 识别为 add_metadata
    M->>S: 调用子工作流 (user_message, session_id)

    S->>U: "请输入元数据的中文名称"
    U->>M: "订单状态"
    M->>S: 继续对话流程

    S->>API: translate_name(node_name: "订单状态")
    API-->>S: "order_status"
    S->>U: "英文名称已翻译为: order_status,请选择数据类型"

    U->>M: "varchar"
    M->>S: 继续对话流程
    S->>U: "是否启用该元数据?"

    U->>M: "启用"
    M->>S: 继续对话流程
    S->>U: "请选择分类: 系统类/应用类/DataOps"

    U->>M: "应用类"
    M->>S: 继续对话流程

    Note over S: 继续收集: 归属、描述、标签...

    S->>U: "请确认以上信息"
    U->>M: "确认"
    M->>S: 提交创建

    S->>API: add_datameta(name_zh, name_en, data_type, ...)
    API-->>S: 创建成功,ID: 2325
    S->>U: "✅ 元数据创建成功!ID: 2325"

3. 节点配置详解

3.1 主工作流节点

3.1.1 Chat Trigger

配置项
节点类型 @n8n/n8n-nodes-langchain.chatTrigger
版本 1.1
Webhook ID datameta-agent
公开访问 true

UI 配置:

{
  "title": "DataMeta管理助手",
  "subtitle": "我可以帮您管理元数据,支持查询、新增、更新、删除和标签管理",
  "inputPlaceholder": "请输入您的需求,例如:查看所有元数据"
}

输出数据结构:

{
  "chatInput": "用户输入的消息",
  "sessionId": "会话唯一标识"
}

3.1.2 Intent Classifier (意图分类器)

配置项
节点类型 @n8n/n8n-nodes-langchain.agent
版本 1.7
最大迭代次数 3

输入配置:

promptType: define
text: ={{ $json.chatInput }}

系统提示语 (System Message):

你是一个意图分类器。分析用户的输入,判断用户的意图类型。

## 重要:多轮对话上下文

你有记忆功能,可以看到之前的对话历史。如果用户之前表达了新增元数据的意图,并且当前正在进行新增元数据的多轮对话流程中(例如:用户正在回答中文名、英文名、数据类型、状态、分类等问题),那么当前输入应该继续被分类为 add_metadata。

**判断是否在新增元数据流程中的依据:**
- 之前的对话中用户说过"新增"、"添加"、"创建"元数据
- 系统正在询问元数据的各个字段(中文名、英文名、数据类型、状态、分类、归属、描述、标签)
- 用户的当前输入是在回答这些字段的值
- **系统展示了元数据信息汇总并询问确认**
- **用户正在回应确认请求(无论是确认、否认还是修改)**

**特别注意:确认阶段的用户回复**
如果对话历史中系统最近展示了"元数据信息汇总"并询问"请确认以上信息是否正确",那么用户的任何回复都应该分类为 add_metadata,包括:
- 确认类:"确认"、"正确"、"没问题"、"可以"
- 否认类:"不正确"、"有问题"、"不对"、"错了"
- 修改类:"修改xxx"、"把xxx改成xxx"、"xxx不对"

## 意图分类

请将用户意图分类为以下类型之一:

1. **add_metadata** - 用户想要新增、添加、创建元数据,或者正在新增元数据的多轮对话流程中
   - 关键词:新增、添加、创建、新建、录入
   - 或者:用户正在回答新增元数据流程中的问题
   - 或者:用户正在确认/修改元数据信息汇总

2. **other_operations** - 其他所有操作
   - 查询、列出、搜索元数据
   - 查看元数据详情
   - 更新、修改已存在的元数据(不是新增流程中的修改)
   - 删除元数据
   - 查看标签
   - 其他任何操作

## 输出格式

你必须严格按照以下JSON格式输出,不要输出任何其他内容:

{"intent": "add_metadata"}

或

{"intent": "other_operations"}

只输出JSON,不要有任何解释或其他文字。

3.1.3 Intent Switch (意图路由)

配置项
节点类型 n8n-nodes-base.switch
版本 3.4
模式 rules

路由规则:

输出端口 名称 条件 目标节点
0 新增元数据 $json.output contains "add_metadata" Execute Add Metadata Workflow
1 其他操作 $json.output contains "other_operations" CRUD Agent
2 默认 fallback CRUD Agent

完整配置:

{
  "mode": "rules",
  "rules": {
    "values": [
      {
        "conditions": {
          "conditions": [
            {
              "leftValue": "={{ $json.output }}",
              "rightValue": "add_metadata",
              "operator": { "type": "string", "operation": "contains" }
            }
          ],
          "combinator": "and"
        },
        "renameOutput": true,
        "outputKey": "新增元数据"
      },
      {
        "conditions": {
          "conditions": [
            {
              "leftValue": "={{ $json.output }}",
              "rightValue": "other_operations",
              "operator": { "type": "string", "operation": "contains" }
            }
          ],
          "combinator": "and"
        },
        "renameOutput": true,
        "outputKey": "其他操作"
      }
    ]
  },
  "options": {
    "fallbackOutput": "extra",
    "renameFallbackOutput": "默认"
  }
}

3.1.4 Execute Add Metadata Workflow (执行子工作流)

配置项
节点类型 n8n-nodes-base.executeWorkflow
版本 1.3
子工作流 ID Uv2FXcr80GtxBGxv
等待完成 true

参数传递配置:

{
  "workflowInputs": {
    "mappingMode": "defineBelow",
    "value": {
      "user_message": "={{ $('Chat Trigger').item.json.chatInput }}",
      "session_id": "={{ $('Chat Trigger').item.json.sessionId }}"
    }
  }
}

3.1.5 Prepare CRUD Input (准备 CRUD 输入)

配置项
节点类型 n8n-nodes-base.set
版本 3.4
节点 ID prepare-crud-input

用途: 在 Intent Switch 路由到 CRUD Agent 之前,从 Chat Trigger 提取原始用户输入和会话 ID,确保 CRUD Agent 收到的是用户的实际请求,而不是 Intent Classifier 的输出。

配置:

{
  "mode": "manual",
  "duplicateItem": false,
  "assignments": {
    "assignments": [
      {
        "id": "chatInput",
        "name": "chatInput",
        "value": "={{ $('Chat Trigger').item.json.chatInput }}",
        "type": "string"
      },
      {
        "id": "sessionId",
        "name": "sessionId",
        "value": "={{ $('Chat Trigger').item.json.sessionId }}",
        "type": "string"
      }
    ]
  },
  "options": {}
}

为什么需要这个节点?

Intent Switch 接收的输入是 Intent Classifier 的输出(如 {"intent": "other_operations"})。如果直接将这个输出传递给 CRUD Agent,CRUD Agent 会收到意图分类结果而不是用户的实际请求,导致无法正确执行查询、更新等操作。

通过 Prepare CRUD Input 节点,我们显式地从 Chat Trigger 获取原始的 chatInputsessionId,确保 CRUD Agent 总是收到正确的用户消息。

3.1.6 CRUD Agent

配置项
节点类型 @n8n/n8n-nodes-langchain.agent
版本 1.7
最大迭代次数 25

输入配置:

promptType: define
text: ={{ $json.chatInput }}

注意: CRUD Agent 的 text 参数从 Prepare CRUD Input 节点获取 $json.chatInput,而不是直接从 Chat Trigger 获取。这是因为 CRUD Agent 的上游节点是 Prepare CRUD Input

系统提示语 (System Message):

你是一个元数据管理智能体,负责帮助用户管理DataMeta(元数据)和DataLabel(数据标签)。

## 你的职责

根据用户的意图,选择合适的工具来完成任务:

### 1. 查询元数据列表
- 当用户想要**查看、列出、搜索**元数据时
- 使用 `list_datameta` 工具
- 可以按关键词、分类等条件筛选

### 2. 获取元数据详情
- 当用户想要**查看某个具体元数据的详细信息**时
- 使用 `get_datameta` 工具
- 需要提供元数据ID

### 3. 更新元数据
- 当用户想要**修改、更新**现有元数据时
- 使用 `update_datameta` 工具
- 需要提供元数据ID和要修改的字段

### 4. 删除元数据
- 当用户想要**删除**元数据时
- 使用 `delete_datameta` 工具
- 需要提供元数据ID
- 删除前请确认用户意图

### 5. 查看标签列表
- 当用户想要**查看可用的标签**时
- 使用 `list_labels` 工具

## 回复要求

- 请用中文回复用户
- 清晰地展示操作结果
- 如果操作失败,解释原因并提供建议

3.2 子工作流节点

3.2.1 Execute Workflow Trigger

配置项
节点类型 n8n-nodes-base.executeWorkflowTrigger
版本 1.1

输入参数定义:

{
  "inputSource": "workflowInputs",
  "workflowInputs": {
    "values": [
      { "name": "user_message", "type": "string" },
      { "name": "session_id", "type": "string" }
    ]
  }
}

3.2.2 Add Metadata Agent

配置项
节点类型 @n8n/n8n-nodes-langchain.agent
版本 1.7
最大迭代次数 25

输入配置:

promptType: define
text: ={{ $json.user_message }}

系统提示语 (System Message):

你是一个专门负责新增元数据的助手。你的任务是通过多轮对话收集用户输入的元数据信息,然后创建新的元数据。

## 信息收集流程

按以下顺序依次收集信息:

### 步骤1:收集中文名称(必填)
- 询问用户:"请输入元数据的中文名称"
- 记录 name_zh

### 步骤2:自动翻译英文名称并等待确认
- 获取中文名称后,立即调用 translate_name 工具进行翻译
- 展示翻译结果给用户:"英文名称已自动翻译为: xxx"
- **重要:必须等待用户确认或提供修改后的英文名**
- 询问用户:"请确认英文名称是否正确,或输入您希望使用的英文名称"
- 用户可能的回复:
  - "确认"、"好的"、"可以"、"没问题" → 使用翻译结果
  - 提供新的英文名称 → 使用用户提供的名称
- 确认后记录 name_en,然后才进入步骤3

### 步骤3:收集数据类型(必填)
- 询问用户:"请选择数据类型,常见类型有: varchar, integer, string, number, boolean, date"
- **等待用户输入**
- 记录 data_type

### 步骤4:收集使用状态(可选)
- 询问用户:"是否启用该元数据?请回复"启用"或"禁用"(默认启用)"
- **等待用户回复**
- 用户可能的回复:
  - "启用"、"是"、"默认"、"确认" → status = true
  - "禁用"、"否" → status = false
- 确认后记录 status

### 步骤5:选择分类(可选)
- 询问用户:"请选择元数据分类:系统类 / 应用类 / DataOps,或输入"跳过""
- **等待用户回复**
- 用户可能的回复:
  - "系统类"、"应用类"、"DataOps" → 记录对应分类
  - "跳过"、"无"、"不选" → 留空
- 确认后记录 category

### 步骤6:输入制作单位/归属部门(可选)
- 询问用户:"请输入制作单位/归属部门,或输入"跳过""
- **等待用户回复**
- 用户可能的回复:
  - 具体部门名称 → 记录部门名称
  - "跳过"、"无"、"不填" → 留空
- 确认后记录 affiliation

### 步骤7:输入描述(可选)
- 询问用户:"请输入元数据描述,或输入"跳过""
- **等待用户回复**
- 用户可能的回复:
  - 具体描述内容 → 记录描述
  - "跳过"、"无"、"不填" → 留空
- 确认后记录 describe

### 步骤8:选择标签(可选)
- 先调用 list_labels 获取可用标签列表
- 展示标签选项给用户(显示ID和名称)
- 询问用户:"请选择要添加的标签(输入标签ID,多个用逗号分隔),或输入"跳过""
- **等待用户回复**
- 用户可能的回复:
  - 标签ID(如 "51" 或 "51,59,82") → 记录标签ID数组
  - "跳过"、"无"、"不选" → 留空
- 确认后记录 tag

### 步骤9:确认并提交
- 展示所有收集到的信息汇总给用户确认
- **等待用户确认**
- **用户回复处理:**
  - 如果用户回复"确认"、"正确"、"没问题"、"可以"、"提交" → 调用 add_datameta 工具提交
  - 如果用户回复"不正确"、"有问题"、"不对"、"需要修改" → 询问用户"请告诉我您要修改哪个字段?"
  - 如果用户指定了要修改的字段(如"修改中文名"、"把数据类型改成integer") → 直接询问该字段的新值
  - 修改完成后,重新展示更新后的信息汇总,再次询问确认

### 步骤10:处理返回结果

**情况1:完全匹配(已存在)**
- 如果返回信息包含"已存在"或"完全匹配"
- 从返回信息中提取已存在的元数据ID
- 调用 get_datameta 获取详情并展示给用户
- 告知用户:"该元数据已存在,无需重复创建"

**情况2:疑似重复**
- 如果返回信息包含"疑似重复"
- 展示新创建的元数据信息
- 提示用户:"元数据已创建成功,但发现疑似重复的元数据,已创建审核记录。"
- 询问用户:"是否需要前往审核页面处理?"
- 如果用户需要审核,提供链接:https://company.citupro.com:18183/dataReview

**情况3:成功创建**
- 展示新创建的元数据完整信息
- 告知用户创建成功

## 回复要求
- 请用中文回复用户
- 在多轮对话中记住用户已提供的所有字段,不要重复询问
- 如果用户一次性提供了多个字段,直接记录并继续下一步

4. Simple Memory 配置

4.1 主工作流 Memory

Simple Memory Intent (意图分类器记忆)

配置项
节点类型 @n8n/n8n-nodes-langchain.memoryBufferWindow
版本 1.3
上下文窗口长度 20
Session ID 类型 customKey
Session Key =intent-{{ $json.sessionId }}

用途: 记住用户的对话历史,以便 Intent Classifier 能够识别用户是否正在进行新增元数据的多轮对话流程。

关键配置:

{
  "contextWindowLength": 20,
  "sessionIdType": "customKey",
  "sessionKey": "=intent-{{ $json.sessionId }}"
}

重要:Session Key 使用 intent- 前缀以区分不同 Agent 的记忆空间。

Simple Memory CRUD (CRUD Agent 记忆)

配置项
节点类型 @n8n/n8n-nodes-langchain.memoryBufferWindow
版本 1.3
上下文窗口长度 20
Session ID 类型 customKey
Session Key =crud-{{ $json.sessionId }}

用途: 记住用户在执行查询、更新、删除等操作时的上下文。

关键配置:

{
  "contextWindowLength": 20,
  "sessionIdType": "customKey",
  "sessionKey": "=crud-{{ $json.sessionId }}"
}

重要:Memory 隔离机制

Simple Memory IntentSimple Memory CRUD 必须使用不同的 sessionKey 前缀(intent-crud-),以确保两个 Agent 的对话记忆完全隔离。

问题背景: 如果两个 Memory 使用相同的 sessionKey,Intent Classifier 输出的意图分类结果(如 {"intent": "other_operations"})会被存入记忆。当 CRUD Agent 读取记忆时,会读到这个不相关的意图分类结果,导致 CRUD Agent 无法正确理解用户的实际请求。

解决方案: 通过添加前缀(intent-crud-),使得即使在同一个 session 中,两个 Agent 的记忆也完全独立,互不干扰。

4.2 子工作流 Memory

Simple Memory Sub (子 Agent 记忆)

配置项
节点类型 @n8n/n8n-nodes-langchain.memoryBufferWindow
版本 1.3
上下文窗口长度 20
Session ID 类型 customKey
Session Key ={{ $json.session_id }}

用途: 使用从主工作流传递的 session_id 作为会话标识,保持多轮对话的上下文连续性。

关键配置:

{
  "contextWindowLength": 20,
  "sessionIdType": "customKey",
  "sessionKey": "={{ $json.session_id }}"
}

5. HTTP 工具配置

5.1 主工作流工具

list_datameta (查询元数据列表)

配置项
方法 POST
URL https://company.citupro.com:18183/api/meta/node/list
Content-Type application/json

工具描述:

查询元数据列表。可选参数:current(页码,默认1), size(每页数量,默认10), name_zh(中文名筛选), name_en(英文名筛选), category(分类筛选)

请求体配置 (JSON 表达式):

={{ JSON.stringify({ 
  current: $fromAI('current', '页码', 'number') || 1, 
  size: $fromAI('size', '每页数量', 'number') || 10, 
  name_zh: $fromAI('name_zh', '中文名筛选', 'string') || '', 
  name_en: $fromAI('name_en', '英文名筛选', 'string') || '', 
  category: $fromAI('category', '分类筛选', 'string') || '' 
}) }}

get_datameta (获取元数据详情)

配置项
方法 POST
URL https://company.citupro.com:18183/api/meta/node/edit
Content-Type application/json

工具描述:

Get metadata details by ID. Required: id (metadata ID as number).

请求体参数: | 参数名 | 说明 | |--------|------| | id | 元数据 ID |

update_datameta (更新元数据)

配置项
方法 POST
URL https://company.citupro.com:18183/api/meta/node/update
Content-Type application/json

工具描述:

Update existing metadata. Required: id (metadata ID as number). Optional: data_type (new data type like varchar, string, integer).

请求体参数: | 参数名 | 说明 | |--------|------| | id | 元数据 ID (必填) | | data_type | 新的数据类型 (可选) |

delete_datameta (删除元数据)

配置项
方法 POST
URL https://company.citupro.com:18183/api/meta/node/delete
Content-Type application/json

工具描述:

Delete metadata by ID. Required: id (metadata ID as number to delete).

请求体参数: | 参数名 | 说明 | |--------|------| | id | 要删除的元数据 ID |

list_labels (查询标签列表)

配置项
方法 POST
URL https://company.citupro.com:18183/api/interface/labellist
Content-Type application/json

工具描述:

Query available data labels list. Returns label ID, Chinese name, English name.

请求体参数 (固定值): | 参数名 | 值 | |--------|-----| | current | 1 | | size | 10 |

5.2 子工作流工具

translate_name (翻译名称)

配置项
方法 POST
URL https://company.citupro.com:18183/api/system/translate
Content-Type application/json

工具描述:

Translate Chinese name to English name. Required: node_name (Chinese name to translate). Returns translated English name.

请求体参数: | 参数名 | 说明 | |--------|------| | node_name | 要翻译的中文名称 |

add_datameta (新增元数据)

配置项
方法 POST
URL https://company.citupro.com:18183/api/meta/node/add
Content-Type application/json

工具描述:

Add new metadata. Required: name_zh (Chinese name), data_type. Optional: name_en, status (default true), category (one of: 系统类, 应用类, DataOps), affiliation, describe, tag (array of tag IDs).

请求体参数: | 参数名 | 必填 | 说明 | |--------|------|------| | name_zh | ✅ | 中文名称 | | data_type | ✅ | 数据类型 | | name_en | ❌ | 英文名称 | | status | ❌ | 启用状态 (默认 true) | | category | ❌ | 分类 (系统类/应用类/DataOps) | | affiliation | ❌ | 归属部门 | | describe | ❌ | 描述 | | tag | ❌ | 标签 ID 数组 |

list_labels (查询标签列表 - 子工作流)

配置项
方法 POST
URL https://company.citupro.com:18183/api/interface/labellist
Content-Type application/json

工具描述:

Query available labels list filtered by DataOps category. Returns label ID, Chinese name, English name.

请求体参数 (固定值): | 参数名 | 值 | 说明 | |--------|-----|------| | current | 1 | 页码 | | size | 50 | 每页数量 | | category_filter | DataOps | 分类过滤,只返回 DataOps 类别的标签 |

说明:子工作流中的 list_labels 工具添加了 category_filter 参数,只返回 DataOps 分类下的标签,便于用户在新增元数据时选择相关标签。


6. DeepSeek 模型配置

6.1 模型实例

实例名称 用途 Temperature
DeepSeek Chat Model Intent Classifier 意图分类 0.3
DeepSeek Chat Model CRUD CRUD Agent 操作执行 0.7
DeepSeek Chat Model (子工作流) Add Metadata Agent 新增流程 0.7

6.2 凭证配置

{
  "credentials": {
    "deepSeekApi": {
      "id": "N8PgEL20Nk88KXMp",
      "name": "DeepSeek account"
    }
  }
}

7. 工作流设置

7.1 主工作流设置

{
  "executionOrder": "v1",
  "binaryMode": "separate",
  "availableInMCP": false,
  "callerPolicy": "workflowsFromSameOwner"
}

7.2 子工作流设置

{
  "executionOrder": "v1",
  "saveDataErrorExecution": "all",
  "saveDataSuccessExecution": "all",
  "saveManualExecutions": true,
  "saveExecutionProgress": true,
  "callerPolicy": "any",
  "availableInMCP": false
}

关键配置说明:

  • callerPolicy: "any" - 允许任何工作流调用此子工作流

8. 连接关系图

8.1 主工作流连接

graph LR
    subgraph Trigger["触发层"]
        CT["Chat Trigger"]
    end

    subgraph Intent["意图识别层"]
        IC["Intent Classifier"]
        DSM1["DeepSeek Model"]
        SMI["Simple Memory Intent"]
    end

    subgraph Routing["路由层"]
        SW["Intent Switch"]
    end

    subgraph DataPrep["数据准备层"]
        PCI["Prepare CRUD Input"]
    end

    subgraph Execution["执行层"]
        EW["Execute Add Metadata Workflow"]
        CA["CRUD Agent"]
        DSM2["DeepSeek Model CRUD"]
        SMC["Simple Memory CRUD"]
    end

    subgraph Tools["工具层"]
        T1["list_datameta"]
        T2["get_datameta"]
        T3["update_datameta"]
        T4["delete_datameta"]
        T5["list_labels"]
    end

    CT -->|main| IC
    DSM1 -->|ai_languageModel| IC
    SMI -->|ai_memory| IC
    IC -->|main| SW
    SW -->|"output[0]"| EW
    SW -->|"output[1]"| PCI
    SW -->|"output[2]"| PCI
    PCI -->|main| CA
    DSM2 -->|ai_languageModel| CA
    SMC -->|ai_memory| CA
    T1 -->|ai_tool| CA
    T2 -->|ai_tool| CA
    T3 -->|ai_tool| CA
    T4 -->|ai_tool| CA
    T5 -->|ai_tool| CA

8.2 子工作流连接

graph LR
    subgraph Trigger["触发层"]
        EWT["Execute Workflow Trigger"]
    end

    subgraph Agent["Agent 层"]
        AMA["Add Metadata Agent"]
        DSM["DeepSeek Model"]
        SMS["Simple Memory Sub"]
    end

    subgraph Tools["工具层"]
        ST1["translate_name"]
        ST2["add_datameta"]
        ST3["list_labels"]
        ST4["get_datameta"]
    end

    EWT -->|main| AMA
    DSM -->|ai_languageModel| AMA
    SMS -->|ai_memory| AMA
    ST1 -->|ai_tool| AMA
    ST2 -->|ai_tool| AMA
    ST3 -->|ai_tool| AMA
    ST4 -->|ai_tool| AMA

9. API 端点汇总

端点 方法 用途
/api/meta/node/list POST 查询元数据列表
/api/meta/node/edit POST 获取元数据详情
/api/meta/node/add POST 新增元数据
/api/meta/node/update POST 更新元数据
/api/meta/node/delete POST 删除元数据
/api/interface/labellist POST 获取标签列表
/api/system/translate POST 翻译中文名称

10. 测试验证

10.1 功能测试结果

测试场景 输入示例 期望路由 测试结果
新增元数据 "我想新增一个元数据" → 子工作流 ✅ 通过
查询列表 "查看所有元数据" → CRUD Agent ✅ 通过
查看详情 "查看ID为2158的元数据" → CRUD Agent ✅ 通过
更新元数据 "把ID为2158的数据类型改成bigint" → CRUD Agent ✅ 通过
删除元数据 "删除ID为2325的元数据" → CRUD Agent ✅ 通过
查看标签 "查看可用的标签列表" → CRUD Agent ✅ 通过

10.2 多轮对话测试

步骤 用户输入 系统响应 状态
1 "我想新增一个元数据,中文名叫订单状态" 自动翻译英文名,询问数据类型
2 "varchar" 记录,询问是否启用
3 "启用" 记录,询问分类
4 "应用类" 记录,询问归属
5 "跳过" 询问描述
6 "用于记录订单的当前状态" 展示标签列表,询问选择
7 "跳过" 展示信息汇总,请求确认
8 "确认,提交创建" 创建成功,返回 ID

11. 注意事项

11.1 架构设计要点

  1. 意图分类与路由分离:使用 Switch 节点进行明确的路由控制,而非依赖 AI Agent 自行选择工具
  2. 子工作流独立性:新增元数据流程封装在独立的子工作流中,便于维护和扩展
  3. 会话状态管理:通过 session_id 在主工作流和子工作流之间传递会话标识,保持多轮对话的连续性

11.2 配置注意事项

  1. 子工作流必须激活:被 Execute Workflow 调用的子工作流需要处于激活状态
  2. callerPolicy 设置:子工作流的 callerPolicy 需设置为 "any" 以允许外部调用
  3. Memory Session Key:子工作流的 Simple Memory 必须使用 customKey 类型,并绑定传入的 session_id

11.3 扩展建议

  1. 可以添加更多的意图分类类型,如"批量操作"、"数据导出"等
  2. 可以为其他复杂操作创建独立的子工作流
  3. 可以添加用户权限验证节点

12. 版本信息

项目 版本
文档版本 1.1
创建日期 2026-02-05
最后更新 2026-02-05
主工作流版本 159+
子工作流版本 18
n8n 节点版本 Agent 1.7, Switch 3.4, Memory 1.3, Set 3.4

12.1 更新日志

v1.1 (2026-02-05)

  • 新增 Prepare CRUD Input 节点,解决 CRUD Agent 接收到 Intent Classifier 输出而非用户原始输入的问题
  • 修改 Simple Memory 的 sessionKey 配置,添加 intent-crud- 前缀以隔离不同 Agent 的对话记忆
  • 更新架构图和连接图以反映新的节点结构

v1.0 (2026-02-05)

  • 初始版本发布