帮我设计并指导我搭建一个n8n工作流 gemini2.5

in STEEM CN/中文7 months ago

帮我设计并指导我搭建一个n8n工作流,我是零基础初学者,请尽量通俗易懂,步骤详细。我的任务如下:
1.我提供一篇米塞斯研究院网站上的文章链接,比如:https://mises.org/mises-wire/how-herbert-hoover-became-known-economic-non-interventionist
2.提取出文章的主体部分,忽略网页元素、链接、广告。
3.按照自然段把文章分段,然后逐段提交给本地运行的lmstudio服务器,由lmstudio运行的大模型进行翻译。
3.整合翻译结果,将完整的翻译文章展示给我。

好的,没问题!作为零基础的初学者,我们将通过一个非常详细的、手把手的教程,一步步搭建你所需要的 n8n 工作流。这个工作流将自动抓取米塞斯研究院的文章,通过你本地的 LM Studio 大模型进行翻译,最后汇总成一篇完整的译文。

准备工作

在开始之前,请确保你已经准备好以下几样东西:

  1. n8n 的运行环境:你可以在你的电脑上通过 Docker 或者 n8n Desktop 桌面应用来运行。对于初学者来说,桌面应用可能是最简单的。
  2. LM Studio:确保你已经在本地电脑上安装并运行了 LM Studio,并且已经下载好了你想要用来翻译的语言模型。同时,你需要启动本地的推理服务器。

工作流搭建步骤

我们将分步进行,每一步都会有详细的截图和说明。

第一步:启动 LM Studio 服务器

  1. 打开 LM Studio。
  2. 在左侧导航栏选择 "Local Server" (本地服务器)。
  3. 点击 "Start Server" (启动服务器)。

启动后,你会看到一个本地服务器的地址,通常是 http://localhost:1234/v1/chat/completions。这个地址就是我们稍后在 n8n 中需要用到的 API 地址。

第二步:创建新的 n8n 工作流

  1. 打开你的 n8n 应用。
  2. 点击右上角的 "New workflow" (新建工作流) 来创建一个空白的工作流。

第三步:手动触发工作流(Manual Trigger)

n8n 工作流需要一个触发器来启动。对于我们的需求,最简单的就是手动触发。

  1. 在工作流画布中,你应该能看到一个默认的 "Start" (开始) 节点。
  2. 我们将使用这个节点作为手动触发器。点击它,你可以在右侧看到它的设置,我们暂时不需要更改任何东西。

第四步:接收文章链接(Set a variable)

我们需要一个地方来输入我们想要翻译的文章链接。我们可以使用 "Set" 节点来创建一个变量。

  1. 点击画布上的 + 号,在弹出的节点搜索框中输入 "Set",然后选择 "Set" 节点。
  2. 将 "Set" 节点连接在 "Start" 节点的后面。
  3. 点击 "Set" 节点,在右侧的配置中:
    • 在 "Name" (名称) 字段中,输入 article_url
    • 在 "Value" (值) 字段中,粘贴你提供的示例链接:https://mises.org/mises-wire/how-herbert-hoover-became-known-economic-non-interventionist

这样,当工作流运行时,它就会知道要去处理哪篇文章了。

第五步:抓取网页内容(HTTP Request)

现在我们需要根据上面设置的链接,去把整个网页的 HTML 内容抓取下来。

  1. 在 "Set" 节点后面点击 + 号,搜索并添加 "HTTP Request" 节点。
  2. 配置 "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)

抓取到的内容包含了大量的广告、导航栏等我们不需要的东西。我们需要把文章的正文提取出来。

  1. 在 "HTTP Request" 节点后添加 "HTML Extract" 节点。
  2. 配置 "HTML Extract" 节点:
    • Source Data (源数据): 默认它会使用上一个节点的输出,这是正确的。
    • Extraction Values (提取值):
      • Key (键): 输入 article_body
      • CSS Selector (CSS 选择器): 这是最关键的一步。我们需要找到一个只包含文章正文的 CSS 选择器。对于米塞斯研究院的这篇文章,文章主体部分在一个 <div> 元素里,这个元素有一个特定的类名。我们可以使用 .prose 作为选择器。
      • Return Value (返回值): 选择 "HTML"。

提示: 如何找到正确的 CSS 选择器?
在 Chrome 或 Firefox 浏览器中打开文章链接,在文章正文上右键点击,选择“检查”(Inspect)。你会看到开发者工具窗口,通过观察 HTML 结构,找到包裹着正文的那个 <div><article> 标签,并查看它的 classid。对于这个网站,class="prose" 是一个很合适的选择。

测试这一步,你应该能看到输出结果只包含了文章正文部分的 HTML 代码。

第七步:清理 HTML 标签(Remove HTML Tags)

上一步我们得到了文章的 HTML,但我们只需要纯文本。

  1. 在 "HTML Extract" 节点后添加 "Remove HTML Tags" 节点。
  2. 这个节点通常不需要特别的配置,它会自动处理上一步的输入。测试一下,你会看到输出的文本变得干净了很多,没有了 HTML 标签。

第八步:按段落拆分文本(Split in Batches)

为了逐段翻译,我们需要将整篇文章拆分成一个个段落。

  1. 在 "Remove HTML Tags" 节点后添加 "Split in Batches" (分批处理) 节点。
  2. 配置 "Split in Batches" 节点:
    • Field to Split (要拆分的字段): 这里应该自动选择了上一步输出的文本字段,通常叫做 text
    • Options (选项) -> Split On (拆分依据): 选择 "Newline" (换行符)。
    • Options (选项) -> Split After (拆分位置): 选择 "Every" (每一个)。

测试这一步,你会看到输出从一项变成了一个包含多个项的列表,每一项就是一个段落。

第九步:调用 LM Studio 进行翻译(HTTP Request)

这是整个工作流的核心。我们会循环处理上一步拆分出的每一个段落,把它们发送给 LM Studio 进行翻译。n8n 会自动为我们处理循环。

  1. 在 "Split in Batches" 节点后添加一个新的 "HTTP Request" 节点。
  2. 配置这个 "HTTP Request" 节点:
    • URL: 输入你之前在 LM Studio 中看到的服务器地址,通常是 http://localhost:1234/v1/chat/completions
    • Authentication: 保持 "None"。
    • Method (方法): 选择 "POST"。
    • Body Content Type (请求体内容类型): 选择 "JSON"。
    • Body (请求体): 这是我们要发送给大模型的指令。点击 "Add Expression" (添加表达式) 并输入以下 JSON 结构。
{
  "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)

现在我们有了一堆分段的翻译结果,最后一步就是把它们合并成一篇完整的文章。

  1. 在最后一个 "HTTP Request" 节点后添加 "Code" (代码) 节点。
  2. 在 "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 工作流!如果在任何步骤遇到问题,随时可以提出。

Sort:  

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.05
TRX 0.32
JST 0.083
BTC 62530.78
ETH 1673.29
USDT 1.00
SBD 0.42