type
status
date
slug
summary
tags
category
icon
password
状态
专注质量
预计(分钟)
开始时间
结束时间

🤔 快速入门

首先,导入环境变量:

第一个案例:通过LLM进行预测

使用提示模板

提示模板是对提示词进行管理的重要类,我们先通过以下案例感受一下:

引入Chain

到目前为止,我们一直在单独使用 PromptTemplate 和 LLM 原语。但是,当然,真正的应用程序不仅仅是一个原语,而是它们的组合。
在 LangChain 中,链由链接组成,链接可以是像 LLM 这样的原始链,也可以是其他链。
最核心的链类型是 LLMChain,它由 PromptTemplate 和 LLM 组成。
扩展之前的示例,我们可以构造一个 LLMChain,它接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化的响应传递给 LLM。

开始使用Agent

可以看到,基于llm的agent可以自主使用工具,针对我们提出的问题完成任务。

使用Memory

到目前为止,我们所经历的所有链和代理都是无状态的。但是,通常情况下,您可能希望链或代理具有某种“记忆”概念,以便它可以记住有关其先前交互的信息。
最清晰和简单的例子是在设计聊天机器人时——您希望它记住以前的消息,以便它可以使用上下文来进行更好的对话。这将是一种“短期记忆”。在更复杂的方面,您可以想象一个链/代理随着时间的推移记住关键信息——这将是一种“长期记忆”。有关后者的更具体想法,请参阅这篇很棒的论文
LangChain 专门为此提供了几个专门创建的链。本笔记本介绍了如何使用这些链中的一个(即 ConversationChain)和两种不同类型的内存。
默认情况下,ConversationChain有一种简单类型的内存,可以记住所有以前的输入/输出,并将它们添加到传递的上下文中。让我们来看看如何使用这个链(请设置verbose=True以便我们可以看到提示)。

使用最新的聊天模型

生成多条结果:
可以通过result.llm_output['token_usage'] 获取到使用的token数量。
在上边的例子中,返回结果为:{'prompt_tokens': 57, 'completion_tokens': 20, 'total_tokens': 77}
聊天模型中,同样可以使用提示模板:
聊天模型也可以转换为chain使用:
聊天模型中加入代理:
对话模型中的内存管理:

📝LangChain的Cookbook

上一部分中,我们学习到了很多关于LangChain的基础用法,基本上已经学习到了LangChain中最重要的几个概念,在这个部分中,我们对各个概念进行更加详细的介绍。
如果你想要亲自查看最新的有关LangChain的知识,可以查看以下学习链接:https://github.com/gkamradt/langchain-tutorials/blob/main/LangChain Cookbook Part 1 - Fundamentals.ipynb

Components

Schema

  • Text:文本
  • ChatMessages:包括SystemChatMessage,HumanChatMessage和AIChatMessage
  • Documents:持有文本和元数据的对象

    Models

    • Language Model
    • Chat Model
    • Text Embedding Model

    Prompt

    提示词,传递给语言模型的指令。
    Prompt Template
    提示词是与LLM进行交互的重要一环。因此,我们使用提示词模板,以便在应用程序开发过程中,能够动态传入一些数据。由于很多提示词都不是固定的,而是根据用户输入或情况而定,因此模板可以满足这一需求。
    notion image
    Example Selector
    如果您拥有大量示例,您可能需要选择要包含在提示中的示例。ExampleSelector 是负责这样做的类。
    Output Parsers
    有时候需要将LLM的输出结果转换为一种特定的格式,这时候就需要使用到Output Parsers,具体用法如下:

    Indexs-将文档与LLM链接

    Document Loaders
    简单直接的获取方法
    Text Splitters
    我们的文档经常因为太长而无法被输入到LLM中,我们需要将其分块,这里的Text Splitters就是为此而生。
    Retrievers
    将文档与LLM结合的最简单的方式,用到了之前讲过的概念:
    Vector Store
    矢量存储,上面的案例中已经用到过。

    Memory

    主要就是ChatMessage的记录,用法如下:
    memory的管理是LLM应用程序开发的一大难题,因此LangChain提供了许多类型的memory可供选择。

    Chains

    简单序列
    组合不同的LLM以完成任务:
    📑
    Ex: Summary #1, Summary #2, Summary #3 > Final Summary
    有时,一段LLM的输出可能会作为LLM的输入被使用,这时候就需要方便的链式API:
    总结链
    上面的案例已经有点酷了,对吗?接下来是一段更好的案例,用LLM对我们自定义的文档进行总结。
    这样,我们就可以去对很长的文档进行总结。

    Agents

    能够使用工具的LLM,之前写过一篇文章,介绍了爆火的AutoGPT,但是早在AutoGPT之前,LangChain早已支持。
    Agents即让LLM进行任务的决策和选择。
    Tools
    Agent的“能力”。这是对函数的抽象,使LLM(和代理人)可以轻松地与其交互。例如:谷歌搜索。
    这个功能与OpenAI插件有共同点。
    Toolkit
    Agent能使用的工具的组合,综合以上的几个概念,案例如下:

    📑案例解析

    代码链接:
    langchain-tutorials
    gkamradtUpdated Aug 30, 2023

    Agent使用工具

    • Google Search
    • Wolfram

    读取私人文档

    • 本地文件
    • Google Drive文件

    读取在线文件

    • Yotube摘要
    • 300页文档(使用Pinecone)

    处理Token数量

    1. 直接填入
      1. notion image
    1. Map Reduce
      1. notion image
    1. Refine(不断迭代)
      1. notion image
    1. Map-Rerank
      1. notion image
    四种方法在代码仓库中都有对应的案例,可以结合代码具体理解。

    LangChain+ChatGPT新API

    由于ChatGPT的推出,LangChain对自身进行了升级,使新的模型能适配LangChain的调用方式。
    • Simple IO
    • Chat Messages
    • Prompt Template
    • With Streaming

    指定LangChain的输出格式

    专家级别数据提取

    🤗总结归纳

    经过一段时间的了解,笔者已基本掌握了LangChain的基本概念和开发方式。然而,笔者的学习已经遇到了第一个瓶颈。突破第一个瓶颈的方式是正式进行应用的开发。
    现在已经有足够的输入了,接下来是真正进行输出的阶段。

    参考文章

     
    💡
    Written by Aryue,editted by Notion AI.
     
     
    提示工程师系统学习大型语言模型的北极星能力(转)
    Aryue
    Aryue
    一个普通的干饭人🍚
    公告
    type
    status
    date
    slug
    summary
    tags
    category
    icon
    password
    状态
    专注质量
    预计(分钟)
    开始时间
    结束时间
    📧:578626935@qq.com