暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用 Mistral AI 函数调用、Langchain 和 MongoDB 进行实时数据获取和存储

二师兄talks 2024-03-20
781

在当今人工智能 (AI) 和数据管理快速发展的格局中,生成式 AI 的无缝集成、实时获取数据、高效的数据存储以及与您的操作数据集功能相结合,是企业级先进技术的巨大差异化因素。人工智能应用。

Mistral AI 及其函数调用能力与 Langchain 和 MongoDB 合作,为获取实时数据并以无与伦比的效率存储数据开辟了新途径。本文深入探讨了这些技术如何结合在一起,在数据管理、LLM 使用和 LLM 框架方面改变创建下一代应用程序的方式。

在进入今天的主题之前,我想先介绍一下 AI 堆栈的概念:如果您从事 Web 开发,您一定听说过 MEAN 堆栈(MongoDB、Express、Angular 和 Node)或 MERN 堆栈(MongoDB、Express、 React、Node)、AI堆栈是AI应用的新思路。最近与杰出的开发者倡导者Richmond Alake讨论时,我发现了这个概念:“ AI 堆栈或 GenAI 堆栈是指用于构建和开发具有生成式 AI 功能的现代应用程序的模型、数据库、库和框架的组合。”

因此,在本文中,我们的 AI 堆栈是PMLM堆栈,其中 P 代表 Python,首先 M 代表 Mistral,L 代表 Langchain,最后但并非最不重要的 M 代表 MongoDB。

Mistral AI 是一家专注于人工智能(AI)产品的法国公司,由 Meta Platforms 和 Google DeepMind 的前员工于 2023 年 4 月创立。2023年10月,Mistral AI筹集了3.85亿欧元,到2023年12月,估值超过20亿美元。该公司以生产高性能的开源大型语言模型而闻名,强调开源软件在其开发和提供中的基础重要性。

Mistral AI 对函数调用的支持

函数调用并不是一个新概念,但是,我本周刚刚通过 Sophia Yang(Mistral AI 开发倡导者负责人)在 YouTube 上的文章和视频发现 Mistral AI 支持函数调用。

Mistral 中的函数调用,特别是其模型“mistral-large-latest”,是一种允许模型智能选择输出包含调用特定函数参数的 JSON 对象的机制。

让我们举个例子:我希望通过这个开放的天气 API 获取当前的巴黎天气。此 API 期望的输入参数是纬度、经度和 API 密钥。如果没有“函数调用”的帮助,如下图所示,我需要手动输入这种格式的参数来调用这个API。

无需调用 Open Weather API 的函数

函数调用的神奇之处在于,现在只需通过自然语言短语,Mistral AI 就可以通过函数调用帮助我生成 JSON 中 Open Weather API 等待的精确格式。因此,我可以直接调用开放天气 API,需要注意的是,LLM as Mistral AI 不会为用户执行 API 调用(参见下图)。用户仍然需要使用LLM准备的参数来执行他们的函数或API调用。或者用户可以利用 LLM 框架(Langchain)来执行。

通过函数调用来调用Open Weather API

此功能有助于 Mistral 的功能与外部工具和 API 更可靠地连接,从而增强模型的交互性和执行更复杂任务的能力。此功能还为开发人员创建更加动态和响应更快的应用程序提供了许多可能性。通过向模型描述函数并指定其用途和参数,开发人员可以指示 Mistral 模型建议函数参数以响应用户的自然语言输入。

使用 Langchain 增强函数调用

正如我所说,Mistral 模型将用户的自然语言输入转换为函数所需的参数。但是,该功能不是由 Mistra 执行的。用户仍然需要执行他的功能。朗链来了。

Langchain 通过提供一个框架来促进函数调用,Mistral AI 等聊天模型可以在该框架中描述函数及其参数。然后,LLM 模型返回一个带有函数的 JSON 对象,Langchain 使用该函数的输入(由 LLM 生成)调用该函数。

使用 Langchain 增强函数调用

Langchain 中的函数调用有助于创建可与外部 API 和服务交互的动态和交互式应用程序,例如使用 OpenWeatherMap API 获取实时天气数据。

Langchain 还定义了用于构建代理的自定义工具,需要代理可以使用的工具列表。每个工具都由多个组件组成,包括唯一的名称和可选但推荐的描述。

在代理的背景下,Langchain 区分了链和代理,链中的一系列操作是硬编码的,代理中语言模型充当推理引擎来决定操作序列。

总体而言,Langchain 促进函数调用、定义自定义工具和构建代理的方法强调了其增强 AI 应用程序的交互性和功能性的能力。它与 Pydantic 的数据验证和模式定义集成进一步证明了这一点,确保在启用动态函数调用的同时保持数据完整性。

现实应用中的商业利益

Mistral AI 和 Langchain 功能的一项实际应用是使用 OpenWeather API 获取实时天气数据。此过程涉及调用 API 以根据特定地理坐标检索当前天气状况。

Langchain、MistralAI、MongoDB 堆栈

将数据存储到 MongoDB 中以供进一步使用

MongoDB 是一种 NoSQL 数据库,由于其灵活性、可扩展性和效率,在存储实时数据方面表现出色。它是需要快速数据检索和存储功能的应用程序的理想选择,例如处理通过 OpenWeather API 获取的天气数据的应用程序。

此外,MongoDB 面向文档的结构允许高效存储和检索复杂数据,使其非常适合管理 OpenWeather 等 API 返回的动态和变化的数据。

将数据存储到 MongoDB 中以供将来使用不仅可以增强应用程序的即时响应能力,而且还为许多高级用例打开了大门,特别是在工业现场能源优化和路线问题检测等领域。MongoDB 在处理实时数据方面的敏捷性和稳健性使其成为聚合海量数据集的典型存储库,这些数据集可在各个操作方面利用。

例如,可以对存储在 MongoDB 中的天气数据进行复杂分析,以预测工业场所的能源需求,从而提高能源使用效率并降低运营成本。

同样,这些数据可以通过结合与天气相关的见解来优化路线并确保及时交货,从而在识别和缓解物流和运输中的路线问题方面发挥至关重要的作用。

MongoDB 的互操作性促进了不同应用程序之间的无缝数据共享,从而增强了解决复杂工业挑战所必需的分析能力。这种整体的数据管理和利用方法强调了将 MongoDB 集成到更广泛的运营战略中的变革潜力,为更智能、更高效的工业运营铺平了道路。

分步实施

本节深入探讨如何利用 Mistral AI 与 Langchain 和 MongoDB 相结合来增强航班搜索功能,并提供该过程的详细演练。

设置简介

在深入了解细节之前,通过导入必要的库和设置 API 密钥来建立环境至关重要。这一准备工作为各种服务的无缝集成奠定了基础:

  • Mistral AI:一项为我们的语言模型提供支持的尖端人工智能服务。

  • Amadeus:旅游行业 API,提供航班报价搜索。

  • MongoDB:用于高效存储和检索航班数据的 NoSQL 数据库。

  • Langchain:一个通过促进外部 API 的整合来增强人工智能应用程序的工具包。

    import os
    from typing import Union, List, Dict
    from pymongo import MongoClient
    from amadeus import Client, ResponseError
    from langchain_mistralai.chat_models import ChatMistralAI
    from langchain_core.messages import HumanMessage
    from langchain.agents import tool
    from langchain.tools import WikipediaQueryRun
    from langchain_community.utilities import WikipediaAPIWrapper
    from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
    from langchain.agents.format_scratchpad.openai_tools import format_to_openai_tool_messages
    from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser
    from langchain.agents import AgentExecutor


    # Configuration and API keys
    mistral_api_key = os.environ["MISTRAL_API_KEY"]
    amadeus_client_id = os.environ['AMADEUS_CLIENT_ID']
    amadeus_client_secret = os.environ['AMADEUS_CLIENT_SECRET']
    model = "mistral-large-latest"


    # Initialize clients
    llm = ChatMistralAI(mistral_api_key=mistral_api_key, model=model)
    amadeus = Client(client_id=amadeus_client_id, client_secret=amadeus_client_secret)

    建立数据库连接

    对于处理实时信息的任何应用程序来说,高效存储和检索数据至关重要。该response_store_into_MongoDB函数演示了如何将来自 Amadeus API 的响应存储在 MongoDB 中。这确保了航班数据可随时用于将来的查询,从而增强应用程序的响应能力。

      # MongoDB storage function
      def response_store_into_MongoDB(response: Union[Dict, List[Dict]]) -> None:
      connection_string = os.getenv('MONGO_URI')
      client = MongoClient(connection_string)
      db = client['flightSearch']
      collection = db['flightData_27feb']
      if isinstance(response, list):
      collection.insert_many(response)
      else:
      collection.insert_one(response)

      获取优惠并存储在 MongoDB 中

      获取航班报价的核心功能封装在该get_flight_offer工具中。通过利用 Amadeus API,该工具可以根据用户提供的标准(例如出发地、目的地、出发日期和成人人数)获取潜在的航班报价。该功能与 MongoDB 的数据存储无缝集成,说明了人工智能与数据库管理相结合的力量。

      在工具定义中,通过以下代码,我们告诉LLM代理调用该工具的预期参数是什么以及预期的输出格式是什么。

        def get_flight_offer(originLocationCode: str, destinationLocationCode: str, departureDate: str, adults: int) -> dict:

        这行代码告诉 LLM 代理何时使用此工具:

          """Fetch all possible flight offers given departure and arrival date number passenger information."""

          现在让我们看一下整个工具的定义:

            # Tool to fetch flight offers
            @tool
            def get_flight_offer(originLocationCode: str, destinationLocationCode: str, departureDate: str, adults: int) -> dict:
            """Fetch all possible flight offers given departure and arrival date number passenger information."""
            params = {
            'originLocationCode': originLocationCode,
            'destinationLocationCode': destinationLocationCode,
            'departureDate': departureDate,
            'adults': adults
            }
            try:
            response = amadeus.shopping.flight_offers_search.get(**params)
            response_store_into_MongoDB(response.data)
            return response.data
            except ResponseError as error:
            print(error)
            return {}

            通过维基百科查询增强功能

            为了扩大应用程序的功能,使用 Langchain 的WikipediaQueryRun. 这一新增功能允许用户直接从维基百科获取与其旅行目的地相关的信息,从而丰富了该应用程序,从而提供了更全面的旅行规划工具。

              # Wikipedia tool for queries
              wikipedia = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())

              定义工具和提示模板

              利用 Langchain 框架来定义工具和提示模板,使应用程序能够有效地理解和处理用户查询。诸如get_flight_offer和 之类的工具wikipedia绑定到语言模型,使其能够根据用户输入利用这些功能。

                # Define tools
                tools = [get_flight_offer, wikipedia]


                # Define prompt template
                prompt = ChatPromptTemplate.from_messages([
                ("system", """
                You are a very powerful assistant for travel planning, your final result should be user-friendly for their visit.
                You can use the tool 'get_flight_offer' to fetch all possible flight offers given departure and arrival date number passenger information. if you are missing information about the flight, you should ask the user for the missing information.
                You can use the tool 'wikipedia' to search on wikipedia for the word 'Musee louvre'.
                """),
                ("user", "{input}"),
                MessagesPlaceholder(variable_name="agent_scratchpad"),
                ])

                构建代理执行器

                代理执行器协调用户输入、AI 模型和定义的工具之间的交互。通过解析用户查询、从 Amadeus 或 Wikipedia 获取相关数据以及从 MongoDB 存储或检索信息,代理执行器充当应用程序的主干,确保平稳运行和用户友好的输出。

                  # Bind tools to the LLM
                  llm_with_tools = llm.bind_tools(tools)


                  # Define agent pipeline
                  agent = (
                  {"input": lambda x: x["input"],
                  "agent_scratchpad": lambda x: format_to_openai_tool_messages(x["intermediate_steps"])
                  }
                  | prompt
                  | llm_with_tools
                  | OpenAIToolsAgentOutputParser()
                  )

                  执行代理

                  最后,代理通过AgentExecutor类的执行展示了正在运行的应用程序。通过流式传输用户查询并通过定义的管道对其进行处理,代理将决定使用哪个工具来回复用户的查询。用户可以轻松查找航班优惠或检索与其旅行计划相关的信息,也可以在维基百科上进行搜索。



                    # Execute agent
                    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)


                    # Example executions
                    list(agent_executor.stream({"input": "Find me the flight from Paris to Madrid on 23 March 2024."}))
                    # list(agent_executor.stream({"input": "Search on Wikipedia for the word 'Musee Louvre'."}))


                    Langchain、Mistral AI 和 MongoDB Stack 的业务优势

                    人工智能的潜在增强,加上 MongoDB 等数据管理技术和 Langchain 等框架的进步,有望带来更复杂的应用程序,并带来以下业务优势:

                    • 增强的客户体验:为自然语言查询提供直观的对话界面,提高参与度和忠诚度。

                    • 实时数据处理:确保提供最新的航班信息并深入了解消费者行为,以做出明智的决策。

                    • 可扩展性和灵活性:由于MongoDB的可扩展性和Langchain的模块化工具,可以轻松扩展和适应市场变化。

                    • 成本效率:自动化降低了运营成本,而 MongoDB 和开源技术降低了基础设施费用。

                    • 竞争优势:利用人工智能和数据库技术的独特服务和高效解决方案使企业在市场上脱颖而出。

                    • 无缝集成:轻松整合到现有系统中,最大限度地减少部署时间和成本。

                    总而言之,Mistral AI、Langchain 和 MongoDB 之间的合作不仅展示了集成先进技术的力量,而且为人工智能和数据管理领域的未来创新打开了大门。






                    文章转载自二师兄talks,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论