Chroma 网站
https://trychroma.com/
开始在您的应用程序中使用 Chroma
在本示例中,我们将使用 ChromaDB.Client包连接到 Chroma 数据库并使用向量搜索来搜索电影。
最简单的启动方式是本地使用 Chroma Docker 映像。您也可以在 Azure 中部署实例。
注意:ChromaDB.Client是一个由社区支持的开源库。
ChromaDB.Client
https://www.nuget.org/packages/ChromaDB.Client
Chroma Docker 映像
https://docs.trychroma.com/production/containers/docker
在 Azure 中部署实例
https://docs.trychroma.com/production/cloud-providers/azure
ChromaDB.Client
https://www.nuget.org/packages/ChromaDB.Client
开源
https://github.com/ssone95/ChromaDB.Client
连接数据库
创建 C# 控制台应用程序
安装 ChromaDB.Client NuGet 包
创建带有配置选项的 ChromaClient
varconfigOptions = newChromaConfigurationOptions(uri: "http://localhost:8000/api/v1/");usingvarhttpClient = newHttpClient;varclient = newChromaClient(configOptions, httpClient);
使用托管版本的 Chroma 时,请将 uri替换为您的托管端点。
创建集合
现在您有了客户端,请创建一个集合来存储电影数据。
要对该集合执行操作,您需要创建一个集合客户端。
向集合中添加数据
创建集合后,就可以向其中添加数据了。我们存储的数据包括:
电影 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
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
awaitcollectionClient.Add(movieIds, deionEmbeddings, metadata);
搜索电影(使用向量搜索)
现在您的数据已存储在数据库中,您可以查询它。在本例中,我们使用向量搜索。
文本 |
嵌入向量 |
适合家庭观看的电影 |
[0.12217915, -0.034832448] |
varqueryResult = awaitcollectionClient.Query(queryEmbeddings: queryEmbedding,nResults: 2,include: ChromaQueryInclude.Metadatas | ChromaQueryInclude.Distances);
foreach(varresult inqueryResult){foreach(varitem inresult){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
https://devblogs.microsoft.com/dotnet/introducing-microsoft-extensions-vector-data/
Microsoft.Extensions.AI
https://devblogs.microsoft.com/dotnet/introducing-microsoft-extensions-ai-preview/
@ssone95
https://github.com/ssone95
.NET AI 文档
https://learn.microsoft.com/dotnet/ai/quickstarts/quickstart-ai-chat-with-data?tabs=azd&pivots=openai
提供反馈
https://github.com/ssone95/ChromaDB.Client
微信