什么是向量数据库?
在AI时代,传统数据库已经无法满足语义搜索、推荐系统等需求,而向量数据库(Vector Database)成为新的基础设施。向量数据库本质上是用于存储嵌入(Embedding)的数据结构,这些嵌入是文本、图片、音频等数据的向量表示,可以用于计算相似度。
相比传统数据库的精确匹配,向量数据库更擅长做:
- 语义搜索(类似ChatGPT的知识检索)
- 推荐系统
- RAG(检索增强生成)
- AI问答系统
在.NET生态中,随着AI开发(如Semantic Kernel、OpenAI SDK)的普及,向量数据库已经成为构建智能应用的核心组件。
.NET接入向量数据库的主流方案
目前.NET项目接入向量数据库主要有3种方式:
1、专用向量数据库(推荐)
常见方案:
- Qdrant
- Milvus
- Pinecone(云)
以Qdrant为例,可以通过官方.NET客户端直接连接:
dotnet add package Qdrant.Client
示例代码:
using Qdrant.Client;
using Qdrant.Client.Grpc;
var client = new QdrantGrpcClient("localhost", 6334);
Qdrant支持高性能ANN搜索(如HNSW),并提供REST和gRPC接口,非常适合.NET项目集成。
2、传统数据库 + 向量扩展
如果你不想引入新数据库,可以使用以下方案:
- PostgreSQL + pgvector
- openGauss + vector
- MongoDB(Cosmos DB向量搜索)
例如使用 PostgreSQL + pgvector:
dotnet add package Npgsql
dotnet add package Pgvector
示例代码:
var dataSourceBuilder = new NpgsqlDataSourceBuilder(connStr);
dataSourceBuilder.UseVector();
然后创建向量字段:
CREATE TABLE items (
id serial PRIMARY KEY,
embedding vector(1536)
);
这种方式适合已有数据库系统的项目改造。
3、Redis向量搜索(轻量方案)
如果你项目已经在用Redis,可以直接升级为向量数据库:
dotnet add package NRedisStack
Redis支持向量索引 + KNN搜索,非常适合中小型项目或缓存型场景。
完整接入流程(核心步骤)
一个标准的.NET + 向量数据库接入流程如下:
Step1:生成Embedding
通常使用OpenAI或本地模型:
var embedding = await openAI.Embeddings.CreateAsync("你的文本");
Step2:存储向量
将embedding写入数据库(Qdrant / pgvector / Redis)
await client.UpsertAsync(collection, points);
Step3:向量检索(相似度搜索)
var result = await client.SearchAsync(collection, queryVector);
Step4:结合业务(RAG)
典型流程:用户问题 → 向量化 → 相似搜索 → 拼接上下文 → LLM生成答案。
这就是当前AI应用的主流架构。
推荐的.NET技术栈组合(实战)
如果你要做AI项目,推荐如下组合:
- 向量数据库:Qdrant / Milvus
- Embedding:OpenAI / 本地模型
- 框架:Semantic Kernel / ASP.NET Core
- 抽象层:Microsoft.Extensions.VectorData
微软已经提供统一抽象层,让你可以无缝切换底层向量数据库,大幅降低耦合。
常见问题与坑
1、向量维度必须一致
比如:
- OpenAI embedding = 1536维
- 数据库存储也必须一致
2、索引选择影响性能
常见算法:
- HNSW(主流)
- IVF
- Flat(暴力搜索)
3、不要滥用向量数据库
适合场景:模糊搜索 / 语义匹配
不适合:精确查询(用SQL更好)
总结
.NET接入向量数据库并不复杂,本质就是三件事:
- 文本 → Embedding
- 存储 → 向量数据库
- 查询 → 相似度搜索
随着AI应用爆发,向量数据库将成为.NET开发者必须掌握的新技能。如果你做的是:AI工具站、知识库、智能客服,这一步几乎是必选项。