【LangChain】4 基于文档的问答

对于给定的文档, 比如从PDF、网页、公司主页中提取构建的内部文档集合,我们可以使用大语言模型来回答关于这些文档内容的问题,以帮助用户更有效地获取和使用他们所需要的信息。这种方式非常有效且灵活地适用于实际应用场景,因为它不仅仅利用大语言模型已有的训练集数据信息,它还能使用外部信息。

这个过程会涉及LongChain中的其他组件,比如:表征模型(Embedding Models)和向量储存(Vector Stores)

一、设置API Key

import os
from zhipuai import ZhipuAI
from dotenv import load_dotenv, find_dotenv# 读取本地/项目的环境变量。# find_dotenv()寻找并定位.env文件的路径
# load_dotenv()读取该.env文件,并将其中的环境变量加载到当前的运行环境中  
# 如果你设置的是全局的环境变量,这行代码则没有任何作用。
_ = load_dotenv(find_dotenv())# 获取环境变量 OPENAI_API_KEY
key = "f5cd91f2528fed334b9dfd75015791c3.GuLdvM9tXWrGQnAg"
client = ZhipuAI(api_key = key) 

二、 结合表征模型和向量存储

解决长文档问答的方法:利用向量表征(Embeddings)和向量存储(Vector Store)技术处理长文档,使语言模型能够回答涉及全部内容的问题。

文本表征将文本转换为语义向量,相似内容的向量在空间中也相近。这种特性便于在向量空间中进行文本相似性比较。

将文档分割为较小的文本块(chunks),获取每个块的文本表征并存入向量数据库。这种处理方式称为创建索引(index),目的是解决语言模型单次处理文本长度的限制。

为查询生成向量表征后,与向量数据库中的向量进行相似性比对,选出最相关的n个文本块。将这些文本块构建为提示输入语言模型,最终生成答案。

2.1 导入数据

from langchain.chains.retrieval_qa.base import RetrievalQA #检索QA链,在文档上进行检索
from langchain_community.chat_models.zhipuai import ChatZhipuAI #openai模型
from langchain.document_loaders import CSVLoader #文档加载器,采用csv格式存储
from langchain.vectorstores import DocArrayInMemorySearch #向量存储
from IPython.display import display, Markdown #在jupyter显示信息的工具
#创建一个文档加载器,通过csv格式加载
file = 'data/OutdoorClothingCatalog_1000.csv'
loader = CSVLoader(file_path=file,encoding="utf-8")
docs = loader.load()
docs = docs[:20]

2.2 文本向量表征模型

#使用OpenAIEmbedding类
from langchain_community.embeddings.zhipuai import ZhipuAIEmbeddings# 使用智谱 AI 嵌入模型
embeddings = ZhipuAIEmbeddings(model="embedding-2",  # 智谱 AI 的嵌入模型名称api_key=key # 替换为你的智谱 AI API Key
)
#因为文档比较短了,所以这里不需要进行任何分块,可以直接进行向量表征
#使用初始化OpenAIEmbedding实例上的查询方法embed_query为文本创建向量表征
embed = embeddings.embed_query("Hi my name is Harrison")#查看得到向量表征的长度
print(len(embed))

2.3 基于向量表征创建向量存储

# 将刚才创建文本向量表征(embeddings)存储在向量存储(vector store)中
# 使用DocArrayInMemorySearch类的from_documents方法来实现
# 该方法接受文档列表以及向量表征模型作为输入
#docs过长会报调用参数有误,现取前20条
db = DocArrayInMemorySearch.from_documents(docs, embeddings)
import langchain
langchain.__version__

2.4 查询创建的向量存储

query = "Please suggest a shirt with sunblocking"#使用上面的向量存储来查找与传入查询类似的文本,得到一个相似文档列表
docs = db.similarity_search(query)

2.5 使用向量储存回答文档的相关问题

#基于向量储存,创建检索器
retriever = db.as_retriever()
#导入大语言模型, 这里使用默认模型gpt-3.5-turbo会出现504服务器超时,因此使用gpt-3.5-turbo-0301
llm = ChatZhipuAI(model_name="glm-3-turbo",temperature = 0.0, zhipuai_api_key=key) 
#合并获得的相似文档内容
qdocs = "".join([docs[i].page_content for i in range(len(docs))])
#将合并的相似文档内容后加上问题(question)输入到 `llm.call_as_llm`中
#这里问题是:以Markdown表格的方式列出所有具有防晒功能的衬衫并总结
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.") 
display(Markdown(response))

''' 
通过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 显示它

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

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

相关文章

基于Netty的TCP Server端和Client端解决正向隔离网闸数据透传问题

背景 因为安装了正向隔离网闸&#xff0c;导致数据传输的时候仅支持TCP协议和UDP协议&#xff0c;因此需要开发TCP Client和Server服务来将数据透传&#xff0c;当前环境是获取的数据并将数据转发到kafka 1.引入依赖 <dependency><groupId>io.netty</groupId>…

Cursor链接远程服务器实现项目部署

想获取更多高质量的Java技术文章&#xff1f;欢迎访问Java技术小馆官网&#xff0c;持续更新优质内容&#xff0c;助力技术成长 技术小馆官网 在软件开发过程中&#xff0c;远程服务器开发是一种常见的工作模式。通过远程连接服务器进行代码编写和环境配置&#xff0c;可以充分…

Redis集群模式之Redis Cluster(3)

上篇文章我们讲解了Redis Cluster的状态监测与恢复过程&#xff0c;这篇文章我们来进行Redis Cluster内容的收尾&#xff0c;将其扩容和缩容的过程进行讲解&#xff0c;并分析RedisCluster的优缺点。 扩容和缩容 当集群中出现容量限制或者其他一些原因需要扩容时&#xff0c;R…

Cursor ReAct Agent技术架构

一、架构核心思想 “零熵操作交给AI”理念 Cursor通过ReAct模式实现编程中重复性工作的自动化&#xff1a; 零熵操作&#xff1a;机械性任务&#xff08;代码补全/格式化/重构/语法修复/导入管理&#xff09; Tab-away机制&#xff1a;一键接受AI建议&#xff0c;保持思维连续…

国学IP行业实战洞察:聚焦创客匠人,解锁创始人IP与知识变现新路径

国学行业正经历“文化价值”与“商业变现”的深度融合&#xff0c;2023年市场规模突破千亿大关&#xff0c;年增速超 10%。在“IP化数字化”浪潮中&#xff0c;创客匠人作为垂直领域技术服务商&#xff0c;以全链路工具矩阵为支点&#xff0c;撬动国学创始人IP从内容生产到商业…

R语言开发入门完整指南

R语言开发入门完整指南 目录 R语言简介环境配置包管理基本语法数据类型和结构数据操作统计分析数据可视化编程结构实用技巧学习资源 R语言简介 R是一种专为统计计算和图形设计的编程语言&#xff0c;广泛应用于数据分析、统计建模、机器学习和数据可视化。R语言具有以下特点…

ObservedV2装饰器和Trace装饰器

为了对嵌套类对象属性变化直接观测&#xff0c;华为提供了ObservedV2和Trace装饰器。这两个装饰器必须搭配使用&#xff0c;单独使用任何一个都不会起任何作用&#xff1b;在继承类中也可监测&#xff1b;ObservedV2的类实例目前不支持使用JSON.stringify进行序列化&#xff0c…

6月计算机新书:深度学习、大模型、DeepSeek

六月&#xff0c;这个充满活力与希望的季节&#xff0c;三本重磅新书《深度学习&#xff1a;基础与概念》、《MCP极简开发&#xff1a;轻松打造高效智能体》与《大模型应用开发&#xff1a;RAG实战课》翩然而至&#xff0c;为我们开启了一场探索科技前沿的奇妙之旅。一起来看详…

扁平风格职场商务通用PPT模版分享

扁平风格PPT模版&#xff0c;创意卡通扁平化通用PPT模版&#xff0c;创意扁平化励志论文答辩PPT模版&#xff0c;卡通职场商务PPT模版&#xff0c;职场培训&#xff0c;项目策划&#xff0c;工作总结类PPT模版&#xff0c;互联网电子商务PPT模版 扁平风格职场商务通用PPT模版分…

jupyter内核崩溃

最近在做用k-mer评估基因组规模的任务&#xff0c;其中一个局部程序&#xff0c;想偷懒&#xff0c;直接在jupyter中跑了下结果&#xff0c;想看看这一小步处理如何&#xff0c;结果没想到内核崩溃了&#xff01; 这一步我的草稿代码如下&#xff1a; import pandas as pd imp…

Java企业技术趋势分析:AI应用的落地实践与未来展望

Java企业技术趋势分析&#xff1a;AI应用的落地实践与未来展望 开篇&#xff1a;技术趋势与市场需求 在当前快速发展的数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为推动企业创新和效率提升的关键力量。Java作为企业级应用开发的主流语言&#xff0c;正…

每日Prompt:Steve Winter风格插画

提示词 世界摄影大师杰作&#xff0c;极简主义&#xff0c;Steve Winter风格&#xff0c;6只不同颜色的布偶猫围成一圈&#xff0c;看向镜头中心&#xff0c;仰天视角&#xff0c;天空背景&#xff0c;高品质细节&#xff0c;超精细CG&#xff0c;高分辨率&#xff0c;最佳品质…

Vue3 + Element Plus 获取表格列信息

在 Vue 3 和 Element Plus 中&#xff0c;可以通过以下步骤获取表格的列信息&#xff1a; 实现步骤&#xff1a; 使用 ref 绑定表格实例 通过表格实例的 store.states.columns 获取列数据 处理列信息&#xff08;过滤隐藏列、处理嵌套表头等&#xff09; 示例代码&#xf…

logger2js - JavaScript日志与调试工具库

logger2js - JavaScript日志与调试工具库 logger2js是一个功能强大的前端JavaScript日志与调试工具库&#xff0c;提供了丰富的日志输出、性能测试和代码调试功能。该库支持配置化引入&#xff0c;包含5种皮肤风格和丰富的API接口&#xff0c;如 a l e r t 增强方法、 alert增…

Stone 3D使用RemoteMesh组件极大的缩小工程文件尺寸

Stone 3D的工程文件tsp默认包含了场景中所有的对象和数据&#xff0c;这样的好处是tsp可以单独离线保存&#xff0c;但坏处是tsp文件通常偏大。 解决这个问题的方法是把外部glb模型文件通过RemoteMesh组件来加载。 首先创建一个空实体&#xff0c;然后给该空实体添加RemoteMe…

【深入剖析】攻克 Java 并发的基石:Java 内存模型 (JMM) 原理与实践指南

0.引言 理解 JMM (Java Memory Model - JMM) 是掌握 Java 并发编程的关键&#xff0c;它定义了多线程环境下&#xff0c;线程如何与主内存以及彼此之间交互内存数据。 核心目标&#xff1a; JMM 旨在解决多线程编程中的三个核心问题&#xff1a; 原子性 (Atomicity)&#xf…

【Three.js】初识 Three.js

Threejs介绍 我们开发 webgl 主要是使用 threejs 这个库&#xff0c;因为 webGL太难用&#xff0c;太复杂&#xff01;但是现代浏览器都支持WebGL&#xff0c;这样我们就不必使用Flash、Java等插件就能在浏览器中创建三维图形。 threejs 它提供-一个很简单的关于WebGL特性的J…

【经验总结】ECU休眠后连续发送NM报文3S后ECU网络才被唤醒问题分析

目录 前言 正文 1.问题描述 2.问题分析 3.验证猜想 4.总结 前言 ECU的上下电/休眠唤醒在ECU开发设计过程中最容易出问题且都为严重问题,最近在项目开发过程中遇到ECU休眠状态下连续发送NM报文3S后才能唤醒CAN网络的问题,解决问题比较顺利,但分析过程中涉及到的网络休…

企业架构框架深入解析:TOGAF、Zachman Framework、FEAF与Gartner EA Framework

执行摘要 企业架构&#xff08;EA&#xff09;是一项至关重要的实践&#xff0c;它使组织能够协调其业务战略、运营流程和技术基础设施&#xff0c;以实现整体战略目标。企业架构框架作为结构化的方法论和综合性工具&#xff0c;旨在管理企业级系统的固有复杂性&#xff0c;提…

数字化动态ID随机水印和ID跑马灯实现教育视频防录屏

摘要&#xff1a;数字化动态ID随机水印和ID跑马灯技术可以有效保护数字教育资源。动态水印将用户信息随机显示在视频上且不可去除&#xff0c;能追踪录屏者并震慑盗版行为。ID跑马灯则自定义显示观看者信息&#xff0c;便于追踪盗版源头并提供法律证据。这些技术大幅增加盗版成…