8
n8n 中文网amn8n.com

AI驱动的产品研究与价格比较 - Google搜索和OpenAI

中级

这是一个Market Research, AI RAG领域的自动化工作流,包含 8 个节点。主要使用 Set, Gmail, OpenAi, Function, ManualTrigger 等节点。 基于Google搜索和OpenAI的AI驱动产品研究与价格比较

前置要求
  • Google 账号和 Gmail API 凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移

无法加载工作流预览

导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "nodes": [
    {
      "name": "手动触发器",
      "type": "n8n-nodes-base.manualTrigger",
      "notes": {
        "text": "### 1. Start Workflow\n\nThis `Manual Trigger` node is used for easy testing of your product research.\n\n**To trigger the workflow manually:** Click the 'Execute Workflow' button in the top right.\n\n**For automation:** You could connect this to a `Webhook` (if you build a simple form for product descriptions) or a `Google Sheets` node (to read new product requests from a spreadsheet).",
        "position": "right"
      },
      "position": [
        240,
        300
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "name": "设置产品描述",
      "type": "n8n-nodes-base.set",
      "notes": {
        "text": "### 2. Define Product Description\n\nThis `Set` node defines the product you're looking for using natural language.\n\n**How to use:**\n* **For testing:** Directly edit the 'Value' field with a detailed description of the product you want to find.\n* **For automation:** This could come from a previous node (e.g., a form submission via a `Webhook` or a cell in a `Google Sheet`) using an expression like `{{ $json.yourInputFieldName }}`.",
        "position": "right"
      },
      "position": [
        460,
        300
      ],
      "parameters": {
        "values": [
          {
            "name": "productDescription",
            "value": "Lightweight, durable hiking backpack for multi-day trips (30-40L), good ventilation, comfortable for long hikes."
          }
        ],
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "name": "AI:生成搜索查询",
      "type": "n8n-nodes-base.openAi",
      "notes": {
        "text": "### 3. AI: Generate Search Queries\n\nThis `OpenAI` node takes your natural language `productDescription` and uses AI to generate effective search queries.\n\n**Setup:**\n1.  **OpenAI Credential:** Click on 'Credentials' and select 'New Credential'. Provide your OpenAI API Key (starts with `sk-`). Save it.\n2.  **Model:** You can change `gpt-3.5-turbo` to `gpt-4o` for potentially better query generation (but higher cost).\n3.  **Prompt:** The system prompt guides the AI to generate concise search queries suitable for a search engine.\n\n**Output:** The AI will output a string with queries separated by newlines.",
        "position": "right"
      },
      "position": [
        700,
        300
      ],
      "parameters": {
        "model": "gpt-3.5-turbo",
        "options": {},
        "messages": [
          {
            "role": "system",
            "content": "You are a search query optimizer. Given a product description, generate 3-5 concise and effective Google search queries to find that product. Output each query on a new line. Do not add any conversational text or numbering."
          },
          {
            "role": "user",
            "content": "Generate search queries for: {{ $json.productDescription }}"
          }
        ]
      },
      "typeVersion": 1
    },
    {
      "name": "拆分查询",
      "type": "n8n-nodes-base.function",
      "notes": {
        "text": "### 4. Split Queries\n\nThis `Function` node takes the multi-line string of search queries generated by the AI and splits them into separate items. Each item will then be processed individually by the next node.\n\n**Output:** If the AI generated 3 queries, this node will output 3 separate items, each with a `query` field (e.g., `{{ $json.query }}`).\n\n**No configuration needed here**, it automatically processes the AI output.",
        "position": "right"
      },
      "position": [
        940,
        300
      ],
      "parameters": {
        "options": {},
        "function": "const queriesString = items[0].json.choices[0].message.content;\nconst queries = queriesString.split('\\n').filter(q => q.trim() !== '');\n\nconst outputItems = queries.map(query => ({ json: { query: query.trim() } }));\n\nreturn outputItems;"
      },
      "typeVersion": 1
    },
    {
      "name": "Google 自定义搜索 (CSE)",
      "type": "n8n-nodes-base.googleCustomSearch",
      "notes": {
        "text": "### 5. Google Custom Search (CSE) - The Core!\n\nThis `Google Custom Search` node performs the actual web search using your configured Google Custom Search Engine.\n\n**Setup (CRITICAL!):**\n1.  **Google API Credential:** Click 'Credentials' and select 'New Credential'. Choose 'Google API'. You'll need the **API Key** you generated in the Google Cloud Console (Step 1 in the overall setup).\n2.  **Search Engine ID:** This is the ID you obtained from `cse.google.com` (Step 1 in the overall setup).\n3.  **Query:** This field is pre-filled with `={{ $json.query }}`, pulling each query generated by the AI and splitting it.\n4.  **Num:** (Optional) Limits the number of results per query. Default is 10; set to 5 for a more concise output.\n\n**Output:** This node will output search results, including `title`, `link`, and `snippet` for each result.",
        "position": "right"
      },
      "position": [
        1180,
        300
      ],
      "parameters": {
        "query": "={{ $json.query }}",
        "options": {
          "num": 5
        },
        "operation": "search",
        "searchEngineId": "YOUR_SEARCH_ENGINE_ID"
      },
      "credentials": {
        "googleApi": {
          "id": "YOUR_GOOGLE_API_CREDENTIAL_ID",
          "resolve": false
        }
      },
      "typeVersion": 1
    },
    {
      "name": "合并搜索结果",
      "type": "n8n-nodes-base.set",
      "notes": {
        "text": "### 6. Combine Search Results\n\nThis `Set` node gathers all the search results from the multiple CSE queries into a single, combined item.\n\n**How it works:** `{{ $('Google Custom Search (CSE)').all() }}` is an advanced expression that collects *all* items from *all* executions of the 'Google Custom Search (CSE)' node into one array. This is essential for feeding all results to the AI for summarization.",
        "position": "right"
      },
      "position": [
        1420,
        300
      ],
      "parameters": {
        "mode": "json",
        "value": "={{ $('Google Custom Search (CSE)').all() }}",
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "name": "AI:总结产品与价格",
      "type": "n8n-nodes-base.openAi",
      "notes": {
        "text": "### 7. AI: Summarize Products & Prices\n\nThis `OpenAI` node analyzes all the combined search results and synthesizes them into a readable report.\n\n**Purpose:** The AI will try to identify product types, common features, and potential places to buy, based on the `title`, `snippet`, and `link` data from the search results.\n\n**Input:** The 'User' prompt feeds all the search result data to the AI.\n\n**Output:** The AI-generated summary report.",
        "position": "right"
      },
      "position": [
        1660,
        300
      ],
      "parameters": {
        "model": "gpt-3.5-turbo",
        "options": {},
        "messages": [
          {
            "role": "system",
            "content": "You are a product research assistant. Analyze the provided search results (titles, snippets, links) for a product. Identify common themes, product types, key features, and suggest where the user might find the best prices (e.g., mention specific retailers or general price comparison sites if they appear in results). Structure your output as a concise report with bullet points for key findings and a list of top 3-5 relevant links."
          },
          {
            "role": "user",
            "content": "Based on the following search results for '{{ $node[\"Set Product Description\"].json.productDescription }}':\n\n{{ $json.map(item => `Title: ${item.title}\\nSnippet: ${item.snippet}\\nLink: ${item.link}`).join('\\n---\\n') }}"
          }
        ]
      },
      "credentials": {
        "openAiApi": {
          "id": "YOUR_OPENAI_CREDENTIAL_ID",
          "resolve": false
        }
      },
      "typeVersion": 1
    },
    {
      "name": "发送报告邮件",
      "type": "n8n-nodes-base.gmail",
      "notes": {
        "text": "### 8. Send Report Email\n\nThis `Gmail` node sends the final AI-generated product research report to your inbox.\n\n**Setup:**\n1.  **Gmail Credential:** Select your existing Gmail API credential.\n2.  **From Email:** Enter your Gmail address (this must be the same account you authenticated).\n3.  **To Email:** **IMPORTANT: Change `YOUR_RECIPIENT_EMAIL@example.com` to your actual email address!**\n4.  **Subject:** Includes the product description for easy reference.\n5.  **Text:** The email body contains the summary generated by the AI.\n\n**After setting up, click 'Execute Workflow' (from the 'Manual Trigger' node) to receive your product research report!**",
        "position": "right"
      },
      "position": [
        1900,
        300
      ],
      "parameters": {
        "text": "Hello!\n\nHere's your AI-powered product research report from n8n for:\n\"{{ $node[\"Set Product Description\"].json.productDescription }}\"\n\n---\n\n{{ $node[\"AI: Summarize Products & Prices\"].json.choices[0].message.content }}\n\n---\n\n*This report was generated automatically by n8n. Please use the provided links to explore products and prices further.*",
        "options": {},
        "subject": "AI Shopping Assistant: Product Research Report for \"{{ $node[\"Set Product Description\"].json.productDescription }}\"",
        "toEmail": "YOUR_RECIPIENT_EMAIL@example.com",
        "fromEmail": "YOUR_GMAIL_EMAIL@gmail.com"
      },
      "credentials": {
        "gmailApi": {
          "id": "YOUR_GMAIL_CREDENTIAL_ID",
          "resolve": false
        }
      },
      "typeVersion": 2
    }
  ],
  "pinData": {},
  "version": 1,
  "connections": {
    "Split Queries": {
      "main": [
        [
          {
            "node": "Google Custom Search (CSE)",
            "type": "main"
          }
        ]
      ]
    },
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Set Product Description",
            "type": "main"
          }
        ]
      ]
    },
    "Combine Search Results": {
      "main": [
        [
          {
            "node": "AI: Summarize Products & Prices",
            "type": "main"
          }
        ]
      ]
    },
    "Set Product Description": {
      "main": [
        [
          {
            "node": "AI: Generate Search Queries",
            "type": "main"
          }
        ]
      ]
    },
    "Google Custom Search (CSE)": {
      "main": [
        [
          {
            "node": "Combine Search Results",
            "type": "main"
          }
        ]
      ]
    },
    "AI: Generate Search Queries": {
      "main": [
        [
          {
            "node": "Split Queries",
            "type": "main"
          }
        ]
      ]
    },
    "AI: Summarize Products & Prices": {
      "main": [
        [
          {
            "node": "Send Report Email",
            "type": "main"
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级 - 市场调研, AI RAG 检索增强

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量8
分类2
节点类型6
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Piotr Sobolewski

Piotr Sobolewski

@piotrsobolewski

AI PhD with 7 years experience as a game dev CEO, currently teaching, helping others and building something new.

外部链接
在 n8n.io 查看

分享此工作流