【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. 用户需求收集与改进

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从迷宫问题理解dfs

文章目录 迷宫问题打印路径1思路定义一个结构体要保存所走的路径,就需要使用到栈遍历所有的可能性核心代码 部分函数递归图源代码 迷宫问题返回最短路径这里的思想同上面类似。源代码 迷宫问题打印路径1 定义一个二维数组 N*M ,如 5 5 数组下所示&…

掌握Node Version Manager(nvm):跨平台Node.js版本管理

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

整合阿里云短信服务

1. 申请服务 如图&#xff1a; 申请签名管理和模板管理 2. 进入快速学习和调试 2.1 进入快速学习 2.2 获取依赖和代码实现 3. 具体实现案例 3.1 添加依赖 <dependency><groupId>com.aliyun</groupId><artifactId>dysmsapi20170525</artifact…

9.MMD 基础内容总结及制作成品流程

前期准备 1. 导入场景和模型 在左上角菜单栏&#xff0c;显示里将编辑模型时保持相机和光照勾选上&#xff0c;有助于后期调色 将抗锯齿和各向异性过滤勾掉&#xff0c;可以节省资源&#xff0c;避免bug 在分辨率设定窗口&#xff0c;可以调整分辨率 3840x2160 4k分辨率 1…

Umi.js:登录之后需要手动刷新权限菜单才能渲染

在使用Umi.js开发后台管理页面时&#xff0c;用户登录之后&#xff0c;总是需要手动刷新一次页面&#xff0c;才能够拿到全局状态/权限信息。 问题描述 结合使用umi/plugin-layout和umi/plugin-access&#xff0c;登录进入页面&#xff0c;配置的权限菜单未渲染&#xff0c;需…

【Redis 神秘大陆】005 常见性能优化方式

五、Redis 性能优化 5.1 系统层面的优化 https://github.com/sohutv/cachecloud/blob/main/redis-ecs/script/cachecloud-init.sh initConfig() {# 支持虚拟内存分配sysctl vm.overcommit_memory1# 最大排队连接数设置为 511&#xff0c;一般默认是 128echo 511 >/proc/sy…

openobserve-filebeat配置

优势 rustgolang开发的日志工具组合&#xff0c;自带日志数据存储&#xff0c;简化部署和管理。日志数据可配置保留x天。从日志文件中采集&#xff0c;做到非侵入式日志集中管理。 可从日志内容中提取信息进行报警等二次开发。 下载 openobserve-v0.10.1-windows-amd64 fil…

【题解】NC40链表相加(二)(链表 + 高精度加法)

https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b?tpId196&tqId37147&ru/exam/oj class Solution {public:// 逆序链表ListNode* reverse(ListNode* head) {// 创建一个新节点作为逆序后链表的头节点ListNode* newHead new ListNode(0);// 当前…

使用51单片机控制T0和T1分别间隔1秒2秒亮灭逻辑

#include <reg51.h>sbit LED1 P1^0; // 设置LED1灯的接口 sbit LED2 P1^1; // 设置LED2灯的接口unsigned int cnt1 0; // 设置LED1灯的定时器溢出次数 unsigned int cnt2 0; // 设置LED2灯的定时器溢出次数// 定时器T0 void Init_Timer0() {TMOD | 0x01;; // 定时器…

代码学习记录49---单调栈

随想录日记part49 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.04.20 主要内容&#xff1a;今天开始要学习单调栈的相关知识了&#xff0c;今天的内容主要涉及&#xff1a;柱状图中最大的矩形 84.柱状图中最大的矩形 Topic184.柱状图中最大的矩形 题目&…

Sharding-JDBC笔记1

Sharding-JDBC笔记1 1.分库分表1.1 垂直分库1.2 垂直分表1.3 水平分库1.4 水平分表 2.存在问题2.1 事务一致性2.2 跨节点关联查询2.3 跨节点分页、排序函数2.4 主键避重2.5 公共表 1.分库分表 分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题&#xff0c;将原来…

操作符不存在:sde.st_geometry ^ !sde.st_geometry建议 SQL函 数st_intersects在内联inlining期间

操作符不存在&#xff1a;sde.st_geometry ^ &#xff01;sde.st_geometry建议 SQL函 数st_intersects在内联inlining期间 问题&#xff1a;最近在使用SQL图形处理函数处理图形时&#xff0c;莫名奇妙报如下错误&#xff0c;甚是费解 于是开始四处"寻医问药" 1、nav…

Spark集群的搭建

1.1搭建Spark集群 Spark集群环境可分为单机版环境、单机伪分布式环境和完全分布式环境。本节任务是学习如何搭建不同模式的Spark集群&#xff0c;并查看Spark的服务监控。读者可从官网下载Spark安装包&#xff0c;本文使用的是spark-2.0.0-bin-hadoop2.7.gz。 1.1.1搭建单机版…

“开挂”的WAAP全站防护是云海驰骋的必备

何为攻击&#xff1f; 网络和应用是攻击的两大阵地 网络攻击像僵尸&#xff1a;简单、粗暴、让人猝不及防 显著特征&#xff1a;流量大&#xff0c;并发高 应用攻击像幽灵&#xff1a;复杂、神秘、让人摸不着头脑 显著特征&#xff1a;流量小、隐蔽强 攻击不像“馅饼”&…

OpenHarmony实战开发-组件复用实践。

若开发者的应用中存在以下场景&#xff0c;并成为UI线程的帧率瓶颈&#xff0c;应该考虑使用组件复用机制提升应用性能&#xff1a; 滑动场景下对同一类自定义组件的实例进行频繁的创建与销毁。反复切换条件渲染的控制分支&#xff0c;且控制分支中的组件子树结构比较复杂。 …

SpringBoot3 + Vue3 + Element-Plus + TS 实现动态二级菜单级联选择器

SpringBoot3 Vue3 Element-Plus TS 实现动态二级菜单选择器 1、效果展示1.1 点击效果1.2 选择效果1.3 返回值1.4 模拟后端返回数据 2、前端代码2.1 UnusedList.vue2.2 goodsType.ts2.3 http.ts 3、后端代码3.1 GoodsCategoryController.java3.2 GoodsCategoryService.java3.…

读后感-有效沟通

司内的学习已开展8期&#xff0c;内容主要以如何沟通为主&#xff0c;这里将根据个人的学习体会&#xff0c;对所学内容进行梳理与整合&#xff0c;以期更好地吸收和应用所学知识。 沟通是一门技术&#xff0c;其轨迹可循。自来熟的态度&#xff0c;一上来便滔滔不绝地发表言论…

ThingsBoard系统层配置邮件发送

1、前沿 2、案例 1、管理员的身份进行登录 2、选择账户&#xff0c;并将邮箱更改为自己的邮箱&#xff0c;并保存配置 3、退出账号&#xff0c;使用邮箱进行登录&#xff0c;密码还是跟之前一样 4、登录后选择设置-发送邮件 5、登录邮箱申请邮箱的密钥 ​7、 按照图片填…

Mysql The last packet sent successfully to the server was 0 milliseconds ago.

项目启动后&#xff0c;报错&#xff0c;但是我的navicat 数据库连接工具是连接上的&#xff0c;没有问题的&#xff0c;但是程序就是连接不上。端口放开了&#xff0c;防火墙也放开了 先说问题&#xff1a;是网络问题&#xff0c; 如何解决&#xff1a;因为我的机子上又跑了…

计算机网络——数据链路层(介质访问控制)

计算机网络——数据链路层&#xff08;介质访问控制&#xff09; 介质访问控制静态划分信道动态划分信道ALOHA协议纯ALOHA&#xff08;Pure ALOHA&#xff09;原理特点 分槽ALOHA&#xff08;Slotted ALOHA&#xff09;原理特点 CSMA协议工作流程特点 CSMA-CD 协议工作原理主要…