技术速递|使用 Chroma 构建 .NET AI 应用

360影视 日韩动漫 2025-03-13 09:20 2

摘要:无论是构建 AI 解决方案,还是利用高级搜索功能增强现有项目,您现在都可以在 .NET 应用程序中将 Chroma 作为数据库提供程序使用。

M

作者:Luis Quintanilla,Jiri Cincura

排版:Alan Wang

无论是构建 AI 解决方案,还是利用高级搜索功能增强现有项目,您现在都可以在 .NET 应用程序中将 Chroma 作为数据库提供程序使用。

Chroma 是什么?

Chroma 是一款适用于人工智能应用程序的开源数据库。

借助对存储嵌入、元数据过滤、向量搜索、全文搜索、文档存储和多模式检索的支持,您可以使用 Chroma 在您的应用程序中强化语义搜索和检索增强生成(RAG)功能。

欲了解更多详情,请访问 Chroma 网站。

Chroma 网站

开始在您的应用程序中使用 Chroma

在本示例中,我们将使用 ChromaDB.Client 包连接到 Chroma 数据库并使用向量搜索来搜索电影。

最简单的启动方式是本地使用 Chroma Docker 映像。您也可以在 Azure 中部署实例。

注意:ChromaDB.Client 是一个由社区支持的开源库。

ChromaDB.Client

Chroma Docker 映像

在 Azure 中部署实例

ChromaDB.Client

开源

连接数据库

创建 C# 控制台应用程序

安装 ChromaDB.Client NuGet 包

创建带有配置选项的 ChromaClient

using ChromaDB.Client;var configOptions = new ChromaConfigurationOptions(uri: "http://localhost:8000/api/v1/");using var httpClient = new HttpClient;var client = new ChromaClient(configOptions, httpClient);

使用托管版本的 Chroma 时,请将 uri替换为您的托管端点。

创建集合

现在您有了客户端,请创建一个集合来存储电影数据。

var collection = await client.GetOrCreateCollection("movies");

要对该集合执行操作,您需要创建一个集合客户端。

var collectionClient = new ChromaCollectionClient(collection, configOptions, httpClient);

向集合中添加数据

创建集合后,就可以向其中添加数据了。我们存储的数据包括:

电影 ID

用于表示电影描述的嵌入向量。

包含电影标题的元数据

ID

标题

嵌入向量

电影描述

1

狮子王

[0.10022575, -0.23998135]

《狮子王》是一部经典的迪士尼动画电影,讲述了一只名叫辛巴的小狮子,在父亲不幸去世后踏上旅程,最终夺回荣耀大地王位的故事。

2

盗梦空间

[0.10327095, 0.2563685]

《盗梦空间》是一部由克里斯托弗·诺兰执导的烧脑科幻电影。影片讲述了多姆·柯布的故事,他是一名擅长进入他人梦境窃取机密的高手。然而,他接到了一个终极任务,需要在目标人物的潜意识中植入一个想法。

3

玩具总动员

[0.095857024, -0.201278]

《玩具总动员》是皮克斯制作的一部开创性动画电影。影片讲述了当主人安迪不在时,玩具们的秘密生活。胡迪和巴斯光年是这部感人故事的主角。

4

低俗小说

[0.106827796, 0.21676421]

《低俗小说》是昆汀·塔伦蒂诺执导的犯罪电影。它通过非线性叙事,将黑帮分子、职业杀手和其他丰富多彩的角色故事交织在一起,充满黑色幽默和暴力元素。

5

怪物史瑞克

[0.09568083, -0.21177962]

《怪物史瑞克》是一部动画喜剧电影,讲述了怪物史瑞克为了夺回自己的沼泽地,踏上旅程去解救被困在巨龙守护的高塔中的菲欧娜公主的冒险故事。List movieIds = ["1", "2", "3", "4", "5" ];List> descriptionEmbeddings = [ new { 0.10022575f, -0.23998135f }, new { 0.10327095f, 0.2563685f }, new { 0.095857024f, -0.201278f }, new { 0.106827796f, 0.21676421f }, new { 0.09568083f, -0.21177962f },];List> metadata = [ new Dictionary { ["Title"] = "The Lion King" }, new Dictionary { ["Title"] = "Inception" }, new Dictionary { ["Title"] = "Toy Story" }, new Dictionary { ["Title"] = "Pulp Fiction" }, new Dictionary { ["Title"] = "Shrek" },];await collectionClient.Add(movieIds, descriptionEmbeddings, metadata);

搜索电影(使用向量搜索)

现在您的数据已存储在数据库中,您可以查询它。在本例中,我们使用向量搜索。

文本

嵌入向量

适合家庭观看的电影

[0.12217915, -0.034832448]

List> queryEmbedding = [new([0.12217915f, -0.034832448f])];var queryResult = await collectionClient.Query( queryEmbeddings: queryEmbedding, nResults: 2, include: ChromaQueryInclude.Metadatas | ChromaQueryInclude.Distances);foreach (var result in queryResult){ foreach (var item in result) { Console.WriteLine($"Title: {(string)item.Metadata["Title"] ?? string.Empty} {(item.Distance)}"); }}

结果应类似于以下输出。

Title: Toy Story 0.028396977

Title: Shrek 0.032012463

观看直播

观看 Jiří Činčura 的 2月26日 .NET 数据社区会议,了解有关如何使用 Chroma 和新 C# SDK 的更多信息。

2月26日 .NET 数据社区会议

https://www.youtube.com/watch?v=Nj0vYJ9HVGk

总结

这一最新功能增强了 .NET 中不断发展的 AI 生态系统。它为更简单地实现现有的语义内核连接器以及在您的 .NET 应用程序中无缝集成 Microsoft.Extensions.VectorData 和 Microsoft.Extensions.AI 等基础组件铺平了道路。

我们要感谢 @ssone95 为该项目所做的工作和贡献。我们很高兴能继续与社区合作建立合作伙伴关系,使 .NET 开发人员能够构建 AI 应用程序。

要了解如何开始使用 Chroma 等数据库构建 AI 应用程序,请查看 .NET AI 文档。

现在就试用 Chroma C# SDK 并提供反馈。

Microsoft.Extensions.VectorData

Microsoft.Extensions.AI

@ssone95

.NET AI 文档

https://learn.microsoft.com/dotnet/ai/quickstarts/quickstart-ai-chat-with-data?tabs=azd&pivots=openai

提供反馈

新浪微博|微软中国MSDN

来源:opendotnet

相关推荐