第一章: LangChain 生成与加载知识库并根据匹配内容回答问题

news2024/10/2 1:36:01

LangChain——让文本大模型更加智能化系列文章目录

第一章 langchain生成与加载向量库并根据匹配内容回答问题


文章目录

  • LangChain——让文本大模型更加智能化系列文章目录
  • 前言
  • 文章简介
  • 一、使用步骤
    • 1.引入库
    • 2.LLM加载
    • 3.数据加载
    • 4.数据切分与转换向量
    • 5.构建prompt
    • 5.查询知识库并将结果传入LLM中
  • 总结
    • 如需获取完整代码,请添加公众号,发送“langchain”


前言

LangChain 是一个用于开发由语言模型驱动的应用程序的框架。我们相信,最强大和不同的应用程序不仅将通过 API 调用语言模型,还将:

  • 数据感知:将语言模型与其他数据源连接在一起。
  • 主动性:允许语言模型与其环境进行交互。

因此,LangChain 框架的设计目标是为了实现这些类型的应用程序。

LangChain 框架提供了两个主要的价值主张:

  • 组件:LangChain 为处理语言模型所需的组件提供模块化的抽象。LangChain
    还为所有这些抽象提供了实现的集合。这些组件旨在易于使用,无论您是否使用 LangChain 框架的其余部分。
  • 用例特定链:链可以被看作是以特定方式组装这些组件,以便最好地完成特定用例。这旨在成为一个更高级别的接口,使人们可以轻松地开始特定的用例。这些链也旨在可定制化。

LangChain 提供了对几个主要模块的支持。这些模块按照逐渐增加的复杂性排列如下:

  • 模型(models) : LangChain 支持的各种模型类型和模型集成。
  • 提示(prompts) : 包括提示管理、提示优化和提示序列化。
  • 内存(memory) :内存是在链/代理调用之间保持状态的概念。LangChain提供了一个标准的内存接口、一组内存实现及使用内存的链/代理示例。
  • 索引(indexes) : 与您自己的文本数据结合使用时,语言模型往往更加强大——此模块涵盖了执行此操作的最佳实践。
  • 链(chains) : 链不仅仅是单个 LLM 调用,还包括一系列调用(无论是调用 LLM还是不同的实用工具)。LangChain提供了一种标准的链接口、许多与其他工具的集成。LangChain提供了用于常见应用程序的端到端的链调用。
  • 代理(agents) :代理涉及 LLM做出行动决策、执行该行动、查看一个观察结果,并重复该过程直到完成。LangChain提供了一个标准的代理接口,一系列可供选择的代理,以及端到端代理的示例。

文章简介

本文主要介绍了基于LangChain的文本内容切分、向量生成、存储、加载以及Prompt拼接与文本大模型输出连接的方法。LangChain是一种用于文本大模型的框架,通过对文本内容进行切分,生成向量,存储向量,加载向量等步骤,实现文本内容的处理和建模。在LangChain框架下,我们可以将文本内容切分为多个片段,并使用向量表示每个片段。这些向量可以存储在计算机内存中,也可以存储在磁盘上。我们可以将问题与匹配到的知识与Prompt进行拼接,并将其输入到文本大模型中进行处理和输出。通过这种方式,我们可以使用LangChain框架和ChatGLM2-6B文本大模型来处理和建模文本内容,从而实现对一些领域的专业知识进行准确的回答。

一、使用步骤

1.引入库

from chatglm_llm import *
from transformers import AutoTokenizer, AutoModel
from langchain.document_loaders import UnstructuredFileLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS

2.LLM加载

# ChatGLM2-6B 模型加载
tokenizer = AutoTokenizer.from_pretrained("/workspace/models/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("/workspace/models/chatglm2-6b", trust_remote_code=True).float()
chatglm = model.eval()

3.数据加载

# 非结构化数据路径
filepath = "demo.txt"
# 向量存储路径
vs_path = "knowledge_base/vector_store"
# 读取非结构化数据
loader = UnstructuredFileLoader(filepath)
docs = loader.load()

4.数据切分与转换向量

# 定义文本切分
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=200)
docs = text_splitter.split_documents(docs)
# 加载Embedding模型
embeddings = HuggingFaceEmbeddings(model_name="/workspace/models/text2vec-base-chinese")
# 使用langchain的FAISS构建向量库
vector_store = FAISS.from_documents(docs, embeddings)
# 存储为本地向量库
vector_store.save_local(vs_path)

5.构建prompt

prompt = f"""基于以下已知信息,请简洁并专业地回答用户的问题。
            如果无法从中得到答案,请说 "根据已知信息无法回答该问题""没有提供足够的相关信息"。不允许在答案中添加编造成分。另外,答案请使用中文。
            已知内容:
            {context}
            问题:
            {query}"""

5.查询知识库并将结果传入LLM中

query = " 什么是知识图谱?"
# 匹配query相似语句
docs = vector_store.similarity_search(query)
# 将相似语句循环写入context列表
context = [doc.page_content for doc in docs]
# 将prompt模板传入模型中,生成答案
answer = chatglm.chat(tokenizer, prompt1, history=[])
print(answer)

总结

工作随笔,希望可以帮助到大家!
如有不足之处,请多多指教!

如需获取完整代码,请添加公众号,发送“langchain”

在这里插入图片描述

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

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

相关文章

进程的优先级与LAMP项目部署实战

一、进程的优先级(扩展) 1、什么是进程的优先级 Linux是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。哪些进程先运行,哪些进程后运行,就由进程优先级来控制 思考:什么时候需要用到进程…

线性表操作的实现--顺序表

本文参考朱战力老师的数据结构与算法--使用C语言一书 文章目录 前言 一、线性表是什么? 二、具体实现 1.顺序表的定义 2.初始化ListInitiate(L) 3.求当前元素个数ListLength(L) 4.插入元素ListInsert(L&…

js 导出文字到txt文件

简介: js 导出文字到txt文件 效果展示: 代码示例: /*** 导出文字到txt文件* param filename* param text*/ function exportToTxt(filename, text) {if (filename undefined) {filename "example-";}if (text undefined) {tex…

【IDEA配置】IDEA配置

参考视频:【idea必知必会】优化设置 告别卡顿 1. 显示内存 右击底下空白区域,出现memory indicator内存指示器,点击勾选即可显示。有的是在Settings->Appearance->Window Options里,如图所示: 2. 内存设置 …

傻瓜式调用阿里云的接口进行三要素(姓名、手机号和身份证号)校验

傻瓜式调用阿里云的接口进行三要素(姓名、手机号和身份证号)校验 一、准备1、购买阿里云的三要素核验套餐包2、申请开通三要素一致性核验3、查看AccessKey 二、调用三要素核验接口1、查看接口文档2、查看阿里云的调用示例3、阿里云完整示例代码4、改造后…

高级深入--day39

(实战项目三)新浪网分类资讯爬虫 爬取新浪网导航页所有下所有大类、小类、小类里的子链接,以及子链接页面的新闻内容。 效果演示图: items.py import scrapy import sys reload(sys) sys.setdefaultencoding("utf-8")class SinaItem(scrapy.I…

STM32Cube高效开发教程<基础篇>(七)----基础定时器

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。    本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。 一、 概述 STM…

new Vue() 发生了什么?

目录 前言 用法 代码和效果图 效果图 理解 高质量的使用 前言 Vue.js是一个流行的JavaScript前端框架,用于构建单页面应用(SPA)和用户界面。当我们使用new Vue()来创建一个Vue实例时,Vue会执行一系列的初始化过程&#xff0…

Tomcat 和 HTTP 协议

目 录 HTTP 协议HTTP 是什么理解 HTTP 协议的工作过程抓包结果HTTP请求HTTP响应 HTTP 请求 (Request)认识 URL认识 "方法" (method)认识请求 "报头"(header)认识请求 "正文" (body) HTTP 响应认识 "状态码" (st…

NFS性能瓶颈分析

前言 atop – run it with -d option or press d to toggle the disk stats view. iostat – try it with the -xm 2 options for extended statistics, in megabytes, and in two-second intervals. iotop – top-like I/O monitor. Try it with the -oPa options to show the…

Redis数据类型——list类型数据的扩展操作

1.list阻塞式数据获取 2.list类型数据业务场景

基于蜻蜓算法的无人机航迹规划-附代码

基于蜻蜓算法的无人机航迹规划 文章目录 基于蜻蜓算法的无人机航迹规划1.蜻蜓搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用蜻蜓算法来优化无人机航迹规划。 1.蜻蜓搜索算法 …

华盛顿特区选举委员会:黑客可能已侵入整个选民名册

导语 近日,华盛顿特区选举委员会(DCBOE)传来了一条令人担忧的消息:黑客可能已经侵入了整个选民名册。这一事件引发了公众的广泛关注和担忧。本文将为大家详细介绍这一事件的经过以及可能带来的后果,并探讨选民数据的保…

KekeBlog项目实战后台模块(二)(已完结)

十一、后台模块-菜单列表 菜单指的是权限菜单,也就是一堆权限字符串 1. 查询菜单 1.1 接口分析 需要展示菜单列表,不需要分页。可以针对菜单名进行模糊查询。也可以针对菜单的状态进行查询。菜单要按照父菜单id和orderNum进行排序 请求方式 请求路径…

Python与Appium实现手机APP自动化测试的示例代码

本文主要介绍了Python与Appium实现手机APP自动化测试的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.什么是Appium appium是一个开源的测试自动化框架,可以与原生的、混合的和移…

借助文心大模型4.0轻松搞定中文语境,生成技术视频十分强悍,并能自主添加各种方言!

在10月17日的百度世界2023上,文心大模型4.0版本正式发布!百度直接放话:文心大模型4.0是目前最强大的文心大模型。会上百度董事长李彦宏为我们展示了文心大模型4.0在搜索、地图、商业智能、智能会议、智能视频、多轮对话方面的强悍。那文心大模…

【vue3+ts】@设置别名

新建的vue3ts项目,建路由的时候报错: 在vite.config.ts中新增如下代码: import { defineConfig } from vite import vue from vitejs/plugin-vue import path from "path" // https://vitejs.dev/config/ export default defineC…

1990-2021年上市公司债务融资成本数据(原始数据+stata处理代码+计算结果)

1990-2021年上市公司债务融资成本数据(原始数据处理代码计算结果) 1、时间:1990-2021年 2、来源:上市公司年报 3、指标:编码、年份、证券代码、短期借款、长期借款、应付债券、长期应付款、负债合计、行业代码、财务…

实现基于 Jenkins 的多服务器打包方案

实现基于 Jenkins 的多服务器打包方案 在实际项目中,我们经常会遇到需要将一个应用程序或服务部署到不同的服务器上的需求。而使用 Jenkins 可以很方便地自动化这个过程。 设置参数 首先,我们需要设置一些参数,以便在构建过程中指定要部署…

vue项目中隐藏右侧滑动栏,使用鼠标滚轮滑动

直接加一个样式,就什么也不用管了 ::-webkit-scrollbar {display: none; }