
用LLM做竞品分析自动化市场情报收集的工程方案一、竞品情报创业者的刚需与手工困境早期创业团队做竞品分析有两个典型场景。第一个是立项前的市场扫描目标赛道有哪些玩家、各自融资情况如何、产品功能矩阵是什么样。第二个是运营期的持续追踪竞品更新了什么功能、官网文案改了哪些卖点、定价策略有什么变化。手工做这件事的流程很痛苦打开竞品官网截图、打开各类SaaS点评网站查评价、打开天眼查/企查查看融资信息、打开社交媒体搜讨论。一个竞品一轮分析下来至少半天而且产出物往往是零散的Excel表或飞书文档几周后就过期了。团队里的AI工程师提出了一个想法能不能用LLM把竞品分析自动化自动抓取、自动摘要、自动生成对比报告。这个工程方案的核心不是模型本身而是一整套数据采集、结构化处理和质量控制流水线。flowchart TD A[情报源配置] -- B[多源数据采集] B -- C[原始数据清洗] C -- D[LLM结构化提取] D -- E[数据标准化与存储] E -- F[变化检测与告警] F -- G[报告自动生成] G -- H[多模态输出] B -- B1[官网HTML抓取] B -- B2[社交媒体API采集] B -- B3[SaaS点评网站] B -- B4[工商信息查询] D -- D1[功能清单提取] D -- D2[定价信息解析] D -- D3[核心卖点识别] D -- D4[技术栈推断] F -- F1{检测到变化?} F1 --|是| F2[生成变更摘要] F1 --|否| F3[记录扫描时间] F2 -- G style D fill:#2196F3,color:#fff style F fill:#4CAF50,color:#fff二、多源数据采集与结构化流水线数据采集是自动化的第一步。我们设计了三层采集架构来处理不同类型的信源。结构化数据层通过REST API直接获取。工商信息使用天眼查/企查查的开放API获取融资轮次、股东结构、注册资本等结构化字段。产品定价通过直接抓取竞品官网的Pricing页面HTML解析价格卡片中的金额数字和版本区分。半结构化数据层SaaS点评网站如G2、Capterra、SaaSWorthy等提供的是HTML页面。我们使用Playwright做浏览器渲染抓取因为很多页面依赖JS动态加载然后通过CSS选择器定位评价区域提取评分、优缺点文本、用户评论等。非结构化数据层社交媒体Twitter/X、Reddit、即刻、脉脉上的讨论是最有价值也最难处理的数据。讨论中包含了真实用户的痛点反馈、竞品对比、功能吐槽——这些是官网不会写的内容。通过各平台的搜索API采集关键词相关讨论进入下一阶段的LLM处理。from playwright.async_api import async_playwright import asyncio async def scrape_competitor_site(url: str, selectors: dict): async with async_playwright() as p: browser await p.chromium.launch(headlessTrue) page await browser.new_page() await page.goto(url, wait_untilnetworkidle) result {} for key, selector in selectors.items(): try: elements await page.query_selector_all(selector) result[key] [await el.inner_text() for el in elements] except Exception: result[key] [] await browser.close() return result # 典型的使用模式 selectors { pricing_tiers: .pricing-card h3, pricing_amounts: .pricing-card .price-amount, feature_lists: .feature-list li, hero_headline: .hero h1, cta_buttons: .cta-button } data asyncio.run(scrape_competitor_site(https://competitor.com/pricing, selectors))采集下来的原始文本杂乱无章。同一家公司的功能描述在不同页面不同来源可能表述各异。LLM在这里承担的是信息标准化的角色将各种表述方式的文本转化为统一的结构化JSON。通过精心设计的Prompt模板我们定义了一个标准的竞品分析Schema包含产品基本信息、目标用户群、核心功能清单含功能分类、定价模型含免费层限制、技术栈特征、融资与发展里程碑等字段。import json from openai import OpenAI client OpenAI() EXTRACTION_PROMPT 你是一个竞品分析专家。请从以下文本中提取竞品信息 按照给定的JSON Schema输出。只提取确定的信息不确定的字段填null。 JSON Schema: { product_name: 字符串, target_users: [字符串数组], core_features: [{category: 类别名, features: [功能1, 功能2]}], pricing: {model: freemium/subscription/usage-based, free_tier_limit: 字符串或null, paid_plans: [{name: 方案名, price: 金额字符串}]}, tech_stack_hints: [从页面特征推断的技术线索], differentiators: [与竞品的核心差异点] } def extract_competitor_info(raw_texts: list[str]) - dict: combined \n---\n.join(raw_texts) response client.chat.completions.create( modelgpt-4o, messages[ {role: system, content: EXTRACTION_PROMPT}, {role: user, content: f请分析以下竞品信息\n{combined[:8000]}} ], response_format{type: json_object} ) return json.loads(response.choices[0].message.content)三、变化检测与自动化告警竞品分析不是一次性工作它需要持续追踪。我们实现了一个基于文本差异的变化检测系统。核心技术思路是对比新旧分析结果的结构化JSON。对于每个竞品系统保存最新一次LLM提取的分析结果作为基线。每次新采集完成后对比新旧JSON的差异功能清单的增删新JSON中出现了旧JSON没有的功能项视为功能新增。定价变更paid_plans数组中的price字段发生变化。定位调整hero_headline或differentiators中的文本发生了实质性变化通过文本相似度判断。from deepdiff import DeepDiff def detect_changes(old_analysis: dict, new_analysis: dict): diff DeepDiff(old_analysis, new_analysis, ignore_orderTrue) changes [] if dictionary_item_added in diff: for path in diff[dictionary_item_added]: changes.append(f新增: {path}) if values_changed in diff: for path, change in diff[values_changed].items(): changes.append(f变更: {path}: {change[old_value]} - {change[new_value]}) if iterable_item_added in diff: for path in diff[iterable_item_added]: changes.append(f列表新增: {path}) return changes检测到变化后系统自动生成变更摘要并通过飞书/企业微信机器人推送。针对重要竞品的定价变更或重大功能更新会自动触发邮件告警通知到产品负责人。sequenceDiagram participant S as 定时调度 participant C as 采集引擎 participant L as LLM服务 participant D as 差异检测 participant N as 通知系统 S-C: 触发周度扫描 C-C: 抓取各竞品数据源 C-L: 提交原始文本提取 L--C: 返回结构化JSON C-D: 对比新旧分析结果 D-D: DeepDiff计算变更 alt 检测到重要变更 D-L: 生成变更摘要 L--D: 摘要文本 D-N: 推送告警通知 N-N: 飞书/邮件通知 else 无变更 D-D: 更新扫描时间戳 end四、多模态报告生成与效果度量结构化数据对人来说不够直观。我们需要将分析结果转化为决策者可以快速消化的形式。Markdown报告是最基本的输出格式。通过Jinja2模板引擎将结构化JSON渲染为包含对比表格、雷达图的Markdown文档。每份报告包含竞品概览、功能矩阵、定价对比、SWOT简析四个部分。PPT自动生成是老板们更喜欢的格式。使用python-pptx库将分析数据填入预设的PPT模板。图表部分通过Matplotlib生成SVG后嵌入幻灯片。一个10页的竞品周报PPT可以在30秒内自动生成。from pptx import Presentation from pptx.util import Inches, Pt def generate_report_pptx(competitors: list[dict], template_path: str, output_path: str): prs Presentation(template_path) slide prs.slides[0] # 填充对比表格 table slide.shapes[0].table # 模板第一个元素是表格 headers [维度, *[c[product_name] for c in competitors]] for i, h in enumerate(headers): table.cell(0, i).text h dimensions [核心功能完整性, 定价竞争力, 用户口碑, 技术实力] for row, dim in enumerate(dimensions, 1): table.cell(row, 0).text dim for col, comp in enumerate(competitors, 1): score comp.get(scores, {}).get(dim, N/A) table.cell(row, col).text str(score) prs.save(output_path)效果度量同样不能忽视。我们追踪三个核心指标时效性从竞品官网更新到我们的报告反映该变化的时间差。当前系统将竞品扫描频率设为每周一次重要竞品如直接对手每天一次。P99时效性目标是48小时内覆盖所有变更。信息准确率LLM的提取可能出错例如把免费试用14天理解成Freemium模型。我们每月对20%的报告进行人工抽查计算信息字段的准确率。当前准确率约92%主要错误集中在定价模型的判断。采纳率报告中的建议有多少被产品团队实际讨论或采纳。通过飞书文档的评论和阅读数据粗略估算。这个指标最难量化但它是衡量系统ROI的根本依据。五、总结自动化竞品分析的工程关键采集层要分层设计结构化API数据最快但信息维度有限网页抓取是主力信源需要处理反爬和JS渲染社交媒体讨论质量最高但提取难度最大三者互补。LLM的核心价值是信息标准化将不同来源不同表述方式的信息转化为统一JSON Schema。Prompt工程决定提取准确率上限需持续迭代。变化检测是持续运营的基础DeepDiff对比新旧结构化数据检测到变更自动告警。时机性上重要竞品每天扫描其他竞品每周扫描。输出要适配决策者习惯Markdown报告供技术人员深度阅读PPT报告供管理层快速浏览。一键生成的自动化程度决定系统的持续使用率。度量体系不能遗漏时效性衡量响应速度准确率衡量信息质量采纳率衡量实际价值。三者缺一不可定期Review并据此优化采集频率和Prompt质量。