基于书生·浦语大模型应用开发范式介绍

文章目录

  • 大模型应用开发范式
  • LangChain简介
  • 构建向量数据库
  • 搭建知识库助手
  • RAG方案优化建议

大模型应用开发范式

通用大模型的优势

  • 强大的语言理解、指令跟随、语言生成的能力
  • 可以理解用户自然语言的指令
  • 具有强大的知识储备和一定的逻辑推理能力。

通用大模型局限性

  • 知识时效性受限:如何让LLM能够获取最新的知识
  • 专业能力有限:如何打造垂域大模型
  • 定制化成本高:如何打造个人专属的LLM应用

两种核心开发范式

  • 检索增强生成(RAG):核心思想是给大模型外挂一个知识库,对用户的提问,先从知识库中匹配对应回答的相关文档,将文档和提问一起输入大模型来生成答案,从而提高大模型的知识储备
  • 延承传统自然语言处理的微调(Finetune):核心思想是在一个新的较小的数据集上进行轻量级的训练微调,从而提升模型在这个新的数据集上的能力

这两种开发范式都能够突破通用大模型自身的局限,但也存在不同的优劣势

RAGFinetune
低成本可个性化微调
可实时更新知识覆盖面广
受基座模型影响大成本高昂
单次回答知识有限无法实时更新
无需重新训练,大跨度需要总结性的文本表现不佳需要重新训练,回答的风格模拟效果好

RAG范式原理
向量输入模型Sentence Transformer将用户输入文本转化为向量,并在向量数据库中匹配相似的文本段(认为相似的文本段包含用户需要的答案),然后将用户的输入和检索到的相似文本段一起嵌入到模型的Prompt,传递给InternLM对问题做出最终的回答,最后输出答案。
RAG范式原理图

LangChain简介

  • LangChain是针对大模型开发的第三方开源库,为各种大模型(LLM)提供通用接口,来简化应用程序的开发流程,帮助开发者自由构建LLM应用
  • LangChain封装了很多组件,通过这些组件的组合,可以构建多种类型RAG的应用,开发者可以直接将私域数据嵌入到LangChain中的组件,通过对这些组件的组合来构建适用于自己应用场景的RAG应用
  • LangChain的核心组件是链(Chains),一个链将多个组件组合在一起的端到端应用,通过一个链可以封装一系列的大模型操作

基于LangChain搭建RAG应用:以本地文档形式存在的个人知识库使用Unstrucked Loader组件来加载本地文档,将本地不同格式的文档转化为统一的纯文本格式,使用Text Splitter组件对提取出来的纯文本分割成Chunks,再通过开源词向量模型Sentence Transformer将文本段转化为向量格式,存储到基于Chroma的向量数据库中。接下来将用户的每一个输入,通过Sentence Transformer转化为同样维度的向量,通过在向量数据库中进行相似度匹配,找到和用户输入相关的文本段,将相关的文本段嵌入到写好的Prompt Template中,再通过InternLM进行最后的回答
基于LangChain搭建RAG应用

构建向量数据库

  • 加载源文件
    确定源文件类型,针对不同类型源文件选用不同的加载器,核心是将带格式文本转化为无格式字符串
  • 文档分块
    由于单个文件往往超过模型上下文上限,需要对加载的文档进行分切
    • 一般按字符串长度进行分割
    • 可以手动控制分割的长度和重叠区间长度
  • 文档向量化
    使用向量数据库来支持语义检索,需要将文档向量化存入向量数据库
    • 可以使用任一一种Embedding模型来进行向量化
    • 可以使用多种支持语义检索的向量数据库,一般使用轻量级的Chroma

搭建知识库助手

将InternLM接入LangChain

  • LangChain支持自定义LLM,可以直接接入到框架中
  • 只需要将InternLM不是在本地,并封装一个自定义LLM类,调用本地InternLM即可

构建检索问答链

  • LangChain提供了检索问答链模板,可以自动实现知识检索、Prompt嵌入、LLM问答的全部流程
  • 将基于InterLM的自定义LLM和已构建的向量数据库接入到检索问答链的上游
  • 调用检索问答链,即可实现知识库助手的核心功能

RAG方案优化建议

基于RAG的问答系统性能核心受限于:

  • 检索精度
  • Prompt性能

优化点

  • 检索方面
    • 基于语义进行分割,保证每一个chunk的语义完整
    • 给每一个chunk生成概括性索引,检索时匹配索引
  • Prompt方面
    • 迭代优化Prompt策略

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

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

相关文章

MongoDB快速实战与基本原理

MongoDB 介绍 什么是 MongoDB MongoDB 是一个文档数据库(以 JSON 为数据模型),由 C 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。文档来自于“JSON Document”,并非我们一般理解的 PDF、WORD 文档…

构建安全可靠的系统:第二十一章到附录 A

第二十一章:建立安全和可靠性文化 原文:21. Building a Culture of Security and Reliability 译者:飞龙 协议:CC BY-NC-SA 4.0 作者:Heather Adkins 与 Peter Valchev,Felix Grbert,Ana Oprea…

计算机体系结构----重排序缓冲(ROB)

ROB的思想:不按顺序完成指令,但在使结果对体系结构状态可见之前重新排序 当指令被解码时,它会在 ROB 中保留下一个顺序条目当指令完成时,它将结果写入 ROB 条目当指令在 ROB 中最早并且无一例外地完成时,其结果移动到…

Java-布隆过滤器的实现

文章目录 前言一、概述二、误差率三、hash 函数的选择四、手写布隆过滤器五、guava 中的布隆过滤器 前言 如果想要判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路&…

LeetCode 145. 二叉树的后序遍历

145. 二叉树的后序遍历 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1]示例 2: 输入:root [] 输出:[]示例 3: 输入&…

Vue3:vue-cli项目创建及vue.config.js配置

一、node.js检测或安装: node -v node.js官方 二、vue-cli安装: npm install -g vue/cli # OR yarn global add vue/cli/*如果安装的时候报错,可以尝试一下方法 删除C:\Users**\AppData\Roaming下的npm和npm-cache文件夹 删除项目下的node…

C语言基础语法跟练 day2

题源&#xff1a;牛客网 16、BoBo写了一个十六进制整数ABCDEF&#xff0c;他问KiKi对应的十进制整数是多少。 #include <stdio.h>int main() { //创建变量char arr[] "ABCDEF";int i;int sum0,c; //依次转换十六进制为十进制for(i0; arr[i]!\0; i){char b …

每日学习更新(LQR+iLQR)

一直想更新一下根据cost to go来推导LQR&#xff0c;之前的话可能会直接套问题&#xff0c;但是对于理论有些困惑&#xff0c;正好最近在学习ilqr轨迹生成/优化&#xff0c;因此来推一下公式&#xff0c;以下参考B站Dr_CAN&#xff0c;链接如下&#xff1a; 【最优控制】5_线性…

记录汇川:H5U与Fctory IO测试6

主程序&#xff1a; 子程序: IO映射 子程序&#xff1a; 辅助上料 子程序&#xff1a; 自动程序 Fctory IO配置&#xff1a; 实际动作如下&#xff1a; Fctory IO测试6

软件测试工具Robot Framework如何安装

安装文件准备 表1 安装文件准备 Robot框架结构 为了更好的了解环境安装&#xff0c;我们先看下框架结构&#xff1a; 图1 Robot Framework Architecture Robot Framework 通过导入不同的库&#xff0c;就可以使用库中所提供的关键字&#xff0c;从而时行相关的测试。有几个标…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷②

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷2 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷2 模块一 …

大众汽车宣布将ChatGPT,批量集成在多种汽车中!

1月9日&#xff0c;大众汽车在官网宣布&#xff0c;将ChatGPT批量集成到电动、内燃机汽车中。 大众表示&#xff0c;将ChatGPT与其IDA语音助手相结合&#xff0c;用户通过自然语言就能与ChatGPT进行互动&#xff0c;例如&#xff0c;帮我看看最近的三星米其林饭店在哪里&#…

Redis系列-15.Redis的IO多路复用原理解析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

Java顺序表(1)

&#x1f435;本篇文章将对顺序表中的方法进行模拟实现 一、线性表 线性表是指在逻辑结构上呈连续的线性结构&#xff0c;而在物理结构上不一定是连续的结构&#xff0c;常见的线性表有&#xff1a;顺序表、链表、栈、队列等 二、顺序表 顺序表一般采用数组来存储数据&#x…

ELF文件格式解析二

使用objdump命令查看elf文件 objdump -x 查看elf文件所有头部的信息 所有的elf文件。 程序头部&#xff08;Program Header&#xff09;中&#xff0c;都以 PT_PHDR和PT_INTERP先开始。这两个段必须在所有可加载段项目的前面。 从上图中的INTERP段中&#xff0c;可以看到改段…

Android App打包加固后的APK无法安装问题

最近开发的一个应用要上架&#xff0c;正常流程打完包后去加固&#xff0c;由于以前一直用的是360的加固助手&#xff0c;这里开始也是选择用它。 使用360加固&#xff1a; 问题一、开始出现的问题是说应用未签名无法加固&#xff0c;我明明是签名后打的包&#xff0c;怎么会…

十分钟部署清华 ChatGLM-6B,实测效果超预期(Linux版)

前段时间&#xff0c;清华公布了中英双语对话模型 ChatGLM-6B&#xff0c;具有60亿的参数&#xff0c;初具问答和对话功能。 最&#xff01;最&#xff01;最重要的是它能够支持私有化部署&#xff0c;大部分实验室的服务器基本上都能跑起来。因为条件特殊&#xff0c;实验室网…

介绍几种常见的质数筛选法

质数筛选法 1.暴力筛选法 :smirk:2.普通优化 :rofl:3.埃氏筛法:cold_sweat:4.线性筛选法:scream: 质数&#xff1a;除了1和他本身没有其它因数的正整数就是质数。1不是质数&#xff0c;2是质数。 1.暴力筛选法 &#x1f60f; 原理 求x的质数&#xff0c;令y从2到 x \sqrt[]{x…

资源素材网站源码,功能齐备,界面干净整洁,附带安装教程

搭建教程 简单安装说明&#xff1a; 1、整站程序上传后台 2、然后导入数据库文件到数据库&#xff0c; 3、修改conf里面的conf的数据库名字及密码 4、配置伪静态 规则&#xff1a; location ~* \.(htm)$ { rewrite "^(.*)/(.?).htm(.*?)$" $1/index.php?$2…

Docker安装Jenkins,配置Maven和Java

前言 这是一个java的springboot项目&#xff0c;使用maven构建 安装准备 需要将maven和jdk安装在服务器上&#xff0c;Jenkins需要用到&#xff0c;还有创建一个jenkins的目录&#xff0c;安装命令如下&#xff1a; docker run -d -uroot -p 9095:8080 -p 50000:50000 --n…
最新文章