手把手教你!如何用Milvus一套系统搞定千万用户视频检索?收藏这篇就够了!

01 需求分析

1.1 需求背景与问题提出

2025年1月,Opus Clip推出基于Milvus的RAG系统构建的OpusSearch语义搜索产品,该产品可以帮助各种专业视频创作者从素材库中精准找到任何需要的素材内容,并根据热门话题获得AI推荐的视频片段。

该产品在自然语言模糊查询场景(如“找一些关于约会的搞笑时刻”)中表现优异,但随着用户使用深入,核心用户群体(如视频编辑、剪辑师)的反馈暴露出产品功能缺陷:

高效的搜索功能是实现视频内容复用、变现的关键支撑,但只有单纯的语义搜索无法满足精确匹配需求。

典型问题场景如下:

视频编辑需从播客中查找“第281集”片段,搜索后系统返回第280集、第282集甚至第218集等近似结果;搜索“她说了什么”时,系统会返回“他说了什么”等语义相近但关键词不符的结果,严重影响用户工作效率,违背视频编辑对特定内容精准定位的核心诉求。

1.2 核心需求拆解

1.2.1 功能需求

  • 精确匹配功能:支持用户通过特定关键词(如“第281集”)、短语(如“她说了什么”)搜索,精准返回包含目标内容的结果,避免近似值干扰。
  • 双模式搜索兼容:在保留原有语义搜索优势的基础上,新增关键词精确匹配模式,支持用户根据场景灵活切换不同检索模式。
  • 结果智能排序:精确匹配结果结合相关性进行排序,确保最符合需求的内容优先展示。

1.2.2 非功能需求

  • 运维成本可控:作为初创企业,需避免因功能升级引入多套搜索系统,控制运营负担与系统复杂性。
  • 性能稳定:新增功能后,系统查询响应速度、匹配准确率需满足生产环境要求,大规模文本数据集场景下仍保持高效运行。
  • 扩展性良好:支持后续语义搜索与精确匹配的融合查询开发,预留技术扩展空间。

1.3 需求优先级

精确匹配功能实现(高优先级,解决当前核心痛点)>双模式搜索兼容(高优先级,保障用户使用连续性)>结果智能排序(中优先级,提升用户体验)>扩展性设计(中优先级,支撑长期业务发展)

02 解决方案设计

2.1 方案选型依据

针对精确匹配需求,初步备选方案为引入Elasticsearch或MongoDB等传统数据库实现精确匹配,与现有Milvus语义搜索系统形成互补。

但该方案存在核心缺陷:维护多套搜索系统将大幅增加初创企业的运维成本与系统复杂性。

但是如果仅采用一套方案,先过滤(关键词)后排序,又常常会因为过滤导致索引的图结构产生断联,**最终出现图搜索提前终止或 miss 掉结果。**此外,图索引期望候选节点越多越好(recall高),如果 bitset 中符合条件的点很少,那就会导致图结构基本失联,直接退化成 brute-force。

详情可参考Milvus Week | 向量搜索遇上过滤筛选,如何选择最优索引组合?

基于以上背景,最终选型为基于现有Milvus向量数据库进行功能升级,核心依据如下:

(1)社区支持强大:Milvus拥有38k+ GitHub星标,社区活跃度高,技术迭代有保障;

(2)功能适配性强:Milvus最新发布的全文搜索功能支持精确匹配场景,经私有数据集测试,未调优状态下表现已超预期;

(3)单一系统优势:可在同一数据库内实现语义搜索与精确匹配,无需新增系统,降低运维成本;

(4)性能优势显著:在部分匹配准确性上表现出色,如“喝酒场景”查询可避免检索到“用餐场景”等无关结果,且查询时能返回更全面的结果。

(5)Milvus采用Alpha 策略、ACORN (Approximate Clustering with Over-connected Randomized Neighbors)方法、动态选择邻居、元数据感知索引(Metadata-Aware Indexing)等方式,避免了其他常见向量数据库引入关键词检索后导致的索引锻炼、搜索成本变高等问题。

详情可参考Milvus Week | 向量搜索遇上过滤筛选,如何选择最优索引组合?

2.2 整体架构设计

以Milvus作为企业RAG架构的基础向量数据库,构建“BM25算法+TEXT_MATCH过滤器”的双核心精确匹配架构,与原有语义搜索模块融合形成双模式搜索系统。整体流程如下:

(1)过滤阶段:通过Milvus的TEXT_MATCH过滤器,精准筛选出包含用户查询关键词/短语的文档,实现精确匹配基础筛选。

(2)排序阶段:基于BM25算法计算筛选后文档与查询的相关性,对精确匹配结果进行智能排序。

(3)模式融合:用户可自主选择“语义搜索模式”或“关键词检索模式”,系统根据选择调用对应模块,实现双模式兼容。

架构核心优势:单一数据库系统同时支持语义搜索与精确匹配,简化运维架构,降低扩展成本;先过滤后排序逻辑兼顾精准性与相关性,提升用户体验。

2.3 核心技术实现

2.3.1 数据模式设计

关键设计要点:完全禁用停用词,因业务场景中“THE Office”与“Office”为不同实体,需保留所有词汇;启用TEXT_MATCH功能开关,支持精确匹配过滤;配置词干提取器,实现“running”与“run”等词形还原匹配。具体代码实现如下:

export function getExactMatchFields(): FieldType[] {
  return [
    {
      name: "id",
      data_type: DataType.VarChar,
      is_primary_key: true,
      max_length: 100,
    },
    {
      name: "text",
      data_type: DataType.VarChar,
      max_length: 1000,
      enable_analyzer: true,
      enable_match: true,  // This is the magic flag
      analyzer_params: {
        tokenizer: 'standard',
        filter: [
          'lowercase',
          {
            type: 'stemmer',
            language: 'english',  // "running" matches "run"
          },
          {
            type: 'stop',
            stop_words: [],  // Keep ALL words (even "the", "a")
          },
        ],
      },
    },
    {
      name: "sparse_vector",
      data_type: DataType.SparseFloatVector,
    },
  ]
}

2.3.2 BM25算法配置

配置BM25函数作为相关性排序核心,将文本字段转换为稀疏向量用于计算。代码实现如下:

export const FUNCTIONS: FunctionObject[] = [
  {
    name: 'text_bm25_embedding',
    type: FunctionType.BM25,
    input_field_names: ['text'],
    output_field_names: ['sparse_vector'],
    params: {},
  },
]

2.3.3 索引优化配置

针对生产数据集调优BM25关键参数,平衡术语频率与文档长度对结果的影响,选用SPARSE_INVERTED_INDEX索引类型提升查询效率。

参数说明:

  1. bm25_k1=1.2:适度重视术语频率,避免过度加权;

  2. bm25_b=0.75:对较长文档施加适度惩罚,兼顾结果准确性与全面性。具体配置如下:

index_params: [
  {
    field_name: 'sparse_vector',
    index_type: 'SPARSE_INVERTED_INDEX',
    metric_type: 'BM25',
    params: {
      inverted_index_algo: 'DAAT_MAXSCORE',
      bm25_k1: 1.2,  // How much does term frequency matter?
      bm25_b: 0.75,  // How much does document length matter?
    },
  },
],

2.3.4 搜索查询逻辑实现

通过“TEXT_MATCH过滤+BM25排序”组合实现精确匹配查询,支持单关键词与多关键词组合场景。单关键词查询(如“第281集”)与多关键词查询(如“foo”和“bar”)代码示例如下:

// 单关键词精确匹配查询
await this.milvusClient.search({
  collection_name: 'my_collection',
  limit: 30,
  output_fields: ['id', 'text'],
  filter: `TEXT_MATCH(text, "episode 281")`,  // Exact match filter
  anns_field: 'sparse_vector',
  data: 'episode 281',  // BM25 ranking query
})
// 多关键词精确匹配查询(同时包含多个关键词)
await this.milvusClient.search({
  collection_name: 'my_collection',
  limit: 30,
  output_fields: ['id', 'text'],
  filter: `TEXT_MATCH(text, "foo") and TEXT_MATCH(text, "bar")`,  // 多条件精确匹配
  anns_field: 'sparse_vector',
  data: 'foo bar',  // BM25 ranking query
})

03实施效果与验证

3.1 实施时间线

2025年1月-5月:完成Milvus全文搜索功能调研、技术验证与方案设计;2025年6月:完成精确匹配功能开发、测试并部署上线。

3.2 核心成效

  • 用户体验显著提升:精确匹配功能解决了视频编辑找特定集数、特定短语的核心痛点,搜索相关支持请求量明显减少。
  • 双模式兼容达标:系统保留原有语义搜索优势,用户可根据需求灵活切换模式,探索性查询与精准查询场景均得到满足。
  • 运维成本可控:基于单一Milvus数据库实现功能升级,未引入多系统维护负担,符合初创企业资源约束要求。
  • 业务价值支撑强化:高效的搜索功能进一步助力企业视频库内容重用与变现,为《All The Smoke》《KFC广播》《TFTC》等客户的成功案例提供更坚实的技术支撑。

04经验教训与注意事项

4.1 关键技术坑点规避

  • 启用动态字段:

    初期未启用动态字段导致生产环境中模式修改需删除并重建集合,影响系统稳定性。

    解决方案:创建集合时配置enable_dynamic_field: true,保障模式修改灵活性。

    代码示例:

await this.milvusClient.createCollection({
  collection_name: collectionName,
  fields: fields,
  enable_dynamic_field: true,  // 关键配置:启用动态字段
  // ... 其他配置
})
  • 集合设计模块化:采用每个功能域独立集合的设计思路,减少模式变化对系统整体的影响,提升可维护性。
  • 内存优化:稀疏索引占用内存较高,大规模文本数据集场景下需启用MMAP(内存映射文件)利用磁盘存储,同时保障足够I/O带宽维持性能。配置方式:在Milvus配置中设置use_mmap: true。

05未来规划

5.1 短期目标(1-3个月)

实现语义搜索与精确匹配的融合查询功能,支持用户在单一查询中同时包含精确匹配关键词与语义描述,如“找到第281集的搞笑片段”(“第281集”用精确匹配,“搞笑片段”用语义搜索),进一步提升搜索效率。

5.2 长期规划

构建“智能融合搜索”体系,无需用户手动切换模式,系统可根据查询内容自动判断场景,智能选择精确匹配、语义搜索或融合模式,实现“用户无需思考模式,只关注需求本身”的极致体验,持续强化企业视频库货币化支撑能力。

如何学习大模型 AI ?

我国在AI大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着Al技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国Al产业的创新步伐。加强人才培养,优化教育体系,国际合作并进,是破解困局、推动AI发展的关键。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

2025最新大模型学习路线

明确的学习路线至关重要。它能指引新人起点、规划学习顺序、明确核心知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。

对于从来没有接触过AI大模型的同学,我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线。

在这里插入图片描述

针对以上大模型的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。

大模型经典PDF书籍

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路!

在这里插入图片描述

配套大模型项目实战

所有视频教程所涉及的实战项目和项目源码等
在这里插入图片描述

博主介绍+AI项目案例集锦

MoPaaS专注于Al技术能力建设与应用场景开发,与智学优课联合孵化,培养适合未来发展需求的技术性人才和应用型领袖。

在这里插入图片描述

在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

在这里插入图片描述

为什么要学习大模型?

2025人工智能大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

在这里插入图片描述

适合人群

  • 在校学生:包括专科、本科、硕士和博士研究生。学生应具备扎实的编程基础和一定的数学基础,有志于深入AGI大模型行业,希望开展相关的研究和开发工作。
  • IT行业从业人员:包括在职或失业者,涵盖开发、测试、运维、产品经理等职务。拥有一定的IT从业经验,至少1年以上的编程工作经验,对大模型技术感兴趣或有业务需求,希望通过课程提升自身在IT领域的竞争力。
  • IT管理及技术研究领域人员:包括技术经理、技术负责人、CTO、架构师、研究员等角色。这些人员需要跟随技术发展趋势,主导技术创新,推动大模型技术在企业业务中的应用与改造。
  • 传统AI从业人员:包括算法工程师、机器视觉工程师、深度学习工程师等。这些AI技术人才原先从事机器视觉、自然语言处理、推荐系统等领域工作,现需要快速补充大模型技术能力,获得大模型训练微调的实操技能,以适应新的技术发展趋势。
    在这里插入图片描述

课程精彩瞬间

大模型核心原理与Prompt:掌握大语言模型的核心知识,了解行业应用与趋势;熟练Python编程,提升提示工程技能,为Al应用开发打下坚实基础。

在这里插入图片描述

RAG应用开发工程:掌握RAG应用开发全流程,理解前沿技术,提升商业化分析与优化能力,通过实战项目加深理解与应用。 在这里插入图片描述

Agent应用架构进阶实践:掌握大模型Agent技术的核心原理与实践应用,能够独立完成Agent系统的设计与开发,提升多智能体协同与复杂任务处理的能力,为AI产品的创新与优化提供有力支持。
在这里插入图片描述

模型微调与私有化大模型:掌握大模型微调与私有化部署技能,提升模型优化与部署能力,为大模型项目落地打下坚实基础。 在这里插入图片描述

顶尖师资,深耕AI大模型前沿技术

实战专家亲授,让你少走弯路
在这里插入图片描述

一对一学习规划,职业生涯指导

  • 真实商业项目实训
  • 大厂绿色直通车

人才库优秀学员参与真实商业项目实训

以商业交付标准作为学习标准,具备真实大模型项目实践操作经验可写入简历,支持项目背调

在这里插入图片描述
大厂绿色直通车,冲击行业高薪岗位
在这里插入图片描述

文中涉及到的完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

在这里插入图片描述

### 基于用户行为的推荐系统构建 在基于用户行为的推荐系统中,核心思想是将用户的历史行为(如点击、浏览、购买等)转化为向量,并利用 Milvus 的向量检索能力,找到与用户兴趣相似的商品。这种推荐方式通常称为 **协同过滤(Collaborative Filtering)** 或 **基于行为的推荐**。 用户行为数据可以通过深度学习模型转化为嵌入向量(embedding),例如使用 **Wide & Deep**、**NeuMF** 或 **DIN(Deep Interest Network)** 等模型。这些模型能用户的行为序列编码为一个高维向量,该向量可以表示用户的兴趣偏好。将这些向量存储在 Milvus 中后,即可通过相似性搜索找到与用户兴趣最匹配的商品向量。 #### 用户行为向量化 用户行为数据通常包括点击、购买、浏览时间等。为了将这些行为转化为向量,可以采用以下方法: - **行为序列编码**:将用户的历史商品点击或购买序列输入到神经网络(如 Transformer、LSTM 或 GRU),生成一个固定长度的兴趣向量。 - **多行为融合**:结合用户的多种行为(如点击、收藏、加购),使用多任务学习模型生成更全面的用户兴趣表示。 - **用户-商品交互建模**:使用图神经网络(GNN)建模用户与商品之间的复杂交互关系,生成更精准的兴趣向量。 #### Milvus 中的用户兴趣向量存储 在 Milvus 中,可以将用户兴趣向量和商品向量分别存储为两个集合。例如: ```python from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection # 连接 Milvus connections.connect(host='localhost', port='19530') # 定义用户兴趣向量字段 user_fields = [ FieldSchema(name="user_id", dtype=DataType.INT64, is_primary=True), FieldSchema(name="user_embedding", dtype=DataType.FLOAT_VECTOR, dim=512) ] # 创建用户兴趣集合 user_schema = CollectionSchema(user_fields, "User Interest Collection") user_collection = Collection("user_interests", user_schema) # 插入用户兴趣向量 user_ids = [1001, 1002, 1003] user_embeddings = [[random.random() for _ in range(512)] for _ in range(3)] user_collection.insert([user_ids, user_embeddings]) # 创建索引 index_params = { "index_type": "IVF_FLAT", "params": {"nlist": 100}, "metric_type": "L2" } user_collection.create_index("user_embedding", index_params) # 加载集合 user_collection.load() ``` #### 基于用户兴趣的推荐查询 当用户访问系统时,可以使用其兴趣向量在 Milvus 中搜索最相似的商品向量。例如,以下代码展示了如何基于用户兴趣向量进行商品推荐: ```python # 查询相似商品 query_user_embedding = [random.random() for _ in range(512)] results = user_collection.search([query_user_embedding], "user_embedding", param={"nprobe": 10}, limit=10) # 获取推荐结果 for result in results: for item in result: print(f"推荐商品 ID: {item.id}, 相似度: {item.distance}") ``` #### 混合推荐策略 为了提升推荐的多样性与精准度,可以结合基于内容的推荐和基于行为的推荐。例如: - **双塔模型(Two-Tower Model)**:使用两个独立的神经网络分别对用户兴趣和商品特征进行编码,然后在 Milvus 中进行向量匹配。 - **实时更新机制**:根据用户的最新行为动态更新兴趣向量,并在 Milvus 中实时更新或替换旧向量,以实现个性化推荐的实时性[^1]。 #### 性能优化建议 - **批量插入与更新**:在用户行为数据量较大时,建议使用 Milvus 的批量插入和更新功能,提高数据写入效率。 - **分片与副本**:在大规模部署中,使用 Milvus 的分片(sharding)和副本(replica)机制,提升查询性能与系统可用性。 - **缓存高频用户向量**:将活跃用户的兴趣向量缓存在内存中,减少对 Milvus 的实时查询压力。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值