需求: 完善元数据管理流程
日期: 2025-11-04
用户确认后收集信息 ✅
检查元数据是否存在 ✅
http://192.168.3.143:5000/api/meta/check创建新元数据 ✅
http://192.168.3.143:5000/api/meta/add由于 Chat Trigger + AI Agent 的架构限制(AI Agent 必须是终点),最佳方案是:
让 AI Agent 使用 Tools(工具)来执行操作
Chat Trigger
↓
AI Agent (带多个工具)
├─ Tool 1: 收集元数据信息
├─ Tool 2: 检查元数据是否存在
└─ Tool 3: 创建元数据
↓
DeepSeek Chat Model (语言模型)
用户: "是,我需要创建元数据"
↓
AI: "好的!请提供以下元数据信息:
1. 元数据中文名(必填)
2. 数据类型(string/int/float等)
3. 描述信息"
↓
用户: "中文名:用户姓名,类型:string,描述:用户的真实姓名"
↓
AI 使用 Tool 1: 检查"用户姓名"是否存在
↓
如果不存在 → 使用 Tool 2: 创建元数据
↓
AI: "✅ 元数据创建成功!
- 中文名:用户姓名
- 类型:string
- 描述:用户的真实姓名"
{
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"parameters": {
"public": true,
"initialMessages": "您好!我是数据治理助手。\n\n我可以帮助您创建和管理元数据。\n\n请问您需要创建新的元数据吗?",
"options": {
"title": "数据治理助手 🤖",
"subtitle": "元数据管理专家"
}
}
}
{
"type": "@n8n/n8n-nodes-langchain.agent",
"parameters": {
"promptType": "auto",
"options": {
"systemMessage": `你是一个专业的数据治理助手,负责帮助用户创建元数据。
工作流程:
1. 当用户表示需要创建元数据时,询问用户提供以下信息:
- 元数据中文名(必填)
- 数据类型(string/int/float/date等,默认string)
- 描述信息(选填)
2. 收集完信息后:
- 使用 check_metadata 工具检查元数据是否已存在
- 如果不存在,使用 create_metadata 工具创建
3. 返回创建结果给用户
注意:
- 友好地引导用户提供信息
- 元数据中文名是必需的
- 如果元数据已存在,告诉用户并询问是否需要其他帮助`
}
}
}
{
"name": "check_metadata",
"type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
"parameters": {
"name": "check_metadata",
"description": "检查元数据中文名是否已经存在。输入:元数据中文名。返回:存在返回true,不存在返回false",
"method": "GET",
"url": "=http://192.168.3.143:5000/api/meta/check?name_zh={{$parameter.name_zh}}",
"authentication": "none"
}
}
{
"name": "create_metadata",
"type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
"parameters": {
"name": "create_metadata",
"description": "创建新的元数据。输入参数:name_zh(中文名), data_type(数据类型), description(描述)。返回创建结果",
"method": "POST",
"url": "http://192.168.3.143:5000/api/meta/add",
"authentication": "none",
"sendBody": true,
"specifyBody": "json",
"jsonBody": {
"name_zh": "={{$parameter.name_zh}}",
"data_type": "={{$parameter.data_type || 'string'}}",
"description": "={{$parameter.description || ''}}",
"source": "data-governance-workflow"
}
}
}
{
"type": "@n8n/n8n-nodes-langchain.lmChatDeepSeek",
"parameters": {
"model": "deepseek-chat",
"options": {
"temperature": 0.7,
"maxTokens": 1000
}
},
"credentials": {
"deepSeekApi": "LSdatLFCoTSCGXmn"
}
}
Chat Trigger → AI Agent (main)
DeepSeek → AI Agent (ai_languageModel)
check_metadata Tool → AI Agent (ai_tool)
create_metadata Tool → AI Agent (ai_tool)
如果 HTTP Request Tools 配置复杂,可以使用简化方案:
你是数据治理助手。
当用户表示需要创建元数据时,请按以下格式收集信息:
📝 请提供元数据信息:
1. 中文名称(必填)
2. 数据类型(string/int/float,默认string)
3. 描述信息(选填)
示例格式:
中文名:用户姓名
类型:string
描述:用户的真实姓名
收集完信息后,我会为您创建元数据。
注意:由于当前系统限制,请确保元数据名称不重复。
然后通过后端API的逻辑来处理检查和创建。
| 特性 | 方案A (Tools) | 方案B (简化) |
|---|---|---|
| 功能完整性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 实现复杂度 | 中等 | 简单 |
| 用户体验 | 很好 | 一般 |
| 可维护性 | 高 | 中 |
| 实时反馈 | ✅ | ❌ |
| 重复检查 | ✅ 自动 | ❌ 需后端处理 |
确保以下API在 192.168.3.143 上可用:
GET /api/meta/check?name_zh=元数据中文名
Response: {
"code": 200,
"data": {
"exists": true/false
}
}
POST /api/meta/add
Content-Type: application/json
{
"name_zh": "元数据中文名",
"data_type": "string",
"description": "描述信息",
"source": "data-governance-workflow"
}
Response: {
"code": 200,
"data": {...},
"msg": "success"
}
添加 HTTP Request Tool 节点 (检查)
- 节点类型:HTTP Request Tool
- Name: check_metadata
- Description: 检查元数据是否存在
- Method: GET
- URL: http://192.168.3.143:5000/api/meta/check
添加 HTTP Request Tool 节点 (创建)
- 节点类型: HTTP Request Tool
- Name: create_metadata
- Description: 创建新元数据
- Method: POST
- URL: http://192.168.3.143:5000/api/meta/add
连接 Tools 到 AI Agent
- check_metadata → AI Agent (ai_tool端口)
- create_metadata → AI Agent (ai_tool端口)
更新 AI Agent 系统消息
使用上面提供的系统消息内容
测试工作流
输入: "是,我要创建元数据"
AI应该: 询问元数据信息
输入: "中文名:测试字段,类型:string"
AI应该: 检查并创建
用户: "是,我需要创建元数据"
AI: "好的!请提供元数据信息..."
用户: "中文名:用户年龄,类型:int,描述:用户的年龄"
AI: [使用check_metadata检查]
AI: [不存在,使用create_metadata创建]
AI: "✅ 元数据创建成功!"
用户: "是,我需要创建元数据"
AI: "好的!请提供元数据信息..."
用户: "中文名:用户姓名,类型:string"
AI: [使用check_metadata检查]
AI: "❌ 元数据"用户姓名"已经存在,无需重复创建。需要其他帮助吗?"
用户: "是,我需要创建元数据"
AI: "好的!请提供元数据信息..."
用户: "类型是string"
AI: "还需要提供元数据的中文名称哦,这是必填项。"
@app.route('/api/meta/check', methods=['GET'])
def check_metadata():
name_zh = request.args.get('name_zh')
if not name_zh:
return jsonify({"code": 400, "message": "缺少name_zh参数"})
# 查询数据库
exists = check_metadata_exists(name_zh)
return jsonify({
"code": 200,
"data": {"exists": exists},
"msg": "success"
})
@app.route('/api/meta/add', methods=['POST'])
def add_metadata():
data = request.get_json()
name_zh = data.get('name_zh')
# 检查是否存在
if check_metadata_exists(name_zh):
return jsonify({
"code": 409,
"message": "元数据已存在"
})
# 创建元数据
result = create_metadata(data)
return jsonify({
"code": 200,
"data": result,
"msg": "success"
})
AI Agent 必须是终点节点
Tools 的参数传递
错误处理
检查接口应该轻量
创建接口应该原子性
统一错误格式
{
"code": 错误码,
"message": "错误描述",
"data": null
}
工作流完成后应满足:
推荐从方案 A 开始实施,因为它提供了最完整的功能和最好的用户体验! 🚀