项目 › 客户调研

观看演示(AI 旁白,1:32)

使用生成的语音配音;含字幕。

在实际应用中录制,使用已保存的示例简报(非实时运行):Club Med 的简报,包含编号来源、在其页面上核对过的引文、会议问题、用例猜测和邮件,以及仅根据调研结果回答的一个问题,还有实时简报的限制说明。

阅读旁白文稿

在与客户的首次会面前,我会花几个小时研究这家公司。

这个工具替我完成了信息收集,

而且它写下的每一行都有来源。

这是一个模拟的客户项目,它只读取公开网页。

这是 Club Med 的一份已保存简报。

规划器写了六个问题,研究员针对每个问题搜索网络,

然后一个用纯代码写的审查器检查了这些工作。

四十一条调研结果通过了审查。

每一行都引用了编号来源。

对于每个来源,它会回到该网页

核对引文确实存在:

这里的三十七条中有三十二条通过。

然后是十个会议提问,

三个用例猜测及我们尚不了解的信息,

还有一封请求通话的简短邮件。

我可以就简报内容提问。

客人最常抱怨什么?

它只根据调研结果回答,并附上编号。

不进行新的搜索。

一份实时简报的搜索成本约为十四美分,

所以在没有演示码的情况下,每人每天限三份,

且所有实时运行在每月十美元时停止。

在评测中,十八份简报中有十七份通过了所有检查。

弱点是虚构的公司:

在留出的虚构公司中,只有三分之一保持了诚实。

这一点写明了,而不是隐藏起来。

它已上线,链接在下方,代码也在。

试用在线应用我自己的真人配音将替换生成的旁白。

免费托管:如果应用处于休眠状态,请点击“唤醒”并等待约 30 秒。

客户调研 Agent

输入一家酒店公司的名称,即可获得一份用于首次客户会面的简报:他们是谁、近期新闻、客人评价、技术线索、十个提问、三个用例猜测和一封简短邮件。每一行都有来源,每条引文都在其页面上核对过。

独立项目:同一模拟酒店项目的售前阶段。该 Agent 读取关于真实公司的真实公开网页;评测也特意使用了虚构公司。不调研任何私人个体。以下所有数字均来自仓库中已保存的报告,仅实时简报的成本和时间来自应用自身的日志。

已在免费托管上线:三份已保存的示例简报可免费打开;实时简报需要演示码,或在所有人共享的每天三份限额内,且所有实时运行在每月 10 美元时停止。

问题

周一要和一家度假村集团进行首次通话。我打开他们的网站、一份年报、三篇新闻和一条评论网站,一小时后写满了一页笔记,其中一半没有记录出处链接。周一有人问“你是在哪里看到的?”我却答不上来。或者公司规模很小,几乎没有公开信息,笔记里只能靠猜测来填补空白。

方法

  • 四个小步骤:规划器写出六个问题;研究员用 Anthropic 的网页搜索逐一回答(每个最多两次搜索);评审员只保留网页搜索引用过的句子;撰写者根据保留的内容生成简报。
  • 评审员是纯代码,不是模型:它不会被说服保留某个说法。它会删除未引用的句子、清除个人数据、标记超过一年的新闻,并重新读取每个被引用的页面(先检查 robots.txt)以找到引用的原文。
  • 撰写者只能引用被保留的内容:任何没有引用来源的行,或不存在的结果,都会在代码中被丢弃。
  • 可见且有上限:每一步都显示时间和成本;一次运行的搜索成本在接近 $0.25 时停止;每次访问 3 份简报,每天 30 份简报和 $3。
  • 然后可以就简报进行对话(仅基于其中的结果回答,不做新搜索)并提供只读分享链接。

架构

  • 在 Streamlit 应用中输入公司名称(和可选的网站)。三个已保存的示例简报可免费打开;生成实时简报需要演示码,或每天三次公共简报额度之一。
  • limits.py每次访问、每天、公共简报、每天 $3、每月 $10(月度总额从 Neon 运维日志中读取,因此重启不会重置)。
  • 规划器(Claude Haiku 5.5,JSON)六个问题:概览、物业、新闻、客人主题、技术、AI。
  • 研究员(Claude Haiku 5.5 + 网页搜索)每个问题一个,每个最多两次搜索,每份简报在接近 $0.25 时停止。
  • 评审员,纯代码只保留有引用的句子,删除个人数据,标记旧新闻,并重新读取每个被引用的页面(先检查 robots.txt)以找到引用原文。
  • 没有可用内容的问题:如果预算还有剩余,会带提示再研究一次。
  • 撰写者(Claude Haiku 5.5,JSON)仅根据保留的结果生成简报;没有引用来源的行会在代码中被丢弃。
  • 简报、其步骤和成本然后是“就此提问”(基于结果回答,不做新搜索)和只读分享链接。
docs/ARCHITECTURE.md

在代码仓库中。

一个真实输出

Club Med,“客人评价(主题)”和“本简报的核验方式”

客人们称赞热情、周到的服务,以及记得他们的员工,尤其是对儿童的服务。[21][39]

食物多样性和自助餐质量屡遭批评。[22][23]

性价比、额外费用和房间维护是反复出现的顾虑。[21][24]

保留的结果:41 条;因无来源被删除:22 条;简报中因无引用被丢弃的行:0 行。在被检查的 37 条引用中,有 32 条在其页面上找到了原文。成本 0.140 美元(12 次网页搜索,8 次模型调用),耗时 108 秒。

根据已保存的 Club Med 示例(2026-10-25 的开发评测运行,第 1 次运行),与线上应用免费打开的简报相同;精简为四行。2026-10-28 为 Club Med 生成一份线上公开简报花费 $0.140,耗时 112 秒(应用的运维日志)。

结果

Eval, 3 runs per company: 4 real and 2 fictional (dev), 1 real and 1 fictional (held-out)
检查项开发集留出集
通过所有检查的简报17/184/6
内容有出处、无个人数据、邮件诚实18/186/6
虚构公司:无凭空编造5/61/3
引用引文在其页面上找到88%68%
保留的研究句子(有来源)49%44%
每份简报耗时,p95109 秒106 秒
每份简报成本$0.14$0.14

按实测,在我对自己检查项做两处修复之前:开发集 15/18,留出集 3/6。薄弱点是名称相近的虚构公司。在留出集上,一份简报把一家与公司同名的披萨快闪店当作公司本身来陈述,另一份把一家名称相近公司的收购案留为“未确认”而没有将其搁置。我报告了这两处,且未针对它们做调优。尚待测量:每个句子是否表达了其来源所说的内容,这需要人工;30 条抽样声明已准备好标注。

这次评测教会我的

要读简报本身,而不只是看分数。我在五份简报后停止了第一次运行:四份通过了所有检查,但一封外联邮件以“I'm a Forward Deployed Engineer”开头,两封写着“I'm Vamsi, an engineer…”,署名用了我的名字。我的职位是 Senior Software Engineer,而没有任何检查关注这一点。写作者不再描述发件人,并且新增一项检查,任何这样做的邮件都会失败。随后阅读最终运行时,在我自己的检查项中发现了两个 bug:一个夸张词检查在引用页面的标题上误触发(“seamless travel experience”),以及一个虚构公司检查把一句诚实的“最接近的匹配是不同的业务”判为失败。两者都已用真实措辞作为测试修复,且按实测的报告予以保留。

权衡

Trade-offs
选择原因代价
用代码实现批评者不会被说服保留无出处的声明无法判断一个句子是否表达了其来源所说的内容:这需要人工
Anthropic 的网页搜索引用随文本附带成本的大头:约 12 次搜索,每份简报 12 美分
每次抓取前检查 robots.txt只读取网站允许的内容部分引文无法验证,会被如此标注
研究者依次运行简单,且成本上限精确每份简报约 90 秒;并行是下一步

工程

  • 测试: 46 个,91% 覆盖率(main 分支的 CI,2026-10-28),模型和网络均被替换:流水线、成本上限、批评者、抓取器的 robots.txt 处理、聊天、分享链接和评测的评分器。
  • CI: ruff、带覆盖率门槛的 pytest、重新评分已保存的评测运行(任何改变的判定都会失败)、pip-audit、链接检查和 gitleaks。

商业案例(预测)

这是基于既定假设的预测,而非实际结果:对于 8 名工程师的团队,基准情况下每年约节省 27,000 美元的准备时间,范围从 1,200 美元(悲观)到 66,000 美元(乐观)。每份简报的 AI 成本是实测的;审阅时间是关键变量,因为检查一份简报的成本可能与其所替代的准备成本相当。为期四周的试点将对比使用与不使用该工具的准备时间,并标记每条简报内容为已使用、未使用或错误。

局限性

  • 尚无人工标注:这些检查只能证明每条内容都有来源、每条引用都在其对应页面上,并不能证明句子所述内容与来源一致。
  • 与真实公司名称相近的虚构公司是薄弱环节:在留出测试集上,3 次运行中仅有 1 次保持诚实。
  • 引用“未找到”并不总是错误:有些页面的文本是通过 JavaScript 加载的,而抓取器不会运行 JavaScript(留出测试集上的找到率为 68%)。
  • 已保存的示例简报来自 2026-10-25 的评测运行,且不会刷新;评测运行从未记录其步骤,因此已保存的示例没有 Steps 标签页,并有说明文字注明这一点(实时简报会显示其步骤)。
  • 每日限额是按应用实例计算的,应用重启时会重置;每月 10 美元的上限从运维日志中读取,不会重置。
  • 研究人员依次运行,因此一份实时简报大约需要 90 到 110 秒;名称脱敏基于模式匹配。

后续计划

  • 人工标注 30 条抽样声明,以确定无支持声明的比例
  • 并行运行六个研究人员(从约 90 秒缩短到约 20 秒)