帮我设计并指导我搭建一个n8n工作流 gemini2.5
帮我设计并指导我搭建一个n8n工作流,我是零基础初学者,请尽量通俗易懂,步骤详细。我的任务如下:
1.我提供一篇米塞斯研究院网站上的文章链接,比如:https://mises.org/mises-wire/how-herbert-hoover-became-known-economic-non-interventionist
2.提取出文章的主体部分,忽略网页元素、链接、广告。
3.按照自然段把文章分段,然后逐段提交给本地运行的lmstudio服务器,由lmstudio运行的大模型进行翻译。
3.整合翻译结果,将完整的翻译文章展示给我。
好的,没问题!作为零基础的初学者,我们将通过一个非常详细的、手把手的教程,一步步搭建你所需要的 n8n 工作流。这个工作流将自动抓取米塞斯研究院的文章,通过你本地的 LM Studio 大模型进行翻译,最后汇总成一篇完整的译文。
准备工作
在开始之前,请确保你已经准备好以下几样东西:
- n8n 的运行环境:你可以在你的电脑上通过 Docker 或者 n8n Desktop 桌面应用来运行。对于初学者来说,桌面应用可能是最简单的。
- LM Studio:确保你已经在本地电脑上安装并运行了 LM Studio,并且已经下载好了你想要用来翻译的语言模型。同时,你需要启动本地的推理服务器。
工作流搭建步骤
我们将分步进行,每一步都会有详细的截图和说明。
第一步:启动 LM Studio 服务器
- 打开 LM Studio。
- 在左侧导航栏选择 "Local Server" (本地服务器)。
- 点击 "Start Server" (启动服务器)。
启动后,你会看到一个本地服务器的地址,通常是 http://localhost:1234/v1/chat/completions。这个地址就是我们稍后在 n8n 中需要用到的 API 地址。
第二步:创建新的 n8n 工作流
- 打开你的 n8n 应用。
- 点击右上角的 "New workflow" (新建工作流) 来创建一个空白的工作流。
第三步:手动触发工作流(Manual Trigger)
n8n 工作流需要一个触发器来启动。对于我们的需求,最简单的就是手动触发。
- 在工作流画布中,你应该能看到一个默认的 "Start" (开始) 节点。
- 我们将使用这个节点作为手动触发器。点击它,你可以在右侧看到它的设置,我们暂时不需要更改任何东西。
第四步:接收文章链接(Set a variable)
我们需要一个地方来输入我们想要翻译的文章链接。我们可以使用 "Set" 节点来创建一个变量。
- 点击画布上的
+号,在弹出的节点搜索框中输入 "Set",然后选择 "Set" 节点。 - 将 "Set" 节点连接在 "Start" 节点的后面。
- 点击 "Set" 节点,在右侧的配置中:
- 在 "Name" (名称) 字段中,输入
article_url。 - 在 "Value" (值) 字段中,粘贴你提供的示例链接:
https://mises.org/mises-wire/how-herbert-hoover-became-known-economic-non-interventionist
- 在 "Name" (名称) 字段中,输入
这样,当工作流运行时,它就会知道要去处理哪篇文章了。
第五步:抓取网页内容(HTTP Request)
现在我们需要根据上面设置的链接,去把整个网页的 HTML 内容抓取下来。
- 在 "Set" 节点后面点击
+号,搜索并添加 "HTTP Request" 节点。 - 配置 "HTTP Request" 节点:
- Authentication (认证): 保持 "None" (无) 即可。
- URL: 这里我们要使用上一步设置的
article_url变量。点击 URL 输入框右侧的表达式按钮</>,然后在弹出的窗口中选择Nodes->Set->Output Data->JSON->article_url。这样设置后,URL 就会动态地使用我们之前设定的链接。 - Options (选项) -> Response Format (响应格式): 选择 "Text" (文本)。
现在,如果你点击 "Test step" (测试步骤),你应该能看到这个节点成功抓取到了整个网页的 HTML 代码。
第六步:提取文章正文(HTML Extract)
抓取到的内容包含了大量的广告、导航栏等我们不需要的东西。我们需要把文章的正文提取出来。
- 在 "HTTP Request" 节点后添加 "HTML Extract" 节点。
- 配置 "HTML Extract" 节点:
- Source Data (源数据): 默认它会使用上一个节点的输出,这是正确的。
- Extraction Values (提取值):
- Key (键): 输入
article_body。 - CSS Selector (CSS 选择器): 这是最关键的一步。我们需要找到一个只包含文章正文的 CSS 选择器。对于米塞斯研究院的这篇文章,文章主体部分在一个
<div>元素里,这个元素有一个特定的类名。我们可以使用.prose作为选择器。 - Return Value (返回值): 选择 "HTML"。
- Key (键): 输入
提示: 如何找到正确的 CSS 选择器?
在 Chrome 或 Firefox 浏览器中打开文章链接,在文章正文上右键点击,选择“检查”(Inspect)。你会看到开发者工具窗口,通过观察 HTML 结构,找到包裹着正文的那个<div>或<article>标签,并查看它的class或id。对于这个网站,class="prose"是一个很合适的选择。
测试这一步,你应该能看到输出结果只包含了文章正文部分的 HTML 代码。
第七步:清理 HTML 标签(Remove HTML Tags)
上一步我们得到了文章的 HTML,但我们只需要纯文本。
- 在 "HTML Extract" 节点后添加 "Remove HTML Tags" 节点。
- 这个节点通常不需要特别的配置,它会自动处理上一步的输入。测试一下,你会看到输出的文本变得干净了很多,没有了 HTML 标签。
第八步:按段落拆分文本(Split in Batches)
为了逐段翻译,我们需要将整篇文章拆分成一个个段落。
- 在 "Remove HTML Tags" 节点后添加 "Split in Batches" (分批处理) 节点。
- 配置 "Split in Batches" 节点:
- Field to Split (要拆分的字段): 这里应该自动选择了上一步输出的文本字段,通常叫做
text。 - Options (选项) -> Split On (拆分依据): 选择 "Newline" (换行符)。
- Options (选项) -> Split After (拆分位置): 选择 "Every" (每一个)。
- Field to Split (要拆分的字段): 这里应该自动选择了上一步输出的文本字段,通常叫做
测试这一步,你会看到输出从一项变成了一个包含多个项的列表,每一项就是一个段落。
第九步:调用 LM Studio 进行翻译(HTTP Request)
这是整个工作流的核心。我们会循环处理上一步拆分出的每一个段落,把它们发送给 LM Studio 进行翻译。n8n 会自动为我们处理循环。
- 在 "Split in Batches" 节点后添加一个新的 "HTTP Request" 节点。
- 配置这个 "HTTP Request" 节点:
- URL: 输入你之前在 LM Studio 中看到的服务器地址,通常是
http://localhost:1234/v1/chat/completions。 - Authentication: 保持 "None"。
- Method (方法): 选择 "POST"。
- Body Content Type (请求体内容类型): 选择 "JSON"。
- Body (请求体): 这是我们要发送给大模型的指令。点击 "Add Expression" (添加表达式) 并输入以下 JSON 结构。
- URL: 输入你之前在 LM Studio 中看到的服务器地址,通常是
{
"messages": [
{
"role": "system",
"content": "You are a professional translator. Translate the following English paragraph into Chinese."
},
{
"role": "user",
"content": "{{ $json.text }}"
}
],
"temperature": 0.7,
"max_tokens": -1,
"stream": false
}
重要提示:
{{ $json.text }}是一个表达式,它会动态地获取上一步 "Split in Batches" 节点输出的每一个段落的文本。content中的指令 "Translate the following English paragraph into Chinese" 告诉大模型要做什么。你可以根据需要修改这个指令。
测试这一步,你应该能看到 LM Studio 返回了翻译结果。翻译的结果通常在 choices[0].message.content 这个路径下。
第十步:整合翻译结果(Code Node)
现在我们有了一堆分段的翻译结果,最后一步就是把它们合并成一篇完整的文章。
- 在最后一个 "HTTP Request" 节点后添加 "Code" (代码) 节点。
- 在 "Code" 节点的代码区域,输入以下 JavaScript 代码:
// 获取所有输入项(也就是所有翻译好的段落)
const items = $items("HTTP Request1"); // 注意:这里的 "HTTP Request1" 可能需要根据你节点的实际名字修改
let fullTranslation = "";
// 循环遍历每一个段落的翻译结果
for (const item of items) {
// 从返回的 JSON 中提取翻译内容
// 根据 LM Studio 的返回格式,路径通常是 choices[0].message.content
const translatedParagraph = item.json.choices[0].message.content;
// 将段落拼接起来,并在段落之间加上换行符
fullTranslation += translatedParagraph + "\n\n";
}
// 返回最终的、完整的翻译结果
return {
full_translation: fullTranslation.trim()
};
检查节点名称:
请确保代码中的$items("HTTP Request1")里的"HTTP Request1"和你上一步调用 LM Studio 的那个 "HTTP Request" 节点的名称完全一致。如果不一致,请修改代码。
完成!
现在,整个工作流已经搭建完毕!你可以点击工作流左下角的 "Execute Workflow" (执行工作流) 按钮来完整地运行一次。当所有步骤都成功执行后,点击最后一个 "Code" 节点,你将在输出中看到一个名为 full_translation 的字段,里面就是完整的、翻译好的文章了!
完整工作流概览
你的整个工作流看起来应该是这样的:
Start -> Set (设置链接) -> HTTP Request (抓取网页) -> HTML Extract (提取正文) -> Remove HTML Tags (清理标签) -> Split in Batches (按段落拆分) -> HTTP Request (调用 LM Studio 翻译) -> Code (整合结果)
希望这个超详细的指南能帮助你成功搭建你的第一个 n8n 工作流!如果在任何步骤遇到问题,随时可以提出。
Upvoted! Thank you for supporting witness @jswit.