Vibe Coding实战手册——AI 驱动的市场情报:爬虫、GPT 调研问卷与用户画像克隆

28 阅读41分钟

掌握数据集的创始人,才能掌握路线图。

数据不只是资产——它是你的第一款产品。在你还没有代码、客户,甚至还没有公司名字之前,你捕捉到的那些原始痛点信号,就已经决定了此后所有事情的轨迹。本章讲的,就是如何打下这层基础:如何捕获市场中未经滤镜的痛苦,把它们聚类成可操作的模式,再克隆出理想买家的声音,这样你就能在写下第一行生产代码之前,对自己的方案进行高压测试。

24 小时数据护城河

VC 很喜欢说一句话:“数据是新时代的石油。”这句话很顺口,足以让创始人频频点头,但它危险地只说对了一半。他们没说的是:大多数创始人对待数据的方式,就像在对待一个计划于多年以后才启动的大型海上炼油厂项目——前提还是他们已经 somehow 打到了一口喷涌的油井。他们相信,数据是一个“规模化阶段的问题”,是只有在产品市场契合神奇达成之后,才需要去优化的资源。

这在根本上是反的。
在 AI 时代,数据不是炼油厂;它是那张地震勘探图,告诉你到底该往哪里钻。
数据先于产品。

作为创始人的第一周,不该拿来画线框图,不该拿来争 logo;而应该拿来系统性地收割那些带事实性、带时间戳、带情绪张力的痛苦信号,并且这些信号未来可以被你直接货币化。忘掉你那个自认为很聪明的解决方案;先把自己变成这个问题领域里全世界最懂的人。

想象一下:你从来没见过锁,却试图先去造钥匙。
这就是没有数据就去做产品。
传统的方法——花上几个月做“客户发现”访谈、四处追专家、把问卷撒向虚空——就像是试图通过问几个人“凭记忆描述一下那把锁”,来理解锁长什么样。
而 AI 驱动的方法,是直接拿到那把锁的高分辨率 3D 扫描图

到本章结束时,你会拥有一套工具包,能够在一个周末而不是一个季度里,搭起这样一个数据驱动的基础。你会学会如何:

大规模吸走痛苦(Vacuum Pain at Scale)

系统性地从支持工单、招聘广告、论坛帖子、发票等渠道中,提取成千上万条公开的“运营痛苦自白”,而且不被封、不被限流、不淹没在噪声里。

自动聚类混沌(Auto-Cluster the Chaos)

用大语言模型(LLM),通过一个 prompt,就把一张满是抱怨的混乱表格,瞬间归并成清晰、可量化的“待完成工作(job-to-be-done)”桶,揭示出最常见、最紧急的市场需求。

启动一个合成焦点小组(Spin Up a Synthetic Focus Group)

用用户自己的语言克隆出你的理想客户画像,形成一个 AI 驱动的人设分身。你可以在凌晨 3 点、竞争对手都睡着的时候,向它追问定价、功能、销售异议。

如果你真正投入这套流程,你就能把一整个季度含混不清的“客户发现”,压缩成一个高杠杆、咖啡因驱动的周末。你不再依赖模糊假设,而是得到一个由不可否认、可量化的痛苦组成的仪表盘。
这就是你的数据护城河

数据胜过聪明意见

从“意见”开始,诱惑极大。
你去跟几个业内口碑很好、看起来很专业的“专家”聊,他们会给你一套听上去很有说服力、也很完整的市场问题叙事。
问题在于:这些观点——哪怕来自最资深的领域专家——也都充满了足以把你的产品带偏的致命偏差。

原始、非结构化的数据——这种“笨数据”——没有议程。
服务器日志不会试图让自己听起来更聪明。
论坛上一条抱怨某个功能坏掉的帖子,也不会在乎你的感受。
正因为如此,它才是比“观点”更好的真实基础。

数据可以直接消灭四种偏差:

叙事偏差(Narrative Bias)

人类天生是讲故事的动物。我们会事后把凌乱的结果,倒推出一条干净的因果链,好让世界显得可理解。
一个专家可能会告诉你:

“我们换到软件 X,是因为它集成能力更好。”

但数据日志显示的真实故事,可能是:

“旧软件每到月末都会因为 bug 把导出结果搞坏,财务总监当时都威胁说要辞职了。”

人们会讲出一个让自己显得有战略判断的版本;而数据日志展示的是那种原始、惊慌失措的行为——真正驱动采购决策的东西。

礼貌偏差(Politeness Bias)

在 demo 或访谈里,潜在客户几乎不会当面告诉你:你的点子很普通,或者他们现在的痛点虽然烦,但还不值得解决。
他们会说:

“哇,这真挺不错的。”
“我能想象这会有用。”

因为他们不想让场面太尴尬,不想当场碾碎你的梦想。
但他们的浏览器历史记录不会客气。
他们在论坛里对竞品某个烂导出功能的愤怒吐槽,不会撒谎。
你想要的是真相,不是夸奖。

可得性偏差(Availability Bias)

你天然更容易听到市场中最响、最有观点的那 1%——演讲嘉宾、X 上的大 V、那些有时间出来发表看法的人。
但沉默的大多数、“真正干活的人”,往往忙得根本没时间高谈阔论,他们正忙着实际承受痛苦。
爬虫是伟大的平权器。
它会去技术论坛第 10 页把那些绝望的问题翻出来,也会去 obscure 的 Reddit 线程里把疲惫不堪的评论捞出来。
它会把那群安静而忙碌的大多数的声音浮上来——而他们的问题,往往才是最尖锐、最没被解决的。

专家偏差(Expert Bias)

领域专家当然很宝贵,但他们的专业性,建立在“事情一直以来都是怎么做的”之上。
他们往往对那些基于第一性原理的变化、以及挑战现状的工作流,反而视而不见。
一个资深物流经理可能会告诉你,一个 10 步的手工流程“就是做生意的成本之一”,因为他从来没有被迫想象过:这个流程其实可以被压缩成 1 步自动化。
而那些非专家在原始数据里对这 10 步流程的抱怨,反而是更强的颠覆式机会信号。

所以,你必须把传统顺序彻底翻过来:

先抓取(Scrape)→ 再调研(Survey)→ 最后推测(Speculate)

你真正想先拿到的,是那些带着时间戳、残酷而不可狡辩的痛苦证物:404 日志、愤怒的支持工单、着急招“手工数据录入专员”的招聘广告、替昂贵 incumbent 付出去的供应商发票。
这些,才是没人能用几句漂亮话轻轻带过去的事实。

三层情报栈(The Three-Layer Intelligence Stack)

把整个过程想象成一场精密的情报收集行动:从广域监控,逐渐走向定点审讯。每一层都把原始数据进一步提纯,直到它变成可执行的产品与 Go-to-Market 策略。

表 4.1 三层情报栈——从原始抓取到模拟人设

核心问题武器库交付物典型耗时
Web 抓取“痛苦正在公开地从哪里流血?它是怎么被描述的?”Playwright、Browserless、Bright Data 代理、SerpAPI、Apify含 URL、摘要、时间戳和用户角色的 CSV30 分钟–2 小时
GPT 调研与聚类“这些痛苦里哪些彼此同类?谁最痛?解决它值多少钱?”GPT-4o function calls、pandas、UMAP/t-SNE 可视化按优先级排序的 JTBD 聚类及 ROI 估算1 小时
用户画像克隆(RAG Loop)“一个真实用户在高压状态下,会如何反驳我的方案与定价?”LangChain RAG、Qdrant/ChromaDB、OpenAI embeddings、Anthropic Claude 3一个可实时交互的目标买家聊天拟像1–2 天

这个过程用“采矿”来类比,非常精准:

抓取(Scraping)

相当于地震勘探和重型机械。你不是在盲目推土;你是在用地下雷达,给整个地形做扫描,寻找矿脉(也就是痛苦)。
输出物,是成吨原始而凌乱的材料。

聚类(Clustering)

相当于矿石分拣与提纯工厂。你把原始材料送进去,借助 LLM 的强大理解力,自动把它分成高纯度桶,比如:

  • CSV 格式问题
  • 手工数据转移错误
  • 合规检查耗时过长

同时,它还会帮你量化“纯度”——告诉你哪些痛苦最频繁、最昂贵。

用户画像克隆(Persona Cloning)

相当于冶炼炉和压力测试实验室。你把最富的矿石(用户自己的原话)熔炼成一种可用合金(产品概念),然后不断捶打它,看它在真实世界的价格、安全性、实施异议面前会不会开裂。


第 1 层:快速抓取作战手册(Rapid Scraping Playbook)

第一层情报,核心是速度覆盖面
你的任务不是写出全世界最优雅的 scraper;你的任务,是尽快把信号密度高的数据弄到屏幕上。
把它当作侦察任务:你要先绘出地形图,识别哪些地方在公开泄露痛苦,再收集足够多的原始“自白”,这样你才知道下一步该往哪里深钻。

找出高信号表面(Identify Rich Surfaces)

业余玩家去抓 X。
专业玩家去找那些绝望被记录下来的地方
真正高信号的表面,天天都在明目张胆地泄露宝贵秘密。
别只盯着最 obvious 的地方。

表 4.2 公开承认运营痛苦的高信号表面

表面为什么这里是金矿典型痛苦信号
招聘广告(Indeed、Greenhouse、LinkedIn)公司会公开承认自己内部流程存在缺口,也会坦白哪些手工工作还自动化不了。这本质上是“为一个人形 API 公开申请预算”。“必须熟练处理每周上传到 Shopify 的 CSV 数据。” “有手工数据对账经验优先。”
支持论坛(Zendesk、Freshdesk、GitHub Issues)这里住着付费客户未经修饰的愤怒。工作流一断、功能一坏、钱一损失,他们就会叫。“我们的 nightly export 又把 Excel 文件搞坏了——这是紧急修复,我们的报表工作全卡住了!”
G2/Capterra 评论(3 星)5 星评论只有泛泛而谈的表扬;1 星评论往往只是情绪化骂街。3 星评论才是真金:平衡、具体、清楚地指出功能诉求和流程痛点。“平台主体不错,但报表模块很笨重,我必须手动导出再拼三份不同报表。”
竞品定价页缺失的功能,往往暴露其战略弱点。它们塞进 Enterprise 档位的东西,正是它们知道高价值客户愿意额外付钱买的。“仅 Enterprise 档位提供:审计日志、SSO、API 访问。” 这说明中型市场客户非常想要,但拿不到。
Reddit 与利基 Slack/Discord 社区运营人员和工程师会在这里以一种 sales call 里绝不会出现的坦率程度吐槽。搜“headache”“nightmare”“hate”“workaround”等关键词。r/sysadmin 里的帖子:“我们还在手工轮换 SSH key,这简直是一个等着爆炸的合规噩梦。”
政府披露文件(EDGAR、EU Tenders)上市公司和承包商必须披露运营细节和成本,这能把合规和手工流程的高代价直接摊到你面前。“新的 ESG 披露表单要求对 500 多个数据点进行手工 XBRL 标注,工时显著增加。”
竞品 Changelog 与 API 文档它们在修什么、弃用什么、发布什么?这就是公开路线图。突然大量修“导出可靠性”,说明它们在那里很弱。Changelog:“v2.4.1:修复大规模数据导出时超时的 bug。”(翻译:我们的系统扛不住企业级规模。)

做一个 30 行爬虫(别掉进 Selenium 地狱)

你不需要一个复杂框架。目标是快。
Playwright 是现代工具,比 Selenium 更可靠,也更容易绕过大多数基础机器人检测。
下面这个骨架脚本用的是“headed”模式(headless=False),让它看起来更像真实用户,因此能绕过许多简单 CAPTCHA。

# quick_scraper.py
# A robust scraper to find public confessions of pain.

from playwright.sync_api import sync_playwright
import csv
import re
import time
import random

# --- CONFIGURATION ---
# Use Google dorks for precision. "intext:" finds keywords in the body.
# Example: Find job ads on Greenhouse mentioning manual CSV work.
SEARCH_QUERY = '"manual csv upload" intext:"data entry" site:boards.greenhouse.io'

# Define the output file and headers
OUTPUT_FILE = "pain_signals.csv"
HEADERS = ["url", "title", "snippet", "timestamp"]

# --- FUNCTIONS ---
def get_google_search_url(query):
    # URL-encode the query to handle special characters
    from urllib.parse import quote_plus
    return f"https://www.google.com/search?q={quote_plus(query)}&num=20&hl=en&start={{page}}"

def random_human_wait():
    # Wait for a random short interval to mimic human behavior
    time.sleep(random.uniform(1.8, 3.9))

# --- MAIN SCRAPING LOGIC ---
scraped_rows = []

with sync_playwright() as p:
    # Use a realistic user agent
    browser = p.chromium.launch(headless=False, args=["--start-maximized"])
    context = browser.new_context(
        user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    )
    page = context.new_page(viewport={"width": 1280, "height": 800})

    # Scrape first 3 pages of Google results (0, 10, 20)
    for offset in range(0, 30, 10):
        search_url = get_google_search_url(SEARCH_QUERY).format(page=offset)
        print(f"Navigating to: {search_url}")
        page.goto(search_url)
        random_human_wait()

        # Locate the main links, which are typically within an <h3> tag inside an <a> tag
        links = page.locator("div.g a > h3").all()

        for link_locator in links:
            try:
                parent_a_tag = link_locator.locator("xpath=..")
                url = parent_a_tag.get_attribute("href")
                title = link_locator.inner_text()

                # Skip irrelevant Google-internal links
                if not url or "google.com" in url:
                    continue

                print(f"  -> Visiting: {title[:50]}…")
                page.goto(url, timeout=60000, wait_until="domcontentloaded")
                random_human_wait()

                # Extract the full page content to search for the pain signal
                html = page.content()

                # Use regex to find the keyword surrounded by context
                # This pattern finds "manual" and "csv" within 80 characters of each other
                match = re.search(r"([\w\s]{0,80}manual[\w\s]{0,80}csv[\w\s]{0,80})", html, re.IGNORECASE)

                if match:
                    snippet = match.group(1).strip().replace("\n", " ")
                    print(f"    [!] Signal Found: {snippet}")
                    scraped_rows.append([url, title, snippet, time.strftime("%Y-%m-%d")])

            except Exception as e:
                print(f"    [X] Error processing link: {e}")
                continue

    browser.close()

# --- SAVE TO CSV ---
with open(OUTPUT_FILE, "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(HEADERS)
    writer.writerows(scraped_rows)

print(f"\n Done. Saved {len(scraped_rows)} high-signal leads to {OUTPUT_FILE}.")

让它活着、不被抓的关键点

  • 轮换 User-Agent
    准备 5–10 个现代浏览器 UA(Chrome、Safari、Edge,覆盖 macOS/Windows),轮流用。
  • 智能节流(Intelligent Throttling)
    别只会 time.sleep(2)。要模拟真人停顿:页面加载后停得久一点,点击之间停得短一点。
  • 尊重 robots.txt
    在直接抓某个站点前,先查 domain.com/robots.txt。如果某路径被禁止,那就是核爆区,别碰。转而用 Google 搜这个站的公开内容,通常更安全。
  • 要规模,就上代理
    如果你要认真抓,家里 IP 远远不够。用 Bright Data 或 Smartproxy 这类服务,把请求路由到住宅 IP,让你的抓取器看起来像成千上万个真实用户。

十分钟配置,加上一轮运行,你就能得到一个装满“一手痛苦日志”的 CSV——这种证据,任何市场研究公司都卖不了给你。


信噪比过滤器(Signal-to-Noise Filters)

你的原始 CSV,就像掺着泥土的矿石。
你必须用严苛的布尔门,把它提纯成一份高意向潜在客户清单。

共现门(Co-occurrence Gate)

真正的痛苦,藏在多个词同时出现的组合里。
只保留那些在 120 个字符窗口内出现 ≥2 个痛苦关键词 的记录。
例如:

  • “manual” + “Excel” + “hours”
  • “copy” + “paste” + “error-prone”
  • “compliance” + “report” + “nightmare”

新鲜度门(Freshness Gate)

这个痛苦必须是现在正在痛
筛掉 90–180 天以前的内容。旧问题可能已经被解决了。
把 scraper 设成每周跑一次,才能持续抓到新信号。

角色门(Role Gate)

你想找到的是“承受痛苦的人”和“握预算的人”。
只保留能体现权限与资历的职称:

  • Director、VP、Manager、Lead、Controller、Head of

以及这些职能领域:

  • Operations、Finance、Compliance、DevOps、Revenue

删除来自实习生、初级员工、学术人员的 chatter。
他们能感受到痛,但他们签不了支票。

量化门(Quantification Gate)

最好的信号里,一定带数字。
优先保留那些能量化痛苦成本的片段。
过滤这些关键词:

  • “hours”
  • “team of 5”
  • “thousands of records”
  • “costs us”

这些数据,对于后面做 ROI 计算,都是纯金。

经过这一轮过滤之后,你得到的是一份极其干净、极其合格的 lead list。你甚至可以毫无尴尬地 cold-email 他们,因为你不是在卖东西——你是在对他们自己公开承认过的问题提供解决方案。


第 2 层:GPT 调研与即时聚类(GPT Survey and Instant Clustering)

现在你已经有了一份高信号名单,接下来就该去验证并量化这些痛苦。
一份短、狠、准的问卷,是最理想的工具。
只有抓取,没有验证,你手里还是噪声;你必须让市场自己来确认。
问卷,就是从原始信号过桥到可量化需求的桥梁。它帮你在规模化层面测量:强度、成本、支付意愿。

做一个“一屏到底”的问卷(Craft the One-Scroll Survey)

长而无聊的问卷,完成率几乎为零。
你的问卷必须能在 90 秒内完成
你不是在写博士论文;你是在做一次快速摸脉。
用 Tally.so 或 Google Forms 这种简单工具就够了。

三个魔法问题(The Three Magic Questions)

1)识别题(Recognition Question,单选)

“我们发现你们团队正在处理 [从抓取摘要里抽出来的痛点]。下面哪一项最符合它的主要瓶颈?”

  • A:手工格式化 / 清洗数据
  • B:系统之间 copy / paste 所花的时间
  • C:流程中的错误与数据损坏
  • D:缺少可见性 / 审计轨迹

这些选项,应该来自你在抓取中看见的共性主题。

2)量化题(Quantification Question,数字输入)

“你们团队每周大概花多少小时在这个任务上?或者你估计它每月给公司带来多少成本?”

3)意向题(Intent Question,简单选择)

“如果有一个工具能以 99 美元/月的价格,稳定地彻底消除这整条工作流,你的反应会是什么?”

  • A:现在就收我钱。
  • B:我有兴趣,但会先有些问题想确认。
  • C:这大概不是我们现在的优先事项。

这个结构的巧妙之处在于:
它先让对方感觉“你懂我的具体世界”,再让他给出一个他大概率知道的数字,最后再抛出一个低摩擦的商业命题。

自动化触达(Automate the Outreach)

承诺把匿名化、汇总后的结果分享给所有参与者。
人们很喜欢把自己和同行 benchmark。
用 Instantly.ai 或 Mailshake 这类工具自动化触达。

instantly mail --csv filtered_pain_signals.csv --template cold_survey.html --rate 80/hour

如果完成率低于 15% ,说明你真的戳到神经了。
如果低于 10% ,说明你的关键词错了,或者这个痛苦还不够急。
那就 pivot。

用 GPT Function Calls 把混沌变成地图(Map the Chaos with GPT Function Calls)

现在你手上有一张表,里面塞满了自由文本回答与问卷选项。
别手工分析。
直接用 GPT-4o 的 function-calling,把这些定性混沌在几秒钟内变成一个定量、结构化仪表盘。

关键在于 prompt。
你不是在跟它聊天;你是在指挥一个专业分析师。

import pandas as pd
import openai
import json
from sklearn.feature_extraction.text import TfidfVectorizer
from umap import UMAP
import matplotlib.pyplot as plt
import seaborn as sns

# Load your cleaned survey results:
df = pd.read_csv("survey_responses.csv")

# Assume you have columns like 'user_id', 'quantify_pain_text', and 'intent_choice'.
# Combine text fields for richer context:
df['full_pain_description'] = df['quantify_pain_text'].astype(str) + " " + df['recognition_choice'].astype(str)

openai.api_key = "sk-…"  # Your OpenAI API key

# Create the system prompt, your instruction set for the AI analyst:
system_prompt = {
    "role": "system",
    "content": """
You are a world-class market research analyst. Your task is to analyze survey responses from professionals
about their workflow pains. Group the responses into underlying 'jobs-to-be-done' (JTBD). For each cluster, you must:
- Create a short, descriptive cluster_name.
- Write a pain_summary that captures the essence of the problem in the users’ own words.
- Provide a count of how many users fall into this cluster.
- Estimate the avg_roi_potential based on their quantification of pain and their stated intent to pay. Classify it as High, Medium, or Low.

Return a valid JSON array of objects, like this:
[{"cluster_name": "…", "pain_summary": "…", "count": N, "avg_roi_potential": "…"}]
"""
}

# Format the user data as a JSON string to pass to the model:
user_prompt = {
    "role": "user",
    "content": df.to_json(orient="records")
}

# Make the API call:
resp = openai.ChatCompletion.create(
    model="gpt-4o",
    messages=[system_prompt, user_prompt],
    response_format={"type": "json_object"}  # Use JSON mode for reliable output
)

clusters = json.loads(resp.choices[0].message.content)
print(json.dumps(clusters, indent=2))

# Visualize the pain landscape with UMAP:
# UMAP is a dimensionality reduction technique that helps you visualize high-dimensional data.
# Think of it as creating a 2D map of a complex, multidimensional forest.

# Vectorize the text descriptions using term frequency-inverse document frequency (TF-IDF):
vectorizer = TfidfVectorizer(stop_words='english', min_df=2)
text_vectors = vectorizer.fit_transform(df['full_pain_description'])

# Apply UMAP:
umap_model = UMAP(n_neighbors=5, n_components=2, min_dist=0.3, random_state=42)
embeddings = umap_model.fit_transform(text_vectors.toarray())

# Plot the results:
plt.figure(figsize=(10, 8))
sns.scatterplot(x=embeddings[:, 0], y=embeddings[:, 1], s=50, alpha=0.7)
plt.title("Pain Landscape: Islands of Opportunity", fontsize=16)
plt.xlabel("UMAP Dimension 1")
plt.ylabel("UMAP Dimension 2")
plt.grid(True)
plt.show()

这个 UMAP 图,就是你的藏宝图。
那些形成紧密、独立“岛屿”的聚类,意味着它们是清晰、定义明确的市场切片。
如果你看到的是一团凌乱重叠的云,那说明这些痛点还太泛。
你的任务,是找到最有希望的那个岛:人数最多、且声明 ROI / 支付意愿最高的那个。
那就是你的靶心。
至此,你已经用数据而不是感觉,识别出了你的 beachhead market(滩头市场)。


第 3 层:用户画像克隆(快速 RAG Loop)

真实用户访谈当然非常宝贵,但安排起来慢、执行起来也慢。
在你排这些电话的同时,你其实可以只花 20% 的时间,先拿到 80% 的洞察:做一个会“回嘴”的合成用户——一个 AI 克隆体,而且它是用用户自己的语言训练出来的。
这就是通过 RAG(检索增强生成)循环实现的。

采集一份“可对话语料库”(Harvest a Conversational Corpus)

AI 的好坏,完全取决于你喂了什么数据。
你要的是一份真实、可对话的文本语料。

提法(The Ask)

找 3–5 个最热的潜在客户(也就是那些在问卷里回复最积极的人),跟他们做一个简单交换:

“如果你能给我一份匿名化导出的相关 Slack / Teams 频道内容,或者一批和这条工作流有关的支持工单,我就给你 6 个月免费使用权限,再送你一个个性化 ROI 计算器。”

数据目标(The Data)

目标是 2,000–5,000 条消息。
你真正想要的,不只是信息内容,而是他们交流的质地

  • 他们用什么缩写
  • 他们怎么报告问题
  • 他们表达挫败时的语气
  • 他们和同事的互动方式

替代来源(The Alternatives)

如果拿不到 Slack 导出,就用你之前抓下来的论坛线程、G2 评论、以及用户访谈转录。
关键不在平台,而在于:你必须有一批能反映目标用户“真实如何思考、如何说话”的文本。

20 分钟建出一个“检索增强的大脑”(Build the Retrieval-Augmented Brain in 20 Minutes)

RAG 的工作方式,是先用你的特定文档去“锚定”一个强大的 LLM。
当你提问时,它会先从语料库里找出最相关的片段,再基于这些上下文生成答案。
这样一来,它就不容易幻觉,而且能始终“像那个人说话”。

LangChain 让这件事变得非常直接。

# persona_clone.py
# Build an interactive AI persona from a text corpus:

from langchain_community.document_loaders import TextLoader, DirectoryLoader
from langchain_community.vectorstores import Qdrant
from langchain_openai import OpenAIEmbeddings
from langchain.chains import ConversationalRetrievalChain
from langchain_openai import ChatOpenAI
import os

# Configure the
CORPUS_DIRECTORY = "corpus/"   # Directory where you saved your .txt files
VECTOR_STORE_NAME = "persona_memory"
MODEL_NAME = "gpt-4o"

# Load the documents. DirectoryLoader is great for loading all TXT files from a folder.
loader = DirectoryLoader(CORPUS_DIRECTORY, glob="**/*.txt", loader_cls=TextLoader)
documents = loader.load()
print(f"Loaded {len(documents)} document chunks.")

# Create embeddings and store them in the vector database.
# Embeddings convert text into numerical vectors.
# A vector store (like Qdrant) is a database optimized for finding similar vectors.
# This is the “memory” of your persona.
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vector_store = Qdrant.from_documents(
    documents,
    embeddings,
    location=":memory:",   # Use in-memory storage for speed
    collection_name=VECTOR_STORE_NAME,
)
print("Persona memory created and vectorized.")

# Build the conversational chain.
# This chain combines the retriever (the vector store) with a chat model:
retriever = vector_store.as_retriever(search_kwargs={"k": 5})  # Retrieve top 5 most relevant chunks
qa_chain = ConversationalRetrievalChain.from_llm(
    ChatOpenAI(model_name=MODEL_NAME, temperature=0.3),
    retriever=retriever
)

# Start the interactive chat:
chat_history = []
print("\n--- Persona Clone Activated: 'Controller Cathy' ---")
print("Ask questions about her workflow, pricing, or objections. Type 'exit' to end.")

while True:
    query = input("\nYour Question> ")
    if query.lower() == 'exit':
        break

    result = qa_chain({"question": query, "chat_history": chat_history})
    answer = result["answer"]

    print(f"\nController Cathy> {answer}")
    chat_history.append((query, answer))

现在,你就可以开始毫不留情地审问这个 persona。
别问软问题。要对抗式地问。
这就是你的训练场。

用来拷打用户画像的问题(Grill Questions for Your Persona)

异议(Objections)

“这看起来挺有意思,但我团队已经忙疯了。部署它到底要花多少时间?它会不会把我们月末结账流程搞挂?风险有多大?”

定价(Pricing)

“我为什么要为这个每月付 99 美元,而不是找个实习生来做?这到底该走哪个预算科目?我怎么向老板、也就是 CFO,证明它的 ROI?”

替代方案(Alternatives)

“我们已经用 Zapier 搞定其中一些环节了。你的工具到底比现有 workaround 强 10 倍在哪里?你看过 [竞品 X] 最近发了什么吗?”

安全与合规(Security and Compliance)

“你们怎么处理我们的敏感财务数据?你们 SOC-2 合规了吗?AI 做的每一步,我能拿到完整 audit log 吗?”

这个 bot 给出的答案,会完全基于你语料库中的语言、优先级与焦虑。
你可以用它的回复,直接去写落地页文案、销售 rebuttal 脚本,以及 onboarding 流程——而这时你甚至还没写一行生产代码。


实弹案例:FreightOps AI(00 → 17,000 MRR)

让我们把前面这些理论落到一个真实例子上。
有位独立创始人 Alex,怀疑在极其混乱的货运经纪行业里存在机会。

整个过程,只靠一个创始人、一台笔记本,以及一套 AI 工具驱动完成。
数据护城河在周一就搭起来了,随后所有动作都被它决定。
代码,是第二位的。

表 4.3 FreightOps AI:从痛苦信号到付费 pilot 的 7 天冲刺

步骤时间动作工具结果
1周一 9:00抓 Google / Reddit 上的 “manual quote email”“re-keying freight data”“TMS data entry”,重点盯物流论坛和 LinkedIn 招聘帖Playwright + SerpAPI480 条高痛苦片段,反复提到浪费工时与高价错误
2周一 14:00通过 Tally 发出 60 份高度个性化问卷,直接引用他们的具体痛点。触达文案承诺会回传一份《报价到订舱效率》基准报告Instantly.ai收到 28 份回复(47% 回复率)。GPT 聚类出 3 个核心痛点簇
3周二 9:00选 ROI 最高的簇:“手工把邮件里的运价报价 copy/paste 进 TMS”——平均自报痛苦是每周 8 小时GPT-4o API非常清晰地决定:只为这一个具体而昂贵的工作去构建
4周二 13:00从问卷中找到一位友好货代,换来一份匿名化 Slack 频道导出,交换条件是永久免费账号共情邮件 + NDA获得 2200 条关于报价挫败的真实消息
5周二 15:00用 LangChain 脚本搭出 RAG persona bot——“Brooke the Broker”Python + Qdrant立即开始异议压力测试。“Brooke”立刻提出复杂多站点报价与老旧 TMS 集成问题
6周三–周四用 prompt 驱动逻辑黑出原型。就是一个 Gmail 插件,用 LLM 解析邮件,再把结构化数据吐到 Google SheetReplit + Google Apps Script一个虽然脆弱、但能解决核心痛苦的 demo
7周五给其他问卷回复者做 10 场 Zoom demo,现场演示插件解析真实邮件,并收 400 美元 pilot 费Calendly + Stripe4 个当场付费 pilot(收款 1600 美元)。demo 直接打中了他们自己量化过的痛苦
8第 4 周用 pilot 收入搭出更稳健的后端,加数据库与集成支持Supabase + ZapierMRR 增长到 6000 美元,pilot 转正且开始口碑传播
9第 8 周花 1200 美元赞助 “Logistics Weekly” 的 Beehiiv newsletter,把那份 benchmark report 做成 lead magnetBeehiivMRR 到 17,000 美元,等待名单积累 70 个 lead

合规与伦理护栏(Compliance and Ethics Guardrails)

抓取公开数据、建模用户行为,这件事天然处于灰色地带。
一旦越过用户信任或法律边界,你的分发和公司会死得比任何一次错误部署都快。
下面这些不是建议,而是要求:

尊重 robots.txt 和速率限制

把网站的 robots.txt 当成法律文档。
如果某条路径被禁止给 crawler 访问,就别碰。
违反它,可能让你的 IP 和域名被 Cloudflare 这类服务直接拉黑,相当于你从互联网消失。
始终慢抓、负责任地抓。

尽量少碰 PII,并且做匿名化

从采集数据的第一刻起,你的目标就是删除 PII(可识别个人信息)。
对邮箱做 hash 或 salt,打码名字,删除电话号码,然后再存储,或者再喂进你的 RAG 向量库。
绝不要拿原始、未匿名化的用户数据去训练 AI。

问卷承诺要兑现,保持透明

如果你答应过参与者,会把汇总后的匿名结果发还给他们,那你就必须发。
做个简单 dashboard,或者写一份简短报告。
做不到,就会烧掉你的信誉。
而信誉,是你最值钱的资产。

必须有一键退订机制

你发出的每一封邮件,都必须有清晰的一键退订链接。
persona bot 的输出,以及任何公开 dashboard,也应该链接到隐私政策与数据删除请求表单。
让别人说“不”,必须足够容易。

关注 RAG 偏差,并做安全检查

你的 persona bot,本质上就是训练数据的镜像;而训练数据里可能有偏见、污辱性语言、或过时信息。
在真正投入使用前,你必须人工审计。
至少生成 50–100 条不同问题下的样本回答。检查其中是否存在种族、性别、职业偏见。
一旦发现有害或有毒的源文档,就删掉并重新训练。

了解 GDPR / CCPA

用人话说:如果你在处理欧盟居民或加州居民的数据,他们有权知道你手里有什么,也有权要求删除。
你的 PII 最小化与退订协议,是第一道防线。
一旦开始做真正商业化的运营,找律师确认整个数据处理流程是否合规。

按这些规则做下去,等你未来规模化到需要 SOC-2 审计时,别人会夸你有远见,而不是把你钉在耻辱柱上。


7 天“情报到付费 pilot”冲刺(日历视图)

为了让这一套更具体,这里给出一个压缩进一周的高速度版本。
每天只有一个目标:捕捉痛苦、验证痛苦、给痛苦做压力测试,并向付费验证推进。
照着这个日历走,7 天之后,你要么拿到一个付费客户,要么知道这个痛苦还不够真实,不值得做。

表 4.4 一周高动能节奏示例

上午下午交付物
0(周日)定义 thesis pain。脑暴 20+ 关键词组合与 Google dorks。识别 10+ 高信号抓取表面。搭 scraper 脚本与代理服务,做一轮小测试。一份详细的《Scraper 关键词与表面文档》
1(周一)跑完整抓取。让它跑 1–2 小时,攒一份足够丰富的数据集。应用信噪过滤器(共现、新鲜度、角色、量化)。一份清洗并标注好的 300+ 高意向痛苦信号 CSV
2(周二)写 90 秒问卷与 GPT 个性化外联邮件模板。用 Instantly 发出问卷。问卷已发出,第一批回复开始回来
3(周三)用 GPT API 边收边聚类,识别头号 1–2 个痛点簇。向最积极的 3 个回复者索取语料。收到第一批语料后,立刻搭 RAG persona bot。一份带 ROI 估算的痛点优先级列表,一个可交互 AI persona
4(周四)用难问题拷打 persona bot:价格、异议、实施。记录每个回答。根据 persona 反馈,在 Airtable 或 Replit 里画出 MVP 原型故事板。一张定价单和一份 rebuttal / objection handling 指南
5(周五)给问卷里最优质的 10 个 lead 打电话 / 发邮件,邀请看原型 live demo。直接说清楚:这是付费 pilot。连续跑 15 分钟 demo,并通过 Stripe 链接在会中收款。3–5 个“付费否则死”的承诺,签好 pilot 协议
6(周六)写一条公开 thread 或博客:“周一我发现了一个月值 1 万美元的问题。到周五我拿下了 3 个付费客户。过程如下。”从这条内容中接 inbound,把他们放进等待名单。一个 inbound lead waitlist,分发飞轮开始转动
7(周日)上线一个简洁 SaaS 落地页,价值主张全部用 persona 的语言打磨。嵌入 Stripe 支付链接。休息,并准备服务第一批用户。一个真正能收钱的支付基础设施;下一个功能的循环再次开始

Part 1 核心结论(TAKEAWAYS)

如果你什么都记不住,至少把下面这些原则烧进脑子里:

  • 在你设计任何东西之前,先掌握原始痛苦数据。
    你对市场的看法,一文不值;市场自己的原话数据库,才有价值。
  • 30 行 scraper + GPT 聚类,是一种分析超能力。
    它能在一个下午里,碾碎几个月传统用户研究的工作量。
  • 用户画像克隆,是你的秘密陪练。
    它让你穿着睡衣,一个人就能排练价格战、安全审查、销售异议,直到你的 pitch 刀枪不入。
  • 一条干净、合乎伦理的数据管线,不只是为了合规,它本身就是竞争优势。
    信任,才是终极货币。
  • 执行 7 天闭环。
    在你甚至还没打开代码编辑器之前,先找到清晰的 ROI 证据与支付意愿。

用“汇总后的痛苦”自动生成 Benchmark Dashboard

你收集到的数据,不只是内部资产;它还是一件非常强的营销武器
一旦你有了聚类后的问卷结果,以及 GPT 归类出的主题,你就可以把这些洞察武器化,做成一个公开的数据产品,去自动产生 inbound 需求。

举个例子。
假设你抓了 200 条招聘信息,识别出 50 个高质量 lead,又拿到了 25 份问卷回复。
你的数据揭示出:

  • 34% 的团队每周因手工数据录入损失超过 5 小时
  • 22% 的团队“明确愿意”为解决方案支付 100 美元/月以上
  • 18% 的团队直接点名了他们现在的 workaround(比如“Zapier + Google Sheets + 手工邮件”的混搭)
  • 错误带来的自报平均成本,超过每季度 1500 美元

这时,你已经具备做一个非常能打的公开 benchmark dashboard 的全部素材。
比如题目可以叫:

《2025 年中端市场财务团队手工运营现状》

这个 dashboard 的核心指标可以包括:

  • 每周平均损失工时: 5.1 小时
  • 最常见(也最脆弱)的 workaround: Zapier → GSheet → Email
  • 愿意尝试 AI 方案的团队占比: 71%
  • 自动化带来的平均自报 ROI: 405%

你可以用一天时间用简单工具把它搭出来:

  • Google Sheets + Glide
    把表格转成一个干净、移动友好的应用,这是最快方案。
  • Retool / Budibase
    更强一些的内部工具构建器,可以直接连数据库并生成互动图表。
  • Supabase + SvelteKit
    用来做一个完全定制化、外观更专业的 Web 应用。
  • Notion + GPT-4
    直接让 LLM 把数据整理成干净表格,再嵌进一个公开 Notion 页面。

把这个 dashboard 发到你当初发现痛苦的利基社区里,效果会非常磁性。
你会吸引来:

  • Inbound Leads:
    “这个 dashboard 描述的简直就是我的人生。能聊聊吗?”
  • 投资人:
    “这个创始人既懂分发,又掌握了独特数据洞察。”
  • 合作伙伴:
    “我们能不能把你的自动化工具和我们的咨询服务打包在一起卖?”

你已经把私有研究,转化成了一个公开资产:它会帮你树立权威,同时在你睡觉时替你带来线索。


多人设辩论模拟器(Multi-Persona Debate Simulator)

公司内部的购买决策,几乎从来都不是一个人拍板。
它更像是一场由不同优先级互相拉扯出来的混乱对话。
而 AI 最强大、却也最少被人使用的技巧之一,就是:在你真正去见那家公司之前,先把这场内部争论模拟出来。

你已经克隆过一个 persona。
现在,再基于你的研究,做三个不同的克隆:

Controller Cathy(预算持有人)

关心:预算是否可预测、12 个月 ROI、安全性、避免 churn
她的词汇:资本支出、headcount、SOC-2、供应商风险

Ops Oscar(最痛的用户)

关心:省时间、少出错、因为修好了坏流程而获得功劳
他的词汇:繁琐、沮丧、workaround、快了太多

CTO Chen(安全拦路虎)

关心:数据完整性、集成复杂度、API 稳定性、别再往本已绷紧的技术栈里加新工具
他的词汇:数据驻留、API 速率限制、安全态势、技术债

现在,用 GPT-4o 或 Claude 3 这类高级角色扮演模型,搭一个圆桌辩论。

from openai import OpenAI
client = OpenAI()

system_prompt = {
    "role": "system",
    "content": """
You are a master role-player, simulating a critical team discussion at a mid-sized company. You will embody three distinct personas and alternate between them.

The Topic: They have just seen a pitch for a new AI tool that promises to cut CSV upload and reconciliation time by 80 percent.

The Personas:
Cathy (Controller): She is fiscally conservative and risk-averse. Her main concerns are budget, proving ROI, and vendor security. She speaks in financial terms.
Oscar (Ops Manager): He is the one feeling the daily pain. He is enthusiastic and desperate for a solution but naive about the purchasing process. He speaks in terms of workflow and frustration.
Chen (CTO): He is deeply skeptical of new AI vendors. He cares about security, data governance, and implementation overhead above all else. He speaks in technical terms.

Your task is to generate a realistic, multi-turn conversation between them. It should include points of agreement and, more importantly, points of conflict. Start the conversation with Oscar being excited.
"""
}

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[system_prompt],
    max_tokens=1500,
    temperature=0.8  # Higher temp for more creative, realistic dialogue
)

print(response.choices[0].message.content)

输出片段示例:

Oscar:
“我跟你们说,这东西可能真会改变游戏规则。节省 80% 时间!这几乎相当于我团队每周能拿回整整一天。我们终于可以做分析,而不是只做数据录入了。”

Cathy:
“一整天确实很有吸引力,Oscar,但总成本是多少?按席位收费吗?有实施费吗?我得看到 12 个月成本拆解,以及这和硬美元 ROI 怎么对应,不能只讲‘节省时间’。”

Chen:
“我还有更基础的问题。我们的数据到底在哪里处理?是在本地设备上,还是发到他们云里?如果在云里,他们的数据驻留策略和静态加密政策是什么?任何把敏感财务数据发到一个黑盒‘AI 平台’的工具,我都不会批准。有人看过他们的 SOC-2 Type II 报告吗?”

只用 5 分钟,你就能从这个练习里拿到纯金信息:

  • 各关键角色最核心的异议
  • 你在 pitch deck 里必须使用的内部词汇
  • 你必须建设的功能(比如给 Cathy 的 audit log,给 Chen 的 API 文档)
  • Cathy 会要求的那套 ROI 计算方式

这就像你还没进考场,就已经拿到了答案纸。


预先生成 Pitch 文档(Build Once, Use 50 Times)

有了已验证的痛点和已模拟的异议之后,你就不该再发那种通用 pitch deck 了。
相反,你应该开始自动生成针对每一个“痛点簇 × persona”组合的定制 one-pager。

工作流(The Workflow)

  • 输入:
    你的聚类问卷数据(例如:“Cluster: Manual Invoice Reconciliation”)以及 persona 辩论中的关键短语。
  • 模板:
    在 Markdown 或 Notion 里做一个简单文档模板。
  • 生成器:
    用一个简单 Python 脚本结合 Jinja2,甚至直接用一个高级 GPT prompt,把数据塞进模板里。

One-Pager 模板(Markdown)

# Proposal for [Company Name]: Eliminating Manual Invoice Reconciliation

Hi [Contact Name],

Based on our research with finance teams, we know that manually reconciling invoices against purchase orders is a major time sink, often taking {{avghourslost}} hours per week and leading to costly errors.

## Your World Today vs. With Our Tool

### Before (The Grind):
- Download PDF invoices from email.
- Manually copy/paste line items into a spreadsheet.
- Cross-reference against the TMS.
- Flag discrepancies for review.

**Risk:** {{common_error_from_corpus}}

### After (5 Minutes):
1. Forward the invoice email to invoices@yourco.ai.
2. Our AI extracts the data, validates it against your TMS via API, and flags only the exceptions for your review.

## Built for the “Controller Cathy” & “CTO Chen” in Your Life
- **ROI Calculator:** Based on your scale, we project an annual savings of *${{calculated_roi}}*
- **Security First:** SOC-2 Type II compliant, end-to-end encryption, and full audit logs.
- **Simple Setup:** Live in under an hour with our QuickBooks and NetSuite integrations.

Ready to erase this task? Let's start a no-risk, $99 pilot next week.

会这么做的创始人,拿下的 pilot 数量通常是别人 3 倍。
不是因为他们产品天生更好,而是因为他们的 pitch 读起来就像是“从客户脑子里直接抄出来的”。


利基渠道作战手册(The Niche Channel Playbook)

你不需要 10,000 个 X 粉丝。
你需要的是,在一个高信号、你的 ICP 真正栖息与呼吸的渠道里,成为一个值得信任的声音。
而你的情报收集过程,会非常清楚地告诉你:那个地方到底在哪里。

这个公式是个闭环:

  1. 从利基渠道里抓痛苦
  2. 用 GPT 综合并验证这些痛苦
  3. 用 AI persona 对你的方案进行针对性异议压力测试
  4. 自动生成一种“说他们的话”的 pitch
  5. 再把这份高度相关的 pitch 投回那个痛苦原本就存在的渠道里

这种“高度针对、价值优先”的打法,比“做出来他们自然会来”强太多了。

表 4.5 把 ICP 映射到利基渠道与分发打法

ICP痛苦利基渠道战术
物流运营经理手工货运报价r/logistics、FreightWaves Slack发布你的《报价低效现状》benchmark dashboard,并提供免费的现有工作流分析
电商 CFOShopify 拒付对账DTC Twitter、The Commerce Collective Slack分享你的公开 ROI 计算器;发起投票:“上个月你在拒付上损失了多少小时?” 然后跟进回复
Fintech CTOAI 功能的 SOC-2 合规Hacker News、Lenny’s Newsletter 社区发布一篇详细技术博客:《我们如何低成本搭出 SOC-2-ready 的 RAG 架构》
医疗管理人员病人 intake form 数据录入面向诊所经理的 LinkedIn 利基群组分享一个试点案例:某用户每周省出 15 小时,并提供 HIPAA 合规 demo

Bonus:符合伦理的 GPT 冷邮件狙击手

用 GPT-4 生成那种“痛苦感知型”的高转化 cold outreach,同时尊重对方时间。
一条关键观察,一个链接,零废话。

Prompt 模板:

你是一位顶级冷邮件写手。你的风格应当简短、共情、直接。请为 {name} 在 {company} 生成一封短邮件。我的洞察是,他们团队正因 {snippet_from_scraper} 而受苦。我的工具正好解决这个具体问题。目标不是约会议,而是让对方回复表达兴趣。控制在 50 词以内。

输出模板:

Subject: {company} + manual data

Hey {name},

Saw a job post indicating your team spends hours on {snippet_from_scraper}.
I built a dead-simple AI tool that makes that a 30-second task.

No sales call or sign-up needed to see ithere's a 2-minute video of it working: [link_to_loom_demo]

Worth a look?

– [Your Name]

{snippet} 直接从你过滤后的 CSV 里拉出来。
给你最重要的 10 个潜在客户,各录一条定制 Loom 或 Tella 视频。
这种个性化程度极高,因此第一条消息的回复率常常能到 30–50%


真正的护城河,是数据护城河

当你跑完整章这套情报栈时,你不只是“更快”地在构建——你是在用一种根本不同的方式构建。
你是在通过把市场验证前置,系统性地给你的创业项目去风险。

AI 不只是代码助手,也不只是你落地页上的聊天机器人。
它是一把战略级武器,让一个意志坚定的创始人可以:

  • 挖出那些被竞争对手自己的观点蒙蔽而看不到的真相
  • 以快过一整个常春藤分析师团队的速度,综合市场模式
  • 在关键销售对话发生之前,先排练并赢下它们
  • 以接近零边际成本生成一份又一份量身定制的营销与销售资产
  • 建立会持续复利的分发资产

这不是理论。
它是一张按 GPU 速度执行的蓝图。
其结果就是:你不再靠猜。
你不再做“为了找问题而做的解决方案”。
你不再低声下气求别人给你开会。
你做出来的,是市场钱包本来就在渴望的东西。


最终行动清单(FINAL ACTION CHECKLIST)

把这当成你未来 7 天的路线图,一项项打钩。

第 1 步:抓痛(Scrape the Pain)

  • 定义 5+ 个 Google dorks 与 10+ 个目标抓取表面
  • 跑爬虫,至少收集 300 条原始信号
  • 用过滤器把它压缩成 <100 个高质量 lead

第 2 步:验证并量化(Validate and Quantify)

  • 做一个 90 秒、3 个问题的问卷
  • 发一轮个性化外联,目标回复率 >15%
  • 用 GPT 聚类回复,并识别 ROI 最高的头号痛苦簇

第 3 步:克隆并审问(Clone and Interrogate)

  • 从 1–3 个热 lead 那里拿到可对话语料
  • 搭一个基于 RAG 的 persona bot
  • 至少用 20 个难问题去拷打它:定价、安全、可用性

第 4 步:把情报武器化(Weaponize Your Intel)

  • 用问卷数据做一个公开 benchmark dashboard
  • 跑一场多 persona 辩论,梳理购买委员会内部冲突
  • 为你最重要的 persona 生成定制 one-page pitch 文档

第 5 步:推向市场(Go to Market)

  • 把 benchmark dashboard 发到你的 ICP 真正活跃的利基渠道里
  • 给最重要的 10 个 lead 发“狙击型”邮件
  • 转化出至少 3–5 个付费 pilot 客户

第 6 步:上线并记录(Launch and Document)

  • 发布一条 build in public 内容,记录你的 7 天旅程
  • 上线一个带支付链接的简单 landing page
  • 启动 inbound flywheel

回顾(RECAP)

本章你学到的策略包括:

先抓,再猜

把你的策略锚定在目标市场公开承认的痛苦上,而不是专家观点上。

把 GPT 当“超人类聚类分析师”,而不是普通聊天机器人

把定性混沌,变成定量路线图。

用基于 RAG 的 persona 克隆你的 ICP

提前排练并去风险那些最关键的对话:价格、安全、流失。

为每一个“persona × pain”组合生成定制 pitch 资产

用客户自己的语言,去谈他们自己的问题。

把这些资产投放进高信任的利基渠道,使用零废话、价值优先的信息

去痛苦真正存在的地方。

执行一条从“抓取到的痛苦”直达“付费 pilot”的 7 天流水线

先做出动能、先收现金、先验证,再考虑正式开发。