【大语言模型】15分钟快速掌握LangChain以及ChatGLM

news2024/12/24 0:04:56

10分钟快速掌握LangChain

  • LangChain简介
    • LangChain中的核心概念
      • 1. Components and Chains
      • 2. Prompt Templates and Values
      • 3. Example Selectors
      • 4. Output Parsers
      • 5. Indexes and Retrievers
      • 6. Chat Message History
      • 7. Agents and Tookits
    • LangChain的代码结构
      • 1. LangChain中提供的模块
      • 2. LangChain的应用场景
      • 3. LangChain 的主要特点
  • LangChain使用示例
    • 使用 LangChain 构建端到端语言模型应用程序
  • 如何实现基于本地知识的问答?
    • 基于单一文档问答的实现原理
    • 基于本地知识库问答的实现原理
  • LangChain-ChatGLM简介
  • 相关资料

LangChain 是一个强大的框架,可以简化构建高级语言模型应用程序的过程。

LangChain简介

LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。
LangChain的主要功能有:调用语言模型,将不同数据源接入到语言模型的交互中,允许语言模型与运行环境交互。

LangChain中的核心概念

1. Components and Chains

**Component 是模块化的构建块,可以组合起来创建强大的应用程序。Chain 是组合在一起以完成特定任务的一系列 Components(或其他 Chain)。**例如,一个 Chain 可能包括一个 Prompt 模板、一个语言模型和一个输出解析器,它们一起工作以处理用户输入、生成响应并处理输出。

2. Prompt Templates and Values

Prompt Template 负责创建 PromptValue,这是最终传递给语言模型的内容。Prompt Template 有助于将用户输入其他动态信息转换为适合语言模型的格式。PromptValues 是具有方法的类,这些方法可以转换为每个模型类型期望的确切输入类型(如文本或聊天消息)。

3. Example Selectors

当想要在 Prompts 中动态包含示例时,Example Selectors 很有用。它们接受用户输入并返回一个示例列表以在提示中使用,使其更强大和特定于上下文。

4. Output Parsers

Output Parsers 负责将语言模型响应构建为更有用的格式。它们实现了两种主要方法:一种用于提供格式化指令另一种用于将语言模型的响应解析为结构化格式。这使得在您的应用程序中处理输出数据变得更加容易。

5. Indexes and Retrievers

Index 是一种组织文档的方式,使语言模型更容易与它们交互。检索器是用于获取相关文档并将它们与语言模型组合的接口。LangChain 提供了用于处理不同类型的索引和检索器的工具和功能,例如矢量数据库和文本拆分器。

6. Chat Message History

LangChain 主要通过聊天界面与语言模型进行交互ChatMessageHistory 类负责记住所有以前的聊天交互数据,然后可以将这些交互数据传递回模型、汇总或以其他方式组合。这有助于维护上下文并提高模型对对话的理解。

7. Agents and Tookits

Agent 是在 LangChain 中推动决策制定的实体。它们可以访问一套工具,并可以根据用户输入决定调用哪个工具。Tookits 是一组工具,当它们一起使用时,可以完成特定的任务。代理执行器负责使用适当的工具运行代理。

什么是LangChain Agent?
LangChain Agent 是框架中驱动决策制定的实体。它可以访问一组工具,并可以根据用户的输入决定调用哪个工具。代理帮助构建复杂的应用程序,这些应用程序需要自适应和特定于上下文的响应。当存在取决于用户输入和其他因素的未知交互链时,它们特别有用。

什么是LangChain model?
LangChain model 是一种抽象,表示框架中使用的不同类型的模型。LangChain 中的模型主要分为三类:

  1. LLM(大型语言模型):这些模型将文本字符串作为输入并返回文本字符串作为输出。它们是许多语言模型应用程序的支柱。
  2. 聊天模型( Chat Model):聊天模型由语言模型支持,但具有更结构化的 API。他们将聊天消息列表作为输入并返回聊天消息。这使得管理对话历史记录和维护上下文变得容易。
  3. 文本嵌入模型(Text Embedding Models):这些模型将文本作为输入并返回表示文本嵌入的浮点列表。这些嵌入可用于文档检索、聚类和相似性比较等任务。

LangChain的代码结构

langchain的repo:https://github.com/hwchase17/langchain
langchain repo
可以看到LangChain可以对接的LLM不止一个,agents和tools同样有很多个:
对接的LLM
支持的agents
支持的tools

1. LangChain中提供的模块

  • Modules:支持的模块类型和集成
  • Prompt:提示词管理、优化和序列化
  • Memory:内存是指在链/代理调用之间持续存在的状态。
  • Indexes:当语言模型与特定于应用程序的数据相结合时,会变得更加强大——此模块包含用于加载、查询和更新外部数据的接口和集成。
  • Chain:链是结构化的调用序列(对LLM或其他实用程序)。
  • Agents:代理是一个链,其中LLM在给定高级指令和一组工具的情况下,反复决定操作,执行操作并观察结果,直到高级指令完成。
  • Callbacks:回调允许记录和流式传输任何链的中间步骤,从而轻松观察、调试和评估应用程序的内部。

2. LangChain的应用场景

  • 文档问答:一个常见的LangChain用例。在特定文档上回答问题,仅利用这些文档中的信息来构建答案。
  • 个人助理:LangChain的主要用例之一。个人助理需要采取行动,记住互动,并了解您的数据
  • 查询表格数据:使用语言模型查询库表类型结构化数据(CSV、SQL、DataFrame等)
  • 与API交互:使语言模型与API交互非常强大,它允许他们访问最新信息,并允许他们采取行动。
  • 信息抽取:从文本中提取结构化的信息。
  • 文档总结:压缩较长文档,一种数据增强生成。

3. LangChain 的主要特点

LangChain 旨在为六个主要领域的开发人员提供支持:

  • LLM 和提示:LangChain 使管理提示、优化它们以及为所有 LLM 创建通用界面变得容易。此外,它还包括一些用于处理 LLM 的便捷实用程序。
  • 链(Chain):这些是对 LLM 或其他实用程序的调用序列。LangChain 为链提供标准接口,与各种工具集成,为流行应用提供端到端的链。
  • 数据增强生成:LangChain 使链能够与外部数据源交互以收集生成步骤的数据。例如,它可以帮助总结长文本或使用特定数据源回答问题。
  • Agents:Agents 让 LLM 做出有关行动的决定,采取这些行动,检查结果,并继续前进直到工作完成。LangChain 提供了代理的标准接口,多种代理可供选择,以及端到端的代理示例。
  • 内存:LangChain 有一个标准的内存接口,有助于维护链或代理调用之间的状态。它还提供了一系列内存实现和使用内存的链或代理的示例。
  • 评估:很难用传统指标评估生成模型。这就是为什么 LangChain 提供提示和链来帮助开发者自己使用 LLM 评估他们的模型。

LangChain使用示例

LangChain 支持大量用例,例如:

  • 针对特定文档的问答:根据给定的文档回答问题,使用这些文档中的信息来创建答案。
  • 聊天机器人:构建可以利用 LLM 的功能生成文本的聊天机器人。
  • Agents:开发可以决定行动、采取这些行动、观察结果并继续执行直到完成的代理。

使用 LangChain 构建端到端语言模型应用程序

LangChain中有两个核心概念:agenttool

安装LangChain

pip install openai

环境设置
现在由于 LangChain 经常需要与模型提供者、数据存储、API 等集成,我们将设置我们的环境。在这个例子中,将使用 OpenAI 的 API,因此需要安装他们的 SDK:

pip install openai

设置环境变量:

import os
import openai
import warnings

warnings.filterwarnings('ignore')
# Set the OpenAI API key
os.environ['OPENAI_API_KEY'] = "sk-xxxxxxxxxxxxxxx"  # get api_key from openai official website
openai.api_key = os.getenv("OPENAI_API_KEY")

构建语言模型应用程序:LLM
安装好LangChain并设置好环境后,就可以开始构建语言模型应用程序了。LangChain 提供了一堆模块,可以使用它们来创建语言模型应用程序。可以将这些模块组合起来用于更复杂的应用程序,或者将它们单独用于更简单的应用程序。

构建语言模型应用程序:Chat Model
除了 LLM,还可以使用聊天模型。这些是语言模型的变体,它们在底层使用语言模型但具有不同的界面。聊天模型使用聊天消息作为输入和输出,而不是“文本输入、文本输出”API。聊天模型API的使用还比较新,所以大家都还在寻找最佳抽象使用方式。

要完成聊天,需要将一条或多条消息传递给聊天模型。LangChain 目前支持 AIMessage、HumanMessage、SystemMessage 和 ChatMessage 类型。主要使用 HumanMessage、AIMessage 和 SystemMessage。例如:

from langchain.chat_models import ChatOpenAI
from langchain.schema import (AIMessage, HumanMessage, SystemMessage)

Chat Model
上图示例中表示向OpenAI传递一条消息。当然,也可以传递多条消息:
传递多条消息
还可以使用generate为多组消息生成完成。这将返回一个带有附加消息参数的 LLMResult:
多组消息
还可以从 LLMResult 中提取 tokens 使用等信息:

result.llm_output['token_usage']
# -> {'prompt_tokens': 69, 'completion_tokens': 19, 'total_tokens': 88}

对于聊天模型,还可以通过使用 MessagePromptTemplate 来使用模板。可以从一个或多个 MessagePromptTemplates 创建 ChatPromptTemplate。ChatPromptTemplate 的方法format_prompt返回一个 PromptValue,可以将其转换为字符串或 Message 对象,具体取决于是否要使用格式化值作为 LLM 或聊天模型的输入。例如:

from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate)

使用MessagePromptTemplate
还可以将代理与聊天模型一起使用。使用 AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION 作为代理类型初始化 Agent:

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.chat_models import ChatOpenAI
from langchain.llms import OpenAI

安装serpapi package和设置SERPAPI_API_KEY环境变量:
serpai

!pip install google-search-results
# Set the Search API key
os.environ['SERPAPI_API_KEY'] = "xxxxxxxxxxxxxxxxx"

使用CHAT_ZERO_SHOT_REACT_DESCRIPTION
在此示例中,代理将以交互的方式执行搜索和计算以提供最终答案。

最后,探索将内存与使用聊天模型初始化的链和代理一起使用。这与 Memory for LLMs 的主要区别在于可以将以前的消息保留为它们自己唯一的内存对象,而不是将它们压缩成一个字符串。

from langchain.prompts import (
    ChatPromptTemplate, 
    MessagesPlaceholder, 
    SystemMessagePromptTemplate, 
    HumanMessagePromptTemplate
)
from langchain.chains import ConversationChain
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory
prompt = ChatPromptTemplate.from_messages([
    SystemMessagePromptTemplate.from_template("The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know."),
    MessagesPlaceholder(variable_name="history"),
    HumanMessagePromptTemplate.from_template("{input}")
])
llm = ChatOpenAI(temperature=0)
memory = ConversationBufferMemory(return_messages=True)
conversation = ConversationChain(memory=memory, prompt=prompt, llm=llm)

多轮对话
在此示例中使用ConversationChain来维护跨与 AI 的多次交互的对话上下文。

如何实现基于本地知识的问答?

如何实现基于本地知识的问答

基于单一文档问答的实现原理

  1. 加载本地文档
  2. 文档拆分
  3. 根据提问匹配文本
  4. 构建prompt
  5. LLM生成回答

基于单一文档问答的实现原理

基于本地知识库问答的实现原理

基于本地知识库问答的实现原理
从文档处理角度来看,实现流程如下:
文档处理流程

代码实现:
代码实现

LangChain-ChatGLM简介

LangChain-ChatGLM是一个基于ChatGLM等大预言模型的本地知识库问答实现,也就是一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。

项目地址:基于本地知识库的 ChatGLM 等大语言模型应用实现

项目特点:

  • 依托ChatGLM等开源模型实现,可离线部署
  • 基于langchain实现,可快速实现接入多种数据源
  • 在分句、文档读取等方面,针对中文使用场景优化
  • 支持PDF、txt、md、docx等文件类型接入,具备命令行demo、webui和vue前端。

项目结构:

  • models:LLM的接口类和实现类,针对开源模型提供流式输出支持。
  • loader:文档加载器的实现类
  • textsplitter:文本切分的实现类
  • chains:工作链路实现,如chains/local_doc_qa实现了基于本地文档的问答实现
  • content:用于存储上传的原始文件
  • vector_store:用于存储向量库文件、即本地知识库本体
  • configs:配置文件存储

项目优化的方向:

  1. 模型微调:对LLM和embedding基于专业领域数据进行微调
  2. 文档加工:在文本分段后,对每段分别进行总结,基于总结内容语义进行匹配
  3. 借助不同模型能力:在text2sql、text2cpyher场景下需要产生代码时,可借助不同模型能力

相关资料

  1. LangChain 完整指南:使用大语言模型构建强大的应用程序
  2. 注册 Serpapi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu学习笔记(一)——目录与路径

文章目录 前言一、相对路径与绝对路径1.绝对路径(absolute)2.相对路径(relative) 二、目录相关操作命令1.cd(change directory, 切换目录)2.pwd(print working directory, 显示目前所在的目录)3.mkdir(make directory, 建立新目录…

Versioning data and models for rapid experimentation in machine learning

翻译博客:https://medium.com/pytorch/how-to-iterate-faster-in-machine-learning-by-versioning-data-and-models-featuring-detectron2-4fd2f9338df5 在本文中,您将学习如何创建和使用版本化的数据集作为可重现的机器学习流程的一部分。为了说明这一…

自定义MVC工作原理

目录 一、MVC二、MVC的演变2.1 极易MVCController层——Servletview层——JSP缺点:Servlet过多、代码冗余 2.2 简易MVCController层——Servletview层——JSP缺点:在Servlet中if语句冗余 2.3普易MVCController层——Servletview层——JSP缺点&#xff1a…

OBS播放NDI源

下载OBS Studio的NDI运行时和插件 https://github.com/obs-ndi/obs-ndi/releases 下载文章中的下面这两个文件,并直接双击安装。 或者从百度云下载也行: 链接:https://pan.baidu.com/s/1vNn1yMdCy6BZkKxKCq-kDw 提取码:cxxg 安装完成之后,打开OBS Studio 点击加号添…

RabbitMQ系列(11)--RabbitMQ交换机(Exchange)简介

1、交换机概念 生产者生产的消息从不会直接发送到队列,生产者只能把消息发送到交换机(Exchange),交换机接收来着生产者的消息,另一方面把消息推入队列,交换机必须知道如何处理收到的消息,是应该…

【设计模式】第十五章:责任链模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章:单例模式 【设计模式】第二章:工厂模式 【设计模式】第三章:建造者模式 【设计模式】第四章:原型模式 【设计模式】第五章:适配器模式 【设计模式】第六章&…

银河麒麟服务器v10 sp1 nginx开机自动启动

接上一篇:银河麒麟服务器v10 sp1 安装 nginx_csdn_aspnet的博客-CSDN博客 设置开机自启动 定义服务启动文件内容: [Unit] Descriptionnginx - high performance web server Afternetwork.target remote-fs.target nss-lookup.target [Service] Ty…

menuconfig selected by 怎么处理

比方说我想取消掉flex,但是被强制生成了: 输入搜索命令查了一下: 搜一下selected by [y] 中的 linux_pam: 取消掉 这样就不用编flex了。

【HarmonyOS】元服务启动命令漫谈

在日常开发中,我们可以通过DevEco Studio,直接Run我们的元服务工程,在测试机上拉起我们开发的元服务页面。但是我们自己打包HarmonyOS元服务hap在手机上安装后是没有桌面图标的。虽然我们可以在设置的服务管理中找到我们安装的元服务&#xf…

Go语言操作MySql数据库

go-sql-driver/mysql库是Go语言官方推荐的MySQL驱动库,可以很方便地实现对MySQL数据库的连接和操作。本文记录以下使用go-sql-driver/mysql数据库驱动来操作mysql数据库。 目录 1.安装驱动程序 2.导入驱动包 3.操作数据库 3.1 获取mysql版本 3.2 创建表 3.3 …

详解JAVA Socket

目录 1.概述 2.使用 3.使用场景 3.1.web server中的网络通信 3.2.长连接 3.3.性能问题 1.概述 什么是网络通信: 就像打电话一样,两点间要通信,两点间就必须有连接,为了实现任意两个节点之间的通信,我们就必须采…

用户与组管理介绍

文章目录 一、服务器系统版本介绍二、用户管理1. 用户概述2. 内置账户3. 配置文件4. 用户管理命令 三、组管理1. 组概述2. 内置组(系统自带的组)3. 组管理命令 一、服务器系统版本介绍 Windows服务器系统:win2000、win2003、win2008、win2012…

Spring 与 Servlet-2

学习笔记(加油呀): Spring的通知类型 Spring 通知类型按切面功能调用的不同时刻,可以分为提供了 5 种 Advice 类型 1、前置通知 Before advice:在某连接点之前执行的通知,但这个通知不能阻止连接点之前的…

SAP ABAP ALV FIELDCAT 字段设置详细说明

一、SAP ABAP ALV FIELDCAT 字段设置的位置: 二、SAP ABAP ALV FIELDCAT 字段设置的详细说明: 字段属性描述使用目的CFIELDNAME参照Currency单位的字段名根据单位显示相应值CHECKBOX设置成复选框字段输出选项COL POS字段的输出顺序字段输出选项COLDDICT…

Android Studio实现内容丰富的安卓视频管理平台

如需源码可以添加q-------3290510686,也有演示视频演示具体功能,源码不免费,尊重创作,尊重劳动。 项目编号081 1.开发环境 android stuido 2.功能介绍 安卓端: 1.注册登录 2.本地视频 3.视频播放 4.收藏功能 5.网路视频…

R语言绘图丨论文中最常用箱线图绘制教程,自动进行显著性检验和误差线标注

多组比较式箱线图 在科研论文绘图中,对于多组数据进行比较一般采用箱线图的方法,今天分享一下这个经典数据可视化方法,从零开始绘制一张带误差棒并自动计算显著性比较结果的箱线图。 前言:箱线图有什么优势? 数据分布…

【AcWing算法基础课】第三章 搜索与图论

文章目录 前言课前温习一、深度优先搜索(DFS)1、排列数字1.1题目描述1.2思路分析1.3代码实现 2、 n-皇后问题1.4题目描述1.5思路分析1.6代码实现 二、宽度优先搜索(BFS)1、走迷宫2.1题目描述2.2思路分析2.3代码实现 三、树与图的存…

2023.07.05 ARM day6

实验1 1.在键盘输入一个字符,串口工具进行显示 2.例如:在在键盘输入一个字符a,串口工具进行显示b 实验2 1.在键盘输入一个字符串,串口工具进行显示 2.例如:在在键盘输入一个字符串“huyue”,串口工具进行显示“huyue” inclu…

MySQL数据库管理与开发

什么是MySQL 数据库? M典MQLB公司开发的一个关系型数据库管理系统。通过它司以有效地组织和管理存储在数据库中的数据。MySQL 数据库可以称得上日前运行速度最快的SQL语言数据库。 MySQL 的优势 MySQL数据库是一款自由软件,任何人都可以从MySQL的官方…

保姆级 雅特力AT32 MCU 从SRAM启动KEIL工程配置步骤(STM/GD/APM通用)

好记性不如烂笔头,既然不够聪明,就乖乖的做笔记,温故而知新。 本文档用于本人对知识点的梳理和记录。 一、前言 开发工具:KEIL 开发板:AT32F415 AT-START-F415 软件工程:雅特力BSP flash_wirte_read 点击…