关于 MarketMirror
MarketMirror 是开源的营销模拟工具,供创业者、营销和销售团队在真实投放前测试广告、价格与销售话术。它生成模拟买家并提供报告和仪表板;结果来自 AI 模拟,不代表真实客户或人群。
主要功能
- 01生成可配置的模拟买家
- 02测试广告、文案、价格和邮件
- 03模拟销售对话与网站访问
- 04比较受众、消息和 AI 提供方
- 05导出 HTML 仪表板及多种格式结果
适用场景
- 01投放前比较不同广告和标题
- 02探索不同受众对价格与优惠的反应
- 03排练销售话术并识别潜在异议
- 04根据模拟结果规划真实客户测试
MCP 相关
MarketMirror 可供兼容 MCP 的 Agent 使用,README 列出 Claude Code、Codex、Cursor 和 Gemini。通过插件以自然语言发起测试,由 Agent 构建模拟买家、运行测试并展示仪表板。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
27收录的工具列表 · 更新于 2 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| out | string | 否 | |
| spec | object | 是 | |
| spec.url | string | 是 | |
| spec.goal | string | 否 | |
| spec.task | string | 否 | |
| spec.checks | array | 否 | |
| spec.device | enum | 否 | mobile | desktop |
| spec.headless | boolean | 否 | |
| spec.max_steps | integer | 否 | |
| spec.test_data | object | 否 | 仅限自有测试身份。多个注册访客需要使用包含 {visitor} 的电子邮件模板。服务商 API 密钥绝不可提供。 |
| spec.allow_cart | boolean | 否 | |
| spec.goal_check | string | 否 | |
| spec.loop_limit | integer | 否 | |
| spec.max_personas | integer | 否 | |
| spec.record_trace | boolean | 否 | 选择启用的原始跟踪记录可能包含测试凭据和网络数据 |
| spec.record_video | boolean | 否 | |
| spec.max_elapsed_s | number | 否 | |
| spec.max_recoveries | integer | 否 | |
| spec.max_model_calls | integer | 否 | |
| spec.max_input_tokens | integer | 否 | |
| spec.observation_mode | enum | 否 | compact | full |
| spec.allow_signup_submit | boolean | 否 | |
| spec.observation_text_chars | integer | 否 | |
| simulation_id | string | 是 |
详细介绍
MarketMirror:AI 市场调研与营销模拟
在投入真实营销活动之前,先让模拟买家试用你的广告、价格和销售话术。
English · 简体中文
开源,专为 AI Agent 打造。 可通过 Claude Code、Codex、Cursor、Gemini 或任何兼容 MCP 的 Agent 使用。安装插件后,用日常语言提出要求(“在印度的年轻父母中测试这三则广告”),你的 Agent 就会创建模拟买家、运行测试,并展示仪表板。可自托管:程序在你的电脑上运行;只有模型调用(发送给你选择的提供商)和可选的公开调研数据会离开本机。
▶ 观看 60 秒的发布短片(带字幕) · 9:16 竖屏剪辑版 · 使用 launch-video/ 中的 HyperFrames 制作
打开在线演示:在浏览器中查看一项由 2,999 名模拟买家参与的完整模拟运行仪表板,无需安装。(Fitloop 是虚构的应用;所有数字均为模拟数据。)
如果 MarketMirror 帮你避免了一次失败的发布,点个 ⭐ 就能帮助更多人发现它。
MarketMirror 是什么?
MarketMirror 为你的下一项营销决策提供一群练习受众。描述你的产品和想要触达的人群,它就会生成 AI 虚拟人物,让他们对你的广告作出反应、比较价格、提出问题、表达顾虑,并回应销售话术。
你将获得一份报告,说明哪些内容吸引了他们、哪些内容令他们反感、应该做出哪些调整,以及接下来可以与真实客户测试什么。你还可以观看模拟过程,并在仪表板中探索结果。
例如:你要推出一款健身应用。广告应该突出“每天 15 分钟”,还是“不到一次健身房训练的时间”?免费试用是否需要提供支付卡信息?MarketMirror 让你在正式营销活动开始前先演练这些选择。
这些买家是模拟出来的。 他们的回答由 AI 生成,因此应将其用于构思和比较创意。请通过真实客户和小规模的线上实验,验证有潜力的发现。
适用人群
| 如果你是…… | 使用 MarketMirror 来…… |
|---|---|
| 创始人或小型企业主 | 探索不同的人可能如何理解你的产品、定价或发布优惠。 |
| 营销人员或代理机构 | 在选择实际测试方案前,对比广告、标题、邮件和受众。 |
| 销售团队 | 练习推介、发现可能的顾虑,并尝试更清晰的回答。 |
| 产品或研究团队 | 探索购买决策和网站浏览路径,然后规划客户研究。 |
| 开发者或 AI Agent 构建者 | 通过命令、API、Python 库或已连接的 AI 助手运行相同的工作流。 |
认识模拟买家
模拟买家是一个 AI 生成的角色,代表你的目标受众中的某个人物。这个角色有自己的背景,也有接受、质疑或拒绝某项优惠的实际原因。
你可以选择想要探索的群体,例如特定国家的学生、在职父母和年轻专业人士。MarketMirror 会在这些群体中创建不同的人物,并可以在向他们展示营销内容之前询问他们的生活情况。
| 买家可以具备的特征 | 对测试的意义 |
|---|---|
| 背景 | 年龄、所在地、工作和人生阶段为其回答提供背景。 |
| 预算和优先事项 | 某项优惠可能会引起他们的兴趣,但仍要与更紧迫的支出竞争。 |
| 手机和网络连接 | 页面内容过多或视频可能不适合他们的设备或流量套餐。 |
| 会向谁征求意见 | 伴侣、家人或社群可能会影响购买决定。 |
| 信任方面的顾虑 | 隐藏费用、含糊不清的宣传或糟糕的过往体验可能会让他们犹豫。 |
| 购买决策卡片 | 摘要会记录哪些因素可能说服他们、哪些因素可能阻止他们,以及还有谁会产生影响。 |
**买家示例:**一位忙碌的家长,希望在家进行短时锻炼,使用一部经济型手机,并担心遇到意外收费。他可能喜欢较低的月费,却拒绝立即要求提供支付卡的“免费”试用。另一位买家可能更在意锻炼质量,而非价格。这些都是虚构示例,并非来自真实客户的发现。
在同一轮测试中,买家可以记住先前的体验。不喜欢某则广告的人,可能会把这种反应延续到之后的问卷调查或推介中。不同的对比情境会保留各自的历史记录。
详细的人物设定有助于你探索不同的观点,但这并不意味着生成的回答能够代表真实人群。
可以测试的内容
| 你的问题 | MarketMirror 的作用 | 你可以从模拟中了解到什么 |
|---|---|---|
| 哪则广告能吸引注意? | 将你的广告放在模拟的 Facebook、Instagram、Reddit、TikTok、LinkedIn 或 X 信息流中的普通帖子之间。 | 买家会在哪些广告前停留、忽略、点击、评论或选择隐藏。 |
| 哪个标题或信息更清晰? | 向不同买家展示不同版本,并询问他们的反应。 | 哪种措辞能引起兴趣,哪种会造成困惑。 |
| 价格或优惠是否合适? | 提出价格相关问题,并比较不同优惠或价格档位。 | 价格从何时起成为顾虑,以及哪些条款需要解释。 |
| 发布期间可能会发生什么? | 让买家在模拟的社交对话中发帖、回复和互动,并安排品牌帖子与活动。 | 讨论中出现的问题、异议和主题。 |
| 邮件能引起他们的兴趣吗? | 在模拟收件箱中测试主题行、邮件内容或邮件序列。 | 模拟生成的打开、阅读和回复选择。不会发送任何邮件。 |
| 我们的销售话术效果如何? | 展示话术、收集顾虑、尝试你的答复,然后再次询问。 | 哪些顾虑仍然存在,以及你的答复是否有帮助或让情况变得更糟。 |
| 我们的网站在哪些地方流失访客? | 引导模拟访客浏览真实网站,并记录他们的操作。 | 他们在哪些地方犹豫、离开或完成经过检查的任务,例如将商品加入购物车。 |
| 我们应该优先调查哪个受众群体? | 比较你所选群体和国家/地区的反馈。 | 值得通过真实客户研究进一步了解的差异。 |
| 接下来应该测试什么? | 根据本次运行以及(如有提供)真实广告系列导出数据,提出后续实验建议。 | 开展下一次真实测试的实用起点。 |
| 模拟结果与我们的实际结果相符吗? | 比较成对的模拟结果和观测结果。 | 模拟在这些实验中的表现,以及需要调整的地方。 |
你可以重复进行比较,看看结果在不同运行中是否会变化。你也可以使用不同的 AI 提供商,并查看它们在哪些方面存在分歧。这两种方式都有助于揭示模拟中的不确定性。
流程概览

- 介绍你的产品。 提供简介、文档或网站,说明你销售什么、能帮助谁、价格是多少,以及有哪些依据支持你的说法。你也可以提供关联的公开反馈或广告系列导出数据。
- 选择受众。 描述你想要了解的群体和地区。MarketMirror 会创建模拟人物。继续之前,请查看他们的资料。
- 提供供他们反馈的内容。 添加广告、信息、价格、邮件、销售话术或网站任务。选择能够回答你问题的测试。
- 查看建议。 在报告和仪表板中查看反馈、顾虑、比较结果和建议的行动。
- 尝试一次小规模真实实验。 使用实际客户反馈或广告系列结果,检验哪些内容经得起验证。如果有合适的数据,可以导入这些结果进行比较。
书面报告会将一条建议放在顶部:
| 建议 | 如何使用 |
|---|---|
| 推进 | 将有前景的想法用于小规模真实测试。 |
| 迭代 | 修改薄弱部分并再次测试。 |
| 暂缓 | 在投入资金之前,重新考虑此版本。 |
这些建议总结了模拟信号。“推进”并不保证能带来销售。
你将获得什么
实际产品截图。Fitloop 是一个虚构的示例应用;所有显示的买家回应和绩效数据均为模拟结果。上方展示的横幅和工作流为概念性作品。
- **决策和后续行动:**哪些内容应保留、哪些应调整,以及哪些应与真人测试。
- **买家回应:**模拟对象是谁、他们说了什么,以及他们最关心的问题。
- **对比:**运行相关测试时,不同广告、消息、报价、受众和 AI 提供商之间的差异。
- **可分享的报告:**保存的 HTML 仪表板,无需服务即可打开,可离线使用,并包含图表背后的数据表。
- **可下载的结果:**以 Markdown、JSON、CSV 和 PDF 格式导出报告和数据。
- **实时视图:**在运行过程中查看进度、买家活动和社交帖子。
完整的截图集和详细说明见下文。
仪表板
每次运行都会生成一个独立的 HTML 仪表板:无需服务、不会发起外部请求,支持浅色和深色主题,并适配手机布局。侧边栏将各个部分分为概览、买家、测试、证据和模拟本身;每张图表背后都有数据表,报告可导出为 Markdown、JSON、CSV 和 PDF。对于包含 500 多个 Agent 的运行,Agent 表格会列出最活跃的 500 个,并注明这一点;所有 Agent 仍会显示在人员卡片中,也会包含在 CSV 下载文件里。以下截图来自 3,000 人的 Fitloop 市场(由 Claude、Codex 和 Gemini 编写的人员),研究页面(报价研究)和实时控制室(1,000 人的运行)除外。scripts/readme_screenshots.py 可使用已安装的 Chrome,从任意运行的 dashboard.html 重新生成这些截图。
| 概览 | |
![]() 一览与决策。 核心数据、继续 / 迭代 / 停止的决策及其背后的信号,以及一页简报,其中包含三项行动、一份预算计划和未来 30 天的安排。 | ![]() 他们在哪里。 模拟人群的世界地图。可切换查看各国的人数、愿意转化的人数、广告 CTR、推介接受率和潜在客户评分;表格列出热门城市和人群居住地。 |
| 买家 | |
![]() 买家怎么说。 根据自由文本回答得出的购买意向、兴趣、信任度和口碑,并映射为 1–5 分布,按受众细分。 | ![]() 该锁定哪些受众。 并排比较每个细分群体、国家、社群、年龄段和性别,包括意向、信任度、愿意转化的人数和首要异议。 |
![]() 什么会让人止步。 按占比排列的异议,每项都附有合成买家引述,以及什么会改变对方的想法。 | ![]() 哪条信息更胜一筹。 对你的信息进行随机分流测试,并为每个受众找出最佳信息。 |
| 测试 | |
![]() 在真实感信息流中展示广告。 每则广告都会出现在所属平台的信息流中,与自然帖子并列:拇指停留率、CTR、点击后的行为、评论和支出预测。 | ![]() 社交信息流。 展示模拟社交轮次中的每条帖子及其点赞、回复和情感倾向;可按轮次、受众和国家筛选,并查看各轮次的活动情况。 |
![]() 人们愿意支付多少。 按细分群体展示可接受价格范围、最佳价格点和价格敏感度曲线。 | ![]() 行动手册。 每个受众一张卡片:重点介绍什么、应预先化解哪项异议、如何回应、在哪里推广,以及一条作为佐证的合成引述。 |
![]() 模型意见是否一致? 按每个人背后的提供商拆分同一份调查,展示 95% 区间和三项核查。此处,Codex 模拟的人群远比 Claude 的人群消极;而 Gemini 的配额用尽后由 Claude 扮演的 Gemini 人群,回答方式与 Claude 的人群相似。 | ![]() 销售演练。 推介评分、反驳前后的接受 / 也许 / 拒绝情况,以及每项异议、所用的反驳、反驳影响的人数和人们提出的后续问题。 |
| 营销实验室。 营销实验室(采购委员会、创意优化器、竞争对比卡、客户旅程、定价选择、竞品选择、落地页拆解、角色扮演、假设分析、按受众划分的广告、搜索行为、真实与模拟的顾虑、口碑)会展示每项结果,以及受访人数、作答人数和未能作答的人数,并提供 95% 区间。 | |
| 证据 | |
![]() 分析师小组。 五位分析师独立阅读这次运行的结果;展示他们的共识、共同认同的主题,以及每位分析师的建议。 | ![]() 模拟人群。 每个人的生活故事均来自一段简短访谈;还包括手机和数据套餐、所属群组、他们在本次运行中的行为,以及潜在客户评分。可按细分群体、国家、结论和潜在客户评分筛选。 |
![]() 报告。 通俗易懂的报告,包含目录、开篇决策、模拟对象、结果、异议、定价、销售备注、行动计划及其局限性。可导出为 Markdown、JSON、CSV 和 PDF。 | ![]() 研究。 对同一批人群测试多个情景,每个情景使用多个种子:展示获胜方案、并排对比表、变化内容,以及结果是否超出种子波动范围。 |
| 实时 | |
![]() 实时控制室。 在 /live 观看运行过程:每个阶段、每位模拟人物行动时亮起并呈现其回答对应的颜色、他们发布的内容和评论,以及进度日志。 | |
工作原理
| 阶段 | 输入 → 输出 |
|---|---|
| 了解 | 产品简介、文档或网站 → 产品档案和知识图谱 |
| 构建 | 受众细分和公开反馈 → 带有访谈和决策卡片的模拟买家 |
| 测试 | 广告、消息、价格、帖子或推介 → 反馈、异议和比较结果 |
| 决策 | 已保存的模拟输出 → 建议、报告和仪表板 |
| 验证 | 观测到的营销活动或调查结果 → 回测、校准和下一项实验 |
只需运行一条命令 market-test,即可从单个配置文件运行已配置的工作流阶段。单项测试也可以单独运行。每个步骤生成的所有内容都会保存到运行文件夹中,因此中断的运行会从停止处继续。
1. 了解产品
MarketMirror 会读取你的简介、文档或网站,并编写一份产品档案,说明目标用户、产品方案、定位、证明材料、竞争对手以及尚不明确的信息。之后的每条提示词都会读取这份档案,因此模拟对象会针对你的实际产品作出反应,而不是针对一个模糊的想法。
你的文档还会转化为一个小型知识图谱(存储在本地 SQLite 中,使用本地嵌入进行搜索,无需额外服务)。图谱中的组织和公众人物可以作为发布帖子的账号加入模拟。
你还可以选择使用 research 收集真实用户已有的反馈:Hacker News 讨论串、特定国家/地区的 App Store 评论、Reddit 搜索结果,以及你提供的网页,并附上各自的链接。这些引言会展示给编写模拟买家的参与者,让市场模拟从真实用语出发。
2. 构建市场
你在一份简短的规格说明中描述受众:“印度的学生,18-24 岁,500 人;菲律宾的家长,30-45 岁,400 人”,还要写明国家、城市和社群,例如 WhatsApp 跑步群或 subreddit。然后,为每个人:
flowchart LR
S["Slot<br/>age · gender · city<br/>income · life stage"] --> P["Persona<br/>150-250 words"]
P --> G["Stereotype guard<br/>no two alike in job<br/>and city"]
G --> I["Life interview<br/>12 questions +<br/>first-person summary"]
I --> F["Follow-ups<br/>2 probes · 3 product<br/>questions · decision card"]
- 名额会让每个受众的人均匀分布在不同年龄、性别、城市(大城市和小城市)、收入和人生阶段中,避免出现 500 个一模一样的 24 岁人士。
- 刻板印象防护会确保同一受众中,没有两个人同时拥有相同的职业和城市(它会将其中一人安排到另一座城市或更改其角色;此过程在代码中完成,不调用模型),并标记出人物过于相似的受众。
- 生活访谈会提出研究人员会问的问题:你在哪里长大?这个月手头宽裕吗?你会先削减哪项开支?你用什么手机?流量套餐怎么样?说说你被骗的一次经历。花大钱之前,你会问谁?广告最让你烦的是什么? 答案会整理成以人物自己的口吻和语言撰写的第一人称摘要。
- 决策卡描述这个人如何购买:会问谁、多久做决定、什么会让他答应、什么会让他打消念头、不能接受的条件、他会留意哪些信任信号、每月可自由支配的余钱,以及他说的和做的之间有哪些差异。
- 社群为人们提供交流的地方:每个人会加入你指定的几个群组,并在其中互相关注。
以下是这次 3,000 人运行中生成的一人,完全保留模型的原文(节选):
| 人物 | Yash Malhotra,42 岁,Pune。网约车司机兼车主;周末经营手机配件摊位。中低收入,使用 Realme 9 Pro,Jio 预付费套餐 ₹349(每天 2 GB)。是 Working Moms & Dads India 的成员。 |
| 他的话 | “Mi Yash Malhotra, 42, Pune madhe cab chalvto ani weekend la mobile accessories stall lavto… crypto course madhe ₹6,000 gelele mhanun reviews bghto ani bayko aai la vicharto。”(他在加密货币课程上损失了 ₹6,000,所以会看评论,并询问妻子和母亲。) |
| 购买前会问 | 妻子 Pooja、母亲,以及摊位上的 Santosh |
| 会让他答应的条件 | 免费试用、价格便宜、家庭套餐、印地语教练 |
| 会让他放弃的情况 | 夸大承诺的广告、无法跳过的长广告、需要提前提供银行卡;隐藏费用 |
| 信任的依据 | 4 星及以上的评论、清晰的价格、家人的意见 |
| 口头承诺与实际行动 | 他说会利用等待时间练习 15 分钟,但他的班次经常拖长,而且他很累,所以很可能无法坚持。 |
这些人会在整个运行过程中保留记忆:如果有人隐藏了你的广告或忽略了你的邮件,在问卷和推介中也会记得这件事。使用多个模型提供方时,每个提供方都会撰写分配给自己的那部分人物,并从头到尾扮演他们(在一个市场中使用多个模型)。
3. 把他们放进真实世界
真实动态流中的广告(动态流测试)。 每个人都会在你测试的每个平台(Facebook、Instagram、Reddit、TikTok、LinkedIn、X)上浏览动态流:其中包含若干条本地自然帖子,并在平台通常展示赞助帖的位置放入一条你的广告。测试多个广告时,每个人只会看到其中一条,并随机分配,因此这是一项拆分测试。对于每条帖子,他们都会报告自己的行为:划过、停留以及停留时长、观看、回应、评论、分享、收藏、点击或隐藏,并写下一句想法。平台指南会提供典型的基准率(大多数人会划过大多数广告),避免模拟出来的人过于正面。你会获得按广告和受众划分的广告管理数据(拇指停留率、CTR、点击后的行为);使用 --seeds 3 时,你会得到一个范围,而不是单个数字。
社交回合。 随后,这些人会在类似 Reddit 和 X 的平台上活动数个回合,由带有推荐动态流的 OASIS 引擎驱动。你的品牌帖子和发布日历(第 3 天降价、第 5 天发布网红帖子)会在你安排的回合中出现;你也可以将实时新闻推送到正在运行的模拟中(“竞争对手刚刚降价了”)。人们会用自己的语气发帖、回复、点赞、关注和争论。仪表板的社交动态流会按回合、受众和国家显示所有帖子,以及对品牌帖子的回复和其中表达的情绪。
4. 询问他们
调查问卷。 每个人都会用自己的话回答:他们会尝试吗?有多感兴趣?他们信任它吗?他们会推荐它吗?自由文本会通过语义相似度评分(SSR)转化为 1-5 分的评分分布:使用本地嵌入,将每个回答与五条锚点陈述进行比较,无需额外调用模型。直接要求评分时,大模型给出的评分分布往往过于集中、不切实际;而根据人们自己的话进行评分,得到的分布会更接近真实调查面板,正如 SSR 论文所报告的那样。调查问卷还可以:
- 对你的消息进行拆分测试,每个人会随机看到其中一条;
- 询问四个价格问题,并绘制可接受的价格范围和最佳价格点(Van Westendorp);
- “模拟一周后”再次询问一部分受访者,并报告有多少人给出了相同结论(重测信度);
- 当每个受众的回答占比都落在你设定的误差范围内时,提前停止。
销售演练。 你的推介会发送给每位买家。他们会提出异议,你则逐一回应,然后他们再次做出决定。你会得到按排名排列的异议、有效的回应,以及每个人的潜在客户评分(“先联系谁”)。
分析师小组。 五位分析师会各自独立阅读整个模拟过程,并分别建议继续、迭代或停止。他们的一致程度是对报告的检验,而不是决定结果的投票。
5. 做出决定
决策卡片会在顶部给出继续、迭代或停止的结论,并列出背后的信号:调查问卷的购买意向(继续需要 1-5 分制的平均分达到 3.75,迭代需要达到 3.1)、动态流测试中的最佳广告、分析师意见和首要异议。报告会用通俗语言说明:模拟了哪些人、他们说了什么、哪些因素阻碍了他们、应该做出哪些改变、行动计划以及局限性。报告中的每个数字都会与模拟过程的事实表进行核对;如果写作模型运行失败,则会生成纯数据报告。
所有内容都会呈现在一个 HTML 仪表板中,无需服务器即可打开,并支持离线使用、浅色和深色模式以及手机浏览。每张图表背后都有对应的数据表,报告可下载为 Markdown、JSON、CSV 或 PDF。实时控制室会展示运行中的模拟:每个阶段、每个人采取行动时的动态提示,以及他们发布的内容。查看仪表板。
6. 对照现实检验
模拟数据与真实数据进行比较后才有意义。导入真实广告结果或调查回答,然后让 MarketMirror:
- 回测预测结果与过往广告的表现;
- 校准模拟调查与真实回答:包括重合度、各受众群体的可信度,以及修正后的转化率;
- 利用从这些比较中学到的信息,预测特定预算下的点击量或注册量;
- 根据真实广告导出数据和本次运行,建议接下来要进行的测试。
从模拟到小规模真实测试,再回到模拟,这个循环才是关键:模拟能缩小测试范围,最终由现实来做出判断。
使用场景
每个操作方案都从已准备好的模拟开始(./mm cli quickstart,然后运行 market-test 并设置 "approve_spend": true)。用通俗语言向你的 Agent 提问,或者自行运行命令。结果会保存在运行文件夹中,并显示在最后一列所列的仪表板板块中。
先从你需要做出的决定入手:
| 问题 | 测试 | 查看 |
|---|---|---|
| 我们应该先试哪条广告? | 使用重复种子的信息流测试 | 注意力、点击、反应和受众差异 |
| 这个优惠是否让人觉得可信? | 调查和优惠方案研究 | 意向、异议以及不同种子下的变化 |
| 我们应该测试什么价格? | 价格敏感度或价格档位比较 | 可接受范围和模拟选择 |
| 网站在哪一步流失了潜在买家? | 浏览器旅程 | 操作轨迹、截图和结果检查 |
| 销售团队应如何回应异议? | 推介与反驳演练 | 回应前后对比和异议主题 |
| 这是否符合观察到的结果? | 留出组回测与校准 | 误差、覆盖率和验证限制 |
| 你想了解什么 | 向你的 Agent 提问 | 或运行 |
| --- | --- | --- |
| 投放哪条广告 | “在真实信息流中,用 3 个种子对这 3 条广告进行买家测试。” | ./mm cli feedtest --simulation $SIM --creatives @creatives.json --seeds 3 |
| 哪条消息或哪个名称更受欢迎 | “对这些标题进行拆分测试;哪个能让人想尝试?” | ./mm cli survey --simulation $SIM --messages @messages.txt --split |
| 定价多少,以及选择哪种优惠 | “要求绑定银行卡,人们还会开始试用吗?什么价格才算合理?” | ./mm cli survey --simulation $SIM --offer "7-day trial, no card" --pricing USD |
| 某项改动是否真的更有效 | “在同一批人中比较无需银行卡、必须绑定银行卡和降低价格这几种方案,每种方案使用 3 个种子。” | ./mm cli study --spec study.json |
| 从哪个国家和受众开始 | “哪个地方的效果最好:印度、菲律宾还是肯尼亚?” | 使用 personas 规范定义细分群体和国家,然后运行 market-test |
| 社交媒体上的发布效果如何 | “通过几轮社交互动,测试我们的发布帖和第 3 天公告。” | market_test.json 中的 posts、events、rounds 键 |
| 新闻如何改变讨论 | “竞争对手刚刚降价了;把这条消息加入正在运行的模拟。” | ./mm cli context --simulation $SIM --text "..." |
| 邮件是否会被打开 | “在他们的收件箱中测试这些主题行和一个 3 步邮件序列。” | ./mm cli emailtest --simulation $SIM --emails @emails.json |
| 销售话术会得到怎样的反馈 | “向每位买家进行推介,回应他们的异议,并告诉我应该先联系谁。” | ./mm cli pitch --simulation $SIM --script @pitch.md --rebuttals @rebuttals.md |
| 网站能否促成转化 | “让 3 位买家访问我们的产品页面,看看他们是否会加入购物车。” | ./mm cli website-test --simulation $SIM --url https://... --goal add_to_cart |
| 现实中的人已经怎么说 | “查找人们对印度家用健身应用的评价,并附上链接。” | ./mm cli research --query "home workout app" --country in |
| 根据真实广告接下来该测试什么 | “读取我们的广告导出文件,并建议接下来的 3 项测试。” | ./mm cli ideas --ads export.csv --run-dir mirofish_runs/x --brand Acme |
| 预期会得到什么结果 | “根据我们过去的营销活动进行校准,预测投入 500 美元后能获得多少注册。” | ./mm cli predict --run-dir mirofish_runs/x --brand Acme --spend 500 |
| 模拟是否符合现实 | “将模拟调查结果与我们的真实回答进行比较。” | ./mm cli calibrate --run-dir mirofish_runs/x --real answers.csv |
| 某人为什么拒绝了 | “问 12 号参与者,为什么他们不愿意开始试用。” | ./mm cli interview --simulation $SIM --agent 12 --prompt "..." |
| 谁会阻止交易,谁会签约 | “对 12 个家庭或公司开展购买委员会模拟。” | ./mm cli gtm committee --simulation $SIM |
| 如何改进广告 | “将这条广告改写 3 次,并在同一批人中重新测试每个版本。” | ./mm cli gtm creative --simulation $SIM --creative @ad.json --generations 3 |
| 如何回应异议 | “根据他们提出的真实异议制作一份竞争对战卡,并测试相应答复。” | ./mm cli gtm battlecard --simulation $SIM |
| 人们会选择哪个套餐层级 | “按这些价格提供 Basic、Plus 或 Family 套餐:各有多少比例的人会选择?” | ./mm cli gtm pricing --simulation $SIM --tiers @tiers.json |
| 竞争对手采取行动会带来什么影响 | “如果 X 降价 30%,他们会转而选择我们吗?” | ./mm cli gtm competitors --simulation $SIM --competitors X Y --move "X cuts its price by 30%" |
| 落地页能否吸引用户注意 | “让 20 位买家对我们的落地页进行全面评估。” | ./mm cli gtm teardown --simulation $SIM --url https://... |
| 不同模型是否意见一致 | “让使用 Claude、Codex 和 Gemini 的用户共同参与同一市场模拟。” | 后端设置中的 LLM_POOL(参见在同一市场中使用多个模型) |
| 某人想了什么却没有说出来 | “告诉我人们浏览时在想什么。” | ./mm cli gtm thoughts --simulation $SIM |
| 某个主题在运行过程中何时出现 | “找出人们在肯尼亚提到价格的所有内容。” | ./mm cli search --run-dir mirofish_runs/x -q "price Kenya" |
| 当前正在发生什么 | “实时显示这次运行。” | ./mm live --run-dir mirofish_runs/x,然后打开 /live |
同一轮测试中的模拟用户会记住他们经历的事情:隐藏了你的广告或取消订阅邮件的人,也会把这些经历带入调查和推介中。每个研究单元都有独立记忆,因此不同场景之间不会相互影响。在配置中设置 "memory_scope": "off",即可让每个步骤都使用全新的模拟用户。 |
信息流测试预览涵盖 Facebook、Instagram、Reddit、TikTok、LinkedIn 和 X。可选的社交轮次使用 MiroFish/OASIS 的 Twitter 和 Reddit 环境。搜索、自然流量、推荐和销售测试系列会适配现有的调查、收件箱和推介引擎;它们不会复现这些渠道的生产系统。
示例结果:模拟市场研究
以下是针对虚构健身应用 Fitloop的文档记录本地运行结果。它们展示了工作流及其局限性。这些结果并非实际观察到的客户转化率,也不能证明预测准确性。
一览
| 示例 | 范围 | 揭示的问题 |
|---|---|---|
| 2,999 名买家的混合市场 | 由 Claude、Codex 和 Gemini 撰写的买家,覆盖六类受众 | 信任方面的异议,以及不同回答模型之间的显著差异 |
| 150 名买家的优惠研究 | 同一合成群体上,三个优惠 × 三个种子 | 在每个种子中,要求提供银行卡都会降低模拟用户的开始意愿 |
| 1,008 名买家的发布测试 | 信息流测试、社交轮次、调查和报告 | 广告中无需银行卡的承诺与落地页要求提供银行卡之间的矛盾 |
| 试用优惠 | 模拟“愿意开始”的平均比例 | 3 个种子中的最小值–最大值 |
|---|---|---|
| 无需银行卡 · USD 4.99 | 4.1% | 2.7–5.4% |
| 需提供银行卡 · USD 4.99 | 0.2% | 0.0–0.7% |
| 无需银行卡 · USD 2.99 | 6.7% | 5.3–8.0% |
种子范围反映模拟结果的变化。下一步是开展小规模随机真实实验;降价并不能证明其具有预测优势。
3,000 人混合市场
Fitloop 的一个市场研究包含 3,000 名指定用户,分别由 Claude Sonnet、Codex(gpt-6-luna)和 Gemini 3.8 Flash(gemini-3.8-flash-low)各撰写并访谈三分之一。受众来自印度、菲律宾和肯尼亚的六类人群,以及五个社群:Bengaluru Fitness Buddies(WhatsApp)、Working Moms & Dads India(Facebook)、Fit Pinoy Community(Facebook)、Nairobi Runners & Gym Rats(WhatsApp)和 r/budgetfitness;每人最多加入 2 个社群。广告宣传的优惠为:7 天免费试用,无需银行卡,之后每月 USD 4.99。与 1,000 人的测试一样,说明和落地页仍要求注册时提供银行卡,这项测试旨在发现这一问题。
决策:迭代(信心中等)。调查单独得出的结论是不应上线(购买意愿为 2.88 / 5,愿意开始试用的比例为 0.7%,n = 2,999),信息流测试的结论是迭代(表现最佳的广告为 fb_parents,预期点击率为 1.02%),5 位模拟分析师也全部建议迭代。首要改进事项:提升可信度(“看起来像骗局”)、消除用户对是否真正免费的疑虑,并明确说明产品。
| 测量项目 | 结果 |
|---|---|
| 是否会开始试用 | 0.7% 会,50.4% 可能会,48.9% 不会(2,999 人中 2,999 人作答) |
| 根据自由文本回答得出的购买意向(1-5) | 2.88 ± 1.14;兴趣度 3.22 |
| 首要顾虑 | 信任 /“看起来像骗局”:59.6%;价格:20.4%;不清楚这是什么:9.1% |
| 按受众划分,是否会开始 | 菲律宾年轻职场人士 1.7%,菲律宾家长 0.9%,印度家长 0.9%,印度年轻职场人士 0.6%,学生 0.3%,肯尼亚年轻职场人士 0.0% |
| 效果最好的调查文案 | “Fitloop 一个月的费用还不到去一次健身房的花费”(和其他文案一样,约 1% 的人回答会) |
| 可接受的价格区间 | 1.50-5.50 美元,最理想的价格约为 2.20 美元 |
| 重测结果(30 人,模拟一周后再次测试) | 76.7% 给出了相同结论;93.3% 的兴趣度评分相差不超过 2 分 |
| 销售话术(2,999 人中有 2,997 人回答了两个环节) | 反驳前:1.1% 会,64.0% 可能会,34.8% 不会;反驳后:1.1% 会,44.6% 可能会,54.2% 不会。针对信任问题的反驳影响了提出信任顾虑者中的 44.9%,针对价格问题的反驳影响了 8.9% |
| 社交平台轮次(4 轮 Reddit) | 共 3,565 次互动:1,375 次评论点赞、1,259 人选择不采取行动、770 条评论、135 次帖子点赞、18 次点踩、7 篇帖子 |
| 分析师小组 | 5 人中 5 人建议迭代(3 人由 Claude 扮演,2 人由 Codex 扮演)。主要主题:没有本地支付方式(UPI);与免费的 YouTube 相比却要收取美元价格;信任需要证据;要求绑定银行卡会扼杀试用;廉价手机上的数据费用 |
信息流测试:5 条广告在 5,140 次人次-平台会话中的表现:
| 广告 | 平台 | 展示次数 | 拇指停留率 | CTR | 预期 CTR |
|---|---|---|---|---|---|
fb_parents | 858 | 17.9% | 2.2% | 1.02% | |
ig_commute | 749 | 21.5% | 2.3% | 1.02% | |
ig_price | 750 | 19.9% | 1.9% | 0.91% | |
tt_challenge | TikTok | 2,141 | 18.3% | 0.8% | 1.42% |
rd_honest | 642 | 15.3% | 0.5% | 0.41% |
销售话术让情况变得更糟,而不是更好:听完反驳后,约五分之一的人从“可能会”转为“不会”(话术评分为 23 分,满分 100 分)。报告提出的解决方案是:改写针对信任和价格问题的反驳,明确展示第 7 天后的具体扣费金额、取消步骤和本地价格,而不是与用户争辩。这与分析师提出的主题一致。
**模型之间意见不一,而回答所用的模型影响最大。**按编写每个人设的提供方划分:
| 人设由谁编写 | 轮次、调查和话术由谁扮演 | 是否会开始:会 / 可能会 / 不会 | 首要顾虑 |
|---|---|---|---|
| Claude(1,000 人) | Claude Sonnet 5.5 | 1.3% / 75.6% / 23.1% | 信任,其次是价格 |
| Gemini(1,000 人) | Claude Sonnet 5.5(替代模型) | 0.9% / 69.7% / 29.4% | 信任,其次是价格 |
| Codex(999 人) | Codex | 0.0% / 5.7% / 94.3% | 信任,其次是“不清楚” |
Gemini 编写的人设由 Claude 扮演时,回答方式更像 Claude 的人设,而不是 Codex 的人设。因此,在这次测试中,回答调查的模型对结果的影响远大于编写人设的模型,而且 Codex 的态度比 Claude 消极得多。应将以上每项比例都视为这两种行为之间的范围,而不是某个市场的单一答案。
运行情况。 人群准备耗时 2 h 57 min(重启一次),通过三个登录网关进行的动态测试耗时 62 min。之后的社交轮次遇到了使用限制:四次在轮次进行期间,Gemini 或 Claude 的登录额度触顶;每次触顶都会让四轮从头开始,通常还要等上数小时才能重置。随后,Gemini 登录的配额耗尽了约四天(Flash 和 Argon 都一样)。因此,运行的其余部分改用 Anthropic API 密钥:Claude Sonnet 5.5 扮演由 Claude 编写的人物,并作为替代方案(MM_PROVIDER_STANDIN=antigravity=claude)扮演由 Gemini 编写的人物;Codex 则继续通过自己的登录扮演自己编写的人物。此后运行未再中断:四轮耗时 40 min,对 2,999 人进行调查并重测耗时 23 min,向 2,999 人推介耗时 37 min,之后进行小组讨论并生成报告。这部分的 API 费用可在 Anthropic 控制台查看;MarketMirror 没有统计轮次、调查和推介过程中的令牌用量。
其背后的人群:
| Claude | Codex | Gemini | 全部 | |
|---|---|---|---|---|
| 编写的人物 | 1,000 | 999 | 1,000 | 2,999 |
| 已访谈 | 1,000 | 987 | 1,000 | 2,987 |
| 有决策卡 | 980 | 933 | 992 | 2,905 |
- 有一位请求的人物因调用失败而未能编写。此人计入总数,但没有补填。
- 12 位访谈失败的 Codex 人物保留在
profile深度。82 位已访谈人物没有决策卡。 - 受众:学生 642 人、菲律宾年轻职场人士 536 人、印度年轻职场人士 534 人、印度家长 429 人、菲律宾家长 429 人、肯尼亚年轻职场人士 429 人,各受众均在三个提供方之间均分。按国家/地区划分:印度 1,284 人、菲律宾 1,125 人、肯尼亚 590 人。
- 刻板印象防护机制调整了 20 个人物,且未发现多样性不足的受众。
- 加上知识图谱中的 7 个角色和 5 个社区账号,此模拟共有 3,011 个 Agent,每个都有个人资料。
- 动态测试进行了 1,289 次模型调用(Gemini 442 次、Codex 440 次、Claude 407 次),使用了 19.9M 个输入令牌和 0.94M 个输出令牌,且未丢失会话。
Fitloop 应该以哪种方案推出?
一项研究在同一批 150 名模拟买家上测试了三种方案,每种方案使用三个随机种子(共 9 个单元;通过本地 Claude Code 网关运行时,每个单元约需 10 分钟)。每个数值都是跨种子的均值,括号内为最低和最高种子值;括号仅反映模拟波动。
| 指标 | 无需银行卡,USD 4.99 | 需要银行卡,USD 4.99 | 无需银行卡,USD 2.99 |
|---|---|---|---|
| 购买意愿(1–5) | 3.51 (3.46–3.60) | 3.01 (2.99–3.04) | 3.60 (3.59–3.60) |
| 愿意开始试用(%) | 4.1 (2.7–5.4) | 0.2 (0.0–0.7) | 6.7 (5.3–8.0) |
| 愿意点击(%) | 7.7 (3.3–16.5) | 10.9 (8.0–12.7) | 23.5 (21.3–25.3) |
| 信任度(0–10) | 3.6 (3.4–4.0) | 3.4 (3.3–3.4) | 4.1 (4.1–4.1) |
| “看起来像骗局”是首要顾虑(%) | 54.6 (47.5–59.7) | 88.2 (86.7–90.7) | 60.5 (58.0–62.7) |
| 各种子下的决策 | 3 个中有 2 个建议迭代 | 3 个中有 3 个建议不通过 | 3 个中有 2 个建议迭代 |
研究结论。 要求提供银行卡在每个种子下都明显不利:购买意愿下降 0.5,愿意开始试用的比例下降 3.9 个百分点,“可能会”回答下降 44.8 个百分点,对诈骗的担忧上升 33.6 个百分点,以上变化均超出种子波动范围。将价格降至 USD 2.99 后,愿意点击的比例(+15.8 个百分点)和信任度(+0.47)均提升至波动范围之外,但购买意愿的提升(+0.09)仍在波动范围内,因此即使在模拟中,降价也不是明确的胜出方案。它在 3 个种子中有 2 个结果最佳,而研究摘要将其结果标记为不支持预测性结论。建议:保留无需银行卡的试用,着力提升信任度(提供证明、明确公司名称、清楚标明“无需银行卡”),并对 USD 2.99 与 USD 4.99 进行小规模随机真实测试。完整报告会在研究文件夹中生成,文件名为 study_report.md,与 study.html 放在一起。
### 1,000 人测试:1,008 名模拟买家怎么说
提供的优惠:7 天免费试用,无需银行卡,之后每月收费 USD 4.99;面向印度、菲律宾和肯尼亚的年轻职场人士、家长和学生。
| 指标 | 结果 |
|---|---|
| 回答了调查 | 1,008 人中有 1,001 人 |
| 愿意开始试用 | 1.1% 愿意,74.8% 可能愿意,24.1% 不愿意 |
| 根据自由文本回答得出的购买意愿(1–5) | 3.07 ± 1.12 |
| 最主要的异议 | “看起来像骗局/不可信”:70.3% |
| 最愿意尝试的受众 | 肯尼亚的年轻职场人士:2.8% 愿意,8.3% 会点击 |
| 最不愿意尝试的受众 | 学生:0% 愿意(他们的回答与“不信任”过于相似,报告中已标记) |
| 按国家划分的开始试用意愿 | 肯尼亚 2.0%,印度 0.9%,菲律宾 0.8% |
| 效果最好的调查文案 | “Fitloop 一个月的费用还不如去一次健身房”:1.5% 愿意,而其他文案为 0.9% |
| 可接受的价格区间 | USD 1.80–7.99,理想价格约为 USD 2.49 |
| 重测一致性(30 人,模拟一周后再次测试) | 86.7% 给出了相同判断 |
| 分析师评审组 | 5 位分析师全部建议迭代 |
结论:迭代(中等置信度)。各项信号并不一致:单看调查结果应当停止推进(n = 1,001),动态信息流测试建议迭代(效果最好的创意为 fb_parents,预期 CTR 为 1.58%),五位模拟分析师也都建议迭代。在加入分析师评审组之前,测试结束时记录的决策是停止推进。这个想法能引起人们的兴趣(三分之四的人表示可能愿意尝试),但信任问题阻碍了他们。报告还发现了一个具体问题:广告承诺“无需银行卡”,但落地页表单却要求填写银行卡号、有效期和 CVV,模拟参与者在这一步放弃了。报告建议的下一步是移除银行卡步骤、添加各国真实用户的证明,然后重新测试。这些都是模拟参与者;在真实实验验证之前,应将所有比率仅视为趋势参考。
准备工作、主动模拟轮次、调查、邮件/信息流反馈、提案和报告都可能调用模型。重复使用种子会增加工作量。本地网关会在可用时报告上游用量并标注估算值;使用订阅不代表已测得实际费用。选择大型群组之前,先测量一次小规模运行。首次设置嵌入时,即使推理在本地运行,也可能需要下载模型资源。
实测运行
这些是 Fitloop 的本地测量结果,并非速度保证。模型、硬件、活动设置、并发和提供商限制都会影响运行时间。本节中的所有速率均为模拟值。
| 运行 | 模拟买家数 | 范围 | 实测耗时 | Feed 测试调用次数 | 计费成本 |
|---|---|---|---|---|---|
| Fitloop 启动 | 28 | 营销流水线 | 28m 12s | 75 | 不可用 |
| Fitloop | 150 | 营销流水线 | 54m 50s | 262 | 不可用 |
| Fitloop 混合市场检查 | 12(Claude、Codex 和 Gemini 各 4 个) | Feed 测试、2 轮社交活动(37 项操作)、调查、宣传文案,贯穿 3 个登录网关 | 17m 50s | 23(Claude 8、Gemini 8、Codex 7) | 订阅(无发票) |
| Fitloop 大规模(仅社交) | 1,008 | 仅进行 6 轮 Reddit 社交活动 | 3m 42s | 未测量 | 不可用 |
| Fitloop 1,000 | 1,008 | 通过 Claude Code 网关使用 Sonnet 执行完整流水线:Feed 测试、4 轮 Reddit 社交活动、对 1,008 人进行调查并复测 30 人、5 位分析师、报告 | 约 52m 的活跃工作时间 | 434 | 订阅(无发票) |
1,000 人运行的活跃时间明细:Feed 测试 10m 17s(434 次调用,1,296,106 个输入 Token 和 375,768 个输出 Token);4 轮社交活动 18m 28s(1,159 项操作);调查和复测 20m 29s;报告 1m 26s。该次运行中分析师小组失败(5 位分析师全部失败,之后已修复),并于稍后重新运行。实际墙钟时间长得多:Claude Code 会话时限在调查中途暂停运行 4h 12m,第二天早上手动恢复,并且 4 轮社交活动也重新运行,因此上述活跃时间仅计算了最后一次执行。API 提供商有各自的速率限制和配额。
人员准备工作通过 3 个登录网关单独测量。“编写人员”仅指角色规划器(角色、访谈和跟进);“上传至就绪”还包括知识图谱、Agent 配置档案和模拟配置。在完整深度下,决策卡由跟进调用生成,因此该列的数量也就是跟进人数。
| 运行 | 深度 | 人数(Claude / Codex / Gemini) | 已访谈 | 决策卡 | 未编写 | 编写人员 | 上传至就绪 |
|---|---|---|---|---|---|---|---|
| 完整深度速度检查 | 完整 | 60(20 / 20 / 20) | 60 | 57 | 0 | 6m 7s | 7m 16s |
| 快速人群检查 | 快速 | 150(45 / 55 / 50) | 24 | 150 | 0 | 7m 29s | 8m 51s |
| Fitloop 3,000 人混合市场 | 完整 | 2,999(1,000 / 999 / 1,000) | 2,987 | 2,905 | 1 | 2h 40m 11s,期间重启 | 2h 57m 31s,期间重启 |
60 人和 3,000 人的运行使用了 Sonnet、gpt-6-luna 和 gemini-3.8-flash-low。150 人的运行使用了 Sonnet、Codex 默认模型和 gemini-3.8-flash-medium;其 24 次访谈中,每个受众有 4 次。该运行早于按受众均分的调整(每个受众在两个提供商之间分为 20 + 5,因此人数为 45 / 55 / 50);当前运行会将每个受众均匀分配给所有提供商。
3,000 人运行的计时并非一次完整执行所得。14:34 时,在完成 3,000 人中的 1,865 人后,后端重启以应用通道修复(挂起的调用曾将 Gemini 通道从 10 降至 2;现在只有速率限制会使通道减半)。新的准备任务从人群缓存中重放了 1,043 份已完成的回答,并写入其余内容;仅这第二部分就耗时 1h 54m 39s。人员写入完成后,3,011 份 Agent 配置档案耗时约 7.5 分钟,模拟配置耗时约 9.5 分钟。
快速开始
需要 Git、Bash、Python 3 和 uv。安装程序会配置 Python 3.12 环境。请使用 Linux、macOS 或 WSL;尚未验证原生 Windows。
git clone https://github.com/DarkWorldCoder/market-mirror.git
cd market-mirror
bash install.sh
./mm configure
选择模型提供商,然后启动后端并创建首个场景:
./mm provider check
./mm start
./mm cli quickstart --out scenarios/acme
向导会询问你的产品、买家、渠道、预算和测试规模。它会写入可编辑的输入文件、准备模拟人物,并在运行其余测试前暂停供你审核。准备过程本身会调用模型。 请从小规模群组开始。provider check 会发现可用模型,但不会运行推理;它不会测试模型质量或工具支持情况。
检查生成的文件和人物档案。要继续,请保留返回的 simulation_id,在 scenarios/acme/market_test.json 中设置 "approve_spend": true,然后运行:
./mm cli market-test scenarios/acme/market_test.json
./mm live --run-dir mirofish_runs/acme
实时查看器运行于 127.0.0.1:5050,其控制室 127.0.0.1:5050/live 会显示每个阶段、每位模拟人物行动时的动态标记、他们发布的内容,以及每两秒更新一次的进度日志。如果运行目录名称不同,请使用流水线打印的实际运行目录。保存的 dashboard.html 也可以直接打开,无需服务器。若要生成模板而不准备人物,请使用 ./mm cli quickstart --no-run。
恢复中断的运行并选择合适的启动命令
如果 market-test 运行停止(例如崩溃、重启或终端关闭),请先确保之前的 market-test 进程已退出,并且 ./mm cli status --simulation <sid> 显示没有正在运行的轮次(等待轮次结束,或使用 ./mm cli stop 停止它们),然后使用相同命令再次运行;如果后端使用其他端口,请设置相同的 MIROFISH_URL。程序会根据运行文件夹中的 run_manifest.json 恢复;如果模拟在人物准备就绪前停止,则会重新准备人物;已写入的人物会从缓存中读取。配置中设置 "resume_steps": true 后,程序还会复用可用的已保存信息流测试、问卷和实时社交环境。准备等待时间会随市场规模增加(至少一小时,或每人约 6 s),后端任务最多会跟踪六小时。
./mm start 会启动后端;./mm cli start --simulation … 会启动社交模拟轮次。以下示例均使用仓库中的 ./mm 辅助程序——无需全局命令或别名。
测试你的产品 URL
安装可选的浏览器支持,然后使用已准备好的模拟 ID:
uv sync --project backend --extra browser --python 3.12
backend/.venv/bin/python -m playwright install chromium
./mm cli website-test --simulation "$SIMULATION_ID" \
--url https://your-product.example/products/shoes --goal add_to_cart \
--task "Evaluate these shoes and decide whether to add a suitable pair to your cart." \
--limit 3 --steps 12
安装浏览器扩展后重启后端。将 URL 替换为你的网站。浏览器控制支持搜索和键盘操作、产品选项、悬停菜单、同站点标签页和框架、开放的 Shadow DOM,以及页面变化时的有限恢复。添加 --record-video 以录制视频,或添加 --headed,在图形会话的桌面上观看操作。Agent 可能会与实际购物车交互;提交注册信息需要明确提供测试数据并选择加入。不支持下单或付款。命名 DOM 检查会独立验证结果,不依赖 Agent 的说法。未提供此类检查时,完成状态将保持未验证。请参阅真实网站测试,了解结果检查、注册设置、浏览器限制和证据报告。
浏览器运行会使用精简的模型观察结果,同时保留完整的本地证据。请设置调用次数、输入 token 数和耗时限制;对于未变化页面上的重复操作,系统会单独检测,不会与买家离开混为一谈。报告会显示可用的缓存使用情况、模型耗时和成本依据。请参阅浏览器上下文和运行限制。
选择模型
| 提供方 | 设置 | 授权 |
|---|---|---|
| 本地 Codex | ./mm gateway start codex | 已有的本地 Codex 登录 |
| 本地 Claude Code | ./mm gateway start claude | 已有的本地 Claude Code 登录 |
| ChatGPT 登录 | ./mm gateway login,然后运行 ./mm gateway start siwc | 符合条件的账户;设置期间会检查权限范围和模型访问权限 |
| 本地 Antigravity(Gemini 模型) | ./mm gateway start antigravity --model gemini-3.8-flash-medium | 已有的本地 Antigravity 登录;agy models 会列出其提供的模型 |
| 本地 Gemini CLI | ./mm gateway start gemini | 已有的本地 Gemini CLI 登录 |
| 通过一个网关使用所有已安装的登录 | ./mm gateway start multi | 已安装且已登录的命令行工具(LLM_GATEWAY_POOL 会列出具体工具);调用会分散到这些工具,因此请使用 LLM_POOL(见下文)让每个人固定使用一个提供方 |
| Ollama / LM Studio | 在 ./mm configure 中选择提供方 | 本地已安装且支持工具调用的模型 |
| Claude / OpenAI / Google Gemini API | 在 ./mm configure 中选择提供方 | 提供方 API 密钥(ANTHROPIC_API_KEY、OPENAI_API_KEY、GEMINI_API_KEY)以及可用的模型访问权限 |
| 其他 API 提供方:DeepSeek、Kimi(Moonshot AI)、Mistral、xAI(Grok)、Groq、Together AI、Fireworks AI、OpenRouter、Qwen(Alibaba Model Studio)、Z.ai(GLM)、Cerebras、MiniMax | ./mm configure、设置页面(./mm cli setup)或 .env:LLM_PROVIDER=deepseek + DEEPSEEK_API_KEY(会自动填入基础 URL 和默认模型;<NAME>_BASE_URL 和 <NAME>_MODEL_NAME 可覆盖这些值;Qwen 还需要包含工作区 ID 的 QWEN_BASE_URL) | 该提供方的 API 密钥(MOONSHOT_API_KEY、XAI_API_KEY、ZAI_API_KEY、DASHSCOPE_API_KEY;其他情况使用 <NAME>_API_KEY) |
| 其他兼容服务 | 配置端点和模型,或配置池槽位 custom(CUSTOM_BASE_URL、CUSTOM_API_KEY、CUSTOM_MODEL_NAME) | 取决于提供方 |
登录网关使用你已有的订阅及其用量限制。API 提供方会单独收取用量费用,并实施各自的速率限制和配额。模型选择、网关设置、用量限制导致的暂停、使用 Claude API 密钥进行提示词缓存、设置页面,以及 3,000 人规模的 API 费用,详见提供方、混合市场和大规模运行。
默认知识图谱使用本地 SQLite 和本地嵌入;无需 Zep 账户。下载模型和研究公开来源需要网络连接。托管提供方和 CLI 网关会将模型提示词发送给选定的提供方。模型用量仍受该账户的限制和收费规则约束。
在一个市场中使用多个模型
一个市场可以同时由多个提供方参与,例如 Claude、Codex 和 Gemini。每个提供方都会为每个受众撰写相同份额的内容、采访自己的受众、让他们参与信息流和社交环节,并在问卷和推介中代表他们作答,因此一个模型会从头到尾代表同一个人发言。随后,仪表板会询问 “模型意见一致吗?”:它按提供方拆分结果,并检查各方的购买意愿范围是否重叠,以及是否指出相同的首要异议和最佳信息。一致性是对模拟稳健性的检验,并不能证明真实买家的情况。
LLM_POOL=claude_code:sonnet,codex:gpt-6-luna,antigravity:gemini-3.8-flash-low
LLM_POOL_STRICT=true # rounds and tests stay on each person's own provider
每个提供方都有独立的并行调用通道,因此响应较慢的提供方不会拖慢响应较快的提供方;如果某个提供方的账户用量耗尽,可以切换到 API 密钥,或在运行期间由另一个提供方代替。完整设置(在不同端口运行网关、令牌、通道、面向数千人的深度设置)详见提供方、混合市场和大规模运行。
连接你的 Agent
可通过 Codex、Claude Code、Cursor、Gemini 或其他支持其 MCP 传输协议的客户端使用 MarketMirror。请先按照上方的快速入门安装并配置引擎。
Codex 插件
在仓库根目录中运行:
codex plugin marketplace add "$PWD"
codex plugin add market-mirror@market-mirror-local
Claude Code 插件
claude plugin marketplace add "$PWD"
claude plugin install market-mirror@market-mirror
该插件包含主要工作流,以及专注于研究、规划、测试和证据审查的 Agent 技能。它们共用一个规范来源。客户端插件支持和配置位置各不相同;请参阅插件指南。
Gemini CLI 扩展
gemini extensions install https://github.com/DarkWorldCoder/market-mirror
该扩展会添加 MarketMirror MCP 服务和一份简短的 GEMINI.md 指南。使用上方的快速入门安装引擎,或让 Gemini 运行 setup。
任意兼容的 MCP 客户端
最快捷的方式是使用 PyPI 软件包(需要 uv);它也已列入官方 MCP Registry,名称为 io.github.DarkWorldCoder/market-mirror:
{ "mcpServers": { "market-mirror": { "command": "uvx", "args": ["marketmirror"] } } }
然后让你的 Agent 运行 doctor;如果尚未安装引擎,再运行 setup。如果要改用已有的代码库检出版本,可以为你的客户端打印配置,而不覆盖其设置:
./mm agent-config --client generic
# Also supports: codex, claude, cursor, gemini
输出包含绝对服务路径和引擎位置。将此条目复制到客户端的 MCP 配置中,然后重启客户端。也可以使用 ./mm mcp 启动 stdio 服务。
对于经过身份验证的环回 HTTP MCP:
python3 plugin/skills/market-mirror/scripts/mcp_server.py \
--http --port 5061 --token-file /absolute/path/to/private-token
创建一个私有令牌文件,其中包含一个至少 24 个字符的随机 bearer token。使用该令牌连接到 http://127.0.0.1:5061/mcp。此传输方式适用于本地 Agent,而非托管的远程服务。
在你的 Agent 中尝试以下提示:
使用 MarketMirror 分析我们的产品和营销活动表现。引入你已获授权访问的工具中的广告和分析数据,或使用我提供的导出数据。研究有引用来源的客户反馈,调查一小部分模拟受众,并比较两则广告或优惠方案。使用合成访客测试我们的产品 URL,展示证据和缺失的输入,并推荐下一项真实实验。
核心工具:doctor、provider_setup、understand、ads_import、ideas、website_test、research、actuals_import、campaign_plan、run_test、study、job_status、holdout_backtest、predict 和 results。长时间运行的任务会返回状态、日志和结果路径。在将任务视为已完成之前,请先轮询 job_status。
示例工作流
flowchart LR
A[Product brief] --> B[Product profile]
C[Cited public feedback] --> D[Campaign plan]
J[Connected ad data or exports] --> D
B --> D
D --> E[Surveys, campaign tests and website journeys]
E --> F[Compare scenarios]
F --> G[Next real experiment]
G --> H[Import observed results]
H --> I[Backtest and calibration]
I --> D
快速入门创建 scenarios/acme/ 后,请将其中的示例内容替换为你的产品资料:
./mm cli understand --docs scenarios/acme/brief.md --name Acme \
--out scenarios/acme/product_profile.json
./mm cli research --query "home workout app" --country in \
--out scenarios/acme/research
./mm cli campaign-plan --profile scenarios/acme/product_profile.json \
--research scenarios/acme/research/voices.json \
--goal "trial signup" --budget 500 --currency USD \
--channels search organic paid_social email sales referral \
--out scenarios/acme/campaign_plan.json
计划包含 test_specs、带引用来源的证据、假设和未知项。各渠道预算默认采用相同的草拟分配。审核相关主张和分配,为选定的规格保存 experiment.json,然后在准备好的模拟中测试:
# Set this to the ID returned by your preparation step.
SIMULATION_ID=sim_replace_me
./mm cli test --simulation "$SIMULATION_ID" --spec @experiment.json
./mm cli study --spec study.json
experiment.json 和 study.json 是经过审核的输入文件;输入示例和 ./mm cli study --help 介绍了它们的格式要求。研究单元会复用已完成的工作;重新运行相同规格即可继续执行。每项独立比较都应从相同的初始状态和匹配的场景种子开始。
有实际结果时,请导入这些结果。此示例需要包含 Day、Country、Views 和 Clicks 列的导出文件:
./mm cli actuals-import exports/campaign.csv --source-type ads \
--map date=Day market=Country impressions=Views clicks=Clicks \
--out scenarios/acme/actuals.json
./mm cli holdout-backtest --pairs experiments_with_train_and_holdout.json \
--out scenarios/acme/holdout_backtest.json
导入器会保留来源、日期、市场和质量标签,并返回逐行验证错误。回测需要明确配对的模拟结果和真实结果,并声明训练集/保留集划分;仅凭导入的导出文件还不能直接构成保留集数据集。
准备好模拟后可使用的实用命令
./mm cli profiles --simulation "$SIMULATION_ID" --brief
./mm cli feedtest --simulation "$SIMULATION_ID" --creatives @creatives.json --seeds 3
./mm cli survey --simulation "$SIMULATION_ID" --offer "Acme trial" \
--goal "start a trial" --messages @messages.txt --split --pricing USD
./mm cli emailtest --simulation "$SIMULATION_ID" --emails @emails.json
./mm cli pitch --simulation "$SIMULATION_ID" --script @pitch.md --rebuttals @rebuttals.md
./mm cli report --simulation "$SIMULATION_ID" --run-dir mirofish_runs/acme
如果准备流程保存了完整的画像集,但在配置就绪前停止了,请使用 ./mm cli prepare --simulation "$SIMULATION_ID" --resume-only。该命令会复用已保存的画像,并拒绝重新生成不完整的画像集。
将输入保存在 scenarios/ 下,将输出保存在 mirofish_runs/ 下;这两个目录都已加入 gitignore。使用 ./mm cli --help 查看完整的命令列表。
MarketMirror 基于 MiroFish 构建,而 MiroFish 运行于 OASIS 之上。OASIS 提供逼真的社交平台(信息流、帖子、关注关系和推荐系统),供大模型 Agent 在其中活动。MiroFish 在此基础上增加了知识图谱和预测报告。MarketMirror 将它们转化为以决策为终点的市场测试:
MarketMirror 在此基础上增加了受众规划、营销实验和决策报告:
| 层级 | 在工作流中的作用 |
|---|---|
| OASIS | 社交模拟环境,包含 Agent 行为和推荐信息流。 |
| MiroFish | 上游应用基础,提供知识图谱和模拟报告。 |
| MarketMirror | 细分合成买家、广告和优惠测试、调查、销售演练、服务提供商比较、离线报告和校准工作流。 |
证据和模拟局限
- 生成的访谈仍然是合成内容。 详细的个人简介和 BDE 画像不会让虚构人物变成客户证据。
- 行为控制因素属于假设。 注意力、疲劳、社会认同和落地页阻力包含手动设定的先验,需要针对目标市场进行验证。
- 种子变化衡量的是模拟变化。 它不是预测置信区间。反复得出相同结果,以及合成测试—重测的一致性,都不能证明与真人的结果一致。
- 回测回答的是具体问题。 现有的无画像对照组采用训练集中的真实结果均值。仅仅胜过它,并不能证明具有普遍的预测可靠性,也不能取代与通用读者 LLM 的匹配对比。
- 校准取决于覆盖范围和假设。 未经校准的预测不包含区间和成功概率。请在未经触碰的真实实验中,分别验证绝对比率、排名和细分群体发现。
请阅读人类行为研究指南,了解相关论文、检查出的代码缺口以及拟议的记忆/状态架构。该指南区分了已实现的控制措施、未来工作和实验支持的结果。
常见问题
这些是真实买家或我可以联系的人吗?
他们是模拟中由 AI 生成的角色。他们的姓名、故事、回答和潜在客户评分描述的是这些角色,并非真实潜在客户的联系人名单。
MarketMirror 会投放我的广告或发送邮件吗?
它会模拟广告、收件箱反馈和销售对话,但不会发布广告、发送外联消息,也不会更改你的广告账户。
买家能访问我的实际网站吗?
可以,但需要启用可选的浏览器支持。合成访客可以查看真实页面并尝试执行查找产品或将商品加入购物车等任务。报告包含屏幕截图和操作记录。需要进行明确的页面检查才能验证任务是否完成。不支持下单和付款;支持的操作及注册要求请参阅网站测试。
我需要编写代码吗?
你可以通过已连接的 AI 助手用普通语言提出测试请求。安装 MarketMirror、选择模型并连接该助手需要进行技术设置。也可以直接使用命令行工具。
它是免费的吗?
MarketMirror 的源代码依据 AGPL-3.0 提供。运行它可能会消耗付费 AI 用量、订阅额度或本地计算资源。受众规模、访谈深度、测试数量和重复次数都会影响所需工作量。实测运行提供的是示例,并不保证成本或速度。
我可以导入真实的研究数据和营销活动数据吗?
可以。你可以提供产品文档、关联的反馈和营销活动导出数据。MarketMirror 也可以收集受支持的公开反馈,并附上来源链接。要将模拟结果与实际结果进行比较,需要合适的配对数据;仅导入广告导出数据并不能构成完整的验证研究。
技术术语是什么意思?
| 术语 | 通俗解释 |
|---|---|
| Persona / synthetic buyer | AI 生成的角色,用于代表某类买家。 |
| Audience segment | 你想要探索的群体,例如学生或在职父母。 |
| Creative | 广告中使用的图片、视频创意或文案。 |
| Split test / A/B test | 向不同人群展示不同版本,以比较他们的反应。这里的受众是模拟出来的。 |
| CTR | 点击率:产生点击的广告浏览量占比。在模拟测试中,浏览和点击都是生成的事件。 |
| Seed | 用于在不同随机抽样下重复运行模拟的随机起始设置。 |
| Backtest | 将模拟结果与过去实验中已知的结果进行比较。 |
| Calibration | 使用观测结果调整模拟的估算值。之后仍需进行独立评估。 |
其他集成
| 接口 | 入口 |
|---|---|
| REST API | 后端地址为 http://127.0.0.1:5001;端点指南和 OpenAPI 架构 |
| Python SDK | 运行 pip install -e sdk,然后执行 from marketmirror import MarketMirror;SDK 示例 |
| Docker | 配置 .env,然后运行 docker compose up --build;后端端口为 5001,查看器端口为 5050,两者都发布在回环地址上 |
| Webhooks | 将 MIROFISH_WEBHOOK_URL 设为目标地址,以接收 CLI 流水线、研究和测试的完成摘要 |
Docker 服务会从主机挂载上传文件、场景和运行输出。容器无法直接访问主机上的回环登录网关;请使用容器可访问的提供方,或在主机上运行 CLI 网关工作流。
开发
cd backend
uv sync --python 3.12
uv run --no-sync python -m pytest tests claude_cli/tests -q
测试会模拟模型调用,无需有效的模型密钥。CI 也会检查生成的 API 文档。后端服务位于 backend/app/,CLI 和报告渲染器位于 backend/claude_cli/,Agent 工具位于 plugin/,Python SDK 位于 sdk/。
文档
| 你想要…… | 请阅读 |
|---|---|
| 安装 MarketMirror 并连接助手 | 本地安装和 Agent 设置 |
| 单独保存详细的设置指南和参考资料 | 技术指南 |
| 选择 AI 提供方或运行规模更大的受众模拟 | 提供方和规模 |
| 准备买家规格、广告和测试文件 | 输入格式 |
| 测试实际的产品网站 | 网站测试 |
| 安装 Agent 插件 | 插件指南 · Codex 设置 |
| 构建集成 | REST API · OpenAPI 架构 · Python SDK |
| 了解研究内容和拟议的改进 | 人类行为研究 |
| 参与贡献或报告问题 | 贡献指南 · 安全 · 更新日志 |
支持项目
如果 MarketMirror 对你有帮助,请给代码库点个 ⭐,让更多人发现它,并告诉我们你测试了什么。每个问题都会得到回复。
致谢与许可证
MarketMirror 基于 MiroFish 和 OASIS 构建,并在其模拟基础上添加了受众规划、营销测试和决策报告。它采用 AGPL-3.0 许可发布。
仪表板嵌入了 Apache ECharts;请参阅第三方声明。MiroFish 原始 README 得以保留。横幅和工作流插图由 AI 生成;其中包含生成提示词。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。















