用途
n8n-code-tool 是一个技能指南,专门用于为 n8n 中可由 AI Agent 调用的 Custom Code Tool 编写和调试代码。该节点在编辑器里看起来像普通的 Code 节点,但在节点类型、所属包和运行时约定上完全不同:普通 Code 节点的节点类型是 n8n-nodes-base.code,按 item 流输入、返回 [{json: {...}}] 数组;Custom Code Tool 的节点类型是 @n8n/n8n-nodes-langchain.toolCode,由 LangChain AI Agent 调用,输入是 query(JS)或 _query(Python),返回值必须是一个字符串。如果按 Code 节点的方式来写,就会报错。
主要能力与规则
- 支持 JavaScript 与 Python 两种语言。
- 返回字符串;数字会自动转成字符串,其他类型(对象、数组、
[{json: ...}])会抛出 “The response property should be a string, but it is an object” 或 “Wrong output type returned”。结构化输出建议用JSON.stringify()。 - 输入变量固定为
query(JS)/_query(Python),不可重命名。 - 沙盒中不可用
$fromAI()(会抛 “No execution data available”)、$input、$json、$binary、$node[...]、this.helpers.httpRequest()、$jmespath()、this.getContext(...)、$getWorkflowStaticData(...);Luxon 的 DateTime 在 JS 沙盒中可用。因此该工具适合纯计算;需要 HTTP 调用、跨调用状态或凭证时,应改用 HTTP Request Tool、toolWorkflow(Call Sub-workflow Tool)或 MCP/数据库工具。
使用方式
两种输入模式:
- 无结构模式(默认,
specifyInputSchema: false):AI 传入单个字符串query,多个字段需自行解析(常见做法是让 LLM 传 JSON 字符串再JSON.parse)。优点是简单,缺点是没有 schema 校验。 - 结构化模式(
specifyInputSchema: true):工具变为 LangChain DynamicStructuredTool,LLM 按类型 schema 传对象,可直接query.price。schema 可通过schemaType: "fromJson"+jsonSchemaExample(n8n v≥1.3)或schemaType: "manual"+ 完整 JSON Schema 定义。
工具名称需匹配 [A-Za-z0-9_]+(v1.1+),建议用动词性描述名(如 calculate_car_loan);描述字段是 LLM 判断是否调用的依据,应写明触发场景,无结构模式下附带 JSON 示例。错误会回传给 LLM 供其修正重试,因此错误信息应说明哪里错了以及合法调用长什么样。
适用场景
- 纯确定性计算(数学、解析、格式化、校验)。
- 不应交给 LLM 自行完成的轻量转换(精度运算、正则)。
- 希望代码内联在工作流中而非拆到子工作流。
限制
沙盒与可用全局变量可能随 n8n 版本变化,需核对已安装节点版本;Type/schema 提示不强制业务约束,需在代码中校验有限值、正整数月份等;静态审查无法确认运行时权限与网络可达性。示例中的车贷计算为名义年金/尾款测算,非法定 APR 或借贷建议。