Skip to main content

Azure Cosmos DB for MongoDB vCore

Azure Cosmos DB for MongoDB vCore 让你可以轻松创建一个完全原生支持 MongoDB 的数据库。你可以继续使用自己熟悉的 MongoDB 驱动程序、SDK 和工具,只需将应用程序指向 MongoDB vCore 账户的连接字符串即可。通过在 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 包:

:::提示 请参阅安装集成包的一般说明部分。 :::

npm install @langchain/azure-cosmosdb @langchain/core

你还需要运行一个 Azure Cosmos DB for MongoDB vCore 实例。你可以按照此指南,在 Azure 门户中免费部署一个实例。

实例运行后,请确保你拥有连接字符串和管理员密钥。你可以在 Azure 门户中实例的“连接字符串”部分找到它们。然后你需要设置以下环境变量:

AZURE_COSMOSDB_MONGODB_CONNECTION_STRING=

API Reference:

    示例

    下面是一个示例,它从文件中将文档索引到 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/chains/combine_documents";
    import { createRetrievalChain } from "langchain/chains/retrieval";
    import { TextLoader } from "langchain/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();

    API Reference:

    相关内容


    Was this page helpful?


    You can also leave detailed feedback on GitHub.