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

news2025/1/9 23:28:38

文章目录

  • 大模型应用开发范式
  • 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.coloradmin.cn/o/1373686.html

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

相关文章

springboot私人健身与教练预约管理系统源码和论文

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&#xf…

中国智造闪耀CES | 木牛科技在美国CES展亮相多领域毫米波雷达尖端方案

素有全球科技潮流“风向标”之称的2024国际消费类电子产品展(CES),于1月9-12日在美国拉斯维加斯会议中心举办。CES是全球最大的消费电子和消费技术展览会之一,汇集了世界各地优秀的消费电子和科技公司,带着最好的产品来…

vue3中ref和reactive联系与区别以及如何选择

vue3中ref和reactive区别与联系 区别 1、ref既可定义基本数据类型,也可以定义引用数据类型,reactive只能定义应用数据类型 2、ref在js中取响应值需要使用 .value,而reactive则直接取用既可 3、ref定义的对象通过.value重新分配新对象时依旧…

Windows下上帝模式的实现

在windows系统上有个特殊模式,那就是上帝模式,几乎包含了windows中所有的快捷方式,有很多小伙伴还不知道,让我们一起来实现这一操作吧! 一、首先新建一个文件夹 二、接着将文件夹重命名,命名为以下代码&am…

【OpenCV学习笔记07】- 【彩蛋】实现轨迹条控制画笔颜色和笔刷半径,并可以正常绘画

彩蛋 实现轨迹条控制画笔颜色和笔刷半径,并可以正常绘画。 直接上彩蛋代码 示例代码: # 彩蛋,创建一个可以调节颜色和笔刷半径的轨迹栏,并且可以通过鼠标进行绘画 import numpy as np import cv2 as cv# 定义全局变量 # 如果 …

Linux 文件(夹)权限查看

命令 : ls -al ls -al 是一个用于列出指定目录下所有文件和子目录的命令,包括隐藏文件和详细信息。其中,-a 选项表示显示所有文件,包括以 . 开头的隐藏文件,-l 选项表示以列表的形式显示文件的详细信息。 本例中:drwxrwxr-x 为权限细节。 权限细节(Permission detail…

高通rb5的fastboot设备识别不了及驱动安装问题

Android fastboot驱动无法安装和识别问题-CSDN博客 以上为转载出处。

软件启动,系统提示缺少d3dx9 26.dll怎么办?d3dx9 26.dll丢失修复方法

d3dx9_26.dll文件是微软公司开发的DirectX API的一部分。DirectX是一种使Windows操作系统能够高效执行多媒体和游戏程序的技术。更具体地说,d3dx9_26.dll是DirectX 9的一部分,它主要用于处理游戏中的复杂3D图形和丰富的声音效果。 d3dx9_26.dll文件的主要…

IPv6路由协议---IPv6动态路由(OSPFv3-7)

OSPFv3和OSPFv2协议比较 1.不同点 (1)OSPFv3基于链路运行,不是基于IP子网运行。 OSPFv3运行在IPv6协议上,IPv6是基于链路而不是基于网段运行。这样,在配置OSPFv3时,不需要考虑是否配置在同一网段,只要在同一链路,就可以不配置IPv6全局地址而直接建立联系。 (2)OS…

【模块系列】STM32TCS3472

前言 手上正好有TCS3472模块,也正好想在加深一下自己对I2C协议的理解和应用,所以就写了这个代码库出来。参考的资料主要来源于TCS3472的数据手册,和arduino中MH_TCS3472库的宏定义,和函数名称,我就没有重新命名&#x…

Spark---RDD依赖关系

文章目录 1.1 RDD依赖关系1.2 血缘关系1.3 依赖关系分类1.3.1 窄依赖1.3.2 宽依赖 1.4 RDD阶段划分和任务划分1.4.1 RDD阶段划分 1.1 RDD依赖关系 在Spark中,一个RDD的形成依赖于另一个RDD,则称这两个RDD具有依赖关系(一般指相邻的两个RDD之间的关系) ,R…

数据结构排序——详解快排及其优化和冒泡排序(c语言实现、附有图片与动图示意)

上次讲了选择排序和堆排序:数据结构排序——选择排序与堆排序 今天就来快排和冒泡 文章目录 1.快排1.1基本介绍1.2不同的分区方法及代码实现1.2.1Hoare版1.2.2挖坑版1.2.3 前后指针版 1.3快排的优化1.3.1三数取中选key1.3.2递归到小的子区间时,可以考虑…

python查看安装包所依赖的包版本

python查看安装包所依赖的包版本 1. 找到包的位置 site-packages 文件夹的位置import gevent # ctrl 点进去就行了2. 返回包环境文件夹的上一层,会看到下面有一个 gevent-{版本号}.dist-info的文件夹3. 查看 METADATA 文件Requires-Dist: greenlet >2.0.0 ...#…

Vue-13、Vue深度监视

1、监视多级结构中某个属性的变化 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>watch深度监视</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm…

鸿蒙APP适配的设备类型

鸿蒙OS&#xff08;HarmonyOS&#xff09;是一款面向多设备的分布式操作系统&#xff0c;因此鸿蒙APP可以适配多种设备类型。以下是一些鸿蒙APP可能需要适配的设备类型&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c…

通过WebSocket实现异步导出

前言 本篇文章记录大批量数据导出时间过长,导致接口请求超时问题。 解决思路与流程 前端点击导出按钮时开启websocket连接逻辑处理异步执行文件处理好后&#xff0c;得到文件的绝对路径后台socket通知前端绝对路径的地址前端下载文件到浏览器 文章目录 本地环境 一、WebSock…

树形table 10w+数据每次点击要十几秒 懒加载解决点击卡顿

el-table 树形table 10w数据每次点击要十几秒 懒加载解决点击卡顿 //vue 表头要增加lazy :load"load" <el-tablelazystripeborderref"table"row-key"id":load"load":data"tableData":tree-props"{ children: child…

MySQL之数据的导入、导出远程备份

目录 一. navicat的导入、导出 1.1 导入 1.2 导出 二. mysqldump命令导入、导出 2.1 导出 2.2 导入 三. LOAD DATA INFILE 命令导入、导出 3.1 设置 3.2 导出 3.3 导入 3.4 查看secure_file_priv设置 四. 远程备份 4.1 导出 4.2 导入 五. 思维导图 一. navicat的导入、导…

ChatGPT4 助力 Python 数据分析与可视化、人工智能建模及论文高效撰写

2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5&#xff0c;将人工智能的发展推向了一个新的高度。2023年4月&#xff0c;更强版本的ChatGPT4.0上线&#xff0c;文本、语音、图像等多模态交互方式使其在…

如何用GPT写代码?

详情点击链接&#xff1a;如何用GPT写代码&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2二定制自己的GPTs…