大模型应用开发基础知识

news2024/12/23 0:26:40

一、LangChain介绍

  • 背景
    一个应用程序通常需要多次对大语言模型写提示并对它输出的结果进行解析。因此,需要写很多胶水代码。而LangChain的目的使这个开发过程变得更容易。
  • 目的
    LangChain是一个构建大语言模型应用的开源框架。当有人在开发LLM的复杂应用,作者发现了可以从中提取一些公共的抽象,于是LangChain诞生。
  • 内容
    • 包含两个包,一个Python,一个JS(TS)。
    • LangChain注重组合和模块化。LangChain一个很有价值的地方是有很多可以单独使用或与其他组件结合使用的独立组件。
    • 有许多不同的用例,可以将这些模块化组件链式组合成更完整的应用程序,并且非常容易上手。

二、Model、prompt和parsers

Model:基础的语言模型

Prompt:给模型传递信息的一种方式

Parsers:将模型的输出解析成更结构化的格式

三、在CHATGLM2-6B上测试LangChain

  • 本地部署CHATGLM2-6B
  git clone https://github.com/THUDM/ChatGLM2-6B
  cd ChatGLM2-6B
  pip install -r requirements.txt
  • 运行CHATGLM2-6B网页Demo
streamlit run web_demo2.py
  • 使用LangChain测试CHATGLM2-6B
  • 本地运行CHATGLM2-6B
python api.py
  • 安装LangChain
pip install langchain
  • 通过LangChain运行CHATGLM2-6B
from langchain_community.llms import ChatGLM
from langchain_core.messages import HumanMessage, SystemMessage
        
        # LangChain的端口
        endpoint_url = (
            "http://127.0.0.1:8000"
        )
        # 这个接口在 https://python.langchain.com/v0.2/api_reference/community/llms.html,同样道理,可以使用其他大语言模型。
        model  = ChatGLM(
            endpoint_url=endpoint_url
        )
        
        messages = [
            SystemMessage(content="Translate the following from English into Chinese"),
            HumanMessage(content="hi!"),
        ]
        
        model.invoke(messages)  # 输出 '人:嗨!'
  - 

四、 记忆

通常来说,语言模型不会记住和你对话之间的历史消息,每个请求交互,每次调用API都是独立的。聊天机器人之所以看起来好像是有记忆的,是因为借助代码的帮助,提供历史信息作为和LLM对话的上下文。常见三种存储方式:

  • 存储若干对话
    ConversationBufferMemory
  • 限制若干令牌
    ConversationBufferWindowMemory
  • 针对历史信息生成摘要
    ConversationSummaryMemory

五、链

链通常将LLM与提示词结合在一起,有个这个构建模块,还可以将一堆这样的构建模块组合在一起,对文本或其他数据按顺序进行操作。

  • Simple Sequential Chain
    在这里插入图片描述

  • Sequential Chain
    在这里插入图片描述

  • Router Chain
    如果有多条子链,每条子链专门负责处理某种特定类型的输入,这种情况下可以使用路由链。
    在这里插入图片描述

    首先判断该使用哪条子链,然后将输入传递到相应的子链。

六、文档问答系统

给定一段可能从PDF文件、网页或某公司的内部文档库中提取的文本,使用LLM回答关于这些文档内容的问题,帮助用户深入了解并获取他们需要的信息。

  • 底层
    使用语言模型,并且与大量文档结合时,存在一个关键问题:语言模型一次只能接收几千个单词。那么,如果我们有一个很大的文档,如何让语言模型对文档所有内容进行问答?Embedding和向量存储(成为stuff)。
    • Embedding
      Embedding将一段文本转换成数字,用一组数字表示这段文本。这组数字捕获了它所代表的文字片段的内容含义。通过观察不同文本数值空间中的表示, 利用向量相似度可以轻松找出哪些文本段相似,从而从文档中找到与问题相似的文本片段,一起传递给大模型帮助回答问题。
    • 向量数据库
      一种存储方式,可以存储前面创建的矢量数字数组。往向量数据库中新建数据的方式,就是将文档拆分成块,每块生成Embedding,然后把Embedding和原始块一起存储到数据库中。当我们处理大一点的文档时,首先要将其拆分为较小的文本块,只用把最相关的几块内容传递给LLM。然后,把每个文本块生成一个Embedding,然后将这些Embedding存储到向量数据库中,形成索引。当索引创建后,我们可以用它来找到与查询内容最相关的几个文本片段(类似于量化)。拿到文本块后,将这些文本块与原始的查询内容一起传递给语言模型,这样可以让语言模型根据检索出来的文档生成最终答案。
    • 其他方式
      • Map_readuce
        基本对所有的分块,把每一块的内容连同问题一起传递给语言模型,得到一个独立返回结果。然后每一块得到的结果都合并在一起,再使用语言模型对这些结果进行总结,得到最终答案。
      • Refine
        和Map_readuce,不过是迭代的,依赖前一个快的结果,根据第一个分块依次迭代到最后分块。这种对于随着时间推移构建答案非常有用。
      • Map_rerank
        对于每个文档,只需对语言模型进行一次调用。另外还需要让他返回一个评分,然后选择最高分的结果。这依赖于语言模型知道分数应该是多少。所以你需要告诉给它指令,“嘿,如果与文档相关,分数应该很高”,并且需要具体优化那部分指令。

七、评估

当使用LLM构建复杂应用程序时,一个重要且棘手的问题是,如何评估应用程序的表现?是否达到了某种验收标准?此外,如果你决定换一种实现方式,可能换到不同的LLM,或者更改如何使用向量数据库的策略,或者使用其他方式检索数据。或者改变系统中的其他参数。怎么评估效果比之前好了,还是坏了?

这些应用系统实际上是许多不同步骤的链和序列,我们的首要任务是,了解每个步骤的输入和输出到底是什么?往往当返回错误的结果时,不一定是语言模型本身出了问题,实际上,可能是在检索的步骤出了问题。

  • langchain.debug
    显示模块在链操作时针对输入和输出的思考过程
  • 可视化模型思考工具

八、代理

有时候人们把大语言模型看作是知识库,就好像它学会并记忆了大量从互联网获取的信息。但Wu认为更有用的方式是把大语言模型看作是一个推理引擎,LLM可能会使用它从互联网上学习的这些背景知识,也利用你提供给的新信息来帮助你回答问题,或者推理内容,甚至决定接下来要做什么。这就是LangChain Agent帮忙要做的事。比如内置在LangChain中的搜索引擎;如何创建自己的工具,让代理与任何数据存储、API或者功能进行互动。

Tip:temperature要设置为0,因为我们将使用语言模型作为代理的推理引擎,连接到其他的数据,需要使得推理尽可能准确,将emperature设置为0,以消除任何可能出现的随机性。

  • AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION
    一种Agent属性,其中CHAT是一个专为与CHAT模型一起工作而优化的代理。其次是REACT,是一种组织Prompt的技术,能最大化语言模型的推理能力。
  • handing_parsing_erros
    一种Agenet属性,当语言模型输出的内容无法被正常解析时,将格式错误的内容传回语言模型,并要求它自行纠正。
  • verbose
    一种Agent属性,详细打印每个步骤的记录。

九、RAG(Retrieval-Augmented Generation )

在利用大语言模型回答问题之前,先从外部知识库检索相关信息。主要分为两部分,检索和生成。
在这里插入图片描述

  • 检索
    首先将查询内容query向量化,从数据库中检索与输入矢量相关性高的部分内容context。
  • 生成
    查询和检索到的上下文都被注入到发送给LLM的提示中,生成最终结果。

十、RAG和微调(finetune )的优缺点

RAG提供类似教科书的信息检索功能,适用于解答具体问题或执行特定信息检索任务。

  • 优点
    • 提高答案准确性,减少虚假信息。
    • 识别最新信息,保持回答的及时性和准确性。
    • 高度透明,增强用户对输出结果的信任。
  • 缺点
    • 不适合教授模型理解广泛领域或学习新的语言、格式或风格。

微调通过广泛学习吸收知识,适用于模型需要模仿特定结构、风格或格式时。

  • 优点
    • 强化模型已有知识。
    • 调整或定制模型输出。
    • 适用于复杂指令的训练,提升交互效率。
  • 缺点
    不适合向模型中添加新知识,或应对需要快速迭代新场景的情况。

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

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

相关文章

ModuleNotFoundError: No module named ‘transformers_modules.chatglm-6b-v1‘

ModuleNotFoundError: No module named transformers_modules.chatglm-6b-v1 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,…

基于Java语言的充电桩平台 包含(充电桩系统 汽车充电桩云快充协议 电动自行车充电桩协议 中电联充电桩互联互通协议)

介绍 SpringBoot 框架,充电桩平台充电桩系统充电平台充电桩互联互通协议云快充协议1.5-1.6协议新能源汽车二轮车公交车二轮车充电-四轮车充电充电源代码充电平台源码Java源码 软件架构 软件架构说明 软件功能 小程序端:城市切换、附近电站、电桩详情…

【RAG实战】基于TextIn打造上市公司财务报表智能问答系统

今天介绍一个项目案例,利用大语言模型打造上市公司财务报表智能问答系统。 在当今竞争激烈的市场环境中,企业和投资者对财务信息的获取与分析要求越来越高。上市公司财务报表作为评估公司财务健康和未来发展的重要依据,提供了大量关键信息。 然而,传统的财务报表分析技术…

尚品汇-前端调用搜索实现(三十二)

目录&#xff1a; &#xff08;1&#xff09;修改web-all模块 &#xff08;2&#xff09;配置网关 &#xff08;3&#xff09;页面渲染 &#xff08;4&#xff09;面包屑处理 &#xff08;1&#xff09;修改web-all模块 修改pom.xml文件 <dependencies><depende…

QT串口通信

查看详情http://100bcw.com/qt6.htm 前言&#xff1a;如果用qt写程序作为上位机&#xff0c;然后通过和usb和下位机通信的时候&#xff0c;就需要用到qt中的串口通信了。 使用qt中的串口通信的时候需要用到的两个头文件分别为&#xff1a; #include <QtSerialPort/QSeria…

MYSQL----表的创建

1.创建表 create table 表名&#xff08; field1 datetype, field2 datetype, field3 datetype &#xff09; 1.field字段名&#xff0c;也就是属性&#xff0c;相当于java类里面的成员属性 2.datetype 数据类型 3.最后一个字段的定义&#xff0c;结束没有逗号 4.字段的定义在…

政策驱动,科技引领,漫途信息化监测方案守护农村饮水安全!

近日&#xff0c;山西省人民政府正式发布《山西省农村供水高质量发展规划》&#xff0c;明确到2030年&#xff0c;全面实现农村24小时供水&#xff0c;县域农村饮水安全标准化建设达标率力争达到80%&#xff0c;基本实现农村供水城市化、城乡供水均等化。 现阶段部分地区受…

基于VS2022+Qt5+C++的串口助手开发

目录 一、前言 二、环境准备 三、创建QT串口项目 ​编辑 四、串口项目实现 1.ui界面设计 2.添加QT串口模块 3.功能实现 ①串口扫描 ②波特率、停止位等设置 ③接收数据 ④发送数据 五、最终效果 六、总结 一、前言 如果有人之前看过我文章的话应该知道&#xf…

C# 窗体通过调用webapi往U9C系统创建请购单

C# 窗体通过调用webapi往U9C系统创建请购单 窗体图片 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System…

Java面试题———分布式篇

目录 1、什么是分布式事务 2、什么是CAP理论 3、为什么分布式系统中无法同时AC 4、什么是BASE理论 5、分布式事务的解决方案有哪些 6、Seata的架构是什么 7、XA模式的工作流程是什么 8、AT模型的工作原理是什么 9、TCC模型的工作原理是什么 1、什么是分布式事务 在分…

Aix 清理 iscsi 残留盘

目录 一、前提概要 二、解决方法 一、前提概要 Aix 环境下挂载 ISCSI 盘&#xff0c;需要结合 LVM 进行挂盘。这个过程比较复杂&#xff0c;在使用过程中极易出现残留。 本篇博客介绍的就是如何清理 Aix 下 ISCSI 的残留。 二、解决方法 主要步骤和需要执行的命令如下面的流…

ModuleNotFoundError: No module named ‘pywin32_bootstrap

ModuleNotFoundError: No module named ‘pywin32_bootstrap 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社…

Prompt Engineering 完整指南

Prompt Engineering 完整指南 Prompt Engineering 是与 AI 模型进行交互的关键技术&#xff0c;通过精心设计的指令&#xff08;prompt&#xff09;引导模型生成高质量的输出。本文将详细介绍 prompt 设计的最佳实践、基本原则以及高级技巧&#xff0c;帮助你在实际应用中最大化…

vscode添加宏定义

1 起因 在用vscode看项目代码时&#xff0c;如果源文件中的代码块被某个宏定义给包裹住了&#xff0c;则在vscode的默认配置下&#xff0c;不会高亮显示这块被包裹住的代码&#xff0c;如下图中229行开始的代码被STM32F40_41xxx所控制&#xff0c;没有高亮显示。 由于STM32F4…

SSH升级至9.8p1

此前写过一个有关升级ssh的帖子&#xff0c;当时的情况是ssh5.3p1 升级到 ssh8.0 p1 下面是链接&#xff1a;https://blog.csdn.net/zhurobert/article/details/103193205?spm1001.2014.3001.5501 此次升级的环境是CentOS-7.6.1810 ssh版本7.4p1 准备好升级包后上传至/home…

Ubuntu 下 NFS服务开启

NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;是一种基于TCP/IP传输的网络文件系统协议&#xff0c;它允许网络中的计算机之间通过TCP/IP网络共享资源。简单来说NFS就是一个文件传输的协议&#xff0c;可以用来传输文件。 使用如下命令安装 NFS 服务…

怎样选择开放式耳机好?精选五大实力出众爆款安利!

开放式耳机通过空气传导技术传递声音&#xff0c;不需要插入耳道&#xff0c;这种设计不仅保护了耳朵&#xff0c;还确保了佩戴的稳定性和舒适性。与传统的入耳式耳机相比&#xff0c;开放式耳机有助于保持耳道清洁&#xff0c;并允许用户在享受音乐的同时保持对周围环境的警觉…

Ps:首选项 - 增效工具

Ps菜单&#xff1a;编辑/首选项 Edit/Preferences 快捷键&#xff1a;Ctrl K Photoshop 首选项中的“增效工具” Plugins选项卡允许用户管理 Photoshop 中的插件和扩展功能&#xff0c;通过调整这些设置&#xff0c;用户可以根据自己的需求来扩展 Photoshop 的功能&#xff0c…

前端post传入拿到数据,后端报null,并且能够添加或者编辑成功

检查conterller层注解接到实体类的注解是不是没加&#xff08; RequestBody &#xff09; 后端&#xff1a; 前端&#xff1a; 那么就看注解&#xff0c;因为contrller层有个接值注解&#xff08; RequestBody &#xff09;

Why Does ChatGPT Fall Short in Providing Truthful Answers?

文章目录 题目摘要简介相关工作模型和数据集结果事实性背后的能力提高 QA 的事实性结论 题目 为什么 ChatGPT 无法提供真实的答案&#xff1f; 论文地址:https://arxiv.org/abs/2304.10513 摘要 ChatGPT 等大型语言模型的最新进展已显示出影响人类生活各个方面的巨大潜力。然而…