Azure Cosmos DB for NoSQL 支持查询具有灵活架构的项目,并原生支持 JSON。它现在提供向量索引和搜索功能。此功能旨在处理高维向量,实现在任何规模下的高效准确向量搜索。您现在可以直接将向量与数据一起存储在文档中。数据库中的每个文档不仅可以包含传统的无模式数据,还可以包含高维向量作为文档的其他属性。从此页面了解如何利用 Azure Cosmos DB for NoSQL 的向量搜索能力。如果您没有 Azure 账户,可以创建免费账户开始使用。
设置
首先需要安装@langchain/azure-cosmosdb 包:
npm
.env example
使用 Azure 托管身份
如果您使用 Azure 托管身份,可以像这样配置凭据:使用 Azure 托管身份和基于角色的访问控制时,必须确保数据库和容器已预先创建。RBAC 不提供创建数据库和容器的权限。您可以在 Azure Cosmos DB 文档中获取有关权限模型的更多信息。
使用过滤器时的安全考虑
允许原始用户输入连接到类似 SQL 的语句中——例如WHERE ${userFilter}——会带来 SQL 注入攻击的关键风险,可能暴露意外数据或损害系统完整性。为了缓解此风险,请始终使用 Azure Cosmos DB 的参数化查询机制,传入 @param 占位符,从而将查询逻辑与用户提供的输入清晰地分离。
以下是不安全代码的示例:
123 OR 1=1,则查询变为 SELECT * FROM c WHERE c.metadata.userId = '123' OR 1=1,这会强制条件始终为真,导致绕过预期的过滤器并删除所有文档。
为了防止这种注入风险,您可以定义一个占位符如 @userId,Cosmos DB 将用户输入作为参数单独绑定,确保其被严格视为数据而非可执行的查询逻辑,如下所示。
123 OR 1=1,该输入将被视为要匹配的字面字符串值,而不是查询结构的一部分。
请参阅官方文档中关于 Azure Cosmos DB for NoSQL 中的参数化查询 以获取更多使用示例和最佳实践。
使用示例
以下示例演示了如何将文件中的文档索引到 Azure Cosmos DB for NoSQL 中,运行向量搜索查询,最后使用链基于检索到的文档以自然语言回答问题。高级搜索选项
所有搜索类型都通过统一的similaritySearch 和 similaritySearchWithScore 方法访问,使用过滤器选项中的 searchType 参数。搜索类型可作为 AzureCosmosDBNoSQLSearchType 中的常量使用:
可用的搜索类型:
AzureCosmosDBNoSQLSearchType.Vector(默认):标准向量相似性搜索AzureCosmosDBNoSQLSearchType.VectorScoreThreshold:带最低分数过滤器的向量搜索AzureCosmosDBNoSQLSearchType.FullTextSearch:使用 FullTextContains 的全文搜索(预览)AzureCosmosDBNoSQLSearchType.FullTextRanking:带 BM25 排名的全文搜索(预览)AzureCosmosDBNoSQLSearchType.Hybrid:使用 RRF 的混合向量 + 全文搜索(预览)AzureCosmosDBNoSQLSearchType.HybridScoreThreshold:带分数阈值的混合搜索(预览)
defaultSearchType 配置选项设置默认搜索类型,这样就不必在每次查询中指定它:
带分数阈值的向量搜索
基于最小相似性分数过滤结果:最大边际相关性(MMR)搜索
MMR 搜索在结果中平衡相关性与多样性:全文和混合搜索(预览)
要使用全文或混合搜索,请在创建存储时启用它:全文搜索
全文排名
混合搜索
混合搜索使用倒数排名融合(RRF)将向量相似性与全文搜索相结合:实用方法
删除文档
访问底层容器
相关
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

