【LLM】Langchain使用[三](基于文档的问答)

news/2024/11/19 0:39:52/

文章目录

  • 一、基于文档的问答
    • 1. 创建向量存储
    • 2. 不同类型的chain链
  • 二、本地知识库问答
  • Reference

一、基于文档的问答

1. 创建向量存储

  • 使用Dock Array内存搜索向量存储,作为一个内存向量存储,不需要连接外部数据库
  • 创建向量存储:导入一个索引,即向量存储索引创建器
from langchain.chains import RetrievalQA #检索QA链,在文档上进行检索
from langchain.chat_models import ChatOpenAI #openai模型
from langchain.document_loaders import CSVLoader #文档加载器,采用csv格式存储
from langchain.vectorstores import DocArrayInMemorySearch #向量存储
from IPython.display import display, Markdown #在jupyter显示信息的工具file = 'OutdoorClothingCatalog_1000.csv'
loader = CSVLoader(file_path=file)
#查看数据
import pandas as pd
data = pd.read_csv(file,header=None)

数据是字段为namedescription的文本数据:
在这里插入图片描述

# 创建向量存储
from langchain.indexes import VectorstoreIndexCreator #导入向量存储索引创建器
'''
将指定向量存储类,创建完成后,我们将从加载器中调用,通过文档记载器列表加载
'''
index = VectorstoreIndexCreator(vectorstore_cls=DocArrayInMemorySearch
).from_loaders([loader])
query ="Please list all your shirts with sun protection \
in a table in markdown and summarize each one."
response = index.query(query)#使用索引查询创建一个响应,并传入这个查询
display(Markdown(response))#查看查询返回的内容

在这里插入图片描述
得到了一个Markdown表格,其中包含所有带有防晒衣的衬衫的名称和描述,描述是总结过的。

'''
为刚才的文本创建embedding,准备将它们存储在向量存储中,使用向量存储上的from documents方法来实现。
该方法接受文档列表、嵌入对象,然后我们将创建一个总体向量存储
'''
db = DocArrayInMemorySearch.from_documents(docs, embeddings
)
query = "Please suggest a shirt with sunblocking"
docs = db.similarity_search(query)#使用这个向量存储来查找与传入查询类似的文本,如果我们在向量存储中使用相似性搜索方法并传入一个查询,我们将得到一个文档列表
len(docs)# 我们可以看到它返回了四个文档# 回答文档的相关问题
retriever = db.as_retriever() #创建检索器通用接口
llm = ChatOpenAI(temperature = 0.0,max_tokens=1024) #导入语言模型
qdocs = "".join([docs[i].page_content for i in range(len(docs))])  # 将合并文档中的所有页面内容到一个变量中
response = llm.call_as_llm(f"{qdocs} Question: Please list all your \
shirts with sun protection in a table in markdown and summarize each one.") #列出所有具有防晒功能的衬衫并在Markdown表格中总结每个衬衫的语言模型''' 
通过LangChain链封装起来
创建一个检索QA链,对检索到的文档进行问题回答,要创建这样的链,我们将传入几个不同的东西
1、语言模型,在最后进行文本生成
2、传入链类型,这里使用stuff,将所有文档塞入上下文并对语言模型进行一次调用
3、传入一个检索器
'''
qa_stuff = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever, verbose=True
)
query =  "Please list all your shirts with sun protection in a table \
in markdown and summarize each one."#创建一个查询并在此查询上运行链
response = qa_stuff.run(query)
display(Markdown(response))#使用 display 和 markdown 显示它

2. 不同类型的chain链

想在许多不同类型的块上执行相同类型的问答,该怎么办?上面的实验只返回了4个文档,如果有多个文档,我们可以使用几种不同的方法

  • Map Reduce
    将所有块与问题一起传递给语言模型,获取回复,使用另一个语言模型调用将所有单独的回复总结成最终答案,它可以在任意数量的文档上运行。可以并行处理单个问题,同时也需要更多的调用。它将所有文档视为独立的
  • Refine
    用于循环许多文档,实际上是迭代的,建立在先前文档的答案之上,非常适合前后因果信息并随时间逐步构建答案,依赖于先前调用的结果。它通常需要更长的时间,并且基本上需要与Map Reduce一样多的调用
  • Map Re-rank
    对每个文档进行单个语言模型调用,要求它返回一个分数,选择最高分,这依赖于语言模型知道分数应该是什么,需要告诉它,如果它与文档相关,则应该是高分,并在那里精细调整说明,可以批量处理它们相对较快,但是更加昂贵
  • Stuff
    将所有内容组合成一个文档

二、本地知识库问答

在这里插入图片描述

  • 改进的点(方向):
    • 改LLM模型
    • embedding模型
    • 文本分割方式
    • 多卡加速模型部署
    • 提升top-k检索召回的质量
  • 基于数据隐私和私有化部署,可以方便的使用Langchain+大模型进行推理

Reference

[1] MedicalGPT: Training Medical GPT Model


http://www.ppmy.cn/news/894753.html

相关文章

MySQL8.0 msi 版本安装教程

MySQL8.0 msi 版本安装教程 MySQL8.0 msi 版本安装教程 1> 官网下载安装包 MySQL官网下载地址如下:https://dev.mysql.com/downloads/mysql/ 说明: 如果需要8.0版本下的其他小版本,可以参考下图: 如需5.7及其之前版本&#…

mysql-installer-community.msi新手安装教程(详细图文)

安装 先去官网下载需要的msi,在这放出官网下载地址 这里我具体以5.7.25.msi为安装例子,除了最新版安装界面有些变动以往的都是差不多的。 过去的版本在这里 打开5.7的下载页面,点击图片进入到5.7版本的msi下载页面 第一个是在线安装,安装时需要连接网络 第二个离线,我们…

MongoDB数据库和可视化工具Studio 3T的安装及问题调试

目录 1.MongoDB的安装及测试 2.可视化工具Studio 3T的安装及测试 1.MongoDB的安装及测试 1.官网下载数据库(.msi格式文件,并非.zip文件) https://www.mongodb.com/ 2.按照提示一步步安装,注意:不要勾选“Install MongoDB Compass”,否…

【Unity面试篇】Unity 面试题总结甄选 |Unity进阶篇 | ❤️持续更新❤️

前言 关于Unity面试题相关的所有知识点:🐱‍🏍2023年Unity面试题大全,共十万字面试题总结【收藏一篇足够面试,持续更新】为了方便大家可以重点复习某个模块,所以将各方面的知识点进行了拆分并更新整理了新…

Java设计模式之结构型-享元模式(UML类图+案例分析)

目录 一、基本概念 二、UML类图 三、角色设计 四、案例分析 1、基本实现 2、游戏角色 五、总结 一、基本概念 享元模式是一种结构型设计模式,主要用于减少创建大量相似对象所占用的内存,它通过共享技术来有效支持大量细粒度的对象。 二、UML类图…

java sfc模拟器_Higan(sfc超精准模拟器)

Higan模拟器是一款极其小众且使用麻烦的游戏平台模拟器,虽然使用起来麻烦,但是其全面性和精准性最让用户津津乐道,有些比较老一点的游戏通过它都能完美运行,就比如雅达利系列的卡带游戏,用其他模拟器都可能会出现乱码的…

kiriki模拟器Android9,Kirikiroid2模拟器

Kirikiroid2模拟器1.3.9版是GitHub上推出的最新版本,Kirikiroid2模拟器作为一款强大的安卓手机模拟器,全新的智能游戏引擎,支持图形渲染、内存限制、广告去除等功能,非常适合安卓搞机人士使用! Kirikiroid2模拟器1.3.4…