type
status
date
slug
summary
tags
category
icon
password
状态
专注质量
预计(分钟)
开始时间
结束时间
🤔 快速入门第一个案例:通过LLM进行预测使用提示模板引入Chain开始使用Agent使用Memory使用最新的聊天模型📝LangChain的CookbookComponentsSchemaModelsPromptIndexs-将文档与LLM链接MemoryChainsAgents📑案例解析Agent使用工具读取私人文档读取在线文件处理Token数量LangChain+ChatGPT新API指定LangChain的输出格式专家级别数据提取🤗总结归纳参考文章
🤔 快速入门
首先,导入环境变量:
第一个案例:通过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进行交互的重要一环。因此,我们使用提示词模板,以便在应用程序开发过程中,能够动态传入一些数据。由于很多提示词都不是固定的,而是根据用户输入或情况而定,因此模板可以满足这一需求。
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
gkamradt • Updated Aug 30, 2023
Agent使用工具
- Google Search
- Wolfram
读取私人文档
- 本地文件
- Google Drive文件
读取在线文件
- Yotube摘要
- 300页文档(使用Pinecone)
处理Token数量
- 直接填入
- Map Reduce
- Refine(不断迭代)
- Map-Rerank
四种方法在代码仓库中都有对应的案例,可以结合代码具体理解。
LangChain+ChatGPT新API
由于ChatGPT的推出,LangChain对自身进行了升级,使新的模型能适配LangChain的调用方式。
- Simple IO
- Chat Messages
- Prompt Template
- With Streaming
指定LangChain的输出格式
专家级别数据提取
🤗总结归纳
经过一段时间的了解,笔者已基本掌握了LangChain的基本概念和开发方式。然而,笔者的学习已经遇到了第一个瓶颈。突破第一个瓶颈的方式是正式进行应用的开发。
现在已经有足够的输入了,接下来是真正进行输出的阶段。
参考文章
Written by Aryue,editted by Notion AI.
- 作者:Aryue
- 链接:www.aryue.com/article/26178b90-a27d-450b-8ad5-2b0e35da4791
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章