AI 创作历史搜索:向量召回之外,还要保留时间线

发布时间:2026/7/6 5:03:47
AI 创作历史搜索:向量召回之外,还要保留时间线 AI 创作历史搜索向量召回之外还要保留时间线一、创作历史搜索不只是“找相似”AI 创作工具里的历史记录通常增长很快。用户生成过的标题、草稿、图片提示词、改写版本和废弃方向都会堆在一起。向量搜索能找到语义相近内容但它解决不了全部问题。创作历史里时间、来源、版本和状态同样重要。例如用户想找“上周那个更克制的版本”这里的关键词可能并不准确。系统需要同时理解时间范围、编辑动作和语气差异。只做向量召回可能返回语义相近但时间不对的结果。只做全文检索又会漏掉表达不同但意图相近的内容。因此搜索层应该是混合模型而不是单一索引。二、用三层索引承接不同找回意图一个轻量但有效的方案是同时维护结构化索引、全文索引和向量索引。结构化索引回答“什么时候、哪个项目、什么状态”。全文索引回答“包含哪些词”。向量索引回答“语义上接近什么”。最后再用重排层把结果合并。flowchart TD A[创作事件] -- B[结构化字段] A -- C[全文索引] A -- D[向量索引] E[搜索请求] -- F[意图解析] F -- B F -- C F -- D B -- G[候选集合] C -- G D -- G G -- H[重排与去重] H -- I[结果解释]结果解释很关键。用户应该看到某条记录为什么出现因为同项目、同时间、语义接近还是包含关键词。没有解释混合搜索会显得随机。创作工具需要给人可控感而不是让系统像黑盒一样猜。三、实现搜索聚合时先处理去重和超时多路召回最大的问题是重复结果和慢查询。不要等所有召回都完成再响应。可以给每路查询设置超时先返回稳定结果再用渐进式方式补充。下面示例展示一个基本聚合器。type SearchHit { id: string; score: number; reason: string }; async function withTimeoutT(task: PromiseT, ms: number): PromiseT | null { return Promise.race([ task, new Promisenull((resolve) setTimeout(() resolve(null), ms)), ]); } export async function hybridSearch(query: string, adapters: SearchAdapters): PromiseSearchHit[] { if (!query.trim()) throw new Error(empty query); const results await Promise.all([ withTimeout(adapters.keyword(query), 300), withTimeout(adapters.vector(query), 500), withTimeout(adapters.timeline(query), 200), ]); const merged new Mapstring, SearchHit(); for (const list of results.filter(Boolean) as SearchHit[][]) { for (const hit of list) { const prev merged.get(hit.id); merged.set(hit.id, prev ? { ...hit, score: Math.max(prev.score, hit.score), reason: ${prev.reason};${hit.reason} } : hit); } } return [...merged.values()].sort((a, b) b.score - a.score).slice(0, 20); }这里没有追求复杂排名而是先保证稳定性。搜索是高频交互超过一秒就会破坏创作节奏。把慢召回限制住比一次返回“理论最优”更重要。四、历史越长越要让用户决定保留粒度创作历史会带来存储和隐私压力。不是每一次模型响应都值得永久保存。系统可以提供保留策略只保存被编辑过的结果、只保存进入项目的结果、自动清理未收藏候选。默认策略应该克制避免把用户的每一次试探都变成永久记录。向量索引也有更新成本。文本被编辑后旧向量是否保留如果保留会返回过期内容如果删除会失去演进线索。更合理的方式是给版本设置状态默认搜索当前版本用户展开时再看历史版本。还有一个边界是“相似但不相关”。创意文本常常有相近词汇却属于不同任务。重排层应优先考虑项目、时间和用户显式标记。语义分数只能作为参考不能取代上下文。五、总结AI 创作历史搜索要同时处理语义、时间线和版本关系。落地时可以用结构化索引、全文索引、向量索引组成混合召回再通过超时控制、去重和结果解释保证体验。搜索系统不应该把历史变成噪音它应该让曾经有价值的片段在合适的时候重新浮上来。