跳到主要内容

使用GPT进行AI编程#

自托管版本不可用。

不支持Python。

在代码节点中使用AI#

功能可用性

代码节点中的AI辅助功能仅向云用户开放,自托管版n8n不可用。

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

若您已在代码标签页编写代码,AI生成的代码将直接覆盖原有内容。n8n建议将AI作为创建初始代码的起点,随后按需编辑。

通过ChatGPT在代码节点生成代码的步骤:

  1. 在代码节点中将语言设置为JavaScript
  2. 选择询问AI标签页
  3. 输入您的需求描述
  4. 点击生成代码。n8n将您的需求发送至ChatGPT,并在代码标签页显示生成结果

使用限制#

试用阶段无使用限制。若该功能转为正式版,可能会根据付费套餐设置使用限制。

功能限制#

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

  • AI仅编写用于处理n8n工作流数据的代码,无法要求其从其他来源获取数据
  • AI仅了解数据结构而非具体数据值,因此需明确指示如何定位目标数据或检测空值
  • 执行AI查询前,代码节点前的所有节点必须完成执行并向代码节点传递数据
  • 无法处理大型输入数据架构
  • 当代码节点前存在大量节点时可能出现异常

编写优质提示词#

优质的提示词能显著提高生成可用代码的概率。

通用建议:

  • 提供示例:尽可能给出预期输出样本,帮助AI准确理解目标数据转换逻辑
  • 描述处理步骤:按顺序列出需要应用于数据的具体处理步骤,例如:"先筛选所有18岁以下用户,再按姓氏排序剩余用户"
  • 避免歧义:清晰直接的指令能确保生成代码的准确性。例如使用"筛选60岁及以上用户"替代"获取年长用户"
  • 明确输出预期:说明需要数据转换、筛选、聚合还是排序等操作,提供尽可能详细的说明

n8n特定指导:

  • 考虑输入数据:确保ChatGPT知晓需要访问的数据字段及其含义,可能需要告知n8n内置方法和变量的可用性
  • 声明节点间交互:若逻辑涉及多节点数据,需明确交互方式。例如:"根据'userID'属性合并'节点A'与'节点B'的输出",或"仅处理'采购'节点数据,忽略'退款'节点"
  • 确保输出兼容n8n,参考数据结构了解n8n所需数据结构

提示词示例#

以下示例展示多种可能的提示词与任务类型。

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

下载示例工作流并导入n8n即可亲身体验。

在第三个代码节点中输入此提示词:

Slack数据仅包含单条项目。输入数据代表所有Notion用户。存储邮箱的person属性可能为空。需要查找Slack用户对应的notionId并返回。

观察AI生成的代码。

所需JavaScript代码如下:

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代码如下:

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

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

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

汇总代码节点中输入以下提示:

查看AI生成的代码。

以下是所需的JavaScript代码:

const submissions = $input.all();

// Count the number of ideas, features, and 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;
}
});

// Sort submissions by votes and take the top 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`;
});

// Construct the Slack message
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。

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

"模拟数据"中包含人员列表。请为每位人员返回包含 personal_info.first_name 和 work_info.job_title 的新条目

所需JavaScript代码如下:

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 的内置方法和变量也可能对您有所帮助。