N8N中文教程
代码开发

使用 GPT 进行 AI 编程#

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

在代码节点中使用 AI#

功能可用性 代码节点中的 AI 辅助功能仅对 n8n Cloud 用户开放,自托管版 n8n 不提供此功能。 AI 生成的代码会覆盖现有代码 如果你已在 代码(Code) 选项卡中编写了部分代码,AI 生成的代码将替换原有内容。n8n 建议将 AI 作为创建初始代码的起点,之后根据需要进行修改。

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

  1. 在代码节点中,将 语言(Language) 设置为 JavaScript
  2. 切换到 询问 AI(Ask AI) 选项卡。
  3. 输入你的查询请求。
  4. 点击 生成代码(Generate Code)。n8n 会将你的请求发送给 ChatGPT,并将生成的结果显示在 代码(Code) 选项卡中。

使用限制#

在试用阶段暂无使用次数限制。如果 n8n 将该功能转为正式功能,可能会根据你的定价层级设置使用限制。

功能限制#

n8n 中集成的 ChatGPT 存在以下限制:

  • AI 仅能编写用于处理 n8n 工作流数据的代码,无法从其他外部源拉取数据。
  • AI 并不了解你的实际数据,只知道数据结构(schema),因此你需要明确告知如何查找所需提取的数据,或如何检查空值(null)。
  • 在运行 AI 查询前,代码节点之前的所有节点必须已执行并成功传递数据至该节点。
  • 不适用于传入数据结构(incoming data schema)过大的场景。
  • 如果代码节点之前的节点数量较多,可能会出现异常或性能问题。

编写高质量提示词(Prompts)#

编写清晰有效的提示词有助于提高获得有用代码的概率。

一些通用建议:

  • 提供示例:如果可能,给出期望输出的样例。这有助于 AI 更好地理解你希望实现的数据转换或逻辑。
  • 描述处理步骤:如果有特定的数据处理流程或逻辑,请按顺序列出。例如:“首先过滤掉所有年龄小于 18 岁的用户,然后按姓氏对剩余用户排序。”
  • 避免歧义:尽管 AI 能理解多种表达方式,但表述越清晰直接,生成的代码越准确。例如,不要说“获取年长的用户”,而应说明“筛选年龄在 60 岁及以上的用户”。
  • 明确输出要求:清楚说明你期望的输出形式——是数据变换、过滤、聚合还是排序?尽可能提供更多细节。

以及一些针对 n8n 的使用建议:

  • 考虑输入数据:确保 ChatGPT 知道你希望访问哪些数据字段,以及传入的数据代表什么含义。你可能需要向 ChatGPT 说明 n8n 提供的内置方法和变量。
  • 明确节点之间的交互:如果你的逻辑涉及多个节点的数据,请明确它们应如何交互。例如:“根据 'userID' 字段合并 'Node A' 和 'Node B' 的输出”。如果你希望仅使用特定节点的数据而忽略其他节点,请清晰说明:“只考虑来自 'Purchases' 节点的数据,忽略 'Refunds' 节点。”
  • 确保输出与 n8n 兼容。有关 n8n 所需数据结构的更多信息,请参考 数据结构文档

示例提示#

以下示例展示了多种可能的提示语和任务场景。

示例 1:在第二个数据集中查找某条数据#

要亲自尝试此示例,请下载示例工作流并导入到 n8n 中。 在第三个“代码(Code)”节点中,输入以下提示:

Slack 数据仅包含一个项目。输入数据表示所有 Notion 用户。有时存储邮箱的 person 属性可能为 null。我想要找到该 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:数据转换[#](https://docs.n8n.io/code/ai-code/#example-2-data-transformation "永久链接")
要亲自尝试此示例,请[下载示例工作流](https://docs.n8n.io/_workflows/ai-code/data-transformation.json)并导入到 n8n 中。
在 **Join items**(合并项目)的“代码”节点中,输入以下提示:
> 返回一行文本,其中所有用户名用逗号分隔,每个用户名都用双引号包围。
查看 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 消息[#](https://docs.n8n.io/code/ai-code/#example-3-summarize-data-and-create-a-slack-message "永久链接")
要亲自尝试此示例,请[下载示例工作流](https://docs.n8n.io/_workflows/ai-code/summarize-data.json)并将其导入 n8n。
在 **Summarize**(汇总)Code 节点中,输入以下提示:
> 创建一个用于 Slack 的 Markdown 文本,统计提交的 idea(想法)、feature(功能)和 bug(缺陷)的数量。提交类型保存在 `property_type` 字段中。功能的值为 "Feature",缺陷的值为 "Bug",而想法的值为 "Idea"。同时,在消息中列出得票数最高的前五个提交项。使用 `<url|text>` 作为链接的 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();

// 统计 ideas、features 和 bugs 的数量
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}> 获得 ${submission.json.property_votes} 票\n`;
});

// 构建 Slack 消息
const slackMessage = `*提交汇总*\n
想法数量: ${ideaCount}\n
功能数量: ${featureCount}\n
缺陷数量: ${bugCount}\n
得票最高的前 5 项:\n
${topSubmissionText}`;

return [{ json: { slackMessage } }];

---|---
### 显式引用传入的节点数据[#](https://docs.n8n.io/code/ai-code/#reference-incoming-node-data-explicitly "永久链接")
如果传入的数据包含嵌套字段,使用点号表示法(dot notation)来引用这些字段可以帮助 AI 更好地理解你所需的数据。
[["n8n 代码节点的截图,突出显示如何在 AI 查询中使用点号表示法引用数据"](https://docs.n8n.io/_images/code/ai-code/reference-data-dot-notation.png)](https://docs.n8n.io/_images/code/ai-code/reference-data-dot-notation.png)
如需亲自尝试此示例,请[下载示例工作流](https://docs.n8n.io/_workflows/ai-code/reference-incoming-data-explicitly.json)并将其导入 n8n。
在第二个 Code 节点中输入以下提示:
> “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 的 数据结构(Data structure)。此外,n8n 内置的方法和变量也可能对你有帮助。