【Datawhale LLM学习笔记】一、什么是大型语言模型(LLM)

文章目录

  • 1. 什么是大模型
  • 2. 检索增强生成 RAG
    • 一、什么是 RAG
    • 二、RAG 的工作流程
  • 3. langChain介绍
    • 一、什么是 LangChain
    • 二、LangChain 的核心组件
  • 4. 开发 LLM 应用的整体流程
    • 一、何为大模型开发
    • 二、大模型开发的一般流程
    • 三、搭建 LLM 项目的流程简析(以知识库助手为例)
      • 步骤一:项目规划与需求分析
      • 步骤二:数据准备与向量知识库构建
      • 步骤三:大模型集成与 API 连接
      • 步骤四:核心功能实现
      • 步骤五:核心功能迭代优化
      • 步骤六:前端与用户交互界面开发
      • 步骤七:部署测试与上线
      • 步骤八:维护与持续改进

1. 什么是大模型

一种旨在理解和生成人类语言的人工智能模型

2. 检索增强生成 RAG

一、什么是 RAG

指导大型语言模型生成更为精准的答案

LLM面临如下挑战

  • 信息偏差/幻觉: LLM 有时会产生与客观事实不符的信息。RAG 通过检索数据源,确保输出内容的精确性和可信度,减少信息偏差
  • 知识更新滞后性:LLM 基于静态的数据集训练,这可能导致模型的知识更新滞后,RAG 通过实时检索最新数据,保持内容的时效性

二、RAG 的工作流程

RAG工作可以分为以下4个阶段:数据处理、检索、增强和生成

在这里插入图片描述

  • 数据处理:清洗原始数据,转换为可检索格式,然后存入db
  • 检索:将用户的问题在db中检索
  • 增强:增强检索到的信息,让模型更容易理解
  • 生成:生成模型依据增强结果,生成回答

3. langChain介绍

一、什么是 LangChain

LangChain是一个开源框架,为各种大型语言模型应用提供通用接口,从而简化应用程序的开发流程,帮助开发者们快速构建基于大型语言模型的端到端应用程序或工作流程

利用 LangChain 框架,我们可以轻松地构建如下所示的 RAG 应用

在这里插入图片描述

二、LangChain 的核心组件

LangChain 主要由以下 6 个核心组件组成:

  • 模型输入/输出(Model I/O):与语言模型交互的接口
  • 数据连接(Data connection):与特定应用程序的数据进行交互的接口
  • 链(Chains):将组件组合实现端到端应用。比如后续我们会将搭建检索问答链来完成检索问答。
  • 记忆(Memory):用于链的多次运行之间持久化应用程序状态;
  • 代理(Agents):扩展模型的推理能力。用于复杂的应用的调用序列;
  • 回调(Callbacks):扩展模型的推理能力。用于复杂的应用的调用序列;
    在这里插入图片描述

4. 开发 LLM 应用的整体流程

一、何为大模型开发

通过大预言模型强大的理解生成能力,结合自身数据与业务,开发出来的应用程序称为大模型发开

用通俗的话来说,就是调用大模型api,开发属于自己的产品。比如暴躁女友在线聊天软件

在这里插入图片描述

大模型开发要素:
在这里插入图片描述

二、大模型开发的一般流程

在这里插入图片描述

  • 确定目标: 在开发之前,明确应用的目标、场景和受众,尽量首选最小可行产品(MVP)作为起点,逐步完善。

  • 设计功能: 根据目标,设计应用的功能和实现逻辑,着重于核心功能,逐步扩展上下游功能,确保全面覆盖用户需求。

  • 搭建整体架构: 基于特定数据库、Prompt和通用大模型的架构,使用LangChain等框架,构建从用户输入到应用输出的完整流程。

  • 搭建数据库: 建立个性化数据库支持,使用Chroma等向量数据库进行数据预处理、向量化存储,确保数据质量和向量化构建。

  • Prompt工程化: 通过迭代构建高质量的Prompt,对大模型性能具有重要影响,包括原则、技巧、小型验证集设计和Prompt的持续优化。

  • 验证迭代: 通过发现Bad Case并改进Prompt工程化,不断优化系统效果,应对各种边界情况,直至达到稳定且能实现目标的Prompt版本。

  • 前后端搭建: 核心功能完成后,进行前后端搭建,设计产品页面,利用Gradio和Streamlit等工具帮助快速搭建可视化页面,实现Demo上线。

  • 体验优化: 上线后,持续跟踪用户体验,记录Bad Case和用户反馈,针对性优化,确保长期用户满意度。

三、搭建 LLM 项目的流程简析(以知识库助手为例)

以下我们将结合本实践项目与上文的整体流程介绍,简要分析知识库助手项目开发流程:

步骤一:项目规划与需求分析

1.项目目标:基于个人知识库的问答助手

2.核心功能:

  • 将爬取并总结的MD文件及用户上传文档向量化,并创建知识库;
  • 选择知识库,检索用户提问的知识片段;
  • 提供知识片段与提问,获取大模型回答;
  • 流式回复;
  • 历史对话记录

3.确定技术架构和工具

  • 框架:LangChain
  • Embedding模型:GPT、智谱、M3E
  • 数据库:Chroma
  • 大模型:GPT、讯飞星火、文心一言、GLM 等
  • 前后端:Gradio 和 Streamlit

步骤二:数据准备与向量知识库构建

加载本地文档 -> 读取文本 -> 文本分割 -> 文本向量化 -> question 向量化 -> 在文本向量中匹配出与问句向量最相似的 top k 个 -> 匹配出的文本作为上下文和问题一起添加到 Prompt 中 -> 提交给 LLM 生成回答。

在这里插入图片描述

  1. 文档收集与处理

    • 收集用户提供的文档,如PDF、TXT、MD等格式。
    • 使用LangChain的文档加载器或Python包进行读取。
    • 将长文档切分为短文本,每段文本作为一个知识单位。
  2. 文档向量化

    • 利用文本嵌入技术将文档片段向量化,保持语义相似性。
    • 将向量化的文本存入向量数据库,建立索引以实现快速检索。
  3. 建立知识库索引

    • 将向量化的文档导入Chroma知识库,利用LangChain集成向量数据库。
    • 通过向量相关性算法(如余弦算法)匹配最相似的知识库片段,作为上下文与用户问题一起提交给LLM进行回答。

步骤三:大模型集成与 API 连接

  • 集成 GPT、星火、文心、GLM 等大模型,配置 API 连接。
  • 编写代码,实现与大模型 API 的交互,以便获取问题回答。

步骤四:核心功能实现

  1. Prompt工程化和流式回复

    • 建立Prompt工程,使大模型能够根据用户提问和知识库内容生成回答。
    • 实现流式回复功能,支持用户进行多轮对话,提高交互自然度和连贯性。
  2. 历史对话记录功能

    • 添加历史对话记录功能,记录用户与助手的交互历史。
    • 保存对话记录,为用户提供更好的个性化服务和回溯功能。

步骤五:核心功能迭代优化

  • 进行验证评估,收集 Bad Case。
  • 根据 Bad Case 迭代优化核心功能实现。

步骤六:前端与用户交互界面开发

  • 使用 Gradio 和 Streamlit 搭建前端界面。
  • 实现用户上传文档、创建知识库的功能。
  • 设计用户界面,包括问题输入、知识库选择、历史记录展示等。

步骤七:部署测试与上线

部署问答助手到服务器或云平台,上线并向用户发布。

步骤八:维护与持续改进

  1. 系统监测与用户反馈

    • 监测系统性能和用户反馈,快速响应并处理问题,确保系统稳定运行。
  2. 知识库更新

    • 定期更新知识库,添加新文档和信息,保持知识库内容的时效性和全面性。
  3. 用户需求收集与改进

    • 主动收集用户需求,进行系统改进和功能扩展,提升用户体验和系统功能。

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

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

相关文章

产品推荐 | 基于Lattice CrossLink-NX FPGA语音和视觉机器学习板

01 产品概述 Lattice Semiconductor CrossLink-NX语音和视觉机器学习板是高性能 – 专为低功耗机器学习应用而设计的电路板,采用CrossLink-NX 40K,这是一款具有AI加速器的强大FPGA。 基于视觉和语音的机器学习应用 – 板载低功耗图像传感器和麦克风以及…

Linux数据库自动备份 - 定时任务发到百度云盘、坚果云、邮箱附件

前言 1. 坚果云的webdav云盘最好! (免费账号每月1G上传流量) 2. 不建议数据库备份文件发送到SMTP邮箱,因为对方服务器非常容易当做垃圾邮件处理,而且发信的SMTP账号会被封禁(实测163发到QQ邮箱被封&…

数据库一个字段对应多个参数值设计

数据库只有一个字段存多个开启(参数值只有开启和关闭的参数) 只有一个参数是设置为1 加一个参数是设置为112 再加一个参数是设置为1214 ..... 依此类推后一个参数的值前面所有参数的和1例如 控制参数1 控制参数2 控制参数3 控制参数4 上面有4个参数…

更改docker镜像下载地址

一.简介 使用指令 sudo docker info 查看本机的docker镜像下载地址为 由于本机的var文件空间不足,因此,想更改他的存储地址,如下 二.开始操作 1.停止Docker服务: 执行命令 sudo systemctl stop docker 以及 sudo systemctl s…

leetcode热题HOT146. LRU 缓存

一、问题描述: 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值…

220V转3.3V线性降压芯片WT5100

220V转3.3V线性降压芯片WT5100 WT5100就是那个离线式的稳压器芯片,没有电感的那种。里面内置了650V的大功率MOSFET,启动控制电路,电压控制电路,交流信号检测电路等等。通过切换SEL管脚,它就能输出5V或3.3V的电压。不需…

一本免费开源的电子书籍!这个 71.8k star 的项目,让你轻轻松松学会算法【文末有福利】

话说作为一名程序员,肯定都少不了在准备面试的时候刷 LeetCode 的算法题吧。虽然面试考察的算法题在工作中用到的非常少,但是确实是能让我们对常用的数据结构有更深刻的理解,以及对思维逻辑有很大的提升。不过枯燥的刷题可能让新手无从下手&a…

【Linux网络编程】UDP协议

UDP协议 1.再谈端口号端口号划分认识知名端口号(Well-Know Port Number)两个问题netstatpidof 2.UDP协议2.1UDP的特点2.2面向数据报2.3UDP的缓冲区2.4UDP使用注意事项2.5基于UDP的应用层协议 喜欢的点赞,收藏,关注一下把! 1.再谈端口号 端口…

【Unity优化(二)】渲染优化

https://www.cnblogs.com/alan777/p/6204759.html CPU受限 开启Player Settings中的Graphics jobs。 在Player settings中的Graphics jobs选项决定了Unity是否使用工人线程去执行一些原本需要在主线程或者渲染线程中执行的任务,在支持这个功能的平台上&#xff0…

mysql匹配

文章目录 匹配和正则表达式匹配:like正则表达式:rlike(与regexp完全一样没有区别) 匹配和正则表达式 匹配:like %:用来匹配 0 个或多个字符 _:用来匹配1个字符 SELECT * FROM Websites WHER…

计算方法实验5:对鸢尾花数据集进行主成分分析(PCA)并可视化

任务 iris数据集包含150条数据,从iris.txt读取,每条数据有4个属性值和一个标签(标签取值为0,1,2)。要求对这150个4维数据进行PCA,可视化展示这些数据在前两个主方向上的分布,其中不…

笔记84:关于递归法的一些感悟

题目1:二叉树的前序遍历 链接:. - 力扣(LeetCode) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(…

京东详情比价接口优惠券(2)

京东详情API接口在电子商务中的应用与作用性体现在多个方面,对于电商平台、商家以及用户都带来了显著的价值。 首先,从应用的角度来看,京东详情API接口为开发者提供了一整套丰富的功能和工具,使他们能够轻松地与京东平台进行交互。…

后台运行程序时报错

问题描述:使用pycharm连接服务器运行程序时,可以正常运行。但是使用Termius终端运行时报错(运行时切换到和pycharm相同的路径)。 2024-04-15 14:35:01.663900: I external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:454] …

jeecg 3.4.3前后端分离获取,前端获取当前登录人信息

1. store —>modules—>user.js下 可以查看有哪些信息 2. 使用方式 2.1 //获取登录用户的信息 import user from ‘/store/modules/user’ 2.2 export下 export default { user } 2.3 可以在created中直接打印信息 const useruser.state; console.log(“当前登录人:”…

USB设备热插拔流程解析

设备热插拔 i2c,spi都是主机驱动初始化的时候,就会根据设备树来添加设备 pci的话,主机初始化的时候,会通过总线去遍历枚举card设备 sdio的话,主机驱动初始化的时候,会去枚举卡;插卡可能会触发主机中断&a…

物业满意度调查如何开展?

物业管理行业的服务水平对于提升居民生活质量、维护社区安全和保障房产价值起着重要作用,近年来受地产关联方房屋交付影响,以及疫情后物业投入减少,物业企业对社区环境、设施和公共区域的维护减弱,2023年的降幅尤其明显&#xff0…

Java基础(变量)

什么是变量? 变量:在程序的执行过程中,其值有可能发生改变的量(数据) 变量的使用场景 当某个数据经常发生改变时,我们也可以用变量储存。当数据变化时,只要修改变量里面记录的值即可。 变量…

加州大学戴维斯分校最新Nature Ecology Evolution(IF=19)!入侵植物在成为生态威胁之前可能会休眠几十年甚至几百年

根据加利福尼亚大学戴维斯分校领导的一项新研究,入侵植物在被引入环境后可能会休眠几十年甚至几百年,然后才会迅速扩展并造成生态破坏(非常意外和可怕)。这项发表在《Nature Ecology & Evolution》上的研究调查了全球九个地区…

掌握JMeter HTTP 请求头:简单易懂

在深入研究 JMeter 的过程中,任何涉及性能测试或接口验证的专业人员都会认识到,合理配置HTTP请求头部信息是实现精确测试的关键步骤之一。不同情景下,如数据提交形式的不同(例如 JSON、XML 等),或是需要通过…