先说个我自己翻过的车
前阵子我想摸清一个细分方向到底有哪些值得抄的做法,顺手就扔给联网 AI:"帮我列一下这个领域现在都有哪些项目"。它很自信地给了我十来条,排版工整、还带点评。
我当时觉得挺好,收工。
结果过了两天,我在另一个渠道刷到好几个明显更对口的东西,一个都没出现在那份清单里。我回头又问了一遍,换个措辞,它又给我吐出来几条新的,跟上次还只有一半重合。
那一刻我才反应过来一件被很多人忽略的事:通用联网 AI 根本不是在"穷举",它是在给你 top-k。你问它"推荐几个",它答得很好;你问它"一共有多少、有没有漏掉",它压根回答不了,因为它手上就没有一个完整的、有边界的集合。
这篇想聊的就是这个判断,以及独立开发者该怎么绕过它。
top-k 和"完整集合",根本不是一回事
这次让我彻底想明白的,是一位开发者做 arXiv 大规模文献检索的分享(资料里那个叫 Parallax 的项目)。他把痛点说得特别准:通用 agent 走开放网络的 web search,通常只能拿到 top-k,难以穷举,也回答不了"这个领域有多少篇论文";而且返回的是整个互联网的相关性条目,噪音大,还得额外花力气清洗。
说白了,联网搜索的产品形态天生就是"给你最相关的几条"。这在你"随便看看"时很爽,但凡你要做的是严肃的领域梳理、竞品普查、合规排查、批量筛选,它就立刻露怯——因为这些活儿的本质需求是**完整**和**可验证**,不是"差不多相关"。
这里有个反常识的点,我以前也没绕过来:你以为瓶颈是模型不够聪明,其实瓶颈是你根本没给它一个确定的范围。模型再强,它在一个边界模糊、每次返回都不一样的数据源上跑,你永远没法回答"漏没漏"。
真正值钱的动作,是先把数据圈成一个集合
那位作者的思路我特别认同,也是我现在的判断:别追更强的联网模型,先把目标领域的数据自己拉下来,圈成一个有边界的集合,再在这上面做事。
他的管线其实不复杂:元数据抓取 → 向量化 → 关键词或语义召回 → LLM 精筛。重点在于,一旦数据落到本地、成了一个确定的集合,很多原来做不到的事就顺了:
- 你能回答"这个范围里一共多少条",因为你真的拥有全量;
- 多路召回合并时,用并集去重、用差集剔掉假阳性,这些都是确定性的集合运算,不靠模型瞎猜;
- 初筛漏了可以复核补充,而不是重开一次黑盒搜索、祈祷这次运气好。
他把检索的基本单元直接设计成"论文集合",支持并集、差集这些运算符。我觉得这个抽象对任何做批量筛选的人都通用:你处理的是一个可以做集合代数的确定对象,而不是一串飘忽的搜索结果。
再看他给出的数字,很能说明"圈成集合"之后效率的变化。据作者实测,切到 Jev 做精筛后,对 36564 篇论文判定只花了 5 分钟左右,是原来 LLM 版本速度的 10 倍以上,成本不到五分之一(这些效果是作者自述,具体复现条件待核实)。
能快能省的前提,是数据已经是一个躺在那儿的确定集合,而不是每次现搜。
对独立开发者意味着什么
我把这事往商业上想了想,结论挺明确:**"找得全"本身就是一门可以卖的服务**。
你去 GitHub 看那些 awesome list、各种"全网整理""一文看懂某领域",为什么有人收藏、有人愿意付费?因为穷举和去重是真花时间的脏活,大部分人做不动。
联网 AI 给的 top-k 恰恰替代不了这个,它只会让"看起来全"更泛滥,反而把"真的全"衬得更值钱。
能圈集合的人,可以干的活儿其实很多:某个垂直赛道的竞品/项目全景,某类政策或条款的合规清单,某个关键词下的全量内容盘点,定期更新的"领域动态追踪"。这些都不是一次性的,是能做成订阅、做成定期交付的。
关键差异就在于,你交付的不是"我帮你搜了一下",而是"这是这个范围里的完整集合,我能告诉你它有多少、怎么分类、这次比上次多了哪些"。这个确定性,就是定价权。
落地:这条管线怎么在 VicroCode 上跑起来
说回能动手的部分。整条"召回→精筛→去重"的管线,我会这么拆:
**第一步,把数据抓下来、把管线跑起来。 ** 抓取、清洗、调度、分批,这些都是脚本活,直接用Python在线运行把整条管线串起来就行,不用自己折腾服务器环境。
那位作者也提到一个很实在的经验:直接跑一条大规模召回容易失控、中断还得重来,所以他按时间窗口分批跑、最后合并。这种分批和断点思路,在写脚本时就该考虑进去。
**第二步,做语义召回。 ** 关键词召回会漏掉换了说法的条目,所以得补一路语义召回。
把每条数据的摘要向量化、建索引,用LanceDB知识库来做向量化的语义检索,多路召回之后再合并成一个大候选集。这里提醒一句:资料里那个项目用的是另一套向量数据库方案,咱们能确认落地的是 LanceDB 这条路,别照搬它的具体技术栈。
**第三步,存元数据、做去重和集合比对。 ** 召回出来的东西要有个地方落账,元数据、来源、召回路径、精筛结果都得存。
用 SQLite 存这些结构化信息最省心,去重、并集差集、"这次比上次多了哪些"的集合比对,都可以在表里用 SQL 搞定,随手用SQLite编辑器直接看表结构、核对数据对不对,比在脑子里猜靠谱多了。那位作者强调把大规模处理"委托给确定性的程序"来对抗模型幻觉,落到我们这儿,就是让数据库和 SQL 去管去重与集合运算,别让模型代劳。
**第四步,精筛交给模型,但只让它做判定。 ** 候选集有了,再调模型逐条判"纳入还是剔除"。
这步可以走平台的模型中心 API,让应用调用已接入的模型来跑判定。做完还能把工具封成 API 端点托管起来、把成果页发布出去变现,整条链路在站内就闭环了。
边界,我必须说清楚
这套玩法爽归爽,有两条线不能越:
一是**抓取授权**。不是所有数据都能随便拉,很多站点有明确的使用条款和反爬限制,arXiv 这类有正规数据接口的是幸运情况。
动手前先确认目标数据源允许你以什么方式、什么频率获取,别默认"能抓到就能用"。
二是**数据合规**。你圈下来的集合里如果掺了个人信息、受版权保护的内容或敏感数据,存储和再分发都有风险,尤其你还想拿它变现的时候。
这块各领域要求不一样,涉及具体法律判断时请咨询专业意见,我这里只能提醒你把它当成第一优先级,而不是上线前最后才想的事。
今天就能做的一个小动作
别一上来就想着抓全网。挑一个你最熟的细分方向,先把它的数据源列清楚:官方接口、公开列表、RSS,哪些能合规拿到。
然后只圈一个最小集合——比如"最近半年、某一类、某几个关键词"——用 Python 把抓取和一次语义召回跑通,结果丢进 SQLite 存成一张表。
跑通之后你再问它"这个范围一共多少条、有没有重复",那种"我手里有个确定集合"的踏实感,和联网 AI 甩给你一份 top-k 的感觉,完全是两回事。先体会到这个差别,后面的商业想象才立得住。