一、安装向量数据库
Qdrant读作Q准儿得
安装下面两个包,在同一目录下解压,web-ui包解压后要改名为static,然后双击exe启动,文件目录如下所示
Releases · qdrant/qdrant-web-ui

二、启动向量数据库
双击后访问这个地址


三、代码编写
1.安装Nuget
如果搜索不到包,请勾选包括预览版
cs
Qdrant.Client
ElBruno.LocalEmbeddings
CommunityToolkit.VectorData.Qdrant

2.将数据插入向量数据库
初次写入需要魔法,因为需要默认下载
all-MiniLM-L6-v2模型,训练设计就是输出384 个浮点数来表达文本语义,所以特性这里写的长度是384。

upsert:更新或者插入
cs
var entries = new List<Glossary>
{
new Glossary
{
Key = 1,
Term = "A技术",
Definition = "本公司的A技术,是核心技术,价格昂贵,用于提升业务处理速度,降低接口响应耗时。",
DefinitionEmbedding = default
},
new Glossary
{
Key = 2,
Term = "B技术",
Definition = "是基础技术,价格便宜,B技术负责数据持久化,保障海量数据稳定存储与读取。",
DefinitionEmbedding = default
},
new Glossary
{
Key = 3,
Term = "C技术",
Definition = "C技术是AI技术,价格昂贵,是先进技术,为智能检索模块,基于向量相似度实现知识库问答。",
DefinitionEmbedding = default
},
new Glossary
{
Key = 4,
Term = "D技术",
Definition = "D技术是安全技术,价格中等,提供接口鉴权与限流,防止非法请求和流量冲击。",
DefinitionEmbedding = default
}
};
var vectorStore = new QdrantVectorStore(new QdrantClient("localhost"), ownsClient: true);
var collection = vectorStore.GetCollection<ulong, Glossary>("技术分类");
await collection.EnsureCollectionExistsAsync();
var embeddingGenerator = await LocalEmbeddingGenerator.CreateAsync();
foreach (var item in entries)
{
var embedding = await embeddingGenerator.GenerateEmbeddingAsync(item.Definition);
item.DefinitionEmbedding = embedding.Vector;
}
await collection.UpsertAsync(entries);
cs
public class Glossary
{
/// <summary>
/// 主键,必须保留
/// </summary>
[VectorStoreKey]
public ulong Key { get; set; }
/// <summary>
/// 词条/术语(建议保留)
/// </summary>
[VectorStoreData]
public string Term { get; set; } = string.Empty;
/// <summary>
/// 描述(知识库,建议保留)
/// </summary>
[VectorStoreData]
public string Definition { get; set; } = string.Empty;
/// <summary>
/// 描述向量,必须保留
/// </summary>
[VectorStoreVector(384)]
public ReadOnlyMemory<float> DefinitionEmbedding { get; set; }
}
默认端口是6334

3.删除和编辑向量数据
UI界面可以这么操作

在控制台窗体中(C#代码),可根据ID进行删除操作
cs
await collection.DeleteAsync(1);
4.向量检索(语义检索)
向量召回 / 语义检索 :把用户问题转向量,在向量库找语义相似的知识库片段,不是简单文字匹配。
cs
var vectorStore = new QdrantVectorStore(new QdrantClient("localhost"), ownsClient: true);
var collection = vectorStore.GetCollection<ulong, Glossary>("技术分类");
await collection.EnsureCollectionExistsAsync();
var embeddingGenerator = await LocalEmbeddingGenerator.CreateAsync();
// ========== 语义检索查询代码 ==========
string queryText = "我想购买和人工智能相关的技术";
// 1. 查询文本转为384维向量
var queryEmbeddingResult = await embeddingGenerator.GenerateEmbeddingAsync(queryText);
var queryVector = queryEmbeddingResult.Vector;
// 2. 在Qdrant做向量相似度检索
var searchResult = collection.SearchAsync(
queryVector,
top: 3 // 返回最相似前3条
);
Console.WriteLine($"\n【查询问题】{queryText}");
Console.WriteLine("====检索结果====");
await foreach (var point in searchResult)
{
Console.WriteLine($"相似度分数:{point.Score:F4}");
Console.WriteLine($"术语:{point.Record.Term}");
Console.WriteLine($"描述:{point.Record.Definition}\n");
}

备注:后续可将这些放进提示词中