使用 Python 中的 Langchain 从零到高级快速进行工程

发表于:2023-8-15 09:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:稀土掘金

  大型语言模型 (LLM) 的一个重要方面是这些模型用于学习的参数数量。模型拥有的参数越多,它就能更好地理解单词和短语之间的关系。这意味着具有数十亿个参数的模型有能力生成各种创造性的文本格式,并以信息丰富的方式回答开放式和挑战性的问题。
  ChatGPT 等法学硕士利用 Transformer 模型,精通理解和生成人类语言,这使得它们对于需要自然语言理解的应用程序非常有用。然而,它们并非没有局限性,其中包括过时的知识、无法与外部系统交互、缺乏上下文理解,有时会产生听起来合理但不正确或无意义的响应等。
  解决这些限制需要将法学硕士与外部数据源和功能集成,这可能会带来复杂性并需要广泛的编码和数据处理技能。再加上理解人工智能概念和复杂算法的挑战,导致了与使用法学硕士开发应用程序相关的学习曲线。
  尽管如此,将法学硕士与其他工具集成以形成法学硕士支持的应用程序可以重新定义我们的数字景观。此类应用程序的潜力是巨大的,包括提高效率和生产力、简化任务、增强决策以及提供个性化体验。
  在本文中,我们将更深入地研究这些问题,探索使用 Langchain 进行即时工程的先进技术,提供清晰的解释、实际示例以及如何实现它们的分步说明。
  Langchain 是一个最先进的库,为设计、实现和调整提示带来了便利和灵活性。当我们解开即时工程的原理和实践时,您将学习如何利用 Langchain 的强大功能来发挥 GPT-4 等 SOTA 生成式 AI 模型的优势。
  了解提示
  在深入了解提示工程的技术细节之前,有必要了解提示的概念及其意义。
  “提示”是一系列标记,用作语言模型的输入,指示它生成特定类型的响应。提示在引导模型的行为方面起着至关重要的作用。它们可以影响生成文本的质量,并且如果正确制作,可以帮助模型提供富有洞察力、准确且针对特定上下文的结果。
  提示工程是设计有效提示的艺术和科学。目标是从语言模型中得出所需的输出。通过仔细选择和构建提示,可以引导模型生成更准确和相关的响应。在实践中,这涉及微调输入短语以适应模型的训练和结构偏差。
  提示工程的复杂性包括从简单的技术(例如向模型提供相关关键字)到更高级的方法,包括设计复杂的结构化提示,利用模型的内部机制来发挥其优势。
  Langchain:增长最快的提示工具
  LangChain 由Harrison Chase于 2022 年 10 月推出,已成为2023 年 GitHub 上评价最高的开源框架之一。它提供了一个简化和标准化的界面,用于将大型语言模型 (LLM) 合并到应用程序中。它还为快速工程提供了功能丰富的界面,允许开发人员尝试不同的策略并评估其结果。通过使用Langchain,您可以更有效、更直观地执行快速的工程任务。
  LangFlow作为一个用户界面,用于将 LangChain 组件编排成可执行流程图,从而实现快速原型设计和实验。
  浪链填补了大众人工智能发展的关键空白。它支持一系列 NLP 应用程序(例如虚拟助手、内容生成器、问答系统等)来解决一系列现实问题。
  LangChain 不是一个独立的模型或提供者,而是简化了与不同模型的交互,将 LLM 应用程序的功能扩展到简单 API 调用的限制之外。
  浪链架构
  LangChain的主要组件包括模型I/O、提示模板、内存、代理和链。
  型号输入/输出
  LangChain 通过使用称为模型 I/O 的标准化接口来封装各种语言模型,从而促进与各种语言模型的无缝连接。这有助于轻松进行模型切换,以实现优化或更好的性能。LangChain支持多种语言模型提供商,包括OpenAI、HuggingFace、Azure、Fireworks等。
  提示模板
  这些用于通过提供简洁的说明或示例来管理和优化与法学硕士的互动。优化提示可增强模型性能,其灵活性对输入过程有显着贡献。
  提示模板的简单示例:
  from  langchain.prompts  ``import PromptTemplate`` prompt  ``=
  PromptTemplate(input_variables``=``[``"subject"``],``template``=``"What are the recent advancements in the field of {subject}?"``)``print``(prompt.``format``(subject``=``"<a
  href="``https:``/``/``www.unite.ai``/``what``-``is``-``natural``-``language``-
  ``processing``/``">Natural Language Processing</a>"``))
  随着复杂性的提高,我们在 LangChain 中遇到了更复杂的模式,例如理性和行动(ReAct)模式。ReAct 是操作执行的重要模式,其中代理将任务分配给适当的工具,为其自定义输入,并解析其输出以完成任务。下面的 Python 示例展示了 ReAct 模式。它演示了浪链中的提示是如何构造的,使用一系列的想法和行动来推理问题并产生最终答案:
  PREFIX  ``= """Answer the following question using the given tools:
  """`` FORMAT_INSTRUCTIONS  ``= """Follow this format:``Question: {input_question}``Thought: your initial thought on the 
  question``Action: your chosen action from [{tool_names}]``Action Input: your input for the 
  action``Observation: the action's outcome"""`` SUFFIX  ``= """Start!``Question: {input}``Thought:
  {agent_scratchpad}"""
  记忆
  内存是 LangChain 中的一个关键概念,它使法学硕士和工具能够随着时间的推移保留信息。这种有状态行为通过存储先前的响应、用户交互、环境状态和代理的目标来提高LangChain应用程序的性能。ConversationBufferMemory 和 ConversationBufferWindowMemory 策略分别帮助跟踪对话的完整部分或最近部分。对于更复杂的方法,ConversationKGMemory 策略允许将对话编码为知识图,该知识图可以反馈到提示中或用于预测响应,而无需调用 LLM。
  代理商
  代理通过执行操作和任务与世界交互。在LangChain中,代理结合了工具和链来执行任务。它可以建立与外界的信息检索连接,以扩充LLM知识,从而克服其固有的局限性。他们可以根据情况决定将计算传递给计算器或 Python 解释器。
  代理配备了子组件:
  ·工具:这些是功能组件。
  · 工具包:工具的集合。
  · 代理执行器:这是允许在工具之间进行选择的执行机制。
  LangChain中的代理也遵循零样本ReAct模式,其中决策仅基于工具的描述。该机制可以通过内存进行扩展,以便考虑完整的对话历史记录。借助 ReAct,您可以提示法学硕士在思想/行动/观察循环中做出响应,而不是要求法学硕士自动完成您的文本。
  链条
  链,顾名思义,是允许 LangChain 库无缝处理语言模型输入和输出的操作序列。LangChain 的这些组成部分基本上是由链接组成的,这些链接可以是其他链,也可以是提示、语言模型或实用程序等原语。
  将链条想象为工厂中的传送带。这条带上的每一步都代表一个特定的操作,可以调用语言模型,将 Python 函数应用于文本,甚至以特定方式提示模型。
  LangChain将其链分为三种类型:实用链、通用链和组合文档链。我们将深入讨论实用链和通用链。
  ·实用程序链专门设计用于从语言模型中提取狭义任务的精确答案。例如,让我们看一下 LLMMathChain。该实用程序链使语言模型能够执行数学计算。它接受自然语言的问题,语言模型反过来生成一个 Python 代码片段,然后执行该代码片段以产生答案。
  · 另一方面,通用链作为其他链的构建块,但不能直接独立使用。 这些链(例如 LLMChain)是基础链,通常与其他链结合来完成复杂的任务。例如,LLMChain 经常用于查询语言模型对象,方法是根据提供的提示模板格式化输入,然后将其传递到语言模型。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号