基于 InternLM 和 LangChain 搭建你的知识库

基于 InternLM 和 LangChain 搭建你的知识库

  • 大模型开发范式
    • LLM的局限性:
    • RAG 检索增强生成
  • LangChain简介
  • 构建向量数据库
  • 搭建知识库助手
  • Web Demo部署
    • 环境配置
    • 下载 NLTK 相关资源
    • 下载本项目代码

大模型开发范式

LLM的局限性:

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

两种开发范式:
在这里插入图片描述

RAG 检索增强生成

在这里插入图片描述

LangChain简介

LangChain框架是一个开源工具,通过为各种LLM提供通用接口来简化应用程序的开发流程,帮助开发者自由构建LLM应用。
LangChain的核心组成模块:

  • 链:将组件组合实现端到端应用,通过一个对象封装实现一系列LLM操作
  • Eg.检索问答链:覆盖实现了GAR(增强检索生成)的全部流程
    在这里插入图片描述

构建向量数据库

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

搭建知识库助手

将InternLM接入LangChain
在这里插入图片描述
基于RAG的问答系统性能核心受限于:

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

Web Demo部署

有很多支持简易web部署的框架,如Gradio、Streamlit等

环境配置

在环境中安装运行 demo 所需要的依赖

# 升级pip
python -m pip install --upgrade pip

pip install modelscope==1.9.5
pip install transformers==4.35.2
pip install streamlit==1.24.0
pip install sentencepiece==0.1.99
pip install accelerate==0.24.1

在 /root 路径下新建目录 data,在目录下新建 download.py 文件并在其中输入以下内容,粘贴代码后记得保存文件,如下图所示。并运行 python /root/data/download.py 执行下载,模型大小为 14 GB,下载模型大概需要 10~20 分钟.
在这里插入图片描述

下载 NLTK 相关资源

我们在使用开源词向量模型构建开源词向量的时候,需要用到第三方库 nltk 的一些资源。正常情况下,其会自动从互联网上下载,但可能由于网络原因会导致下载中断,此处我们可以从国内仓库镜像地址下载相关资源,保存到服务器上。

cd /root
git clone https://gitee.com/yzy0612/nltk_data.git  --branch gh-pages
cd nltk_data
mv packages/*  ./
cd tokenizers
unzip punkt.zip
cd ../taggers
unzip averaged_perceptron_tagger.zip

下载本项目代码

cd /root/data
git clone https://github.com/InternLM/tutorial

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

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

相关文章

实用Unity3D Log打印工具XDebug

特点 显示时间,精确到毫秒显示当前帧数(在主线程中的打印才有意义,非主线程显示为-1)有三种条件编译符(如下图) 注:要能显示线程中的当前帧数,要在app启动时,初始化mainThreadID字段条件编译符…

8.1、5G网络切片认识篇

首先,3G上网时代来临,流量高速增长,但是网络资源有限,不可能保证所有业务都能全速进行,总得捡重要的首先保障,因此就对业务进行分类,给予不同优先级的业务不同的资源,不同的服务质量…

基于filter的内存马

主要是通过过滤器来拦截severlet请求中的参数,作为过滤器中的参数,来调用自定义过滤器中的恶意函数 在这里我们分析一下filter的实现原理,循序渐进 Demo1: 直接使用filter模拟内存马效果: 1.配置一个简单的severlet的…

[uniapp] uni-ui+vue3.2小程序评论列表组件 回复评论 点赞和删除

先看效果 下载地址 uni-app官方插件市场: cc-comment组件 环境 基于vue3.2和uni-ui开发; 依赖版本参考如下: "dependencies": {"dcloudio/uni-mp-weixin": "3.0.0-3090820231124001","dcloudio/uni-ui": "^1.4.28","…

flask+mysql徐州市天气信息可视化分析系统-计算机毕业设计源码04600

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对天气信息等问题,对天气信息进行…

深度学习在交通标志识别中的应用

深度学习在交通标志识别中的应用 深度学习在交通标志识别中的应用1. 交通标志识别的背景2. CNN在交通标志识别中的应用3. 数据集准备4. 模型训练与优化5. 模型评估与部署结语 深度学习在交通标志识别中的应用 交通标志是道路上的重要元素,它们提供了关键的信息&…

网络的设置

一、网络设置 1.1查看linux基础的网络设置 网关 route -n ip地址ifconfigDNS服务器cat /etc/resolv.conf主机名hostname路由 route -n 网络连接状态ss 或者 netstat域名解析nslookup host 例题:除了ping,什么命令可以测试DNS服务器来解…

机器学习系列--R语言随机森林进行生存分析(2)

随机森林(Breiman 2001a)(RF)是一种非参数统计方法,需要没有关于响应的协变关系的分布假设。RF是一种强大的、非线性的技术,通过拟合一组树来稳定预测精度模型估计。随机生存森林(RSF&#xff0…

【算法分析与设计】移动零

题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0…

【Github-Action】统计整个社区所有项目的贡献

thinkasany/organize-contributors 介绍🚀谁在用我效果🍔 使用指南示例仓库mdpagesyml配置yml demo 介绍 项目地址 如果你对github-action感兴趣,还可以看这篇文章, 这篇文章教会你如何开发Github Action,并且让你明…

2024年跨境电商上半年有哪些营销节日?

2024年伊始,跨境电商开启新一轮的营销竞技,那么首先需要客户需求,节假日与用户需求息息相关,那么接下来小编为大家整理2024上半年海外都有哪些节日和假期?跨境卖家如何见针对营销日历选品,助力卖家把握2024…

JavaScript中解锁Map和Set的力量

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 ES6带来了Map和Set两个新的数据结构 - 它们分别用于存放键值对和唯一值。Map和Set提供了更…

调试器加载错误,从任务栏打开可能会导致该问题 2024/1/8

🧧喜欢将常用软件固定在任务栏的用户肯定很苦恼这个问题 🧧问题复现 🧧这里先查找一下原因 🧧查看一下固定在任务栏的微信小程序开发工具的属性 如果不会打开任务栏图标属性界面的小伙伴请先翻到文章最后 🧧再使用同样…

数据结构与算法教程,数据结构C语言版教程!(第三部分、栈(Stack)和队列(Queue)详解)二

第三部分、栈(Stack)和队列(Queue)详解 栈和队列,严格意义上来说,也属于线性表,因为它们也都用于存储逻辑关系为 "一对一" 的数据,但由于它们比较特殊,因此将其单独作为一章,做重点讲解。 使用栈…

【JVM 基础】 Java 类加载机制

JVM 基础 - Java 类加载机制 类的生命周期类的加载: 查找并加载类的二进制数据连接验证: 确保被加载的类的正确性准备: 为类的静态变量分配内存,并将其初始化为默认值解析: 把类中的符号引用转换为直接引用 初始化使用卸载 类加载器, JVM类加载机制类加载…

「 CodeQL从入门到精通系列 」03.CodeQL常用术语介绍

相比其他代码检测工具,CodeQL中定义了很多专用术语,为了更快上手后续章节,本文对接下来要用到的术语做了统一汇总与解读。 1. 查询语言(QL) QL是一种声明性、面向对象的查询语言,经过优化,可实现对分层数据结构&#…

kafka入门(六):日志分段(LogSegment)

日志分段(LogSegment) Kafka的一个 主题可以分为多个分区。 一个分区可以有一至多个副本,每个副本对应一个日志文件。 每个日志文件对应一个至多个日志分段(LogSegment)。 每个日志分段还可以细分为索引文件、日志存储…

mybatis plus相同Id与xml配置错误时,mybatis plus解决逻辑

前言 处理做项目的问题,其中不乏奇奇怪怪的问题,其中mybatis plus的问题感觉有点隐蔽,有些是运行时出现,有些是运行到具体的逻辑触发,对于应用的状态监控提出了极大的挑战,应用的状态由健康检查接口提供&a…

facebook广告的基础知识与类型

Facebook广告是在Facebook平台上展示的一种数字广告形式,它允许广告主通过定位特定的受众群体来推广他们的产品、服务或品牌。以下是一些关于Facebook广告的基础知识: 支持Facebook广告的卡、556150、532959,点击获取 广告形式: …

【Proteus仿真】【Arduino单片机】智能感应温控风扇

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602液晶显示模块、DS18B20温度、按键、声光报警、L293D电机驱动等。 主要功能: 系统运行后,LCD1602显示传感器检…