DataMeta 管理智能体是一个基于 n8n 构建的智能对话系统,用于管理元数据(DataMeta)和数据标签(DataLabel)的增删改查操作。该智能体采用主 Agent + 子 Agent的架构设计,通过自然语言交互实现元数据的全生命周期管理。
| 属性 | 值 |
|---|---|
| 主工作流名称 | DataMeta管理智能体 |
| 主工作流 ID | 74AYpVBKwYt8fhjx7rMzc |
| 子工作流名称 | 新增元数据子Agent |
| 子工作流 ID | Uv2FXcr80GtxBGxv |
| AI 模型 | DeepSeek |
| API 基础地址 | https://company.citupro.com:18183 |
| 访问地址 | https://n8n.citupro.com/webhook/datameta-agent/chat |
| 功能 | 描述 | 处理节点 |
|---|---|---|
| 新增元数据 | 多轮对话引导收集信息并创建 | 子工作流 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 |
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
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"
| 配置项 | 值 |
|---|---|
| 节点类型 | @n8n/n8n-nodes-langchain.chatTrigger |
| 版本 | 1.1 |
| Webhook ID | datameta-agent |
| 公开访问 | true |
UI 配置:
{
"title": "DataMeta管理助手",
"subtitle": "我可以帮您管理元数据,支持查询、新增、更新、删除和标签管理",
"inputPlaceholder": "请输入您的需求,例如:查看所有元数据"
}
输出数据结构:
{
"chatInput": "用户输入的消息",
"sessionId": "会话唯一标识"
}
| 配置项 | 值 |
|---|---|
| 节点类型 | @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,不要有任何解释或其他文字。
| 配置项 | 值 |
|---|---|
| 节点类型 | 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": "默认"
}
}
| 配置项 | 值 |
|---|---|
| 节点类型 | 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 }}"
}
}
}
| 配置项 | 值 |
|---|---|
| 节点类型 | 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 获取原始的chatInput和sessionId,确保 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` 工具
## 回复要求
- 请用中文回复用户
- 清晰地展示操作结果
- 如果操作失败,解释原因并提供建议
| 配置项 | 值 |
|---|---|
| 节点类型 | n8n-nodes-base.executeWorkflowTrigger |
| 版本 | 1.1 |
输入参数定义:
{
"inputSource": "workflowInputs",
"workflowInputs": {
"values": [
{ "name": "user_message", "type": "string" },
{ "name": "session_id", "type": "string" }
]
}
}
| 配置项 | 值 |
|---|---|
| 节点类型 | @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:成功创建**
- 展示新创建的元数据完整信息
- 告知用户创建成功
## 回复要求
- 请用中文回复用户
- 在多轮对话中记住用户已提供的所有字段,不要重复询问
- 如果用户一次性提供了多个字段,直接记录并继续下一步
| 配置项 | 值 |
|---|---|
| 节点类型 | @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 的记忆空间。
| 配置项 | 值 |
|---|---|
| 节点类型 | @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 Intent和Simple Memory CRUD必须使用不同的 sessionKey 前缀(intent-和crud-),以确保两个 Agent 的对话记忆完全隔离。问题背景: 如果两个 Memory 使用相同的 sessionKey,Intent Classifier 输出的意图分类结果(如
{"intent": "other_operations"})会被存入记忆。当 CRUD Agent 读取记忆时,会读到这个不相关的意图分类结果,导致 CRUD Agent 无法正确理解用户的实际请求。解决方案: 通过添加前缀(
intent-或crud-),使得即使在同一个 session 中,两个 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 }}"
}
| 配置项 | 值 |
|---|---|
| 方法 | 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') || ''
}) }}
| 配置项 | 值 |
|---|---|
| 方法 | 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 |
| 配置项 | 值 |
|---|---|
| 方法 | 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 | 新的数据类型 (可选) |
| 配置项 | 值 |
|---|---|
| 方法 | 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 |
| 配置项 | 值 |
|---|---|
| 方法 | 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 |
| 配置项 | 值 |
|---|---|
| 方法 | 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 | 要翻译的中文名称 |
| 配置项 | 值 |
|---|---|
| 方法 | 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 数组 |
| 配置项 | 值 |
|---|---|
| 方法 | 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 分类下的标签,便于用户在新增元数据时选择相关标签。
| 实例名称 | 用途 | Temperature |
|---|---|---|
| DeepSeek Chat Model | Intent Classifier 意图分类 | 0.3 |
| DeepSeek Chat Model CRUD | CRUD Agent 操作执行 | 0.7 |
| DeepSeek Chat Model (子工作流) | Add Metadata Agent 新增流程 | 0.7 |
{
"credentials": {
"deepSeekApi": {
"id": "N8PgEL20Nk88KXMp",
"name": "DeepSeek account"
}
}
}
{
"executionOrder": "v1",
"binaryMode": "separate",
"availableInMCP": false,
"callerPolicy": "workflowsFromSameOwner"
}
{
"executionOrder": "v1",
"saveDataErrorExecution": "all",
"saveDataSuccessExecution": "all",
"saveManualExecutions": true,
"saveExecutionProgress": true,
"callerPolicy": "any",
"availableInMCP": false
}
关键配置说明:
callerPolicy: "any" - 允许任何工作流调用此子工作流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
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
| 端点 | 方法 | 用途 |
|---|---|---|
/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 | 翻译中文名称 |
| 测试场景 | 输入示例 | 期望路由 | 测试结果 |
|---|---|---|---|
| 新增元数据 | "我想新增一个元数据" | → 子工作流 | ✅ 通过 |
| 查询列表 | "查看所有元数据" | → CRUD Agent | ✅ 通过 |
| 查看详情 | "查看ID为2158的元数据" | → CRUD Agent | ✅ 通过 |
| 更新元数据 | "把ID为2158的数据类型改成bigint" | → CRUD Agent | ✅ 通过 |
| 删除元数据 | "删除ID为2325的元数据" | → CRUD Agent | ✅ 通过 |
| 查看标签 | "查看可用的标签列表" | → CRUD Agent | ✅ 通过 |
| 步骤 | 用户输入 | 系统响应 | 状态 |
|---|---|---|---|
| 1 | "我想新增一个元数据,中文名叫订单状态" | 自动翻译英文名,询问数据类型 | ✅ |
| 2 | "varchar" | 记录,询问是否启用 | ✅ |
| 3 | "启用" | 记录,询问分类 | ✅ |
| 4 | "应用类" | 记录,询问归属 | ✅ |
| 5 | "跳过" | 询问描述 | ✅ |
| 6 | "用于记录订单的当前状态" | 展示标签列表,询问选择 | ✅ |
| 7 | "跳过" | 展示信息汇总,请求确认 | ✅ |
| 8 | "确认,提交创建" | 创建成功,返回 ID | ✅ |
session_id 在主工作流和子工作流之间传递会话标识,保持多轮对话的连续性callerPolicy 需设置为 "any" 以允许外部调用customKey 类型,并绑定传入的 session_id| 项目 | 版本 |
|---|---|
| 文档版本 | 1.1 |
| 创建日期 | 2026-02-05 |
| 最后更新 | 2026-02-05 |
| 主工作流版本 | 159+ |
| 子工作流版本 | 18 |
| n8n 节点版本 | Agent 1.7, Switch 3.4, Memory 1.3, Set 3.4 |
v1.1 (2026-02-05)
Prepare CRUD Input 节点,解决 CRUD Agent 接收到 Intent Classifier 输出而非用户原始输入的问题intent- 和 crud- 前缀以隔离不同 Agent 的对话记忆v1.0 (2026-02-05)