提示链是使用大型语言模型 (LLM) 构建高级工作流的一个基础概念。它涉及将多个提示按逻辑顺序链接起来,其中一个提示的输出作为下一个提示的输入。这种模块化方法对于解决多步骤文本处理、摘要、问答等复杂任务非常有效。
LangChain 是一个多功能框架,旨在简化此类工作流程的创建。该平台提供多种工具来管理大语言模型(例如 IBM® Granite 模型或 OpenAI 的 GPT 生成式预训练转换器模型),支持自定义提示词设计,并能将其连接成可复用的处理链。通过将管理提示词的复杂性抽象化,LangChain 使开发人员能够专注于解决问题,而无需编排与大语言模型 (LLM) 的交互。
在本教程中,我们将:
LangChain 为构建聊天机器人应用中的模块化工作流提供了一个强大的框架。通过结合结构化提示、动态链式流程以及先进的大语言模型集成技术,该框架使开发人员能够创建可扩展的自适应管道。这些管道既能利用 RAG(检索增强生成)技术,又能输出如 JSON 之类的结构化数据。以下是 LangChain 如何有效处理提示链:
提示词抽象化:LangChain 利用 from_template 方法为每个步骤设计结构化的输入/输出工作流,从而简化复杂聊天机器人操作的处理。
LLM 集成:该框架可与各种 LLM(如 IBM Granite、OpenAI 和 Hugging Face 的模型)无缝集成, 可针对自定义任务进行微调。
链式管理:LangChain 的 SequentialChain 与 SimpleSequentialChain 可为聊天机器人流水线实现模块化工作流,同时 StrOutputParser 能确保输出结构化数据(如 JSON)。
动态工作流:LangChain 使用 ConditionalChain 和 systemmessage 模板等工具,支持自适应工作流,与动态内容生成的 RAG(检索增强生成)原则保持一致。
在本教程结束时,您将熟练掌握如何使用 LangChain 为各种应用程序构建模块化且可扩展的工作流。
提示链使您能够设计这样的工作流:将一个步骤的输出传递至后续步骤。不同类型的链支持不同的工作流,从简单的顺序任务到更复杂、动态的过程。下面简单介绍一下提示链的类型:
顺序链:最直接的链类型,即将前一个提示词的输出直接作为下一个提示词的输入。此选项非常适用于线性推进的任务。[1]
分支链:在该模式下,单个输出可拆分为多个并行工作流。每个分支独立处理输出结果。[2]
迭代链:该模式通过重复运行提示词或链式流程,直至满足特定条件为止。此选项对于优化输出很有用。[3]
分层链:这种类型将大型任务分解为较小的子任务,这些子任务按分层执行。较低级别的输出为较高级别的任务提供支持。[4]
条件链:根据先前提示的输出动态选择后续步骤。它支持在工作流中进行决策。
多模态链:多模态链将处理不同数据类型(例如文本、图像或音频)的提示集成在一起。它适用于结合多种模态的应用。[2]
动态链:动态链会根据实时输出或变化的条件调整工作流。它为提示链增加了灵活性。[5]
递归链接:在递归链中,大的输入被分割成较小的块进行单独处理,然后将结果合并。这对于处理长文档或数据集非常有用。[6]
反向链:反向链从预期输出开始,反向推导出实现该结果所需的输入或步骤。它对于解决问题和调试非常有用。[5]
每种链式方式都适用于特定的使用场景,因此根据任务的复杂性和需求选择合适的方式至关重要。
在此工作流中,我们利用聊天模型和提示工程来处理客户反馈,从而构建一个可扩展的文本处理流水线。本教程的以下阶段将展示由生成式人工智能驱动的顺序链、分支链和迭代链技术。
提取关键词(顺序链)
生成情感摘要(分支链)
完善情感摘要(迭代链)
最终输出
这种方法将 Python 中的顺序链、分支链和迭代链与聊天模型和提示工程相结合。它可确保稳健地处理客户反馈,利用生成式 AI 进行关键字提取、情感分析和优化。
您需要一个 IBM® Cloud 帐户才能创建 watsonx.ai项目。
虽然您可以选择多种工具,本教程将引导您如何设置 IBM 帐户以使用 Jupyter Notebook。
此步骤将打开一个笔记本环境,可在其中复制本教程中的代码。或者,您可以将此笔记本下载到本地系统并将其作为资产上传到您的 watsonx.ai 项目。要查看更多 Granite 教程,请访问 IBM Granite 社区。本教程也可在 GitHub 上找到。
我们需要一些库来使用 langchain 框架和 watsonxLLM。我们首先安装所需的软件包。
注意:如果您使用的是旧版本的 pip,可以使用命令 pip install --upgrade pip 来升级。此步骤可帮助您轻松安装最新的软件包,而这些软件包可能与旧版本不兼容。但如果您已经在使用最新版本,或者最近刚升级过软件包,那么可以跳过此命令。
此代码块导入基本的 Python 库和工具,以使用 LangChain 和 IBM Watson LLM 构建和管理 LLM 应用程序。
os 模块用于访问环境变量,例如项目凭据或 API 密钥。
watsonxLLM 是 langchain_ibm 的一个模块,集成了 IBM Watson LLM,用于从生成式 AI 模型生成输出。
PromptTemplate 可帮助创建可重复使用的提示模板,确保提示工程的输入结构和灵活性。
LLMChain 构建单个任务链,而
SequencialChain 将多个步骤链接到一个工作流中,“getpass”可安全地检索敏感信息(例如 API 密钥),而不会在屏幕上显示。
此代码设置了访问 IBM Watson machine learning (WML) API 的凭据,并确保正确配置项目 ID。
此代码初始化 IBM Watson LLM 以便在应用程序中使用:
此步骤让 Watson LLM 做好准备,以便在工作流中生成响应。
此代码定义了文本处理工作流的三个阶段的提示:
这些 PromptTemplate 实例为 LLM 应用程序启用可重用和结构化的提示工程。
这段代码定义了 LLM 链,将提示与已初始化的 IBM Watson LLM 连接起来,并为每个阶段分配唯一的输出键:
这些 LLMChain 实例支持模块化任务执行,促进逐步的 LLM 应用程序工作流。
这段代码将之前定义的链组合成一个顺序工作流,从而实现对文本输入的逐步处理。SequentialChain 按预定顺序连接 keyword_chain、sentiment_chain 和 refine_chain,确保前一个链的输出作为下一个链的输入。工作流被配置为接受输入作为初始输入,最终输出即精炼情感摘要,存储在键 "refined_summary" 下。此设置可简化且高效地执行 LLM 应用程序,从而确保连贯且模块化的处理流水线。
在此代码块中,我们将运行整个工作流。首先,我们有一个定义为 feedback_text 的多行反馈字符串,其中包含有关应用程序的正面和负面的用户评论。workflow.run 方法使用提供的输入通过顺序链(关键字提取、情感分析和细化)处理反馈。并将提炼后的情感摘要直接打印为最终结果。
输出
精炼的情感摘要:
用户的不满情绪主要源于应用程序频繁崩溃和客户支持响应缓慢,尽管他们对应用程序的功能和偶尔有帮助的客户支持表示赞赏。为了提高用户满意度,开发团队应该专注于解决应用程序崩溃问题,并加快客户支持响应速度。
精炼的情感摘要是对反馈意见简洁明了的评价。它突出了用户对应用功能的认可,同时表达了对频繁崩溃和缓慢客服支持的抱怨,体现了该工作流有效提炼关键洞察的能力。
为 LLM 应用程序选择合适的链接类型涉及评估关键因素,以确保效率和连贯性:
任务复杂性:对于多步骤的任务,使用可运行的工作流。少样本示例或 chatprompttemplate 可以帮助构建需要不同提示的复杂任务。
依赖关系:如果一个步骤的输出是下一个提示的占位符,请使用顺序链。输出解析器确保输出顺利过渡到结构化输入。
适应性:对于动态工作流(例如涉及 LangChain 代理的流程),迭代链允许实时调整参数和下一步提示。
数据模态:选择与各种数据类型兼容的工作流程。使用嵌入方法处理文本和向量数据,或利用 LangChain 表达式语言实现灵活操作。
通过考虑这些因素,您可以构建一个稳健且可适应的 LLM 应用,并实现连贯的链式工作流。
提示链是一种用于构建复杂自然语言处理 (NLP) 工作流的多功能技术。在本教程中,我们探讨了各种链式类型,并演示了一个整合多种链式方法的通用示例。通过尝试这些方法,您可以解锁语言模型在应用程序中的全部潜力。
[1] Roegiest, A., & Chitta, R. (2024). Answering Questions in Stages: Prompt Chaining for Contract QA.
[2] Ge, J., Luo, H., Qian, S., Gan, Y., Fu, J., & Zhang, S. (2023). 视觉语言模型中的思维链提示调整。
[3] Sun, S., Yuan, R., Cao, Z., Li, W., & Liu, P. (2024). 提示链式还是逐步提示?文本摘要中的改进。, 7551-7558. https://arxiv.org/abs/2406.00507.
[4] Huang, Q., Zhu, J., Li, Z., Xing, Z., Wang, C., & Xu, X. (2023). PCR-Chain:在 Frozen Copilot 上通过分层链提示实现部分代码重用。2023 IEEE/ACM 第 45 届国际软件工程会议配套论文集 (ICSE-Companion),1-5。https://ieeexplore.ieee.org/document/10172550.
[5] Wu, T., Jiang, E., Donsbach, A., Gray, J., Molina, A., Terry, M., & Cai, C. (2022). PromptChainer:通过可视化编程链接大型语言模型提示。CHI 计算系统中的人为因素会议扩展摘要。https://dl.acm.org/doi/10.1145/3491101.3519729.
[6] Trautmann, D. (2023). Large Language Model Prompt Chaining for Long Legal Document Classification. ArXiv, abs/2308.04138. https://arxiv.org/abs/2308.04138.