Skip to content

使用 GPT 进行 AI 编程#

自托管版本不可用。
不支持 Python。 ///

在 Code 节点中使用 AI#

功能可用性

Code 节点中的 AI 辅助功能仅对 Cloud 用户开放,自托管的 n8n 不支持此功能。

AI 生成的代码会覆盖原有代码

如果您已经在 Code 选项卡中编写了部分代码,AI 生成的代码将会替换它。n8n 建议将 AI 作为创建初始代码的起点,然后根据需要再进行编辑。

使用 ChatGPT 在 Code 节点中生成代码的步骤:

  1. 在 Code 节点中,将 Language 设置为 JavaScript
  2. 选择 Ask AI 选项卡。
  3. 输入您的查询内容。
  4. 点击 Generate Code。n8n 会将您的查询发送给 ChatGPT,然后在 Code 选项卡中显示结果。

使用限制#

在试用阶段没有使用限制。如果 n8n 将该功能永久保留,可能会根据您的定价层级设置使用限制。

功能限制#

n8n 中的 ChatGPT 实现有以下限制:

  • AI 编写的代码只能操作来自 n8n 工作流的数据,不能要求它从其他来源获取数据。
  • AI 不了解您的实际数据,只了解数据结构,因此您需要告诉它如何查找要提取的数据或如何检查空值。
  • Code 节点之前的节点必须先执行并将数据传递给 Code 节点,然后才能运行 AI 查询。
  • 不适用于传入的大型数据结构。
  • 如果 Code 节点之前有大量节点,可能会出现问题。

编写优质提示词#

编写优质的提示词能提高获取有用代码的概率。

以下是一些通用建议:

  • 提供示例:如有可能,给出期望输出的样例。这有助于AI更好地理解你期望的转换逻辑或处理方式。
  • 描述处理步骤:如果数据需要经过特定处理步骤或逻辑,请按顺序列出。例如:"首先过滤掉所有18岁以下的用户,然后按姓氏对剩余用户进行排序。"
  • 避免歧义:虽然AI能理解各种指令,但清晰直接的表达能确保获得最准确的代码。与其说"获取年长用户",不如明确说明"筛选60岁及以上的用户"。
  • 明确输出预期:你希望数据被转换、过滤、聚合还是排序?尽可能提供详细说明。

以下是与n8n相关的具体建议:

  • 考虑输入数据:确保ChatGPT知道你需要访问哪些数据字段,以及输入数据的含义。可能需要告知ChatGPT关于n8n内置方法和变量的可用性。
  • 声明节点间交互:如果你的逻辑涉及多个节点的数据,需明确它们如何交互。"基于'userID'属性将'节点A'的输出与'节点B'合并"。如果希望只使用特定节点的数据,需明确说明:"仅考虑'Purchases'节点的数据,忽略'Refunds'节点。"
  • 确保输出与n8n兼容。更多关于n8n所需数据结构的信息,请参考数据结构

提示词示例#

以下示例展示了各种可能的提示词和任务类型。

示例1:在第二个数据集中查找特定数据#

要亲自尝试此示例,请下载示例工作流并导入到n8n中。

在第三个代码节点中输入以下提示:

Slack数据仅包含一项。输入数据代表所有Notion用户。有时包含邮箱的person属性可能为空。我想找到Slack用户对应的notionId并返回。

查看AI生成的代码。

这是您需要的JavaScript代码:

1
2
3
4
5
6
7
8
9
const slackUser = $("Mock Slack").all()[0];
const notionUsers = $input.all();
const slackUserEmail = slackUser.json.email;

const notionUser = notionUsers.find(
  (user) => user.json.person && user.json.person.email === slackUserEmail
);

return notionUser ? [{ json: { notionId: notionUser.json.id } }] : [];

示例2:数据转换#

要亲自尝试此示例,请下载示例工作流并导入到n8n中。

合并项代码节点中输入以下提示:

返回一行文本,其中包含所有用逗号分隔的用户名。每个用户名应该用双引号括起来。

查看AI生成的代码。

这是您需要的JavaScript代码:

1
2
3
4
const items = $input.all();
const usernames = items.map((item) => `"${item.json.username}"`);
const result = usernames.join(", ");
return [{ json: { usernames: result } }];

示例3:汇总数据并创建Slack消息#

要亲自尝试此示例,请下载示例工作流并导入到n8n中。

Summarize代码节点中,输入以下提示:

为Slack创建一个markdown文本,统计已提交的想法、功能和错误的数量。提交类型保存在property_type字段中。功能标记为"Feature",错误标记为"Bug",想法标记为"Bug"。同时在该消息中列出按投票数排名前五的提交。使用""作为链接的markdown格式。

查看AI生成的代码。

这是您需要的JavaScript代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const submissions = $input.all();

// 统计想法、功能和错误的数量
let ideaCount = 0;
let featureCount = 0;
let bugCount = 0;

submissions.forEach((submission) => {
  switch (submission.json.property_type[0]) {
    case "Idea":
      ideaCount++;
      break;
    case "Feature":
      featureCount++;
      break;
    case "Bug":
      bugCount++;
      break;
  }
});

// 按投票数排序并取前5名
const topSubmissions = submissions
  .sort((a, b) => b.json.property_votes - a.json.property_votes)
  .slice(0, 5);

let topSubmissionText = "";
topSubmissions.forEach((submission) => {
  topSubmissionText += `<${submission.json.url}|${submission.json.name}> with ${submission.json.property_votes} votes\n`;
});

// 构建Slack消息
const slackMessage = `*Summary of Submissions*\n
Ideas: ${ideaCount}\n
Features: ${featureCount}\n
Bugs: ${bugCount}\n
Top 5 Submissions:\n
${topSubmissionText}`;

return [{ json: { slackMessage } }];

显式引用输入节点数据#

如果您的输入数据包含嵌套字段,使用点表示法引用它们可以帮助 AI 理解您需要的数据。

"n8n 代码节点截图,展示如何在 AI 查询中使用点表示法引用数据"

要亲自尝试此示例,请下载示例工作流并导入到 n8n 中。

在第二个代码节点中输入以下提示:

"Mock data"中的数据代表人员列表。为每个人返回一个新项,包含 personal_info.first_name 和 work_info.job_title。

这是您需要的 JavaScript 代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const items = $input.all();
const newItems = items.map((item) => {
  const firstName = item.json.personal_info.first_name;
  const jobTitle = item.json.work_info.job_title;
  return {
    json: {
      firstName,
      jobTitle,
    },
  };
});
return newItems;

相关资源#

Pluralsight 提供了一份简短指南:如何使用 ChatGPT 编写代码,其中包含示例提示。

修复代码#

AI 生成的代码可能无需修改即可工作,但您可能需要对其进行编辑。您需要了解 n8n 的数据结构。您可能还会发现 n8n 的内置方法和变量很有用。