# Data-governance 工作流添加 Tools 指南

**目标**: 为 Data-governance 工作流添加检查和创建元数据的工具  
**日期**: 2025-11-04

---

## ✅ 已完成的准备工作

### 1. 后端 API 接口已创建

#### 检查元数据接口
```http
GET http://192.168.3.143:5000/api/meta/check?name_zh=元数据中文名

Response:
{
  "code": 200,
  "data": {
    "exists": true/false,
    "name_zh": "元数据中文名"
  },
  "msg": "查询成功"
}
```

#### 创建元数据接口
```http
POST http://192.168.3.143:5000/api/meta/node/add
Content-Type: application/json

{
  "name_zh": "元数据中文名",
  "data_type": "string",
  "describe": "描述信息",
  "source": "data-governance-workflow",
  "status": true
}

Response:
{
  "code": 200,
  "data": { ... },
  "msg": "success"
}
```

### 2. AI Agent 系统消息已更新

AI Agent 现在已配置为：
- 引导用户提供元数据信息
- 使用 check_metadata 工具检查
- 使用 create_metadata 工具创建

---

## 🛠️ 在 n8n 界面中添加 Tools

### 步骤 1: 登录 n8n

```
访问: https://n8n.citupro.com
登录账号
```

### 步骤 2: 打开 Data-governance 工作流

```
1. 进入 Workflows 页面
2. 找到 "Data-governance" 工作流
3. 点击打开编辑器
```

### 步骤 3: 添加检查元数据工具

#### 3.1 添加节点

```
1. 点击 "+" 添加节点
2. 搜索 "HTTP Request Tool"
3. 选择 "HTTP Request Tool" (LangChain类别)
```

#### 3.2 配置节点参数

**基本配置**:
- **Name**: `check_metadata`
- **Description**: 
  ```
  检查元数据中文名是否已经存在。需要参数：name_zh（元数据中文名）。返回exists字段表示是否存在（true/false）
  ```

**HTTP Request 配置**:
- **Method**: `GET`
- **URL**: `http://192.168.3.143:5000/api/meta/check?name_zh={{ $parameter.name_zh }}`
- **Authentication**: `None`

**Placeholder Definitions** (参数定义):
点击 "Add Placeholder" 添加：
- **Name**: `name_zh`
- **Description**: `元数据中文名`

#### 3.3 连接到 AI Agent

```
1. 将 "HTTP Request Tool" 节点拖动到 AI Agent 旁边
2. 从 "HTTP Request Tool" 的输出点拖线到 "AI Agent"
3. 在弹出的连接类型选择中，选择 "ai_tool" 连接类型
```

### 步骤 4: 添加创建元数据工具

#### 4.1 添加节点

```
1. 再次点击 "+" 添加节点
2. 搜索 "HTTP Request Tool"
3. 选择 "HTTP Request Tool" (LangChain类别)
```

#### 4.2 配置节点参数

**基本配置**:
- **Name**: `create_metadata`
- **Description**:
  ```
  创建新的元数据。需要参数：name_zh（中文名，必填）, data_type（数据类型，默认string）, description（描述信息，选填）。返回创建结果
  ```

**HTTP Request 配置**:
- **Method**: `POST`
- **URL**: `http://192.168.3.143:5000/api/meta/node/add`
- **Authentication**: `None`
- **Send Body**: ✅ 启用
- **Body Content Type**: `JSON`
- **JSON Body**:
  ```json
  {
    "name_zh": "={{ $parameter.name_zh }}",
    "data_type": "={{ $parameter.data_type || 'string' }}",
    "describe": "={{ $parameter.description || '' }}",
    "source": "data-governance-workflow",
    "status": true
  }
  ```

**Placeholder Definitions** (参数定义):
点击 "Add Placeholder" 三次添加：
1. **Name**: `name_zh`, **Description**: `元数据中文名（必填）`
2. **Name**: `data_type`, **Description**: `数据类型（string/int/float等，默认string）`
3. **Name**: `description`, **Description**: `描述信息（选填）`

#### 4.3 连接到 AI Agent

```
1. 从 "HTTP Request Tool" 的输出点拖线到 "AI Agent"
2. 选择 "ai_tool" 连接类型
```

### 步骤 5: 清理旧节点（可选）

如果工作流中还有这些节点，可以删除它们（它们已经不需要了）：
- "判断用户意图" (IF节点)
- "调用元数据新增API" (HTTP Request节点)
- "设置确认消息" (Set节点)
- "设置拒绝消息" (Set节点)

**注意**: 只保留以下核心节点：
- Chat Trigger
- AI Agent
- DeepSeek Chat Model
- check_metadata (HTTP Request Tool)
- create_metadata (HTTP Request Tool)

### 步骤 6: 保存并激活

```
1. 点击右上角 "Save" 保存工作流
2. 如果工作流未激活，点击 "Active" 开关激活
```

---

## 🧪 测试工作流

### 测试场景 1: 完整流程

```
访问: https://n8n.citupro.com/chat/tWfjLZE1FmMfQAIn

用户: "是，我要创建元数据"
预期: AI 询问元数据信息

用户: "中文名：测试字段001，类型：string，描述：这是一个测试字段"
预期: 
1. AI 使用 check_metadata 检查是否存在
2. 如果不存在，使用 create_metadata 创建
3. 返回成功消息
```

### 测试场景 2: 元数据已存在

```
用户: "是，我要创建元数据"
AI: "好的！请提供元数据信息..."

用户: "中文名：测试字段001，类型：string"
预期: AI 提示该元数据已存在
```

### 测试场景 3: 信息不完整

```
用户: "是，我要创建元数据"
AI: "好的！请提供元数据信息..."

用户: "类型是string"
预期: AI 提示需要提供中文名
```

---

## 📊 工作流最终结构

```
┌────────────────┐
│  Chat Trigger  │
└───────┬────────┘
        │
        ↓
┌────────────────┐      ┌─────────────────────┐
│   AI Agent     │◄─────│ DeepSeek Chat Model │
└───────┬────────┘      └─────────────────────┘
        │
        │ (ai_tool连接)
        ├──────────────────────┐
        │                      │
        ↓                      ↓
┌────────────────┐    ┌─────────────────┐
│ check_metadata │    │ create_metadata │
│ (HTTP Tool)    │    │ (HTTP Tool)     │
└────────────────┘    └─────────────────┘
```

**关键连接**:
- `Chat Trigger` → `AI Agent` (main 连接)
- `DeepSeek Chat Model` → `AI Agent` (ai_languageModel 连接)
- `check_metadata` → `AI Agent` (ai_tool 连接)
- `create_metadata` → `AI Agent` (ai_tool 连接)

---

## ⚠️ 重要注意事项

### 1. 连接类型

**ai_tool 连接** 是特殊的连接类型：
- 不是普通的 main 连接
- 表示该节点是 AI Agent 可以使用的工具
- AI Agent 会根据用户输入自动决定何时调用哪个工具

### 2. Tool Description 很重要

Tool 的 Description 会告诉 AI：
- 这个工具的功能是什么
- 需要什么参数
- 返回什么结果

**AI 根据 Description 来决定是否调用该工具**。

### 3. 参数传递

Tool 的参数 (placeholders) 由 AI Agent 从对话中提取：
- 用户说："中文名是用户姓名"
- AI 提取: `name_zh = "用户姓名"`
- 调用: `check_metadata(name_zh="用户姓名")`

### 4. JSON Body 中的表达式

使用 n8n 表达式语法：
- `={{ $parameter.name_zh }}` - 获取参数值
- `={{ $parameter.data_type || 'string' }}` - 默认值
- 需要用双花括号 `={{ }}`

---

## 🔧 调试技巧

### 查看工具调用日志

```
1. 在 n8n 界面打开 "Executions"
2. 找到最近的执行记录
3. 展开查看每个节点的输入输出
4. 检查 Tool 是否被正确调用
```

### 测试单个工具

```
1. 在编辑器中点击 Tool 节点
2. 点击 "Test node"
3. 手动输入参数值
4. 查看返回结果
```

### 常见问题

| 问题 | 原因 | 解决 |
|------|------|------|
| AI 不调用工具 | Description 不清晰 | 优化 Description，明确说明功能和参数 |
| 工具调用失败 | API 不可达 | 检查 192.168.3.143 的网络连接 |
| 参数未传递 | Placeholder 未定义 | 检查 Placeholder Definitions |
| 返回格式错误 | API 返回不符合预期 | 检查后端 API 返回格式 |

---

## ✅ 完成验收

工作流配置完成后，应该满足：

- [ ] 两个 HTTP Request Tool 节点已添加
- [ ] 工具通过 ai_tool 连接到 AI Agent
- [ ] check_metadata 工具配置正确
- [ ] create_metadata 工具配置正确
- [ ] AI Agent 系统消息已更新
- [ ] 工作流已保存并激活
- [ ] 测试场景 1 通过
- [ ] 测试场景 2 通过
- [ ] 测试场景 3 通过

---

## 📚 相关资源

### n8n 官方文档
- [HTTP Request Tool](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolhttprequest/)
- [AI Agent](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/)
- [LangChain Tools](https://docs.n8n.io/integrations/langchain/tools/)

### 项目文档
- [工作流改进方案](./n8n_improved_workflow_design.md)
- [Chat Trigger 错误诊断](./n8n_chat_trigger_error_diagnosis.md)

---

## 🎯 下一步

1. **立即执行**: 按照本指南在 n8n 界面中添加 Tools
2. **测试验证**: 使用测试场景验证功能
3. **优化提示词**: 根据测试结果优化 AI 系统消息
4. **监控运行**: 观察工作流执行日志，持续优化

**预计配置时间**: 15-20 分钟  
**难度**: ⭐⭐⭐ (中等)

祝您配置顺利！🚀

