将 LangChain 集成到提示流中

LangChain Python 库是由大型语言模型 (LLM)、代理和依赖项工具提供支持的应用程序开发框架。 本文介绍如何使用 Azure 机器学习提示流来为 LangChain 开发提供强大助力。

使用 langchain Python 库的流的屏幕截图。

LangChain 与提示流的集成是一种强大的组合,可帮助你轻松生成和测试自定义语言模型。 你可以使用 LangChain 模块来生成流,然后使用提示流的流程来缩放试验,以进行批量测试、评估和最终部署。 例如,你可以基于较大的数据集进行大规模试验。

如果你已有基于 LangChain 代码的本地提示流,可以轻松地将其转换为 Azure 机器学习提示流,以进一步进行试验。 或者,如果你偏向于直接使用 LangChain SDK 类和函数,则可以通过使用自定义 LangChain 代码的 Python 节点轻松生成 Azure 机器学习流。

先决条件

  • 一个已经过适当测试并随时可供部署的本地 LangChain 流。
  • 一个计算会话,它可通过添加 requirements.txt 文件中列出的包(包括 langchain)来运行机器学习提示流。 有关详细信息,请参阅管理提示流计算会话

将 LangChain 代码转换为提示流

使用以下过程将本地 LangChain 代码转换为可运行的 Azure 机器学习提示流。

将凭据转换为提示流连接

你的 LangChain 代码可能会定义环境变量来存储凭据,例如调用 AzureOpenAI 模型时所需的 AzureOpenAI API 密钥。 例如,以下代码演示了为 OpenAI API 类型、密钥、基础和版本设置的环境变量。

os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_VERSION"] = "2023-05-15"
os.environ["OPENAI_API_BASE"] = "https://contosobamiopenai.openai.azure.com/"
os.environ["OPENAI_API_KEY"] = "abc123abc123abc123abc123abc123ab"

在云中运行 Azure 机器学习提示流时,最好不要将凭据公开为环境变量。 为了安全地与代码分开存储和管理凭据,应将环境变量转换为提示流连接。

若要创建安全存储自定义凭据(例如 LLM API 密钥或其他所需密钥)的连接,请按照以下说明操作:

  1. 在 Azure 机器学习工作区中的“提示流”页面上,选择“连接”选项卡,然后选择“创建”

  2. 从下拉列表中选择连接类型。 对于此示例,请选择“自定义”

    在“提示流”页面的“连接”选项卡上依次选择“创建”和“自定义”的屏幕截图。

  3. 在右侧窗格中定义连接的“名称”,然后选择“添加键值对”来添加键值对,以存储凭据和密钥

    添加自定义连接键值对的屏幕截图。

  4. 若要存储密钥的加密值,请选中一个或多个密钥值对旁边的“是机密”复选框。 必须至少设置一个值作为机密才能成功创建自定义连接。

  5. 选择“保存”。

自定义连接可以替换 LangChain 代码中显式定义的密钥和凭据或相应的环境变量。 若要在流中使用自定义连接,请参阅配置连接

将 LangChain 代码转换为可运行流

若要创建流,请在 Azure 机器学习工作室的“提示流”页面上选择“创建”,然后选择流类型。 在流创作页面上,在创作流之前启动计算会话。 在页面顶部选择工具类型,以将相应的节点插入到流中。

只要计算会话包含 langchain 包依赖项,所有 LangChain 代码就可以直接在流中的 Python 节点中运行。

可通过两种方式将 LangChain 代码转换为 Azure 机器学习提示流。 要实现的流类型取决于你的用例。

  • 为了更好地管理试验,可以将代码转换为使用 Azure 机器学习 Python 和流中的提示工具。 将代码中的提示模板提取到提示节点中,并将剩余代码放在单个或多个 Python 节点或工具中。 此选项可帮助你通过运行变体来轻松优化提示,并可让你根据评估结果选择最佳提示。

    以下示例显示了一个同时使用提示节点和 Python 节点的流:

    流的屏幕截图,其中突出显示了提示按钮和系统模板。

  • 为了简化转换过程,可以直接从 Python 节点内部调用 LangChain LLM 库。 所有代码(包括提示定义)都在 Python 节点中运行。 此选项支持基于较大数据集或其他配置进行更快的批量测试。

    以下示例显示了一个仅使用 Python 节点的流:

    流的屏幕截图,其中显示 LangChain 代码节点和图。

配置连接

在构建流并将代码移动到特定的工具节点后,需要将原始环境变量替换为连接中的相应密钥。 若要使用创建的自定义连接,请执行以下步骤:

  1. 在 Python 代码中,通过输入以下内容导入自定义连接库
    from promptflow.connections import CustomConnection

    注意

    若要导入 Azure OpenAI 连接,请使用 from promptflow.connections import AzureOpenAIConnection

  2. 在工具函数中定义 CustomConnection 类型的输入参数。

    文档搜索链节点的屏幕截图,其中突出显示了自定义连接。

  3. 将最初定义了密钥或凭据的环境变量替换为连接中的相应密钥。

  4. 在节点 UI 的输入部分分析输入,然后从 UI 的“值”下拉列表中选择你的自定义连接

    链节点的屏幕截图,其中突出显示了连接。

  5. 另请确保在任何需要连接参数的其他节点(例如 LLM 节点)中配置这些参数。

什么是输入和输出

在运行流之前,请配置节点输入和输出,以及整个流的输入和输出。 此步骤至关重要,可确保所有必需的数据正确通过流传递并生成所需的结果。