n8n Agents 是针对 n8n 中 AI Agent 节点(@n8n/n8n-nodes-langchain.agent)及周边 LangChain 家族节点的设计指南,属于对“Agent 在工作流中处于什么位置”的上层模式说明的下一层细化。
用途与节点选型 文档首先强调避免过度构建:需要调用工具、多轮推理或保留记忆时用 AI Agent(.agent);一次性文本进文本出且无工具时用 Basic LLM Chain(.chainLlm);把自然语言输入路由到 N 个分支用 Text Classifier(.textClassifier),而非 Agent + Switch;从自由文本抽取结构化字段用 Information Extractor;正/中/负三分类用 Sentiment Analysis;长文档压缩用 Summarization Chain;图像、音频、视频生成直接用服务商原生单调用节点,不要包进 Agent。Text Classifier 的每个类别都需要名称和描述,模型依据描述路由,建议开启 options.enableAutoFixing。聊天模型节点(.lmChatOpenAi、.lmChatAnthropic、.lmChatOpenRouter 等)是子节点,通过 ai_languageModel 连接,不能独立运行。
子节点连接模式 Agent 有一个主输入和最多四个子节点槽位:model(ai_languageModel,必需)、memory(ai_memory,可选)、tools(ai_tool,可选)和 outputParser(ai_outputParser,可选)。连接方向是子节点指向 Agent,JSON 中连接挂在子节点上;多个工具都连到同一个 ai_tool index 0。Agent 的最终答案位于 $json.output。
工具设计要点 工具名称和描述本身就是提示词的一部分,命名如 tool1 且描述为空会导致模型跳过、误选或幻觉参数。每工具的用法写在工具描述里而非系统提示中,以便跨 Agent 复用。子工作流工具(.toolWorkflow)适用于任何多步骤场景,是默认选择;单节点能力用原生工具节点;单个外部 HTTP API 用 .toolHttpRequest;已有 MCP 服务用 .mcpClientTool;纯内联计算用 .toolCode,但其运行时契约(字符串进出、无 $fromAI、无 $helpers)另有 skill 负责。
$fromAI() 机制 由 Agent 决定的工具参数用 $fromAI('paramName', '描述', 'string') 包裹,类型可为 string、number、boolean、json,错误类型会导致调用失败。$fromAI 只能携带 JSON,不能携带二进制。身份、权限上限、关联 ID(userId、退款上限、sessionId)应从工作流上下文确定性传入,不让模型看见或填错,即“给 Agent 一个按钮而不是方向盘”。
结构化输出 当下游需要严格 JSON 时,接入 outputParserStructured 子节点。应使用 schemaType: 'manual' 配真实 JSON Schema,而非 jsonSchemaExample;示例无法表达必填/可选、枚举、数值范围或数组约束。修复需要单独的 Auto-fixing Output Parser(outputParserAutofixing)包裹结构化解析器,并接入第二个模型;不要假定结构化解析器存在 autoFix 字段。没有修复时,一个格式错误的 JSON 会中断整个工作流。
记忆 记忆是 ai_memory 子节点。memoryBufferWindow 是进程内临时上下文,不应假定重启持久、跨 worker 共享或按窗口大小删除归档;memoryPostgresChat / memoryRedisChat 用于记忆需在 Agent 外读取或需跨重启持久。sessionKey 要从触发器稳定传入,聊天触发器自动填 sessionId,其他场景自行派生(如 Slack thread_ts、webhook 会话 ID),不要硬编码 'default',也不要让 sessionId 走 $fromAI。
二进制边界 模型可通过 options.passthroughBinaryImages: true 看到上传图片,但工具无法接收二进制,$fromAI 只支持 JSON;Agent 输出是文本形状,模型返回的图像/音频/视频字节不会在 Agent 中呈现。变通做法是在 Agent 运行前把上传文件暂存到存储,将存储键注入系统提示,由工具以字符串参数接收键并在内部重新获取;一次性媒体生成则跳过 Agent 直接调用服务商原生节点。
人工审核 对发送、支付、退款、账户变更等有副作用的工具,用 HITL 审核节点(slackHitlTool、discordHitlTool、telegramHitlTool、gmailHitlTool 等)包裹,连接顺序为被包工具 → 审核节点 → Agent。审批消息必须用字面 {{ $tool.parameters.<name> }} 展示实际参数,不能用 $fromAI 转述,否则人批准的是模型编造的文本而非即将执行的调用。是否需签核是产品/政策判断,应向用户提出建议并由其决定。
聊天 Agent 任何由聊天触发并回复的工作流都必须过滤机器人自身用户 ID,否则会无限自触发并消耗运行与 token。优先在触发器层过滤(如 Slack Trigger 的 options.userIds 排除列表),否则在触发器后第一个节点过滤 $json.user !== '<BOT_USER_ID>'。简单机器人可放在单个工作流;需要加载 UX、子 Agent、多界面复用或健壮错误处理时,拆成 Shell(触发器、防循环、事件 Switch、加载/错误 UX,无 LLM)、Core(无状态 Agent、chatInput + threadId、按 threadId 记忆)和 Sub-agents(各自窄领域,通过 .toolWorkflow 调用)。
RAG n8n 提供 LangChain RAG 原语(文档加载器、拆分器、嵌入、向量存储、检索器)。应先排除更便宜的查询方式:精确查询用数据库或 Data Table,时效性用实时搜索工具,小型结构化文档集给 Agent 列表/获取工具;只有文档多到无法列出且查询是语义型时才用向量存储。向量存储应作为检索工具(mode: 'retrieve-as-tool')接入 ai_tool,让 Agent 决定何时检索并自行组织查询;查询与文档必须用同一模型嵌入。
安全与版本边界 文档中的片段是示例而非经认证的实时 schema,使用前应检查已安装节点版本并在禁用副本上验证。外部内容视为不可信数据,租户/对象授权和限额在确定性节点中执行,日志脱敏,先用 mock 测试。副作用操作需要现有用户授权加审批门,拒绝或超时必须停止执行;提示词或 JSON Schema 不是授权边界。服务商密钥和令牌只存于 n8n 凭据,不得放入提示、Set 节点、工作流 JSON、示例或日志。
适用场景与限制 适用于在 n8n 中构建多轮工具调用 Agent、文本分类与信息抽取、结构化输出、带人工复核的自动化,以及 Slack/Discord/Teams/Telegram 聊天机器人和 RAG 检索。限制包括:具体节点参数需以实际安装版本为准,部分机制(如二进制暂存细节)由其他 skill 负责,本文未展开;文中未提供具体收费、平台版本或效果数据。