使用 MinIO SDK 开发 Langchain 代理以供 LLM 工具使用

Developing Langchain Agents with the MinIO SDK for LLM Tool-Use

在我之前关于Langchain的文章中,我探讨了“社区 S3 加载器”的使用,虽然有用,但功能有限。在这里,我们将深入探讨定制工具的开发(本演示将重点关注 MinIO 对象上传),以及通过 Langchain 代理和执行器将它们与大型语言模型 (LLM) 集成。该演示展示了将对象上传到存储桶的过程,利用 MinIO Python SDK 和 Langchain 作为基础工具。这种探索开辟了新的可能性,超越了基本加载器,转向更灵活、更强大的实现,从而增强了语言模型驱动应用程序的功能。

这种将复杂的语言模型与强大的数据存储能力相结合的战略举措,是一个增强语言驱动应用程序功能的演变,为使用大型语言模型 (LLM) 进行高级工具利用提供了一条途径。利用 MinIO 安全且可扩展的对象存储以及 Langchain 利用 OpenAI 的 GPT 等 LLM 的全部功能的能力,开发人员可以创建不仅模仿人类文本生成而且还可以执行复杂任务的系统,将数据管理效率提升到新的高度。

Langchain 充当关键接口,将人类指令转换为机器智能的操作语言。把它想象成一个复杂的中间人,能够解释用户命令并协调一系列活动,从 MinIO 结构中的数据组织到数据集的详细分析。这种能力有效地将 LLM 的理论能力转化为开发人员工具包中的有形、功能性资产,从而允许构建曾经被认为是未来主义的先进解决方案。

在本指南中,我们优先考虑实用性,引导人们走向可操作的开发实践。我们邀请开发人员拥抱 Langchain 和 MinIO SDK 结合所蕴藏的潜力,不仅要创新,还要重新定义使用当今数字工具的智能自动化所能实现的目标边界。

与本次探索相关的源代码和详细文档可以在这里找到。此笔记本提供了入门所需的最低限度资源,可与 Langchain 和 MinIO 一起使用,提供动手体验,加深您对创建智能数据驱动应用程序的理解和技能。

使用上下文记忆和高级数据处理增强对话式代理

将记忆管理集成到 Langchain 应用程序中,极大地提升了它们提供既相关又具有深厚上下文感知能力的响应的能力。这种进步允许代理利用过去的对话,提供更丰富、更深层的理解,了解每次交互。此功能的真正力量在于其根据用户会话的积累历史量身定制响应的能力,将标准交互转变为更能引起用户共鸣的个性化体验。

记忆功能的加入,尤其是在与将对象存储公开为代理工具的功能相结合时,彻底改变了 AI 驱动的对话式代理的格局。开发人员获得了创建不仅能以无与伦比的准确性执行任务,而且还能通过持续交互来发展和适应用户需求的代理的工具。这种适应性标志着交互式应用程序开发的飞跃,在这种应用程序中,代理不仅响应,而且还能预测用户的需求,从而创造真正交互式且直观的体验。

此外,这种方法为无缝地将 MinIO 强大的数据管理能力与 Langchain 先进的处理能力相结合奠定了全面的蓝图,为增强对话式代理提供了精心详细的指南。结果是和谐的集成,它利用了 MinIO 和 Langchain 的优势,为开发人员提供了丰富的调色板,用于创建既技术精湛又以用户为中心的应用程序。

设置环境

首先,必须使用所有必要的软件包设置开发环境。这确保您安装了所有必需的库和依赖项。

首先安装两个关键软件包:MinIO Python SDKLangchain。MinIO SDK 是一款功能强大的工具,允许我们与 MinIO 存储桶进行交互,实现从 Python 脚本直接执行文件上传、下载和存储桶管理等操作。另一方面,Langchain 是一个创新的框架,它允许创建将大型语言模型与特定任务(在本例中为文件管理)相结合的应用程序。

这两个软件包共同构成了我们工具的基础,使我们能够利用 MinIO 强大的存储解决方案和大型语言模型的先进自然语言处理功能的优势。

要安装这些软件包,请在终端中运行以下命令

pip install -q -U minio "langchain[all]"

安装软件包依赖项

此命令安装 MinIO 客户端Langchain 的最新版本,以及 Langchain 所需的所有可选依赖项。

集成 Langsmith 用于过程监控和跟踪(可选)

使用 Langchain 开发的一个关键方面是能够监控和跟踪任务的执行,尤其是在将对象存储操作等复杂功能与 MinIO 集成时。 Langsmith 提供了一个直观的平台来可视化这些过程,提供有关 Langchain 应用程序性能和效率的实时见解。在下面,我们包含了 Langsmith 的屏幕截图,突出了任务的无缝执行,从调用 LLM 到执行特定操作(如文件上传和数据处理)。

这些视觉辅助工具不仅有助于消除对底层过程的神秘感,而且还展示了 Langchain 和 MinIO SDK 在创建复杂 AI 驱动的工具方面的实际应用。通过 Langsmith,开发人员可以更深入地了解其应用程序的行为,从而更容易地优化和改进解决方案以获得更好的性能和用户体验。

Langchain 中 RunnableSequence 的概述,通过 Langsmith 捕获。
提供有关 ChatOpenAI LLM、工具使用、提示以及更多内容的详细性能指标,通过 Langsmith 可视化。

将 Langsmith 集成到您的开发工作流程中不仅增强了透明度,而且还使您能够构建更可靠、更高效的 Langchain 应用程序。通过利用这些见解,您可以微调应用程序,确保它们满足生产环境所需的严格标准。

要开始使用 Langsmith,请按照以下步骤操作

1. 创建 Langsmith 项目:访问 smith.langchain.com 并注册或登录您的帐户。登录后,通过选择创建新项目的选项并将其命名为“Langchain MinIO Tool”来创建一个新项目。此项目将成为监控 Langchain 集成的交互和性能的中心枢纽。

2. 生成 API 密钥:创建项目后,导航到项目设置以生成新的 API 密钥。此密钥将验证您的应用程序对 Langsmith 的请求,确保工具与 Langsmith 服务之间的安全通信。

3. 配置环境变量:Langsmith 要求在您的开发环境中设置几个环境变量。这些变量使您的应用程序能够与 Langsmith 的 API 通信并发送跟踪数据。

这些变量的示例包括

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
export LANGCHAIN_API_KEY="<your-api-key>"
export LANGCHAIN_PROJECT="Langchain MinIO Tool"

导出 Langsmith 的环境变量

<your-api-key> 替换为上一步中生成的实际 API 密钥。这些环境变量使应用程序中的 Langchain SDK 能够将跟踪和监控数据发送到 Langsmith 项目,为您提供有关 Langchain 集成操作和性能的实时见解。

Langsmith 项目设置页面
集成 Langsmith 是一个可选但推荐的步骤,适用于希望最大限度地提高其 Langchain 应用程序效率和可靠性的用户。它提供了用于性能监控、调试和优化的宝贵工具,确保您的 Langchain MinIO Tool 始终保持最佳运行状态。

初始化 OpenAI 和 MinIO 客户端以进行文件管理

构建与 MinIO 集成以进行文件上传的 Langchain 工具的基础,涉及设置 OpenAI 和 MinIO 的客户端。此设置允许您的应用程序与 OpenAI 的强大语言模型和 MinIO 的高效文件存储系统进行通信。以下是您如何在 Python 中初始化这些关键组件的方法。

使用 OpenAI 设置语言模型

首先,我们需要使用 OpenAI 的 API 初始化语言模型。此步骤涉及使用 langchain_openai 包创建 ChatOpenAI 的实例,它将充当我们与 OpenAI 语言模型的接口。这需要来自 OpenAI 的 API 密钥,您可以从您的 OpenAI 帐户中获取。

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(api_key="")

使用 ChatOpenAI 设置 llm

(api_key="") 中的空字符串替换为您的实际 OpenAI API 密钥。此密钥允许对 OpenAI 进行身份验证请求,使您可以利用语言模型来处理和生成文本。

导入必要的库

在继续之前,请确保您导入必要的库。这些导入包括用于处理字节流的 io 和来自 langchain.agentstool,它是一个装饰器,用于将函数注册为 Langchain 代理可以使用工具。

import io
from langchain.agents import tool

导入 iolangchain.agents tool

初始化 MinIO 客户端

接下来,我们初始化 MinIO 客户端,它允许我们的应用程序与 MinIO 存储桶进行交互,以执行诸如上传、下载和列出文件之类的操作。MinIO 客户端使用服务器端点、访问密钥、秘密密钥和一个标志来初始化,该标志指示是否使用安全连接(HTTPS)。

from minio import Minio
from minio.error import S3Error

minio_client = Minio('play.min.io:443',
                     access_key='minioadmin',
                     secret_key='minioadmin',
                     secure=True)

设置 minio_client

在本例中,我们使用 MinIO 的播放服务器 (play.min.io:443) 以及默认凭据 (minioadmin 用于访问和秘密密钥)。在生产环境中,您应该将这些替换为您的 MinIO 服务器详细信息和凭据。

通过初始化 OpenAI 和 MinIO 客户端,您为开发能够与自然语言处理模型交互并在 MinIO 存储桶中管理文件的先进工具奠定了基础,为自动化和增强文件管理任务开辟了广泛的可能性。

管理 MinIO 中的存储桶可用性

使用 MinIO 的一个重要部分是管理存储桶,存储桶是存储数据的基本容器。在上传文件之前,确保目标存储桶存在非常重要。此过程涉及检查存储桶是否存在,如果不存在则创建它。这种方法不仅为文件操作准备了环境,而且避免了与不存在的存储桶相关的错误。

以下是一个简单但有效的帮助器函数和代码段,用于管理 MinIO 中存储桶的可用性。

bucket_name = "test"

try:
    # Check if bucket exists
    if not minio_client.bucket_exists(bucket_name):
        # Create the bucket because it does not exist
        minio_client.make_bucket(bucket_name)
        print(f"Bucket '{bucket_name}' created successfully.")
    else:
        print(f"Bucket '{bucket_name}' already exists.")
except S3Error as err:
    print(f"Error encountered: {err}")

存储桶帮助器函数

此代码执行以下操作:

1. 定义存储桶名称:它首先指定要检查或创建的存储桶的名称,在本例中为 "test"

2. 检查存储桶是否存在:它使用 MinIO 客户端的 bucket_exists 方法来检查存储桶是否已经存在。

3. 如有必要创建存储桶:如果存储桶不存在,则调用 make_bucket 方法以使用指定的名称创建一个新存储桶。

4. 处理错误:该操作包装在一个“try-except 块”中,以捕获和处理在该过程中可能发生的任何 S3Error 异常,例如权限问题或网络错误。

通过在执行文件操作之前确保存储桶的存在,您可以使您的应用程序更加健壮且用户友好,提供清晰的反馈并避免与 MinIO 中存储桶管理相关的常见陷阱。

实现文件上传功能

一旦环境配置好,并且必要的检查到位以确保目标存储桶存在,下一步就是实现将文件上传到 MinIO 的核心功能。这涉及创建一个函数,该函数以存储桶名称、对象名称(存储桶中的文件名)和文件的二进制数据作为输入,然后使用 MinIO 客户端将文件上传到指定的存储桶。

以下是您如何定义此上传函数的方法。

@tool
def upload_file_to_minio(bucket_name: str, object_name: str, data_bytes: bytes):
    """
    Uploads a file to MinIO.
    Parameters:
        bucket_name (str): The name of the bucket.
        object_name (str): The name of the object to create in the bucket.
        data_bytes (bytes): The raw bytes of the file to upload.
    """
    data_stream = io.BytesIO(data_bytes)
    minio_client.put_object(bucket_name, object_name, data_stream, length=len(data_bytes))
    return f"File {object_name} uploaded successfully to bucket {bucket_name}."

使用 Langchain 的 @tool 装饰器的 Python “upload” 函数。

上传函数的关键组件:

- 函数装饰器 (@tool):此装饰器用于将函数注册为 Langchain 框架内的工具,使其在 Langchain 工作流程或过程中可调用。它使该函数能够与 Langchain 代理和执行器无缝集成。

- 参数:该函数接受三个参数。

  - bucket_name:将上传文件的 MinIO 存储桶的名称。

  - object_name:您希望分配给存储桶中文件的名称。

  - data_bytes:要上传的文件的二进制数据。

- 创建字节流:二进制数据 (data_bytes) 包裹在一个 BytesIO 流中。这是必需的,因为 MinIO 客户端的 put_object 方法需要数据流而不是原始字节。

- 上传文件:调用 MinIO 客户端的 put_object 方法,并提供存储桶名称、对象名称、数据流以及数据长度。此方法处理上传过程,将文件存储在指定存储桶中的给定对象名称下。

- 返回语句:上传成功后,函数将返回一个确认消息,指示操作成功。

此上传函数是创建与 MinIO 存储交互的应用程序的基本构建块。它将上传逻辑封装在可重用且易于调用的格式中,使开发人员能够将文件上传功能有效地集成到他们的 Langchain 应用程序和工作流程中。

使用 RunnableLambda 和辅助工具增强功能

在建立了基本上传功能之后,为了更广泛的集成和更多实用性,可以进一步改进工具的功能。这涉及为上传函数创建一个 RunnableLambda 并定义可以在同一生态系统中使用的辅助工具。这些步骤不仅扩展了功能,而且还确保了与 Langchain 工作流程的无缝集成。

为文件上传创建 RunnableLambda

Langchain 的架构支持将函数封装到可运行对象中,这些可运行对象可以无缝地在它的框架内执行。为了便于在 Langchain 工作流程中执行上传函数,我们将它包装在一个 RunnableLambda 中。这使该函数能够轻松地与 Langchain 的代理和执行器集成,从而实现能够与 MinIO 交互的自动化和复杂工作流程。

from langchain_core.runnables import RunnableLambda

upload_file_runnable = RunnableLambda(upload_file_to_minio)

使用 Langchain 的 RunnableLambda 包装 upload_file_runnable

RunnableLambda 接受我们的 upload_file_to_minio 函数,并在 Langchain 系统中使其易于使用,增强了工具的互操作性和在应用程序的不同部分中的易用性。

合并辅助函数以扩展功能

在我们探索将 MinIO 与 Langchain 集成的过程中,我们主要关注了文件上传的核心功能。但是,Langchain 的多功能性允许在文件管理之外合并各种功能。为了说明这种灵活性,我们提供了一个辅助函数 get_word_length 的示例,它直接受到 Langchain 文档中示例的启发。这旨在说明如何轻松地将其他函数集成到您的 Langchain 项目中。

包含 get_word_length 函数旨在展示将更多功能添加到您的 Langchain 工具中的过程。

以下更详细地说明了如何定义此辅助工具。

@tool
def get_word_length(word: str) -> int:
    """Returns the length of a word."""
    return len(word)

使用 Langchain 的 @tool 装饰器的 Python “secondary” 函数。

此函数,标记有 @tool 装饰器,是对扩展工具功能的简单而有效的演示。通过将此函数注册为 Langchain 框架内的另一个工具,它以类似于文件上传功能的方式可调用,展示了开发人员如何轻松地为其应用程序添加各种功能。

从 Langchain 文档中添加此函数的过程,不仅证明了扩展应用程序功能的便捷性,而且突出了利用现有资源和文档来增强项目的重要性。这种方法鼓励开发人员超越项目的直接需求,并考虑如何集成其他功能以创建更加通用和强大的工具。

这些增强功能证明了该系统不仅能够执行文件上传等核心任务,而且还能够执行其他功能,所有这些都集成在 Langchain 框架内。包含 RunnableLambda 和引入辅助工具说明了开发人员如何构建一个丰富的函数生态系统,这些函数协同工作以自动化和简化流程,利用 Langchain 和 MinIO 的强大功能。

使用 Langchain 制作交互式聊天提示

当我们更深入地研究将 MinIO 与 Langchain 集成时,一个关键方面是设计一种交互式体验,该体验利用 MinIO 上传工具和我们集成的任何其他工具的功能。这就是创建 ChatPromptTemplate 变得至关重要的地方。它作为用户和系统之间交互的蓝图,指导对话流程并确保正确有效地解释用户的命令。

创建 ChatPromptTemplate

ChatPromptTemplate 是 Langchain 的一个强大功能,允许开发人员预定义聊天交互的结构。通过指定聊天中系统和用户的角色,以及动态内容的占位符,我们可以创建一个灵活且受控的对话框架。以下是您如何创建一个包含我们工具功能的聊天提示模板的方法。

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder


prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a powerful assistant equipped with file management capabilities."),
    ("user", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad"),
])

导入和定义使用 ChatPromptTemplateMessagePlaceholderprompt

在此模板中:

- 系统消息:“系统”的第一条消息为交互设置了上下文,告知用户(或承担用户角色的语言模型)他们正在与具有文件管理功能的助手进行交互。这有助于框定用户的期望并指导他们的查询或命令。

- 用户输入占位符:“user”键后跟“{input}”,它充当用户实际输入的占位符。此动态插入点允许系统适应各种用户命令,促进各种文件管理任务。

- 代理人草稿板的 MessagesPlaceholder:名为“agent_scratchpad”的 MessagesPlaceholder 是聊天中一个动态区域,可以用来显示其他信息,例如工具执行结果或中间步骤。此功能增强了聊天的交互性和响应性,为用户提供实时反馈和结果。

在设置聊天提示模板的过程中,此步骤对于为我们的 Langchain 应用程序创建一个引人入胜且功能强大的用户界面至关重要。它不仅构建了交互方式,还将我们的 MinIO 上传工具和任何其他工具的功能无缝集成,使其可以通过聊天环境中的自然语言命令访问。

将工具绑定到语言模型以增强功能

充分利用我们 Langchain 应用程序潜力的一个关键步骤是将我们的自定义工具与语言模型集成。这种“自定义工具”的使用以及类似的“工具使用”集成,使语言模型不仅能够理解和生成自然语言,还能够执行特定功能,例如将文件上传到 MinIO 或计算单词的长度。通过将这些工具直接绑定到语言模型,我们创建了一个强大的多功能系统,能够处理用户输入并根据这些输入执行复杂的任务。

如何将工具绑定到语言模型

将工具绑定到语言模型 (LLM) 包括创建我们已定义为工具的函数列表,并使用 Langchain 的 ChatOpenAI 类提供的 bind_tools 方法。此方法将我们的工具与语言模型的特定实例关联起来,使其可以作为语言处理工作流程的一部分进行调用。以下是如何实现这一点

tools = [upload_file_to_minio, get_word_length]
llm_with_tools = llm.bind_tools(tools)

将函数列表绑定到 LLM

在此代码片段中

- 工具列表:我们首先定义一个名为 tools 的列表,其中包含我们用 @tool 装饰的函数。这包括用于将文件上传到 MinIO 的 upload_file_to_minio 函数,以及作为辅助工具示例的 get_word_length 函数。您可以根据需要将更多工具添加到此列表中。

- 绑定工具bind_tools 方法接受工具列表并将它们绑定到 llm 实例。这将创建一个新的语言模型实例 llm_with_tools,其中集成了我们的自定义工具。现在,这个增强的语言模型可以解释与绑定工具提供的功能相关的命令,从而实现自然语言处理和任务执行之间的无缝交互。

将工具绑定到语言模型的过程对于创建交互式和功能强大的 Langchain 应用程序至关重要。它弥合了自然语言理解和实际任务执行之间的差距,允许用户使用对话语言与系统交互以执行特定操作,例如 MinIO 中的文件管理。这种集成极大地扩展了 Langchain 应用程序的功能,为语言模型在各个领域的创新应用铺平了道路。

实施内存管理以增强用户交互

创建一个引人入胜且直观的 Langchain 应用程序,需要的不只是处理命令——它需要一个能够记住并从过去交互中学习的系统。这就是内存管理至关重要的原因,它使应用程序能够在对话中保持上下文,这对于处理复杂查询和后续问题特别有用。

建立代理和执行器框架

我们应用程序的核心是 AgentExecutor,它是一种复杂的机制,旨在解释用户输入、管理任务并促进用户与系统之间的通信。为了设置它,我们需要从 Langchain 中整合几个关键组件

from langchain.agents import AgentExecutor
from langchain.agents.format_scratchpad.openai_tools import format_to_openai_tool_messages
from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser

导入 AgentExecutoropenai_toolsOpenAIToolsAgentOutputParser

这个基础设置确保我们的应用程序拥有执行任务、解释语言模型输出以及有效地应用我们的自定义功能所需的工具。

内存管理集成

为了使用上下文感知的响应来丰富用户体验,我们更新了聊天提示模板以包括内存管理功能。这包括添加占位符以在对话中存储和引用聊天历史记录

from langchain_core.messages import AIMessage, HumanMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a powerful assistant with memory capabilities."),
    MessagesPlaceholder(variable_name="chat_history"),
    ("user", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad"),
])

chat_history = []

重构 promptagent_scratchpad 并使用空的 chat_history 列表

这种调整使我们的应用程序能够将以前的交互动态地整合到正在进行的对话中,从而确保与用户的对话连贯且富有上下文。

使用上下文感知功能改进代理

为了充分利用内存管理的优势,我们细化了代理的定义,以积极地整合聊天历史记录。这包括定义特定行为,以处理输入、管理代理的草稿板并将聊天历史记录整合到代理的决策过程中

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


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

定义 agent 链和 agent_executor

在此增强的代理设置中

- 自定义 Lambda 函数:代理使用 lambda 函数来处理用户的输入,管理存储在代理草稿板中的中间步骤,并将聊天历史记录无缝地整合到对话流中。

- 代理管道组装:通过使用管道运算符 (|) 将组件链接起来,我们创建了一个简化的流程,该流程接收用户的输入,用上下文历史记录对其进行丰富,执行必要的工具并解释输出以获得可操作的响应。

- 使用 AgentExecutor 执行:使用我们具有上下文感知的代理和预定义的工具来初始化 AgentExecutor,并配备详细的日志记录以提供详细的操作见解。

使用上下文代理交互执行文件上传

将 MinIO 文件上传集成到基于 Langchain 的应用程序中,提供了一个关于对话式 AI 如何简化复杂操作的实际示例。当与内存管理相结合时,此功能变得更加强大,使代理能够保持上下文并动态管理诸如文件上传之类的任务。以下是如何设置和执行文件上传流程,演示应用程序解释和执行用户命令的能力。

定义用户提示和文件信息

首先,我们建立一个用户提示,指示系统执行所需的操作——在本例中,是使用特定参数上传文件。除此之外,我们还定义了文件信息的结构,包括桶名称、对象名称和要上传的文件的数据字节

input1 = "Upload a text object with some funny name to the 'test' bucket with some example content"

file_info = {
    "bucket_name": "",
    "object_name": "",
    "data_bytes": b""
}

input1 是我们定义用户提示为字符串的地方。

此设置不仅指定了用户想要做什么,而且还以结构化的格式封装了 MinIO 上传操作所需的详细信息。

代理执行

定义了提示和文件信息后,我们继续通过我们的代理模拟文件上传命令的执行。此模拟涉及使用指定的输入调用 agent_executor,包括聊天历史记录以维护对话上下文

result = agent_executor.invoke({"input": input1, "chat_history": chat_history, "file_info": file_info})

chat_history.extend([
    HumanMessage(content=input1),
    AIMessage(content=result["output"]),
])

使用 input1chat_history 调用我们的 agent_executor

在此过程中:

- 调用代理执行器agent_execution 被调用,其中包含一个字典,其中包含用户的输入、当前聊天历史记录和结构化的文件信息。这种方法允许代理在对话的上下文中理解命令,并访问文件上传操作所需的详细信息。

- 更新聊天历史记录:执行命令后,我们使用新的交互更新聊天历史记录。这包括将用户的输入记录为 HumanMessage,并将系统的响应记录为 AIMessage。此步骤对于维护对话的准确和完整的记录至关重要,确保为将来的交互保留上下文。

此示例说明了对话式 AI 与云存储操作的无缝集成,展示了 Langchain 应用程序如何解释自然语言命令以执行特定任务,例如文件上传。通过维护对话上下文并动态管理文件信息,系统提供了一种用户友好且高效的方式来与云存储服务交互,展示了将 AI 与云基础设施相结合的实际优势。

使用对话式提示简化文件上传

将 Langchain 与 MinIO 集成以进行文件上传的显着功能之一是它在处理用户请求方面提供的灵活性。虽然直接指定 file_info 的详细方法提供了清晰度和控制,但系统还设计为能够理解和从对话式提示中提取必要的信息。这意味着用户可以通过在 input1 提示中传达所有必要的信息,来启动文件上传,而无需明确填写 file_info 结构。

通过自然语言简化文件上传

通过制作像 input1 这样的详细提示,用户可以传达他们的意图,并在一条消息中提供文件上传所需的所有详细信息。系统的底层智能由 Langchain 的处理能力提供支持,它解析此输入以提取可操作的数据,例如桶名称、对象名称和内容。这种方法模拟了自然的人类交流,使与应用程序的交互更加直观和用户友好。

input1 = "Upload a text object named 'funny_name.txt' with 'This is some example content.' to the 'test' bucket."

对话式提示示例

此提示简洁地传达了用户的意图,在自然语言句子中指定了对象名称、内容和目标桶。然后,应用程序处理此提示,动态生成上传操作所需的等效 file_info

利用 file_input 方法进行编程执行

对于应用程序以编程方式使用或在作为更大工作流程的一部分自动执行任务的情况下,扩展 file_input 方法变得非常宝贵。此方法允许更结构化地指定文件详细信息,使其成为提示由应用程序的其他部分生成或修改的情况的理想选择。

在对话式提示和以编程方式指定的 file_info 之间切换的灵活性展示了 Langchain 和 MinIO 集成的适应性。它使开发人员能够根据其应用程序的需要定制文件上传流程,无论他们追求的是自然语言交互的简单性还是以编程方式定义的任务的精度。

能够通过 Langchain 运行文件上传,而无需手动填写 file_info 字符串,而是依靠自然语言提示的丰富性,这极大地增强了应用程序的可用性和可访问性。此功能与使用 file_input 方法用于更结构化的命令链的选项相结合,体现了系统在满足不同用户需求和操作环境方面的多功能性。

将所有内容整合在一起:图片中的证明。

随着我们完成了对 Langchain 功能和 MinIO SDK 的探索之旅,现在是时候反思一下我们工作的实际成果。Langchain 的强大之处不仅在于它能够促进复杂的任务,还在于它有形的、可见的结果,我们可以在提供的截图中观察到这些结果。

第一张截图清晰地展示了 MinIO 存储桶,展示了由于我们的 LLM 工具使用和代理交互而成功创建的对象。列出的对象,包括 "funny_object"、"minio-action" 和 "proof-of-concept",证明了我们的指南的实际应用。这种视觉证据强调了使用 Langchain 在像 MinIO 这样的强大的对象存储系统中管理和组织数据的有效性。

LLM 交互后 MinIO 存储桶的截图

在第二张截图中,我们见证了 Langchain 代理的实际操作。AgentExecutor 链的跟踪详细记录了调用步骤,清楚地标记了每个任务的成功。在这里,我们看到了代理操作的顺序,从链的启动到文件上传的成功执行。此输出为用户提供了对过程的透明视图,提供了对操作中每个阶段的保证和理解。

AgentExecutor 链在 Jupyter Notebook

这些可视化内容不仅作为概念验证,还展示了 Langchain 代理、LLM 和 MinIO 存储之间的无缝集成和交互。作为开发者和创新者,这些见解是无价的,为我们提供了完善、优化和扩展应用程序的明确路径。这就是将这些技术相结合的真正魅力:创造一个对话式 AI 满足实际执行的世界,从而实现高效、智能的工具使用,突破我们使用现代技术所能实现的界限。

拥抱未来:Langchain 和 MinIO 的智能自动化

Langchain 复杂语言理解能力和 MinIO 强大的对象存储能力之间的相互作用已通过实际示例和视觉证据生动地展示出来。从概念解释到实际任务执行的旅程,说明了 LLM 在经过微调并与云原生技术集成后的变革潜力。由此产生的协同作用不仅简化了复杂的数据操作,而且还丰富了用户体验,为用户提供了与数字环境的直观和智能交互。

当我们反思 Langchain 代理和 MinIO SDK 的功能时,使用 LLM 进行工具开发的未来充满希望,充满了创新和效率的机会。无论您是经验丰富的开发者还是好奇的新手,前进的道路都很明确:将 AI 与云存储相集成,不仅是迈向更高级应用程序的飞跃,而且是迈向智能自动化新时代的步伐。使用合适的工具和理解,我们在这一激动人心的领域中可以取得的进步是无限的。

我们很高兴与您一起踏上 Langchain 和 MinIO 的旅程。当您探索这些技术的复杂性时,请知道我们的社区将为您提供支持。在 Slack 上与我们联系,提出任何问题或分享您的进展。我们始终乐意提供帮助,或者只是庆祝您的成功。

对于那些已经走到这一步,并渴望深入实际实现的人,请不要忘记查看附带的笔记本以获得动手体验;请点击此处访问笔记本。

让我们一起构建未来,一次一个创新的解决方案!