跳到主要内容
Azure Cosmos DB for MongoDB vCore 让您可以轻松创建完全原生支持 MongoDB 的数据库。您可以利用您的 MongoDB 经验,并通过将您的应用程序指向 API for MongoDB vCore 帐户的连接字符串,继续使用您喜欢的 MongoDB 驱动程序、SDK 和工具。在 Azure Cosmos DB for MongoDB vCore 中使用向量搜索,无缝地将您的 AI 应用程序与存储在 Azure Cosmos DB 中的数据集成。
Azure Cosmos DB for MongoDB vCore 为开发人员提供了一个完全托管的 MongoDB 兼容数据库服务,用于使用熟悉的架构构建现代应用程序。 通过此页面了解如何利用 Azure Cosmos DB for MongoDB vCore 的向量搜索功能。如果您没有 Azure 帐户,可以创建一个免费帐户以开始使用。

设置

您首先需要安装 @langchain/azure-cosmosdb 包。
有关安装 LangChain 软件包的一般说明,请参阅此部分
npm
npm install @langchain/azure-cosmosdb @langchain/core
您还需要运行一个 Azure Cosmos DB for MongoDB vCore 实例。您可以按照此指南在 Azure 门户上免费部署一个版本。 一旦您的实例运行起来,请确保您拥有连接字符串和管理员密钥。您可以在 Azure 门户中,在您的实例的“连接字符串”部分找到它们。然后,您需要设置以下环境变量:
.env 变量
AZURE_COSMOSDB_MONGODB_CONNECTION_STRING=

示例

下面是一个示例,它在 Azure Cosmos DB for MongoDB vCore 中索引文件中的文档,运行向量搜索查询,最后使用一个链根据检索到的文档以自然语言回答问题。
import {
  AzureCosmosDBMongoDBVectorStore,
  AzureCosmosDBMongoDBSimilarityType,
} from "@langchain/azure-cosmosdb";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { ChatOpenAI, OpenAIEmbeddings } from "@langchain/openai";
import { createStuffDocumentsChain } from "@langchain/classic/chains/combine_documents";
import { createRetrievalChain } from "@langchain/classic/chains/retrieval";
import { TextLoader } from "@langchain/classic/document_loaders/fs/text";
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";

// Load documents from file
const loader = new TextLoader("./state_of_the_union.txt");
const rawDocuments = await loader.load();
const splitter = new RecursiveCharacterTextSplitter({
  chunkSize: 1000,
  chunkOverlap: 0,
});
const documents = await splitter.splitDocuments(rawDocuments);

// Create Azure Cosmos DB for MongoDB vCore vector store
const store = await AzureCosmosDBMongoDBVectorStore.fromDocuments(
  documents,
  new OpenAIEmbeddings(),
  {
    databaseName: "langchain",
    collectionName: "documents",
    indexOptions: {
      numLists: 100,
      dimensions: 1536,
      similarity: AzureCosmosDBMongoDBSimilarityType.COS,
    },
  }
);

// Performs a similarity search
const resultDocuments = await store.similaritySearch(
  "What did the president say about Ketanji Brown Jackson?"
);

console.log("Similarity search results:");
console.log(resultDocuments[0].pageContent);
/*
  Tonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you’re at it, pass the Disclose Act so Americans can know who is funding our elections.

  Tonight, I’d like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service.

  One of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court.

  And I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.
*/

// Use the store as part of a chain
const model = new ChatOpenAI({ model: "gpt-3.5-turbo-1106" });
const questionAnsweringPrompt = ChatPromptTemplate.fromMessages([
  [
    "system",
    "Answer the user's questions based on the below context:\n\n{context}",
  ],
  ["human", "{input}"],
]);

const combineDocsChain = await createStuffDocumentsChain({
  llm: model,
  prompt: questionAnsweringPrompt,
});

const chain = await createRetrievalChain({
  retriever: store.asRetriever(),
  combineDocsChain,
});

const res = await chain.invoke({
  input: "What is the president's top priority regarding prices?",
});

console.log("Chain response:");
console.log(res.answer);
/*
  The president's top priority is getting prices under control.
*/

// Clean up
await store.delete();

await store.close();

以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.