当前位置: 首页 > news >正文

Semantic Kernel使用连接器进行向量搜索

目录

向量搜索(Vector Search)

支持的向量类型

向量搜索选项

VectorProperty

Top 和 Skip

IncludeVectors

Filter

小结


Semantic Kernel 提供了向量存储(Vector Store)抽象层中的向量搜索功能,支持多种选项如过滤、分页等。本文将详细介绍其用法。

向量搜索(Vector Search)

SearchAsync方法允许基于已向量化的数据进行搜索。该方法接收一个向量和可选的VectorSearchOptions<TRecord>作为输入,适用于以下类型:

  • IVectorSearchable<TRecord>

  • VectorStoreCollection<TKey, TRecord>

注意VectorStoreCollection<TKey, TRecord>实现了IVectorSearchable<TRecord>

如下是VectorStoreCollection类的定义:

public abstract class VectorStoreCollection<TKey, TRecord> : IVectorSearchable<TRecord>, IDisposable where TKey : notnull where TRecord : class { ..... }

支持的向量类型

SearchAsync的向量参数为泛型类型。每个数据存储支持的向量类型不同,请参阅各连接器文档。

⚠️ 搜索向量类型必须与目标向量类型一致。例如,同一条记录中有两个不同类型的向量,需确保提供的搜索向量与目标向量类型匹配。若有多个向量,可通过VectorProperty指定目标。


向量搜索选项

通过VectorSearchOptions<TRecord>可配置以下选项:

VectorProperty

指定要搜索的向量属性。如果未指定且模型仅包含一个向量,则使用该向量。若没有或有多个向量而未指定,则会抛出异常。

public async IAsyncEnumerable<(Hotel Record, double? Score)> SearchByTextAsync( string query, int topK = 5, CancellationToken ct = default) { var queryVector = await _emb.CreateAsync(query, ct); var col = GetCollection(); var options = new VectorSearchOptions<Hotel> { //Filter = h => h.HotelName == "Tokyo", VectorProperty = h => h.DescriptionEmbedding, Skip = 0, IncludeVectors = false }; awaitforeach (var r in col.SearchAsync(queryVector, topK, options, ct)) { yield return (r.Record, r.Score); } }

Top 和 Skip

用于分页。

  • Top:返回前 N 条结果

  • Skip:跳过前 N 条结果

var vectorSearchOptions = new VectorSearchOptions<Product> { Skip = 40 }; var searchResult = collection.SearchAsync(searchVector, top: 20, vectorSearchOptions);

IncludeVectors

指定是否返回结果中的向量属性。

  • 默认值:false(节省带宽与处理成本)

  • 若为true,则返回完整向量数据

var vectorSearchOptions = new VectorSearchOptions<Product> { IncludeVectors = true };

Filter

用于在向量搜索前先对记录进行过滤。

好处:

  • 降低延迟和计算开销

  • 用于访问控制,过滤掉用户无权限的数据

⚠️ 很多存储需要字段设置为IsIndexed = true才能参与过滤。

public async IAsyncEnumerable<(Hotel Record, double? Score)> SearchByTextAsync( string query, int topK = 5, CancellationToken ct = default) { var queryVector = await _emb.CreateAsync(query, ct); var col = GetCollection(); var options = new VectorSearchOptions<Hotel> { Filter = h => h.HotelName == "Tokyo", VectorProperty = h => h.DescriptionEmbedding, Skip = 0, IncludeVectors = false }; awaitforeach (var r in col.SearchAsync(queryVector, topK, options, ct)) { yield return (r.Record, r.Score); } }

小结

Semantic Kernel 的 Vector Store 连接器提供了强大的向量搜索功能:

  • SearchAsync:执行相似度搜索

  • VectorProperty:选择目标向量

  • Top / Skip:支持分页

  • IncludeVectors:是否返回向量

  • Filter:先过滤后搜索,提高性能和安全性

这些功能让你能够在不同存储(如 InMemory、Qdrant 等)上轻松实现向量化搜索和检索。

引入地址

http://www.cnnetsun.cn/news/175025.html

相关文章:

  • 一个基于 .NET MAUI 的开箱即用的 UI 组件库,可快速搭建面向业务的应用程序界面!
  • Semantic Kernel 实战系列(七) - 高级主题 - Agents 与多代理系统
  • LeetCode每日一题——K个一组翻转链表
  • 大模型后训练:中美路径与商业闭环|附56页PDF文件下载
  • 震惊!选对云服务器代理商,这5个关键指标必须知道!
  • 2025年度复盘与总结
  • ESA正式授予Sivers波束成形技术开发合同
  • 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF
  • Java毕设项目:基于springboot的高校校园一卡通管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 2025年最实用的3个免费降ai率工具和免费ai查重工具,不用焦虑ai率过高!
  • 计算机Java毕设实战-基于springboot村委办公管理系统 基于SpringBoot的乡村事务综合服务平台的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Java毕设选题推荐:基于springboot的村务管理系统的设计与实现智慧村务管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 老派C++程式設計師 vs. 現代C++程式設計師:類型系統觀念的全面戰爭
  • 2025年论文去AI率工具合集:每天5次免费AIGC查重+1500字免费降AI!
  • MySQL 千万级表变更字段,要想不锁表,可以这么做!
  • 【毕业设计】基于springboot的校园零售管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 硬件自查自纠!十年前的电脑可能还可以再战十年
  • 一键配置 Web 前端开发环境(PowerShell 自动化脚本)
  • 程序员必备技能:AI Agent 9种设计模式深度解析,提升大模型应用效能(值得收藏)
  • 【python大数据毕设实战】哮喘患者症状数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习
  • 9 个降AI率工具,MBA 必备避坑指南
  • Windows系统文件inetmib1.dll丢失损坏 下载修复方法
  • Boost电路的右半平面零点
  • 【全球AI伦理治理】
  • 毕业季必看!7款免费AI写论文神器实测,一站式搞定选题、大纲到降重
  • LLMs之Survey之Agent:《Measuring Agents in Production》翻译与解读
  • 零代码上手Google Gemini 3:5种实用方法大揭秘
  • “你用的那个AI,到底把你坑了还是救了?”——解锁宏智树论文的协作新范式
  • 好写作AI:别等学校采购了!你的论文“救命神器”自己就能用上
  • Windows系统文件GdiPlus.dll丢失或损坏 下载修复方法