news 2026/4/8 20:31:16

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 等)上轻松实现向量化搜索和检索。

引入地址

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/4 12:06:20

.NET Core API 性能优化实战:从 100 QPS 到 10,000 QPS 的进化之路

目录 1. 接口性能优化 ✅ 使用异步编程 ✅ 启用响应压缩 2. 数据库访问优化 ✅ 使用连接池 ✅ 减少 N1 查询 ✅ 使用缓存 3. 网络调用优化 ✅ 正确使用 HttpClient ✅ 添加超时 & 重试策略 4. 缓存与限流 ✅ 使用内存缓存 (MemoryCache) ✅ 使用分布式缓存 (R…

作者头像 李华
网站建设 2026/3/31 9:41:06

Eino大模型智能体框架全解析:从原理到部署,助你快速上手AI应用

Eino是字节跳动开源的大模型智能体框架&#xff0c;采用分层架构设计&#xff0c;提供智能体引擎、模型适配器等核心组件&#xff0c;支持多模型集成、工具调用和流式处理。文章通过智能客服和代码审查助手案例展示实际应用&#xff0c;并详细介绍性能优化、错误处理和监控等最…

作者头像 李华
网站建设 2026/4/4 14:10:18

RAG架构的冰山真相——准确率之外的6个关键决策指标

本文深入剖析RAG架构评估中的"冰山现象"&#xff1a;供应商过度宣传准确率指标&#xff0c;却隐藏延迟、成本、效率等关键运营数据。文章对比了向量RAG、推理型RAG、GraphRAG和LightRAG等架构的优缺点&#xff0c;指出当前基准测试体系的局限性&#xff0c;并提出了从…

作者头像 李华
网站建设 2026/4/6 20:22:32

非遗手作带货AI视频制作,快速起量(附万能提示词)

大家好&#xff0c;我是AI培训韩老师写在开头我一直坚信“垂直领域AI”是普通人逆袭的黄金组合&#xff0c;AI电商的核心就是用技术降低创作门槛、提升转化效率。今天要分享的是非遗手作类电商的实操玩法——粉丝亲测的账号&#xff0c;靠非遗传承人带货视频&#xff0c;在抖音…

作者头像 李华
网站建设 2026/3/31 23:23:33

深入理解Java内存模型:从诡异Bug到优雅解决

1. 引言&#xff1a;为什么需要内存模型&#xff1f;想象一下这个场景&#xff1a;public class VisibilityProblem {private static boolean ready false;private static int number 0;public static void main(String[] args) {new Thread(() -> {while (!ready) {// 空…

作者头像 李华