Agent 开发实战 :C#实现语义检索!向量数据库Qdrant的下载安装及调试步骤

一、安装向量数据库

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

Releases · qdrant/qdrant

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");
}

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

相关推荐
小白要生发1 小时前
带你从 0 到 1 用 golang 手写一个 claude code
agent·ai编程
badhope1 小时前
Token 变成 KPI:大厂发 22 万「Token 套餐」,程序员开始自费上班
ai编程
plainGeekDev1 小时前
Harness 七层解剖:从 Instructions 到 Observability
aigc·ai编程·claude
颜进强1 小时前
从零搭一套 WorkBuddy Skill 骨架:调接口 → 生成 HTML 报告的分层设计与流转拆解
前端·后端·ai编程
二炮手亮子2 小时前
使用云服务+hermes+mino模型 我用微信操控服务器自己编程并部署实操
java·语言模型·ai编程
沉默王二2 小时前
Codex 最新焚决发布,快!
gpt·agent·ai编程
VIP_CQCRE2 小时前
在 VS Code / Cursor / Windsurf 中接入 Ace Data Cloud:OpenCode IDE Extension 实战配置
ai编程·opencode·acedatacloud
光泽雨2 小时前
IEnumerable<T> 详细讲解
c#·c
秋天的一阵风2 小时前
🤖 AI写代码越跑越快,项目组件却越来越乱?一套工程闭环根治重复造轮子 ⚡
前端·面试·ai编程